URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
Compare Revisions
- This comparison shows the changes necessary to convert path
/or1k/trunk/linux/linux-2.4/include/asm-parisc
- from Rev 1275 to Rev 1765
- ↔ Reverse comparison
Rev 1275 → Rev 1765
/traps.h
0,0 → 1,16
#ifndef __ASM_TRAPS_H |
#define __ASM_TRAPS_H |
|
#ifdef __KERNEL__ |
struct pt_regs; |
|
/* traps.c */ |
void parisc_terminate(char *msg, struct pt_regs *regs, |
int code, unsigned long offset); |
|
/* mm/fault.c */ |
void do_page_fault(struct pt_regs *regs, unsigned long code, |
unsigned long address); |
#endif |
|
#endif |
/hw_irq.h
0,0 → 1,17
#ifndef _ASM_HW_IRQ_H |
#define _ASM_HW_IRQ_H |
|
/* |
* linux/include/asm/hw_irq.h |
* |
* (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar |
* |
* moved some of the old arch/i386/kernel/irq.h to here. VY |
* |
* IRQ/IPI changes taken from work by Thomas Radke |
* <tomsoft@informatik.tu-chemnitz.de> |
*/ |
|
#include <asm/irq.h> |
|
#endif |
/hdreg.h
0,0 → 1,7
#ifndef _ASM_HDREG_H |
#define _ASM_HDREG_H |
|
//typedef unsigned short ide_ioreg_t; |
typedef unsigned long ide_ioreg_t; |
|
#endif |
/som.h
0,0 → 1,8
#ifndef _ASM_PARISC_SOM_H |
#define _ASM_PARISC_SOM_H |
|
/* File format definition for SOM executables / shared libraries */ |
#include <linux/som.h> |
|
|
#endif /* _ASM_PARISC_SOM_H |
/siginfo.h
0,0 → 1,235
#ifndef _PARISC_SIGINFO_H |
#define _PARISC_SIGINFO_H |
|
#include <linux/types.h> |
|
/* XXX: This structure was copied from the Alpha; is there an iBCS version? */ |
|
typedef union sigval { |
int sival_int; |
void *sival_ptr; |
} sigval_t; |
|
#define SI_MAX_SIZE 128 |
#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3) |
|
typedef struct siginfo { |
int si_signo; |
int si_errno; |
int si_code; |
|
union { |
int _pad[SI_PAD_SIZE]; |
|
/* kill() */ |
struct { |
pid_t _pid; /* sender's pid */ |
uid_t _uid; /* sender's uid */ |
} _kill; |
|
/* POSIX.1b timers */ |
struct { |
unsigned int _timer1; |
unsigned int _timer2; |
} _timer; |
|
/* POSIX.1b signals */ |
struct { |
pid_t _pid; /* sender's pid */ |
uid_t _uid; /* sender's uid */ |
sigval_t _sigval; |
} _rt; |
|
/* SIGCHLD */ |
struct { |
pid_t _pid; /* which child */ |
uid_t _uid; /* sender's uid */ |
int _status; /* exit code */ |
clock_t _utime; |
clock_t _stime; |
} _sigchld; |
|
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ |
struct { |
void *_addr; /* faulting insn/memory ref. */ |
} _sigfault; |
|
/* SIGPOLL */ |
struct { |
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ |
int _fd; |
} _sigpoll; |
} _sifields; |
} siginfo_t; |
|
/* |
* How these fields are to be accessed. |
*/ |
#define si_pid _sifields._kill._pid |
#define si_uid _sifields._kill._uid |
#define si_status _sifields._sigchld._status |
#define si_utime _sifields._sigchld._utime |
#define si_stime _sifields._sigchld._stime |
#define si_value _sifields._rt._sigval |
#define si_int _sifields._rt._sigval.sival_int |
#define si_ptr _sifields._rt._sigval.sival_ptr |
#define si_addr _sifields._sigfault._addr |
#define si_band _sifields._sigpoll._band |
#define si_fd _sifields._sigpoll._fd |
|
#ifdef __KERNEL__ |
#define __SI_MASK 0xffff0000 |
#define __SI_KILL (0 << 16) |
#define __SI_TIMER (1 << 16) |
#define __SI_POLL (2 << 16) |
#define __SI_FAULT (3 << 16) |
#define __SI_CHLD (4 << 16) |
#define __SI_RT (5 << 16) |
#define __SI_CODE(T,N) ((T) << 16 | ((N) & 0xffff)) |
#else |
#define __SI_KILL 0 |
#define __SI_TIMER 0 |
#define __SI_POLL 0 |
#define __SI_FAULT 0 |
#define __SI_CHLD 0 |
#define __SI_RT 0 |
#define __SI_CODE(T,N) (N) |
#endif |
|
/* |
* si_code values |
* Digital reserves positive values for kernel-generated signals. |
*/ |
#define SI_USER 0 /* sent by kill, sigsend, raise */ |
#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */ |
#define SI_QUEUE -1 /* sent by sigqueue */ |
#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */ |
#define SI_MESGQ -3 /* sent by real time mesq state change */ |
#define SI_ASYNCIO -4 /* sent by AIO completion */ |
#define SI_SIGIO -5 /* sent by queued SIGIO */ |
#define SI_TKILL -6 /* sent by tkill system call */ |
|
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0) |
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0) |
|
/* |
* SIGILL si_codes |
*/ |
#define ILL_ILLOPC (__SI_FAULT|1) /* illegal opcode */ |
#define ILL_ILLOPN (__SI_FAULT|2) /* illegal operand */ |
#define ILL_ILLADR (__SI_FAULT|3) /* illegal addressing mode */ |
#define ILL_ILLTRP (__SI_FAULT|4) /* illegal trap */ |
#define ILL_PRVOPC (__SI_FAULT|5) /* privileged opcode */ |
#define ILL_PRVREG (__SI_FAULT|6) /* privileged register */ |
#define ILL_COPROC (__SI_FAULT|7) /* coprocessor error */ |
#define ILL_BADSTK (__SI_FAULT|8) /* internal stack error */ |
#define NSIGILL 8 |
|
/* |
* SIGFPE si_codes |
*/ |
#define FPE_INTDIV (__SI_FAULT|1) /* integer divide by zero */ |
#define FPE_INTOVF (__SI_FAULT|2) /* integer overflow */ |
#define FPE_FLTDIV (__SI_FAULT|3) /* floating point divide by zero */ |
#define FPE_FLTOVF (__SI_FAULT|4) /* floating point overflow */ |
#define FPE_FLTUND (__SI_FAULT|5) /* floating point underflow */ |
#define FPE_FLTRES (__SI_FAULT|6) /* floating point inexact result */ |
#define FPE_FLTINV (__SI_FAULT|7) /* floating point invalid operation */ |
#define FPE_FLTSUB (__SI_FAULT|8) /* subscript out of range */ |
#define NSIGFPE 8 |
|
/* |
* SIGSEGV si_codes |
*/ |
#define SEGV_MAPERR (__SI_FAULT|1) /* address not mapped to object */ |
#define SEGV_ACCERR (__SI_FAULT|2) /* invalid permissions for mapped object */ |
#define NSIGSEGV 2 |
|
/* |
* SIGBUS si_codes |
*/ |
#define BUS_ADRALN (__SI_FAULT|1) /* invalid address alignment */ |
#define BUS_ADRERR (__SI_FAULT|2) /* non-existant physical address */ |
#define BUS_OBJERR (__SI_FAULT|3) /* object specific hardware error */ |
#define NSIGBUS 3 |
|
/* |
* SIGTRAP si_codes |
*/ |
#define TRAP_BRKPT (__SI_FAULT|1) /* process breakpoint */ |
#define TRAP_TRACE (__SI_FAULT|2) /* process trace trap */ |
#define TRAP_BRANCH (__SI_FAULT|3) /* process taken branch trap */ |
#define TRAP_HWBKPT (__SI_FAULT|4) /* hardware breakpoint or watchpoint */ |
#define NSIGTRAP 4 |
|
/* |
* SIGCHLD si_codes |
*/ |
#define CLD_EXITED (__SI_CHLD|1) /* child has exited */ |
#define CLD_KILLED (__SI_CHLD|2) /* child was killed */ |
#define CLD_DUMPED (__SI_CHLD|3) /* child terminated abnormally */ |
#define CLD_TRAPPED (__SI_CHLD|4) /* traced child has trapped */ |
#define CLD_STOPPED (__SI_CHLD|5) /* child has stopped */ |
#define CLD_CONTINUED (__SI_CHLD|6) /* stopped child has continued */ |
#define NSIGCHLD 6 |
|
/* |
* SIGPOLL si_codes |
*/ |
#define POLL_IN (__SI_POLL|1) /* data input available */ |
#define POLL_OUT (__SI_POLL|2) /* output buffers available */ |
#define POLL_MSG (__SI_POLL|3) /* input message available */ |
#define POLL_ERR (__SI_POLL|4) /* i/o error */ |
#define POLL_PRI (__SI_POLL|5) /* high priority input available */ |
#define POLL_HUP (__SI_POLL|6) /* device disconnected */ |
#define NSIGPOLL 6 |
|
/* |
* sigevent definitions |
* |
* It seems likely that SIGEV_THREAD will have to be handled from |
* userspace, libpthread transmuting it to SIGEV_SIGNAL, which the |
* thread manager then catches and does the appropriate nonsense. |
* However, everything is written out here so as to not get lost. |
*/ |
#define SIGEV_SIGNAL 0 /* notify via signal */ |
#define SIGEV_NONE 1 /* other notification: meaningless */ |
#define SIGEV_THREAD 2 /* deliver via thread creation */ |
|
#define SIGEV_MAX_SIZE 64 |
#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3) |
|
typedef struct sigevent { |
sigval_t sigev_value; |
int sigev_signo; |
int sigev_notify; |
union { |
int _pad[SIGEV_PAD_SIZE]; |
|
struct { |
void (*_function)(sigval_t); |
void *_attribute; /* really pthread_attr_t */ |
} _sigev_thread; |
} _sigev_un; |
} sigevent_t; |
|
#define sigev_notify_function _sigev_un._sigev_thread._function |
#define sigev_notify_attributes _sigev_un._sigev_thread._attribute |
|
#ifdef __KERNEL__ |
#include <linux/string.h> |
|
extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from) |
{ |
if (from->si_code < 0) |
memcpy(to, from, sizeof(siginfo_t)); |
else |
/* _sigchld is currently the largest know union member */ |
memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld)); |
} |
|
extern int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from); |
|
#endif /* __KERNEL__ */ |
|
#endif |
/byteorder.h
0,0 → 1,75
#ifndef _PARISC_BYTEORDER_H |
#define _PARISC_BYTEORDER_H |
|
#include <asm/types.h> |
|
#ifdef __GNUC__ |
|
static __inline__ __const__ __u32 ___arch__swab32(__u32 x) |
{ |
unsigned int temp; |
__asm__("shd %0, %0, 16, %1\n\t" /* shift abcdabcd -> cdab */ |
"dep %1, 15, 8, %1\n\t" /* deposit cdab -> cbab */ |
"shd %0, %1, 8, %0" /* shift abcdcbab -> dcba */ |
: "=r" (x), "=&r" (temp) |
: "0" (x)); |
return x; |
} |
|
|
#if BITS_PER_LONG > 32 |
/* |
** From "PA-RISC 2.0 Architecture", HP Professional Books. |
** See Appendix I page 8 , "Endian Byte Swapping". |
** |
** Pretty cool algorithm: (* == zero'd bits) |
** PERMH 01234567 -> 67452301 into %0 |
** HSHL 67452301 -> 7*5*3*1* into %1 |
** HSHR 67452301 -> *6*4*2*0 into %0 |
** OR %0 | %1 -> 76543210 into %0 (all done!) |
*/ |
static __inline__ __const__ __u64 ___arch__swab64(__u64 x) { |
__u64 temp; |
__asm__("permh 3210, %0, %0\n\t" |
"hshl %0, 8, %1\n\t" |
"hshr u, %0, 8, %0\n\t" |
"or %1, %0, %0" |
: "=r" (x), "=&r" (temp) |
: "0" (x)); |
return x; |
} |
#define __arch__swab64(x) ___arch__swab64(x) |
#else |
static __inline__ __const__ __u64 ___arch__swab64(__u64 x) |
{ |
__u32 t1 = (__u32) x; |
__u32 t2 = (__u32) ((x) >> 32); |
___arch__swab32(t1); |
___arch__swab32(t2); |
return (((__u64) t1 << 32) + ((__u64) t2)); |
} |
#endif |
|
|
static __inline__ __const__ __u16 ___arch__swab16(__u16 x) |
{ |
__asm__("dep %0, 15, 8, %0\n\t" /* deposit 00ab -> 0bab */ |
"shd %r0, %0, 8, %0" /* shift 000000ab -> 00ba */ |
: "=r" (x) |
: "0" (x)); |
return x; |
} |
|
#define __arch__swab32(x) ___arch__swab32(x) |
#define __arch__swab16(x) ___arch__swab16(x) |
|
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) |
# define __BYTEORDER_HAS_U64__ |
# define __SWAB_64_THRU_32__ |
#endif |
|
#endif /* __GNUC__ */ |
|
#include <linux/byteorder/big_endian.h> |
|
#endif /* _PARISC_BYTEORDER_H */ |
/smp.h
0,0 → 1,57
#ifndef __ASM_SMP_H |
#define __ASM_SMP_H |
|
#include <linux/config.h> |
|
#if defined(CONFIG_SMP) |
|
/* Page Zero Location PDC will look for the address to branch to when we poke |
** slave CPUs still in "Icache loop". |
*/ |
#define PDC_OS_BOOT_RENDEZVOUS 0x10 |
#define PDC_OS_BOOT_RENDEZVOUS_HI 0x28 |
|
#ifndef ASSEMBLY |
#include <linux/threads.h> /* for NR_CPUS */ |
typedef unsigned long address_t; |
|
extern volatile unsigned long cpu_online_map; |
|
|
/* |
* Private routines/data |
* |
* physical and logical are equivalent until we support CPU hotplug. |
*/ |
#define cpu_number_map(cpu) (cpu) |
#define cpu_logical_map(cpu) (cpu) |
|
extern void smp_send_reschedule(int cpu); |
|
#endif /* !ASSEMBLY */ |
|
/* |
* This magic constant controls our willingness to transfer |
* a process across CPUs. Such a transfer incurs cache and tlb |
* misses. The current value is inherited from i386. Still needs |
* to be tuned for parisc. |
*/ |
|
#define PROC_CHANGE_PENALTY 15 /* Schedule penalty */ |
|
#undef ENTRY_SYS_CPUS |
#ifdef ENTRY_SYS_CPUS |
#define STATE_RENDEZVOUS 0 |
#define STATE_STOPPED 1 |
#define STATE_RUNNING 2 |
#define STATE_HALTED 3 |
#endif |
|
#define smp_processor_id() (current->processor) |
|
#endif /* CONFIG_SMP */ |
|
#define NO_PROC_ID 0xFF /* No processor magic marker */ |
#define ANY_PROC_ID 0xFF /* Any processor magic marker */ |
|
#endif /* __ASM_SMP_H */ |
/keyboard.h
0,0 → 1,80
/* |
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING |
* --------------------------------------------------------------- |
* This file will be removed as soon as we have converted |
* hp_psaux.c and hp_keyb.c to the input layer ! |
* |
*/ |
|
|
/* |
* linux/include/asm-parisc/keyboard.h |
* |
* Original by Geert Uytterhoeven |
* updates by Alex deVries <adevries@thepuffingroup.com> |
* portions copyright (1999) The Puffin Group |
* mostly rewritten by Philipp Rumpf <prumpf@tux.org>, |
* Copyright 2000 Philipp Rumpf |
*/ |
|
/* |
* We try to keep the amount of generic code as low as possible - |
* we want to support all HIL, PS/2, and untranslated USB keyboards |
*/ |
|
#ifndef _PARISC_KEYBOARD_H |
#define _PARISC_KEYBOARD_H |
|
#include <linux/config.h> |
|
#ifdef __KERNEL__ |
#ifdef CONFIG_VT |
|
#include <linux/kernel.h> |
#include <linux/kd.h> |
|
/* These are basically the generic functions / variables. The only |
* unexpected detail is the initialization sequence for the keyboard |
* driver is something like this: |
* |
* detect keyboard port |
* detect keyboard |
* call register_kbd_ops |
* wait for init_hw |
* |
* only after init_hw has been called you're allowed to call |
* handle_scancode. This means you either have to be extremely |
* careful or use a global flag or something - I strongly suggest |
* the latter. prumpf */ |
|
extern struct kbd_ops { |
int (*setkeycode)(unsigned int, unsigned int); |
int (*getkeycode)(unsigned int); |
int (*translate)(unsigned char, unsigned char *, char); |
char (*unexpected_up)(unsigned char); |
void (*leds)(unsigned char); |
void (*init_hw)(void); |
|
unsigned char sysrq_key; |
unsigned char *sysrq_xlate; |
} *kbd_ops; |
|
#define kbd_setkeycode (*kbd_ops->setkeycode) |
#define kbd_getkeycode (*kbd_ops->getkeycode) |
#define kbd_translate (*kbd_ops->translate) |
#define kbd_unexpected_up (*kbd_ops->unexpected_up) |
#define kbd_leds (*kbd_ops->leds) |
#define kbd_init_hw (*kbd_ops->init_hw) |
|
#define SYSRQ_KEY (kbd_ops->sysrq_key) |
#define kbd_sysrq_xlate (kbd_ops->sysrq_xlate) |
extern unsigned char hp_ps2kbd_sysrq_xlate[128]; /* from drivers/char/hp_keyb.c */ |
|
extern void unregister_kbd_ops(void); |
extern void register_kbd_ops(struct kbd_ops *ops); |
|
#endif /* CONFIG_VT */ |
|
#endif /* __KERNEL__ */ |
|
#endif /* __ASMPARISC_KEYBOARD_H */ |
/rt_sigframe.h
0,0 → 1,19
#ifndef _ASM_PARISC_RT_SIGFRAME_H |
#define _ASM_PARISC_RT_SIGFRAME_H |
|
struct rt_sigframe { |
unsigned int tramp[4]; |
struct siginfo info; |
struct ucontext uc; |
}; |
|
/* |
* The 32-bit ABI wants at least 48 bytes for a function call frame: |
* 16 bytes for arg0-arg3, and 32 bytes for magic (the only part of |
* which Linux/parisc uses is sp-20 for the saved return pointer...) |
* Then, the stack pointer must be rounded to a cache line (64 bytes). |
*/ |
#define PARISC_RT_SIGFRAME_SIZE \ |
(((sizeof(struct rt_sigframe) + 48) + 63) & -64) |
|
#endif |
/mc146818rtc.h
0,0 → 1,9
/* |
* Machine dependent access functions for RTC registers. |
*/ |
#ifndef _ASM_MC146818RTC_H |
#define _ASM_MC146818RTC_H |
|
/* empty include file to satisfy the include in genrtc.c */ |
|
#endif /* _ASM_MC146818RTC_H */ |
/spinlock_t.h
0,0 → 1,95
#ifndef __PARISC_SPINLOCK_T_H |
#define __PARISC_SPINLOCK_T_H |
|
/* LDCW, the only atomic read-write operation PA-RISC has. *sigh*. |
* |
* Note that PA-RISC has to use `1' to mean unlocked and `0' to mean locked |
* since it only has load-and-zero. |
*/ |
#ifdef CONFIG_PA20 |
/* |
> From: "Jim Hull" <jim.hull of hp.com> |
> Delivery-date: Wed, 29 Jan 2003 13:57:05 -0500 |
> I've attached a summary of the change, but basically, for PA 2.0, as |
> long as the ",CO" (coherent operation) completer is specified, then the |
> 16-byte alignment requirement for ldcw and ldcd is relaxed, and instead |
> they only require "natural" alignment (4-byte for ldcw, 8-byte for |
> ldcd). |
*/ |
|
#define __ldcw(a) ({ \ |
unsigned __ret; \ |
__asm__ __volatile__("ldcw,co 0(%1),%0" : "=r" (__ret) : "r" (a)); \ |
__ret; \ |
}) |
#else |
#define __ldcw(a) ({ \ |
unsigned __ret; \ |
__asm__ __volatile__("ldcw 0(%1),%0" : "=r" (__ret) : "r" (a)); \ |
__ret; \ |
}) |
#endif |
|
/* |
* Your basic SMP spinlocks, allowing only a single CPU anywhere |
*/ |
|
typedef struct { |
#ifdef CONFIG_PA20 |
volatile unsigned int lock; |
#else |
volatile unsigned int __attribute__((aligned(16))) lock; |
#endif |
#ifdef CONFIG_DEBUG_SPINLOCK |
volatile unsigned long owner_pc; |
volatile unsigned long owner_cpu; |
#endif |
} spinlock_t; |
|
#ifndef CONFIG_DEBUG_SPINLOCK |
#define SPIN_LOCK_UNLOCKED (spinlock_t) { 1 } |
|
/* Define 6 spinlock primitives that don't depend on anything else. */ |
|
#define spin_lock_init(x) do { (x)->lock = 1; } while(0) |
#define spin_is_locked(x) ((x)->lock == 0) |
#define spin_trylock(x) (__ldcw(&(x)->lock) != 0) |
|
/* |
* PA2.0 is not strongly ordered. PA1.X is strongly ordered. |
* ldcw enforces ordering and we need to make sure ordering is |
* enforced on the unlock too. |
* "stw,ma" with Zero index is an alias for "stw,o". |
* But PA 1.x can assemble the "stw,ma" while it doesn't know about "stw,o". |
* And PA 2.0 will generate the right insn using either form. |
* Thanks to John David Anglin for this cute trick. |
* |
* Writing this with asm also ensures that the unlock doesn't |
* get reordered |
*/ |
#define spin_unlock(x) \ |
__asm__ __volatile__ ("stw,ma %%sp,0(%0)" : : "r" (&(x)->lock) : "memory" ) |
|
#define spin_unlock_wait(x) do { barrier(); } while(((volatile spinlock_t *)(x))->lock == 0) |
|
#define spin_lock(x) do { \ |
while (__ldcw (&(x)->lock) == 0) \ |
while ((x)->lock == 0) ; \ |
} while (0) |
|
#else |
|
#define SPIN_LOCK_UNLOCKED (spinlock_t) { 1, 0, 0 } |
|
/* Define 6 spinlock primitives that don't depend on anything else. */ |
|
#define spin_lock_init(x) do { (x)->lock = 1; (x)->owner_cpu = 0; (x)->owner_pc = 0; } while(0) |
#define spin_is_locked(x) ((x)->lock == 0) |
void spin_lock(spinlock_t *lock); |
int spin_trylock(spinlock_t *lock); |
void spin_unlock(spinlock_t *lock); |
#define spin_unlock_wait(x) do { barrier(); } while(((volatile spinlock_t *)(x))->lock == 0) |
|
#endif |
|
#endif /* __PARISC_SPINLOCK_T_H */ |
/elf.h
0,0 → 1,145
#ifndef __ASMPARISC_ELF_H |
#define __ASMPARISC_ELF_H |
|
/* |
* ELF register definitions.. |
*/ |
|
#include <asm/ptrace.h> |
|
#define EM_PARISC 15 |
|
/* |
* The following definitions are those for 32-bit ELF binaries on a 32-bit kernel |
* and for 64-bit binaries on a 64-bit kernel. To run 32-bit binaries on a 64-bit |
* kernel, arch/parisc64/kernel/binfmt_elf32.c defines these macros appropriately |
* and then #includes binfmt_elf.c, which then includes this file. |
*/ |
#ifndef ELF_CLASS |
|
/* |
* This is used to ensure we don't load something for the wrong architecture. |
* |
* Note that this header file is used by default in fs/binfmt_elf.c. So |
* the following macros are for the default case. However, for the 64 |
* bit kernel we also support 32 bit parisc binaries. To do that |
* arch/parisc64/kernel/binfmt_elf32.c defines its own set of these |
* macros, and then it includes fs/binfmt_elf.c to provide an alternate |
* elf binary handler for 32 bit binaries (on the 64 bit kernel). |
*/ |
#ifdef __LP64__ |
#define ELF_CLASS ELFCLASS64 |
#else |
#define ELF_CLASS ELFCLASS32 |
#endif |
|
typedef unsigned long elf_greg_t; |
|
/* This yields a string that ld.so will use to load implementation |
specific libraries for optimization. This is more specific in |
intent than poking at uname or /proc/cpuinfo. |
|
For the moment, we have only optimizations for the Intel generations, |
but that could change... */ |
|
#define ELF_PLATFORM ("PARISC\0" /*+((boot_cpu_data.x86-3)*5) */) |
|
#ifdef __KERNEL__ |
#define SET_PERSONALITY(ex, ibcs2) \ |
current->personality = PER_LINUX |
#endif |
|
/* |
* Fill in general registers in a core dump. This saves pretty |
* much the same registers as hp-ux, although in a different order. |
* Registers marked # below are not currently saved in pt_regs, so |
* we use their current values here. |
* |
* gr0..gr31 |
* sr0..sr7 |
* iaoq0..iaoq1 |
* iasq0..iasq1 |
* cr11 (sar) |
* cr19 (iir) |
* cr20 (isr) |
* cr21 (ior) |
* # cr22 (ipsw) |
* # cr0 (recovery counter) |
* # cr24..cr31 (temporary registers) |
* # cr8,9,12,13 (protection IDs) |
* # cr10 (scr/ccr) |
* # cr15 (ext int enable mask) |
* |
*/ |
|
#define ELF_CORE_COPY_REGS(dst, pt) \ |
memset(dst, 0, sizeof(dst)); /* don't leak any "random" bits */ \ |
memcpy(dst + 0, pt->gr, 32 * sizeof(elf_greg_t)); \ |
memcpy(dst + 32, pt->sr, 8 * sizeof(elf_greg_t)); \ |
memcpy(dst + 40, pt->iaoq, 2 * sizeof(elf_greg_t)); \ |
memcpy(dst + 42, pt->iasq, 2 * sizeof(elf_greg_t)); \ |
dst[44] = pt->sar; dst[45] = pt->iir; \ |
dst[46] = pt->isr; dst[47] = pt->ior; \ |
dst[48] = mfctl(22); dst[49] = mfctl(0); \ |
dst[50] = mfctl(24); dst[51] = mfctl(25); \ |
dst[52] = mfctl(26); dst[53] = mfctl(27); \ |
dst[54] = mfctl(28); dst[55] = mfctl(29); \ |
dst[56] = mfctl(30); dst[57] = mfctl(31); \ |
dst[58] = mfctl( 8); dst[59] = mfctl( 9); \ |
dst[60] = mfctl(12); dst[61] = mfctl(13); \ |
dst[62] = mfctl(10); dst[63] = mfctl(15); |
|
#endif /* ! ELF_CLASS */ |
|
#define ELF_NGREG 80 /* We only need 64 at present, but leave space |
for expansion. */ |
typedef elf_greg_t elf_gregset_t[ELF_NGREG]; |
|
#define ELF_NFPREG 32 |
typedef double elf_fpreg_t; |
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; |
|
struct pt_regs; /* forward declaration... */ |
|
|
#define elf_check_arch(x) ((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELF_CLASS) |
|
/* |
* These are used to set parameters in the core dumps. |
*/ |
#define ELF_DATA ELFDATA2MSB |
#define ELF_ARCH EM_PARISC |
|
/* %r23 is set by ld.so to a pointer to a function which might be |
registered using atexit. This provides a mean for the dynamic |
linker to call DT_FINI functions for shared libraries that have |
been loaded before the code runs. |
|
So that we can use the same startup file with static executables, |
we start programs with a value of 0 to indicate that there is no |
such function. */ |
#define ELF_PLAT_INIT(_r, load_addr) _r->gr[23] = 0 |
|
#define USE_ELF_CORE_DUMP |
#define ELF_EXEC_PAGESIZE 4096 |
|
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical |
use of this is to invoke "./ld.so someprog" to test out a new version of |
the loader. We need to make sure that it is out of the way of the program |
that it will "exec", and that there is sufficient room for the brk. |
|
(2 * TASK_SIZE / 3) turns into something undefined when run through a |
32 bit preprocessor and in some cases results in the kernel trying to map |
ld.so to the kernel virtual base. Use a sane value instead. /Jes |
*/ |
|
#define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x01000000) |
|
/* This yields a mask that user programs can use to figure out what |
instruction set this CPU supports. This could be done in user space, |
but it's not easy, and we've already done it here. */ |
|
#define ELF_HWCAP 0 |
/* (boot_cpu_data.x86_capability) */ |
|
#endif |
/poll.h
0,0 → 1,25
#ifndef __PARISC_POLL_H |
#define __PARISC_POLL_H |
|
/* These are specified by iBCS2 */ |
#define POLLIN 0x0001 |
#define POLLPRI 0x0002 |
#define POLLOUT 0x0004 |
#define POLLERR 0x0008 |
#define POLLHUP 0x0010 |
#define POLLNVAL 0x0020 |
|
/* The rest seem to be more-or-less nonstandard. Check them! */ |
#define POLLRDNORM 0x0040 |
#define POLLRDBAND 0x0080 |
#define POLLWRNORM 0x0100 |
#define POLLWRBAND 0x0200 |
#define POLLMSG 0x0400 |
|
struct pollfd { |
int fd; |
short events; |
short revents; |
}; |
|
#endif |
/unaligned.h
0,0 → 1,27
#ifndef _ASM_PARISC_UNALIGNED_H_ |
#define _ASM_PARISC_UNALIGNED_H_ |
|
/* parisc can't handle unaligned accesses. */ |
/* copied from asm-sparc/unaligned.h */ |
|
#include <linux/string.h> |
|
|
/* Use memmove here, so gcc does not insert a __builtin_memcpy. */ |
|
#define get_unaligned(ptr) \ |
({ __typeof__(*(ptr)) __tmp; memmove(&__tmp, (ptr), sizeof(*(ptr))); __tmp; }) |
|
#define put_unaligned(val, ptr) \ |
({ __typeof__(*(ptr)) __tmp = (val); \ |
memmove((ptr), &__tmp, sizeof(*(ptr))); \ |
(void)0; }) |
|
|
#ifdef __KERNEL__ |
struct pt_regs; |
void handle_unaligned(struct pt_regs *regs); |
int check_unaligned(struct pt_regs *regs); |
#endif |
|
#endif /* _ASM_PARISC_UNALIGNED_H_ */ |
/smplock.h
0,0 → 1,51
/* |
* <asm/smplock.h> |
* |
* Default SMP lock implementation |
*/ |
#include <linux/interrupt.h> |
#include <linux/spinlock.h> |
|
extern spinlock_t kernel_flag; |
|
#define kernel_locked() spin_is_locked(&kernel_flag) |
|
/* |
* Release global kernel lock and global interrupt lock |
*/ |
#define release_kernel_lock(task, cpu) \ |
do { \ |
if (task->lock_depth >= 0) \ |
spin_unlock(&kernel_flag); \ |
release_irqlock(cpu); \ |
__sti(); \ |
} while (0) |
|
/* |
* Re-acquire the kernel lock |
*/ |
#define reacquire_kernel_lock(task) \ |
do { \ |
if (task->lock_depth >= 0) \ |
spin_lock(&kernel_flag); \ |
} while (0) |
|
|
/* |
* Getting the big kernel lock. |
* |
* This cannot happen asynchronously, |
* so we only need to worry about other |
* CPU's. |
*/ |
extern __inline__ void lock_kernel(void) |
{ |
if (!++current->lock_depth) |
spin_lock(&kernel_flag); |
} |
|
extern __inline__ void unlock_kernel(void) |
{ |
if (--current->lock_depth < 0) |
spin_unlock(&kernel_flag); |
} |
/ucontext.h
0,0 → 1,12
#ifndef _ASMPARISC_UCONTEXT_H |
#define _ASMPARISC_UCONTEXT_H |
|
struct ucontext { |
unsigned long uc_flags; |
struct ucontext *uc_link; |
stack_t uc_stack; |
struct sigcontext uc_mcontext; |
sigset_t uc_sigmask; /* mask last for extensibility */ |
}; |
|
#endif /* !_ASMPARISC_UCONTEXT_H */ |
/psw.h
0,0 → 1,62
#ifndef _PARISC_PSW_H |
#define PSW_I 0x00000001 |
#define PSW_D 0x00000002 |
#define PSW_P 0x00000004 |
#define PSW_Q 0x00000008 |
|
#define PSW_R 0x00000010 |
#define PSW_F 0x00000020 |
#define PSW_G 0x00000040 /* PA1.x only */ |
#define PSW_O 0x00000080 /* PA2.0 only */ |
|
#define PSW_CB 0x0000ff00 |
|
#define PSW_M 0x00010000 |
#define PSW_V 0x00020000 |
#define PSW_C 0x00040000 |
#define PSW_B 0x00080000 |
|
#define PSW_X 0x00100000 |
#define PSW_N 0x00200000 |
#define PSW_L 0x00400000 |
#define PSW_H 0x00800000 |
|
#define PSW_T 0x01000000 |
#define PSW_S 0x02000000 |
#define PSW_E 0x04000000 |
#define PSW_W 0x08000000 /* PA2.0 only */ |
#define PSW_W_BIT 36 /* PA2.0 only */ |
|
#define PSW_Z 0x40000000 /* PA1.x only */ |
#define PSW_Y 0x80000000 /* PA1.x only */ |
|
#ifdef __LP64__ |
#define PSW_HI_CB 0x000000ff /* PA2.0 only */ |
#endif |
|
/* PSW bits to be used with ssm/rsm */ |
#define PSW_SM_I 0x1 |
#define PSW_SM_D 0x2 |
#define PSW_SM_P 0x4 |
#define PSW_SM_Q 0x8 |
#define PSW_SM_R 0x10 |
#define PSW_SM_F 0x20 |
#define PSW_SM_G 0x40 |
#define PSW_SM_O 0x80 |
#define PSW_SM_E 0x100 |
#define PSW_SM_W 0x200 |
|
#ifdef __LP64__ |
# define USER_PSW (PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I) |
# define KERNEL_PSW (PSW_W | PSW_C | PSW_Q | PSW_P | PSW_D) |
# define REAL_MODE_PSW (PSW_W | PSW_Q) |
# define USER_PSW_MASK (PSW_W | PSW_T | PSW_N | PSW_X | PSW_B | PSW_V | PSW_CB) |
# define USER_PSW_HI_MASK (PSW_HI_CB) |
#else |
# define USER_PSW (PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I) |
# define KERNEL_PSW (PSW_C | PSW_Q | PSW_P | PSW_D) |
# define REAL_MODE_PSW (PSW_Q) |
# define USER_PSW_MASK (PSW_T | PSW_N | PSW_X | PSW_B | PSW_V | PSW_CB) |
#endif |
|
#endif |
/ioctl.h
0,0 → 1,67
/* $Id: ioctl.h,v 1.1.1.1 2004-04-15 02:38:47 phoenix Exp $ |
* |
* linux/ioctl.h for Linux by H.H. Bergman. |
*/ |
|
#ifndef _ASM_PARISC_IOCTL_H |
#define _ASM_PARISC_IOCTL_H |
|
/* ioctl command encoding: 32 bits total, command in lower 16 bits, |
* size of the parameter structure in the lower 14 bits of the |
* upper 16 bits. |
* Encoding the size of the parameter structure in the ioctl request |
* is useful for catching programs compiled with old versions |
* and to avoid overwriting user space outside the user buffer area. |
* The highest 2 bits are reserved for indicating the ``access mode''. |
* NOTE: This limits the max parameter size to 16kB -1 ! |
*/ |
|
#define _IOC_NRBITS 8 |
#define _IOC_TYPEBITS 8 |
#define _IOC_SIZEBITS 14 |
#define _IOC_DIRBITS 2 |
|
#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1) |
#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1) |
#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1) |
#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1) |
|
#define _IOC_NRSHIFT 0 |
#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) |
#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) |
#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) |
|
/* |
* Direction bits. |
*/ |
#define _IOC_NONE 0U |
#define _IOC_WRITE 2U |
#define _IOC_READ 1U |
|
#define _IOC(dir,type,nr,size) \ |
(((dir) << _IOC_DIRSHIFT) | \ |
((type) << _IOC_TYPESHIFT) | \ |
((nr) << _IOC_NRSHIFT) | \ |
((size) << _IOC_SIZESHIFT)) |
|
/* used to create numbers */ |
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) |
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) |
#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) |
#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) |
|
/* used to decode ioctl numbers.. */ |
#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) |
#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) |
#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) |
#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) |
|
/* ...and for the drivers/sound files... */ |
|
#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT) |
#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT) |
#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) |
#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT) |
#define IOCSIZE_SHIFT (_IOC_SIZESHIFT) |
|
#endif /* _ASM_PARISC_IOCTL_H */ |
/user.h
0,0 → 1,5
/* This file should not exist, but lots of generic code still includes |
it. It's a hangover from old a.out days and the traditional core |
dump format. We are ELF-only, and so are our core dumps. If we |
need to support HP/UX core format then we'll do it here |
eventually. */ |
/assembly.h
0,0 → 1,417
/* |
* Copyright (C) 1999 Hewlett-Packard (Frank Rowand) |
* Copyright (C) 1999 Philipp Rumpf <prumpf@tux.org> |
* Copyright (C) 1999 SuSE GmbH |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2, or (at your option) |
* any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
*/ |
|
#ifndef _PARISC_ASSEMBLY_H |
#define _PARISC_ASSEMBLY_H |
|
#if defined(__LP64__) && defined(__ASSEMBLY__) |
/* the 64-bit pa gnu assembler unfortunately defaults to .level 1.1 or 2.0 so |
* work around that for now... */ |
.level 2.0w |
#endif |
|
#include <asm/offset.h> |
#include <asm/page.h> |
|
#include <asm/asmregs.h> |
|
sp = 30 |
gp = 27 |
ipsw = 22 |
|
/* |
* We provide two versions of each macro to convert from physical |
* to virtual and vice versa. The "_r1" versions take one argument |
* register, but trashes r1 to do the conversion. The other |
* version takes two arguments: a src and destination register. |
* However, the source and destination registers can not be |
* the same register. |
*/ |
|
.macro tophys grvirt, grphys |
ldil L%(__PAGE_OFFSET), \grphys |
sub \grvirt, \grphys, \grphys |
.endm |
|
.macro tovirt grphys, grvirt |
ldil L%(__PAGE_OFFSET), \grvirt |
add \grphys, \grvirt, \grvirt |
.endm |
|
.macro tophys_r1 gr |
ldil L%(__PAGE_OFFSET), %r1 |
sub \gr, %r1, \gr |
.endm |
|
.macro tovirt_r1 gr |
ldil L%(__PAGE_OFFSET), %r1 |
add \gr, %r1, \gr |
.endm |
|
.macro delay value |
ldil L%\value, 1 |
ldo R%\value(1), 1 |
addib,UV,n -1,1,. |
addib,NUV,n -1,1,.+8 |
nop |
.endm |
|
.macro debug value |
.endm |
|
|
/* Shift Left - note the r and t can NOT be the same! */ |
.macro shl r, sa, t |
dep,z \r, 31-\sa, 32-\sa, \t |
.endm |
|
/* The PA 2.0 shift left */ |
.macro shlw r, sa, t |
depw,z \r, 31-\sa, 32-\sa, \t |
.endm |
|
/* And the PA 2.0W shift left */ |
.macro shld r, sa, t |
depd,z \r, 63-\sa, 64-\sa, \t |
.endm |
|
/* load 32-bit 'value' into 'reg' compensating for the ldil |
* sign-extension when running in wide mode. |
* WARNING!! neither 'value' nor 'reg' can be expressions |
* containing '.'!!!! */ |
.macro load32 value, reg |
ldil L%\value, \reg |
ldo R%\value(\reg), \reg |
.endm |
|
#ifdef __LP64__ |
#define LDREG ldd |
#define STREG std |
#define RP_OFFSET 16 |
#else |
#define LDREG ldw |
#define STREG stw |
#define RP_OFFSET 20 |
#endif |
|
.macro loadgp |
#ifdef __LP64__ |
ldil L%__gp, %r27 |
ldo R%__gp(%r27), %r27 |
#else |
ldil L%$global$, %r27 |
ldo R%$global$(%r27), %r27 |
#endif |
.endm |
|
#define SAVE_SP(r, where) mfsp r, %r1 ! STREG %r1, where |
#define REST_SP(r, where) LDREG where, %r1 ! mtsp %r1, r |
#define SAVE_CR(r, where) mfctl r, %r1 ! STREG %r1, where |
#define REST_CR(r, where) LDREG where, %r1 ! mtctl %r1, r |
|
.macro save_general regs |
STREG %r1, PT_GR1 (\regs) |
STREG %r2, PT_GR2 (\regs) |
STREG %r3, PT_GR3 (\regs) |
STREG %r4, PT_GR4 (\regs) |
STREG %r5, PT_GR5 (\regs) |
STREG %r6, PT_GR6 (\regs) |
STREG %r7, PT_GR7 (\regs) |
STREG %r8, PT_GR8 (\regs) |
STREG %r9, PT_GR9 (\regs) |
STREG %r10, PT_GR10(\regs) |
STREG %r11, PT_GR11(\regs) |
STREG %r12, PT_GR12(\regs) |
STREG %r13, PT_GR13(\regs) |
STREG %r14, PT_GR14(\regs) |
STREG %r15, PT_GR15(\regs) |
STREG %r16, PT_GR16(\regs) |
STREG %r17, PT_GR17(\regs) |
STREG %r18, PT_GR18(\regs) |
STREG %r19, PT_GR19(\regs) |
STREG %r20, PT_GR20(\regs) |
STREG %r21, PT_GR21(\regs) |
STREG %r22, PT_GR22(\regs) |
STREG %r23, PT_GR23(\regs) |
STREG %r24, PT_GR24(\regs) |
STREG %r25, PT_GR25(\regs) |
/* r26 is saved in get_stack and used to preserve a value across virt_map */ |
STREG %r27, PT_GR27(\regs) |
STREG %r28, PT_GR28(\regs) |
/* r29 is saved in get_stack and used to point to saved registers */ |
/* r30 stack pointer saved in get_stack */ |
STREG %r31, PT_GR31(\regs) |
.endm |
|
.macro rest_general regs |
/* r1 used as a temp in rest_stack and is restored there */ |
LDREG PT_GR2 (\regs), %r2 |
LDREG PT_GR3 (\regs), %r3 |
LDREG PT_GR4 (\regs), %r4 |
LDREG PT_GR5 (\regs), %r5 |
LDREG PT_GR6 (\regs), %r6 |
LDREG PT_GR7 (\regs), %r7 |
LDREG PT_GR8 (\regs), %r8 |
LDREG PT_GR9 (\regs), %r9 |
LDREG PT_GR10(\regs), %r10 |
LDREG PT_GR11(\regs), %r11 |
LDREG PT_GR12(\regs), %r12 |
LDREG PT_GR13(\regs), %r13 |
LDREG PT_GR14(\regs), %r14 |
LDREG PT_GR15(\regs), %r15 |
LDREG PT_GR16(\regs), %r16 |
LDREG PT_GR17(\regs), %r17 |
LDREG PT_GR18(\regs), %r18 |
LDREG PT_GR19(\regs), %r19 |
LDREG PT_GR20(\regs), %r20 |
LDREG PT_GR21(\regs), %r21 |
LDREG PT_GR22(\regs), %r22 |
LDREG PT_GR23(\regs), %r23 |
LDREG PT_GR24(\regs), %r24 |
LDREG PT_GR25(\regs), %r25 |
LDREG PT_GR26(\regs), %r26 |
LDREG PT_GR27(\regs), %r27 |
LDREG PT_GR28(\regs), %r28 |
/* r29 points to register save area, and is restored in rest_stack */ |
/* r30 stack pointer restored in rest_stack */ |
LDREG PT_GR31(\regs), %r31 |
.endm |
|
.macro save_fp regs |
fstd,ma %fr0, 8(\regs) |
fstd,ma %fr1, 8(\regs) |
fstd,ma %fr2, 8(\regs) |
fstd,ma %fr3, 8(\regs) |
fstd,ma %fr4, 8(\regs) |
fstd,ma %fr5, 8(\regs) |
fstd,ma %fr6, 8(\regs) |
fstd,ma %fr7, 8(\regs) |
fstd,ma %fr8, 8(\regs) |
fstd,ma %fr9, 8(\regs) |
fstd,ma %fr10, 8(\regs) |
fstd,ma %fr11, 8(\regs) |
fstd,ma %fr12, 8(\regs) |
fstd,ma %fr13, 8(\regs) |
fstd,ma %fr14, 8(\regs) |
fstd,ma %fr15, 8(\regs) |
fstd,ma %fr16, 8(\regs) |
fstd,ma %fr17, 8(\regs) |
fstd,ma %fr18, 8(\regs) |
fstd,ma %fr19, 8(\regs) |
fstd,ma %fr20, 8(\regs) |
fstd,ma %fr21, 8(\regs) |
fstd,ma %fr22, 8(\regs) |
fstd,ma %fr23, 8(\regs) |
fstd,ma %fr24, 8(\regs) |
fstd,ma %fr25, 8(\regs) |
fstd,ma %fr26, 8(\regs) |
fstd,ma %fr27, 8(\regs) |
fstd,ma %fr28, 8(\regs) |
fstd,ma %fr29, 8(\regs) |
fstd,ma %fr30, 8(\regs) |
fstd %fr31, 0(\regs) |
.endm |
|
.macro rest_fp regs |
fldd 0(\regs), %fr31 |
fldd,mb -8(\regs), %fr30 |
fldd,mb -8(\regs), %fr29 |
fldd,mb -8(\regs), %fr28 |
fldd,mb -8(\regs), %fr27 |
fldd,mb -8(\regs), %fr26 |
fldd,mb -8(\regs), %fr25 |
fldd,mb -8(\regs), %fr24 |
fldd,mb -8(\regs), %fr23 |
fldd,mb -8(\regs), %fr22 |
fldd,mb -8(\regs), %fr21 |
fldd,mb -8(\regs), %fr20 |
fldd,mb -8(\regs), %fr19 |
fldd,mb -8(\regs), %fr18 |
fldd,mb -8(\regs), %fr17 |
fldd,mb -8(\regs), %fr16 |
fldd,mb -8(\regs), %fr15 |
fldd,mb -8(\regs), %fr14 |
fldd,mb -8(\regs), %fr13 |
fldd,mb -8(\regs), %fr12 |
fldd,mb -8(\regs), %fr11 |
fldd,mb -8(\regs), %fr10 |
fldd,mb -8(\regs), %fr9 |
fldd,mb -8(\regs), %fr8 |
fldd,mb -8(\regs), %fr7 |
fldd,mb -8(\regs), %fr6 |
fldd,mb -8(\regs), %fr5 |
fldd,mb -8(\regs), %fr4 |
fldd,mb -8(\regs), %fr3 |
fldd,mb -8(\regs), %fr2 |
fldd,mb -8(\regs), %fr1 |
fldd,mb -8(\regs), %fr0 |
.endm |
|
#ifdef __LP64__ |
.macro callee_save |
std,ma %r3, 144(%r30) |
mfctl %cr27, %r3 |
std %r4, -136(%r30) |
std %r5, -128(%r30) |
std %r6, -120(%r30) |
std %r7, -112(%r30) |
std %r8, -104(%r30) |
std %r9, -96(%r30) |
std %r10, -88(%r30) |
std %r11, -80(%r30) |
std %r12, -72(%r30) |
std %r13, -64(%r30) |
std %r14, -56(%r30) |
std %r15, -48(%r30) |
std %r16, -40(%r30) |
std %r17, -32(%r30) |
std %r18, -24(%r30) |
std %r3, -16(%r30) |
.endm |
|
.macro callee_rest |
ldd -16(%r30), %r3 |
ldd -24(%r30), %r18 |
ldd -32(%r30), %r17 |
ldd -40(%r30), %r16 |
ldd -48(%r30), %r15 |
ldd -56(%r30), %r14 |
ldd -64(%r30), %r13 |
ldd -72(%r30), %r12 |
ldd -80(%r30), %r11 |
ldd -88(%r30), %r10 |
ldd -96(%r30), %r9 |
ldd -104(%r30), %r8 |
ldd -112(%r30), %r7 |
ldd -120(%r30), %r6 |
ldd -128(%r30), %r5 |
ldd -136(%r30), %r4 |
mtctl %r3, %cr27 |
ldd,mb -144(%r30), %r3 |
.endm |
|
#else /* ! __LP64__ */ |
|
.macro callee_save |
stw,ma %r3, 128(%r30) |
mfctl %cr27, %r3 |
stw %r4, -124(%r30) |
stw %r5, -120(%r30) |
stw %r6, -116(%r30) |
stw %r7, -112(%r30) |
stw %r8, -108(%r30) |
stw %r9, -104(%r30) |
stw %r10, -100(%r30) |
stw %r11, -96(%r30) |
stw %r12, -92(%r30) |
stw %r13, -88(%r30) |
stw %r14, -84(%r30) |
stw %r15, -80(%r30) |
stw %r16, -76(%r30) |
stw %r17, -72(%r30) |
stw %r18, -68(%r30) |
stw %r3, -64(%r30) |
.endm |
|
.macro callee_rest |
ldw -64(%r30), %r3 |
ldw -68(%r30), %r18 |
ldw -72(%r30), %r17 |
ldw -76(%r30), %r16 |
ldw -80(%r30), %r15 |
ldw -84(%r30), %r14 |
ldw -88(%r30), %r13 |
ldw -92(%r30), %r12 |
ldw -96(%r30), %r11 |
ldw -100(%r30), %r10 |
ldw -104(%r30), %r9 |
ldw -108(%r30), %r8 |
ldw -112(%r30), %r7 |
ldw -116(%r30), %r6 |
ldw -120(%r30), %r5 |
ldw -124(%r30), %r4 |
mtctl %r3, %cr27 |
ldw,mb -128(%r30), %r3 |
.endm |
#endif /* ! __LP64__ */ |
|
.macro save_specials regs |
|
SAVE_SP (%sr0, PT_SR0 (\regs)) |
SAVE_SP (%sr1, PT_SR1 (\regs)) |
SAVE_SP (%sr2, PT_SR2 (\regs)) |
SAVE_SP (%sr3, PT_SR3 (\regs)) |
SAVE_SP (%sr4, PT_SR4 (\regs)) |
SAVE_SP (%sr5, PT_SR5 (\regs)) |
SAVE_SP (%sr6, PT_SR6 (\regs)) |
SAVE_SP (%sr7, PT_SR7 (\regs)) |
|
SAVE_CR (%cr17, PT_IASQ0(\regs)) |
mtctl %r0, %cr17 |
SAVE_CR (%cr17, PT_IASQ1(\regs)) |
|
SAVE_CR (%cr18, PT_IAOQ0(\regs)) |
mtctl %r0, %cr18 |
SAVE_CR (%cr18, PT_IAOQ1(\regs)) |
|
#ifdef __LP64__ |
/* cr11 (sar) is a funny one. 5 bits on PA1.1 and 6 bit on PA2.0 |
* For PA2.0 mtsar or mtctl always write 6 bits, but mfctl only |
* reads 5 bits. Use mfctl,w to read all six bits. Otherwise |
* we loose the 6th bit on a save/restore over interrupt. |
*/ |
mfctl,w %cr11, %r1 |
STREG %r1, PT_SAR (\regs) |
#else |
SAVE_CR (%cr11, PT_SAR (\regs)) |
#endif |
SAVE_CR (%cr19, PT_IIR (\regs)) |
|
/* |
* Code immediately following this macro (in intr_save) relies |
* on r8 containing ipsw. |
*/ |
mfctl %cr22, %r8 |
STREG %r8, PT_PSW(\regs) |
.endm |
|
.macro rest_specials regs |
|
REST_SP (%sr0, PT_SR0 (\regs)) |
REST_SP (%sr1, PT_SR1 (\regs)) |
REST_SP (%sr2, PT_SR2 (\regs)) |
REST_SP (%sr3, PT_SR3 (\regs)) |
REST_SP (%sr4, PT_SR4 (\regs)) |
REST_SP (%sr5, PT_SR5 (\regs)) |
REST_SP (%sr6, PT_SR6 (\regs)) |
REST_SP (%sr7, PT_SR7 (\regs)) |
|
REST_CR (%cr17, PT_IASQ0(\regs)) |
REST_CR (%cr17, PT_IASQ1(\regs)) |
|
REST_CR (%cr18, PT_IAOQ0(\regs)) |
REST_CR (%cr18, PT_IAOQ1(\regs)) |
|
REST_CR (%cr11, PT_SAR (\regs)) |
|
REST_CR (%cr22, PT_PSW (\regs)) |
.endm |
|
#endif |
/tlb.h
0,0 → 1,417
#include <asm-generic/tlb.h> |
/uaccess.h
0,0 → 1,278
#ifndef __PARISC_UACCESS_H |
#define __PARISC_UACCESS_H |
|
/* |
* User space memory access functions |
*/ |
#include <linux/sched.h> |
#include <asm/page.h> |
#include <asm/system.h> |
#include <asm/cache.h> |
|
#define VERIFY_READ 0 |
#define VERIFY_WRITE 1 |
|
#define KERNEL_DS ((mm_segment_t){0}) |
#define USER_DS ((mm_segment_t){1}) |
|
#define segment_eq(a,b) ((a).seg == (b).seg) |
|
#define get_ds() (KERNEL_DS) |
#define get_fs() (current->addr_limit) |
#define set_fs(x) (current->addr_limit = (x)) |
|
/* |
* Note that since kernel addresses are in a separate address space on |
* parisc, we don't need to do anything for access_ok() or verify_area(). |
* We just let the page fault handler do the right thing. This also means |
* that put_user is the same as __put_user, etc. |
*/ |
|
#define access_ok(type,addr,size) (1) |
#define verify_area(type,addr,size) (0) |
|
#define put_user __put_user |
#define get_user __get_user |
|
#if BITS_PER_LONG == 32 |
#define LDD_KERNEL(ptr) BUG() |
#define LDD_USER(ptr) BUG() |
#define STD_KERNEL(x, ptr) __put_kernel_asm64(x,ptr) |
#define STD_USER(x, ptr) __put_user_asm64(x,ptr) |
#else |
#define LDD_KERNEL(ptr) __get_kernel_asm("ldd",ptr) |
#define LDD_USER(ptr) __get_user_asm("ldd",ptr) |
#define STD_KERNEL(x, ptr) __put_kernel_asm("std",x,ptr) |
#define STD_USER(x, ptr) __put_user_asm("std",x,ptr) |
#endif |
|
/* |
* The exception table contains two values: the first is an address |
* for an instruction that is allowed to fault, and the second is |
* the number of bytes to skip if a fault occurs. We also support in |
* two bit flags: 0x2 tells the exception handler to clear register |
* r9 and 0x1 tells the exception handler to put -EFAULT in r8. |
* This allows us to handle the simple cases for put_user and |
* get_user without having to have .fixup sections. |
*/ |
|
struct exception_table_entry { |
unsigned long addr; /* address of insn that is allowed to fault. */ |
long skip; /* pcoq skip | r9 clear flag | r8 -EFAULT flag */ |
}; |
|
extern const struct exception_table_entry |
*search_exception_table(unsigned long addr); |
|
#define __get_user(x,ptr) \ |
({ \ |
register long __gu_err __asm__ ("r8") = 0; \ |
register long __gu_val __asm__ ("r9") = 0; \ |
\ |
if (segment_eq(get_fs(),KERNEL_DS)) { \ |
switch (sizeof(*(ptr))) { \ |
case 1: __get_kernel_asm("ldb",ptr); break; \ |
case 2: __get_kernel_asm("ldh",ptr); break; \ |
case 4: __get_kernel_asm("ldw",ptr); break; \ |
case 8: LDD_KERNEL(ptr); break; \ |
default: BUG(); break; \ |
} \ |
} \ |
else { \ |
switch (sizeof(*(ptr))) { \ |
case 1: __get_user_asm("ldb",ptr); break; \ |
case 2: __get_user_asm("ldh",ptr); break; \ |
case 4: __get_user_asm("ldw",ptr); break; \ |
case 8: LDD_USER(ptr); break; \ |
default: BUG(); break; \ |
} \ |
} \ |
\ |
(x) = (__typeof__(*(ptr))) __gu_val; \ |
__gu_err; \ |
}) |
|
#ifdef __LP64__ |
#define __get_kernel_asm(ldx,ptr) \ |
__asm__("\n1:\t" ldx "\t0(%2),%0\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.dword\t1b\n" \ |
"\t.dword\t(2b-1b)+3\n" \ |
"\t.previous" \ |
: "=r"(__gu_val), "=r"(__gu_err) \ |
: "r"(ptr), "1"(__gu_err)); |
|
#define __get_user_asm(ldx,ptr) \ |
__asm__("\n1:\t" ldx "\t0(%%sr3,%2),%0\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.dword\t1b\n" \ |
"\t.dword\t(2b-1b)+3\n" \ |
"\t.previous" \ |
: "=r"(__gu_val), "=r"(__gu_err) \ |
: "r"(ptr), "1"(__gu_err)); |
#else |
#define __get_kernel_asm(ldx,ptr) \ |
__asm__("\n1:\t" ldx "\t0(%2),%0\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.word\t1b\n" \ |
"\t.word\t(2b-1b)+3\n" \ |
"\t.previous" \ |
: "=r"(__gu_val), "=r"(__gu_err) \ |
: "r"(ptr), "1"(__gu_err)); |
|
#define __get_user_asm(ldx,ptr) \ |
__asm__("\n1:\t" ldx "\t0(%%sr3,%2),%0\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.word\t1b\n" \ |
"\t.word\t(2b-1b)+3\n" \ |
"\t.previous" \ |
: "=r"(__gu_val), "=r"(__gu_err) \ |
: "r"(ptr), "1"(__gu_err)); |
#endif |
|
#define __put_user(x,ptr) \ |
({ \ |
register long __pu_err __asm__ ("r8") = 0; \ |
\ |
if (segment_eq(get_fs(),KERNEL_DS)) { \ |
switch (sizeof(*(ptr))) { \ |
case 1: __put_kernel_asm("stb",x,ptr); break; \ |
case 2: __put_kernel_asm("sth",x,ptr); break; \ |
case 4: __put_kernel_asm("stw",x,ptr); break; \ |
case 8: STD_KERNEL(x,ptr); break; \ |
default: BUG(); break; \ |
} \ |
} \ |
else { \ |
switch (sizeof(*(ptr))) { \ |
case 1: __put_user_asm("stb",x,ptr); break; \ |
case 2: __put_user_asm("sth",x,ptr); break; \ |
case 4: __put_user_asm("stw",x,ptr); break; \ |
case 8: STD_USER(x,ptr); break; \ |
default: BUG(); break; \ |
} \ |
} \ |
\ |
__pu_err; \ |
}) |
|
/* |
* The "__put_user/kernel_asm()" macros tell gcc they read from memory |
* instead of writing. This is because they do not write to any memory |
* gcc knows about, so there are no aliasing issues. |
*/ |
|
#ifdef __LP64__ |
#define __put_kernel_asm(stx,x,ptr) \ |
__asm__ __volatile__ ( \ |
"\n1:\t" stx "\t%2,0(%1)\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.dword\t1b\n" \ |
"\t.dword\t(2b-1b)+1\n" \ |
"\t.previous" \ |
: "=r"(__pu_err) \ |
: "r"(ptr), "r"(x), "0"(__pu_err)) |
|
#define __put_user_asm(stx,x,ptr) \ |
__asm__ __volatile__ ( \ |
"\n1:\t" stx "\t%2,0(%%sr3,%1)\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.dword\t1b\n" \ |
"\t.dword\t(2b-1b)+1\n" \ |
"\t.previous" \ |
: "=r"(__pu_err) \ |
: "r"(ptr), "r"(x), "0"(__pu_err)) |
#else |
#define __put_kernel_asm(stx,x,ptr) \ |
__asm__ __volatile__ ( \ |
"\n1:\t" stx "\t%2,0(%1)\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.word\t1b\n" \ |
"\t.word\t(2b-1b)+1\n" \ |
"\t.previous" \ |
: "=r"(__pu_err) \ |
: "r"(ptr), "r"(x), "0"(__pu_err)) |
|
#define __put_user_asm(stx,x,ptr) \ |
__asm__ __volatile__ ( \ |
"\n1:\t" stx "\t%2,0(%%sr3,%1)\n" \ |
"2:\n" \ |
"\t.section __ex_table,\"a\"\n" \ |
"\t.word\t1b\n" \ |
"\t.word\t(2b-1b)+1\n" \ |
"\t.previous" \ |
: "=r"(__pu_err) \ |
: "r"(ptr), "r"(x), "0"(__pu_err)) |
|
static inline void __put_kernel_asm64(u64 x, void *ptr) |
{ |
u32 hi = x>>32; |
u32 lo = x&0xffffffff; |
__asm__ __volatile__ ( |
"\n1:\tstw %1,0(%0)\n" |
"\n2:\tstw %2,4(%0)\n" |
"3:\n" |
"\t.section __ex_table,\"a\"\n" |
"\t.word\t1b\n" |
"\t.word\t(3b-1b)+1\n" |
"\t.word\t2b\n" |
"\t.word\t(3b-2b)+1\n" |
"\t.previous" |
: : "r"(ptr), "r"(hi), "r"(lo)); |
|
} |
|
static inline void __put_user_asm64(u64 x, void *ptr) |
{ |
u32 hi = x>>32; |
u32 lo = x&0xffffffff; |
__asm__ __volatile__ ( |
"\n1:\tstw %1,0(%%sr3,%0)\n" |
"\n2:\tstw %2,4(%%sr3,%0)\n" |
"3:\n" |
"\t.section __ex_table,\"a\"\n" |
"\t.word\t1b\n" |
"\t.word\t(3b-1b)+1\n" |
"\t.word\t2b\n" |
"\t.word\t(3b-2b)+1\n" |
"\t.previous" |
: : "r"(ptr), "r"(hi), "r"(lo)); |
|
} |
|
#endif |
|
|
/* |
* Complex access routines -- external declarations |
*/ |
|
extern unsigned long lcopy_to_user(void *, const void *, unsigned long); |
extern unsigned long lcopy_from_user(void *, const void *, unsigned long); |
extern long lstrncpy_from_user(char *, const char *, long); |
extern unsigned lclear_user(void *,unsigned long); |
extern long lstrnlen_user(const char *,long); |
|
/* |
* Complex access routines -- macros |
*/ |
|
#define strncpy_from_user lstrncpy_from_user |
#define strnlen_user lstrnlen_user |
#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL) |
#define clear_user lclear_user |
#define __clear_user lclear_user |
|
#define copy_from_user lcopy_from_user |
#define __copy_from_user lcopy_from_user |
#define copy_to_user lcopy_to_user |
#define __copy_to_user lcopy_to_user |
|
#endif /* __PARISC_UACCESS_H */ |
/a.out.h
0,0 → 1,29
#ifndef __PARISC_A_OUT_H__ |
#define __PARISC_A_OUT_H__ |
|
struct exec |
{ |
unsigned int a_info; /* Use macros N_MAGIC, etc for access */ |
unsigned a_text; /* length of text, in bytes */ |
unsigned a_data; /* length of data, in bytes */ |
unsigned a_bss; /* length of uninitialized data area for file, in bytes */ |
unsigned a_syms; /* length of symbol table data in file, in bytes */ |
unsigned a_entry; /* start address */ |
unsigned a_trsize; /* length of relocation info for text, in bytes */ |
unsigned a_drsize; /* length of relocation info for data, in bytes */ |
}; |
|
#define N_TRSIZE(a) ((a).a_trsize) |
#define N_DRSIZE(a) ((a).a_drsize) |
#define N_SYMSIZE(a) ((a).a_syms) |
|
#ifdef __KERNEL__ |
|
/* XXX: STACK_TOP actually should be STACK_BOTTOM for parisc. |
* prumpf */ |
|
#define STACK_TOP TASK_SIZE |
|
#endif |
|
#endif /* __A_OUT_GNU_H__ */ |
/eisa_eeprom.h
0,0 → 1,151
/* |
* eisa_eeprom.h - provide support for EISA adapters in PA-RISC machines |
* |
* This program is free software; you can redistribute it and/or |
* modify it under the terms of the GNU General Public License |
* as published by the Free Software Foundation; either version |
* 2 of the License, or (at your option) any later version. |
* |
* Copyright (c) 2001, 2002 Daniel Engstrom <5116@telia.com> |
* |
*/ |
|
#ifndef ASM_EISA_EEPROM_H |
#define ASM_EISA_EEPROM_H |
|
#define HPEE_MAX_LENGTH 0x2000 /* maximum eeprom length */ |
|
#define HPEE_SLOT_INFO(slot) (20+(48*slot)) |
|
struct eeprom_header |
{ |
|
u_int32_t num_writes; /* number of writes */ |
u_int8_t flags; /* flags, usage? */ |
u_int8_t ver_maj; |
u_int8_t ver_min; |
u_int8_t num_slots; /* number of EISA slots in system */ |
u_int16_t csum; /* checksum, I dont know how to calulate this */ |
u_int8_t pad[10]; |
} __attribute__ ((packed)); |
|
|
struct eeprom_eisa_slot_info |
{ |
u_int32_t eisa_slot_id; |
u_int32_t config_data_offset; |
u_int32_t num_writes; |
u_int16_t csum; |
u_int16_t num_functions; |
u_int16_t config_data_length; |
|
/* bits 0..3 are the duplicate slot id */ |
#define HPEE_SLOT_INFO_EMBEDDED 0x10 |
#define HPEE_SLOT_INFO_VIRTUAL 0x20 |
#define HPEE_SLOT_INFO_NO_READID 0x40 |
#define HPEE_SLOT_INFO_DUPLICATE 0x80 |
u_int8_t slot_info; |
|
#define HPEE_SLOT_FEATURES_ENABLE 0x01 |
#define HPEE_SLOT_FEATURES_IOCHK 0x02 |
#define HPEE_SLOT_FEATURES_CFG_INCOMPLETE 0x80 |
u_int8_t slot_features; |
|
u_int8_t ver_min; |
u_int8_t ver_maj; |
|
#define HPEE_FUNCTION_INFO_HAVE_TYPE 0x01 |
#define HPEE_FUNCTION_INFO_HAVE_MEMORY 0x02 |
#define HPEE_FUNCTION_INFO_HAVE_IRQ 0x04 |
#define HPEE_FUNCTION_INFO_HAVE_DMA 0x08 |
#define HPEE_FUNCTION_INFO_HAVE_PORT 0x10 |
#define HPEE_FUNCTION_INFO_HAVE_PORT_INIT 0x20 |
/* I think there are two slighty different |
* versions of the function_info field |
* one int the fixed header and one optional |
* in the parsed slot data area */ |
#define HPEE_FUNCTION_INFO_HAVE_FUNCTION 0x01 |
#define HPEE_FUNCTION_INFO_F_DISABLED 0x80 |
#define HPEE_FUNCTION_INFO_CFG_FREE_FORM 0x40 |
u_int8_t function_info; |
|
#define HPEE_FLAG_BOARD_IS_ISA 0x01 /* flag and minor version for isa board */ |
u_int8_t flags; |
u_int8_t pad[24]; |
} __attribute__ ((packed)); |
|
|
#define HPEE_MEMORY_MAX_ENT 9 |
/* memory descriptor: byte 0 */ |
#define HPEE_MEMORY_WRITABLE 0x01 |
#define HPEE_MEMORY_CACHABLE 0x02 |
#define HPEE_MEMORY_TYPE_MASK 0x18 |
#define HPEE_MEMORY_TYPE_SYS 0x00 |
#define HPEE_MEMORY_TYPE_EXP 0x08 |
#define HPEE_MEMORY_TYPE_VIR 0x10 |
#define HPEE_MEMORY_TYPE_OTH 0x18 |
#define HPEE_MEMORY_SHARED 0x20 |
#define HPEE_MEMORY_MORE 0x80 |
|
/* memory descriptor: byte 1 */ |
#define HPEE_MEMORY_WIDTH_MASK 0x03 |
#define HPEE_MEMORY_WIDTH_BYTE 0x00 |
#define HPEE_MEMORY_WIDTH_WORD 0x01 |
#define HPEE_MEMORY_WIDTH_DWORD 0x02 |
#define HPEE_MEMORY_DECODE_MASK 0x0c |
#define HPEE_MEMORY_DECODE_20BITS 0x00 |
#define HPEE_MEMORY_DECODE_24BITS 0x04 |
#define HPEE_MEMORY_DECODE_32BITS 0x08 |
/* byte 2 and 3 are a 16bit LE value |
* containging the memory size in kilobytes */ |
/* byte 4,5,6 are a 24bit LE value |
* containing the memory base address */ |
|
|
#define HPEE_IRQ_MAX_ENT 7 |
/* Interrupt entry: byte 0 */ |
#define HPEE_IRQ_CHANNEL_MASK 0xf |
#define HPEE_IRQ_TRIG_LEVEL 0x20 |
#define HPEE_IRQ_MORE 0x80 |
/* byte 1 seems to be unused */ |
|
#define HPEE_DMA_MAX_ENT 4 |
|
/* dma entry: byte 0 */ |
#define HPEE_DMA_CHANNEL_MASK 7 |
#define HPEE_DMA_SIZE_MASK 0xc |
#define HPEE_DMA_SIZE_BYTE 0x0 |
#define HPEE_DMA_SIZE_WORD 0x4 |
#define HPEE_DMA_SIZE_DWORD 0x8 |
#define HPEE_DMA_SHARED 0x40 |
#define HPEE_DMA_MORE 0x80 |
|
/* dma entry: byte 1 */ |
#define HPEE_DMA_TIMING_MASK 0x30 |
#define HPEE_DMA_TIMING_ISA 0x0 |
#define HPEE_DMA_TIMING_TYPEA 0x10 |
#define HPEE_DMA_TIMING_TYPEB 0x20 |
#define HPEE_DMA_TIMING_TYPEC 0x30 |
|
#define HPEE_PORT_MAX_ENT 20 |
/* port entry byte 0 */ |
#define HPEE_PORT_SIZE_MASK 0x1f |
#define HPEE_PORT_SHARED 0x40 |
#define HPEE_PORT_MORE 0x80 |
/* byte 1 and 2 is a 16bit LE value |
* conating the start port number */ |
|
#define HPEE_PORT_INIT_MAX_LEN 60 /* in bytes here */ |
/* port init entry byte 0 */ |
#define HPEE_PORT_INIT_WIDTH_MASK 0x3 |
#define HPEE_PORT_INIT_WIDTH_BYTE 0x0 |
#define HPEE_PORT_INIT_WIDTH_WORD 0x1 |
#define HPEE_PORT_INIT_WIDTH_DWORD 0x2 |
#define HPEE_PORT_INIT_MASK 0x4 |
#define HPEE_PORT_INIT_MORE 0x80 |
|
#define HPEE_SELECTION_MAX_ENT 26 |
|
#define HPEE_TYPE_MAX_LEN 80 |
|
#endif |
/namei.h
0,0 → 1,17
/* $Id: namei.h,v 1.1.1.1 2004-04-15 02:38:43 phoenix Exp $ |
* linux/include/asm-parisc/namei.h |
* |
* Included from linux/fs/namei.c |
*/ |
|
#ifndef __PARISC_NAMEI_H |
#define __PARISC_NAMEI_H |
|
/* This dummy routine maybe changed to something useful |
* for /usr/gnemul/ emulation stuff. |
* Look at asm-sparc/namei.h for details. |
*/ |
|
#define __emul_prefix() NULL |
|
#endif /* __PARISC_NAMEI_H */ |
/hardirq.h
0,0 → 1,105
/* hardirq.h: PA-RISC hard IRQ support. |
* |
* Copyright (C) 2001 Matthew Wilcox <matthew@wil.cx> |
* |
* The locking is really quite interesting. There's a cpu-local |
* count of how many interrupts are being handled, and a global |
* lock. An interrupt can only be serviced if the global lock |
* is free. You can't be sure no more interrupts are being |
* serviced until you've acquired the lock and then checked |
* all the per-cpu interrupt counts are all zero. It's a specialised |
* br_lock, and that's exactly how Sparc does it. We don't because |
* it's more locking for us. This way is lock-free in the interrupt path. |
*/ |
|
#ifndef _PARISC_HARDIRQ_H |
#define _PARISC_HARDIRQ_H |
|
#include <linux/config.h> |
#include <linux/threads.h> |
|
typedef struct { |
unsigned long __softirq_pending; /* set_bit is used on this */ |
unsigned int __local_irq_count; |
unsigned int __local_bh_count; |
unsigned int __syscall_count; |
struct task_struct * __ksoftirqd_task; |
} ____cacheline_aligned irq_cpustat_t; |
|
#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ |
|
/* |
* Are we in an interrupt context? Either doing bottom half |
* or hardware interrupt processing? |
*/ |
#define in_interrupt() ({ int __cpu = smp_processor_id(); \ |
(local_irq_count(__cpu) + local_bh_count(__cpu) != 0); }) |
|
#define in_irq() ({ int __cpu = smp_processor_id(); \ |
(local_irq_count(__cpu) != 0); }) |
|
#ifndef CONFIG_SMP |
|
#define hardirq_trylock(cpu) (local_irq_count(cpu) == 0) |
#define hardirq_endlock(cpu) do { } while (0) |
|
#define irq_enter(cpu, irq) (local_irq_count(cpu)++) |
#define irq_exit(cpu, irq) (local_irq_count(cpu)--) |
|
#define synchronize_irq() barrier() |
|
#else |
|
#include <asm/system.h> |
#include <asm/atomic.h> |
#include <linux/spinlock.h> |
#include <asm/smp.h> |
|
extern int global_irq_holder; |
extern spinlock_t global_irq_lock; |
|
static inline int irqs_running (void) |
{ |
int i; |
|
for (i = 0; i < smp_num_cpus; i++) |
if (local_irq_count(i)) |
return 1; |
return 0; |
} |
|
|
static inline void release_irqlock(int cpu) |
{ |
/* if we didn't own the irq lock, just ignore.. */ |
if (global_irq_holder == (unsigned char) cpu) { |
global_irq_holder = NO_PROC_ID; |
spin_unlock(&global_irq_lock); |
} |
} |
|
static inline void irq_enter(int cpu, int irq) |
{ |
++local_irq_count(cpu); |
|
while (spin_is_locked(&global_irq_lock)) |
barrier(); |
} |
|
static inline void irq_exit(int cpu, int irq) |
{ |
--local_irq_count(cpu); |
} |
|
static inline int hardirq_trylock(int cpu) |
{ |
return !local_irq_count(cpu) && !spin_is_locked (&global_irq_lock); |
} |
|
#define hardirq_endlock(cpu) do { } while (0) |
|
extern void synchronize_irq(void); |
|
#endif /* CONFIG_SMP */ |
|
#endif /* _PARISC_HARDIRQ_H */ |
/eisa_bus.h
0,0 → 1,23
/* |
* eisa_bus.h interface between the eisa BA driver and the bus enumerator |
* |
* This program is free software; you can redistribute it and/or |
* modify it under the terms of the GNU General Public License |
* as published by the Free Software Foundation; either version |
* 2 of the License, or (at your option) any later version. |
* |
* Copyright (c) 2002 Daniel Engstrom <5116@telia.com> |
* |
*/ |
|
#ifndef ASM_EISA_H |
#define ASM_EISA_H |
|
extern void eisa_make_irq_level(int num); |
extern void eisa_make_irq_edge(int num); |
extern int eisa_enumerator(unsigned long eeprom_addr, |
struct resource *io_parent, |
struct resource *mem_parent); |
extern int eisa_eeprom_init(unsigned long addr); |
|
#endif |
/irq.h
0,0 → 1,97
/* |
* linux/include/asm-parisc/irq.h |
* |
* (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar, |
* Copyright 1999 SuSE GmbH |
* |
* IRQ/IPI changes taken from work by Thomas Radke |
* <tomsoft@informatik.tu-chemnitz.de> |
*/ |
|
#ifndef _ASM_PARISC_IRQ_H |
#define _ASM_PARISC_IRQ_H |
|
#include <asm/ptrace.h> |
#include <asm/types.h> |
|
#include <linux/string.h> |
#include <linux/interrupt.h> |
|
|
#define CPU_IRQ_REGION 1 |
#define TIMER_IRQ (IRQ_FROM_REGION(CPU_IRQ_REGION) | 0) |
#define IPI_IRQ (IRQ_FROM_REGION(CPU_IRQ_REGION) | 1) |
|
/* This should be 31 for PA1.1 binaries and 63 for PA-2.0 wide mode */ |
#define MAX_CPU_IRQ (BITS_PER_LONG - 1) |
|
#if BITS_PER_LONG == 32 |
# define IRQ_REGION_SHIFT 5 |
#else |
# define IRQ_REGION_SHIFT 6 |
#endif |
|
#define IRQ_PER_REGION (1 << IRQ_REGION_SHIFT) |
#define NR_IRQ_REGS 16 |
#define NR_IRQS (NR_IRQ_REGS * IRQ_PER_REGION) |
|
#define IRQ_REGION(irq) ((irq) >> IRQ_REGION_SHIFT) |
#define IRQ_OFFSET(irq) ((irq) & ((1<<IRQ_REGION_SHIFT)-1)) |
#define IRQ_FROM_REGION(reg) ((reg) << IRQ_REGION_SHIFT) |
|
#define EISA_IRQ_REGION 0 /* region 0 needs to be reserved for EISA */ |
#define EISA_MAX_IRQS 16 /* max. (E)ISA irq line */ |
|
struct irq_region_ops { |
void (*disable_irq)(void *dev, int irq); |
void (* enable_irq)(void *dev, int irq); |
void (* mask_irq)(void *dev, int irq); |
void (* unmask_irq)(void *dev, int irq); |
}; |
|
struct irq_region_data { |
void *dev; |
const char *name; |
int irqbase; |
unsigned int status[IRQ_PER_REGION]; /* IRQ status */ |
}; |
|
struct irq_region { |
struct irq_region_ops ops; |
struct irq_region_data data; |
|
struct irqaction *action; |
}; |
|
extern struct irq_region *irq_region[NR_IRQ_REGS]; |
|
static __inline__ int irq_cannonicalize(int irq) |
{ |
#ifdef CONFIG_EISA |
return (irq == (IRQ_FROM_REGION(EISA_IRQ_REGION)+2) |
? (IRQ_FROM_REGION(EISA_IRQ_REGION)+9) : irq); |
#else |
return irq; |
#endif |
} |
|
extern void disable_irq(int); |
#define disable_irq_nosync(i) disable_irq(i) |
extern void enable_irq(int); |
|
extern void do_irq(struct irqaction *a, int i, struct pt_regs *p); |
extern void do_irq_mask(unsigned long mask, struct irq_region *region, |
struct pt_regs *regs); |
|
extern struct irq_region *alloc_irq_region(int count, struct irq_region_ops *ops, |
const char *name, void *dev); |
|
extern int txn_alloc_irq(void); |
extern int txn_claim_irq(int); |
extern unsigned int txn_alloc_data(int, unsigned int); |
extern unsigned long txn_alloc_addr(int); |
|
/* soft power switch support (power.c) */ |
extern struct tasklet_struct power_tasklet; |
|
#endif /* _ASM_PARISC_IRQ_H */ |
/ioctls.h
0,0 → 1,83
#ifndef __ARCH_PARISC_IOCTLS_H__ |
#define __ARCH_PARISC_IOCTLS_H__ |
|
#include <asm/ioctl.h> |
|
/* 0x54 is just a magic number to make these relatively unique ('T') */ |
|
#define TCGETS _IOR('T', 16, struct termios) /* TCGETATTR */ |
#define TCSETS _IOW('T', 17, struct termios) /* TCSETATTR */ |
#define TCSETSW _IOW('T', 18, struct termios) /* TCSETATTRD */ |
#define TCSETSF _IOW('T', 19, struct termios) /* TCSETATTRF */ |
#define TCGETA _IOR('T', 1, struct termio) |
#define TCSETA _IOW('T', 2, struct termio) |
#define TCSETAW _IOW('T', 3, struct termio) |
#define TCSETAF _IOW('T', 4, struct termio) |
#define TCSBRK _IO('T', 5) |
#define TCXONC _IO('T', 6) |
#define TCFLSH _IO('T', 7) |
#define TIOCEXCL 0x540C |
#define TIOCNXCL 0x540D |
#define TIOCSCTTY 0x540E |
#define TIOCGPGRP _IOR('T', 30, int) |
#define TIOCSPGRP _IOW('T', 29, int) |
#define TIOCOUTQ 0x5411 |
#define TIOCSTI 0x5412 |
#define TIOCGWINSZ 0x5413 |
#define TIOCSWINSZ 0x5414 |
#define TIOCMGET 0x5415 |
#define TIOCMBIS 0x5416 |
#define TIOCMBIC 0x5417 |
#define TIOCMSET 0x5418 |
#define TIOCGSOFTCAR 0x5419 |
#define TIOCSSOFTCAR 0x541A |
#define FIONREAD 0x541B |
#define TIOCINQ FIONREAD |
#define TIOCLINUX 0x541C |
#define TIOCCONS 0x541D |
#define TIOCGSERIAL 0x541E |
#define TIOCSSERIAL 0x541F |
#define TIOCPKT 0x5420 |
#define FIONBIO 0x5421 |
#define TIOCNOTTY 0x5422 |
#define TIOCSETD 0x5423 |
#define TIOCGETD 0x5424 |
#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ |
#define TIOCTTYGSTRUCT 0x5426 /* For debugging only */ |
#define TIOCSBRK 0x5427 /* BSD compatibility */ |
#define TIOCCBRK 0x5428 /* BSD compatibility */ |
#define TIOCGSID _IOR('T', 20, int) /* Return the session ID of FD */ |
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ |
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ |
|
#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ |
#define FIOCLEX 0x5451 |
#define FIOASYNC 0x5452 |
#define TIOCSERCONFIG 0x5453 |
#define TIOCSERGWILD 0x5454 |
#define TIOCSERSWILD 0x5455 |
#define TIOCGLCKTRMIOS 0x5456 |
#define TIOCSLCKTRMIOS 0x5457 |
#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ |
#define TIOCSERGETLSR 0x5459 /* Get line status register */ |
#define TIOCSERGETMULTI 0x545A /* Get multiport config */ |
#define TIOCSERSETMULTI 0x545B /* Set multiport config */ |
|
#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ |
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ |
#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */ |
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */ |
#define FIOQSIZE 0x5460 /* Get exact space used by quota */ |
|
/* Used for packet mode */ |
#define TIOCPKT_DATA 0 |
#define TIOCPKT_FLUSHREAD 1 |
#define TIOCPKT_FLUSHWRITE 2 |
#define TIOCPKT_STOP 4 |
#define TIOCPKT_START 8 |
#define TIOCPKT_NOSTOP 16 |
#define TIOCPKT_DOSTOP 32 |
|
#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ |
|
#endif /* _ASM_PARISC_IOCTLS_H */ |
/delay.h
0,0 → 1,44
#ifndef _PARISC_DELAY_H |
#define _PARISC_DELAY_H |
|
#include <asm/system.h> /* for mfctl() */ |
#include <asm/processor.h> /* for boot_cpu_data */ |
|
|
/* |
* Copyright (C) 1993 Linus Torvalds |
* |
* Delay routines |
*/ |
|
static __inline__ void __delay(unsigned long loops) { |
asm volatile( |
" .balignl 64,0x34000034\n" |
" addib,UV -1,%0,.\n" |
" nop\n" |
: "=r" (loops) : "0" (loops)); |
} |
|
static __inline__ void __cr16_delay(unsigned long clocks) { |
unsigned long start; |
|
/* |
* Note: Due to unsigned math, cr16 rollovers shouldn't be |
* a problem here. However, on 32 bit, we need to make sure |
* we don't pass in too big a value. The current default |
* value of MAX_UDELAY_MS should help prevent this. |
*/ |
|
start = mfctl(16); |
while ((mfctl(16) - start) < clocks) |
; |
} |
|
static __inline__ void __udelay(unsigned long usecs) { |
__cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL)); |
} |
|
#define udelay(n) __udelay(n) |
#define ndelay(n) __udelay(n/1000+1) |
|
#endif /* defined(_PARISC_DELAY_H) */ |
/rmap.h
0,0 → 1,7
#ifndef _PARISC_RMAP_H |
#define _PARISC_RMAP_H |
|
/* nothing to see, move along */ |
#include <asm-generic/rmap.h> |
|
#endif |
/bugs.h
0,0 → 1,19
/* |
* include/asm-parisc/bugs.h |
* |
* Copyright (C) 1999 Mike Shaver |
*/ |
|
/* |
* This is included by init/main.c to check for architecture-dependent bugs. |
* |
* Needs: |
* void check_bugs(void); |
*/ |
|
#include <asm/processor.h> |
|
static inline void check_bugs(void) |
{ |
// identify_cpu(&boot_cpu_data); |
} |
/bitops.h
0,0 → 1,347
#ifndef _PARISC_BITOPS_H |
#define _PARISC_BITOPS_H |
|
#include <linux/spinlock.h> |
#include <asm/system.h> |
#include <asm/byteorder.h> |
#include <asm/atomic.h> |
|
/* |
* HP-PARISC specific bit operations |
* for a detailed description of the functions please refer |
* to include/asm-i386/bitops.h or kerneldoc |
*/ |
|
#ifdef __LP64__ |
# define SHIFT_PER_LONG 6 |
#ifndef BITS_PER_LONG |
# define BITS_PER_LONG 64 |
#endif |
#else |
# define SHIFT_PER_LONG 5 |
#ifndef BITS_PER_LONG |
# define BITS_PER_LONG 32 |
#endif |
#endif |
|
#define CHOP_SHIFTCOUNT(x) ((x) & (BITS_PER_LONG - 1)) |
|
|
#define smp_mb__before_clear_bit() smp_mb() |
#define smp_mb__after_clear_bit() smp_mb() |
|
static __inline__ void set_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
unsigned long flags; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags); |
*addr |= mask; |
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags); |
} |
|
static __inline__ void __set_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
*addr |= mask; |
} |
|
static __inline__ void clear_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
unsigned long flags; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags); |
*addr &= ~mask; |
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags); |
} |
|
static __inline__ void change_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
unsigned long flags; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags); |
*addr ^= mask; |
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags); |
} |
|
static __inline__ void __change_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
*addr ^= mask; |
} |
|
static __inline__ int test_and_set_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
int oldbit; |
unsigned long flags; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags); |
oldbit = (*addr & mask) ? 1 : 0; |
*addr |= mask; |
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags); |
|
return oldbit; |
} |
|
static __inline__ int __test_and_set_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
int oldbit; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
oldbit = (*addr & mask) ? 1 : 0; |
*addr |= mask; |
|
return oldbit; |
} |
|
static __inline__ int test_and_clear_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
int oldbit; |
unsigned long flags; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags); |
oldbit = (*addr & mask) ? 1 : 0; |
*addr &= ~mask; |
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags); |
|
return oldbit; |
} |
|
static __inline__ int __test_and_clear_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
int oldbit; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
oldbit = (*addr & mask) ? 1 : 0; |
*addr &= ~mask; |
|
return oldbit; |
} |
|
static __inline__ int test_and_change_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
int oldbit; |
unsigned long flags; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags); |
oldbit = (*addr & mask) ? 1 : 0; |
*addr ^= mask; |
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags); |
|
return oldbit; |
} |
|
static __inline__ int __test_and_change_bit(int nr, void * address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
int oldbit; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
oldbit = (*addr & mask) ? 1 : 0; |
*addr ^= mask; |
|
return oldbit; |
} |
|
static __inline__ int test_bit(int nr, const void *address) |
{ |
unsigned long mask; |
unsigned long *addr = (unsigned long *) address; |
|
addr += (nr >> SHIFT_PER_LONG); |
mask = 1L << CHOP_SHIFTCOUNT(nr); |
|
return !!(*addr & mask); |
} |
|
extern __inline__ unsigned long ffz(unsigned long word) |
{ |
unsigned long result; |
|
result = 0; |
while (word & 1) { |
result++; |
word >>= 1; |
} |
|
return result; |
} |
|
#ifdef __KERNEL__ |
|
/* |
* ffs: find first bit set. This is defined the same way as |
* the libc and compiler builtin ffs routines, therefore |
* differs in spirit from the above ffz (man ffs). |
*/ |
|
#define ffs(x) generic_ffs(x) |
|
/* |
* hweightN: returns the hamming weight (i.e. the number |
* of bits set) of a N-bit word |
*/ |
|
#define hweight32(x) generic_hweight32(x) |
#define hweight16(x) generic_hweight16(x) |
#define hweight8(x) generic_hweight8(x) |
|
#endif /* __KERNEL__ */ |
|
/* |
* This implementation of find_{first,next}_zero_bit was stolen from |
* Linus' asm-alpha/bitops.h. |
*/ |
#define find_first_zero_bit(addr, size) \ |
find_next_zero_bit((addr), (size), 0) |
|
static __inline__ unsigned long find_next_zero_bit(void * addr, unsigned long size, unsigned long offset) |
{ |
unsigned long * p = ((unsigned long *) addr) + (offset >> SHIFT_PER_LONG); |
unsigned long result = offset & ~(BITS_PER_LONG-1); |
unsigned long tmp; |
|
if (offset >= size) |
return size; |
size -= result; |
offset &= (BITS_PER_LONG-1); |
if (offset) { |
tmp = *(p++); |
tmp |= ~0UL >> (BITS_PER_LONG-offset); |
if (size < BITS_PER_LONG) |
goto found_first; |
if (~tmp) |
goto found_middle; |
size -= BITS_PER_LONG; |
result += BITS_PER_LONG; |
} |
while (size & ~(BITS_PER_LONG -1)) { |
if (~(tmp = *(p++))) |
goto found_middle; |
result += BITS_PER_LONG; |
size -= BITS_PER_LONG; |
} |
if (!size) |
return result; |
tmp = *p; |
found_first: |
tmp |= ~0UL << size; |
found_middle: |
return result + ffz(tmp); |
} |
|
#define _EXT2_HAVE_ASM_BITOPS_ |
|
#ifdef __KERNEL__ |
/* |
* test_and_{set,clear}_bit guarantee atomicity without |
* disabling interrupts. |
*/ |
#ifdef __LP64__ |
#define ext2_set_bit(nr, addr) test_and_set_bit((nr) ^ 0x38, addr) |
#define ext2_clear_bit(nr, addr) test_and_clear_bit((nr) ^ 0x38, addr) |
#else |
#define ext2_set_bit(nr, addr) test_and_set_bit((nr) ^ 0x18, addr) |
#define ext2_clear_bit(nr, addr) test_and_clear_bit((nr) ^ 0x18, addr) |
#endif |
|
#endif /* __KERNEL__ */ |
|
static __inline__ int ext2_test_bit(int nr, __const__ void * addr) |
{ |
__const__ unsigned char *ADDR = (__const__ unsigned char *) addr; |
|
return (ADDR[nr >> 3] >> (nr & 7)) & 1; |
} |
|
/* |
* This implementation of ext2_find_{first,next}_zero_bit was stolen from |
* Linus' asm-alpha/bitops.h and modified for a big-endian machine. |
*/ |
|
#define ext2_find_first_zero_bit(addr, size) \ |
ext2_find_next_zero_bit((addr), (size), 0) |
|
extern __inline__ unsigned long ext2_find_next_zero_bit(void *addr, |
unsigned long size, unsigned long offset) |
{ |
unsigned int *p = ((unsigned int *) addr) + (offset >> 5); |
unsigned int result = offset & ~31UL; |
unsigned int tmp; |
|
if (offset >= size) |
return size; |
size -= result; |
offset &= 31UL; |
if (offset) { |
tmp = cpu_to_le32p(p++); |
tmp |= ~0UL >> (32-offset); |
if (size < 32) |
goto found_first; |
if (tmp != ~0U) |
goto found_middle; |
size -= 32; |
result += 32; |
} |
while (size >= 32) { |
if ((tmp = cpu_to_le32p(p++)) != ~0U) |
goto found_middle; |
result += 32; |
size -= 32; |
} |
if (!size) |
return result; |
tmp = cpu_to_le32p(p); |
found_first: |
tmp |= ~0U << size; |
found_middle: |
return result + ffz(tmp); |
} |
|
/* Bitmap functions for the minix filesystem. */ |
#define minix_test_and_set_bit(nr,addr) ext2_set_bit(nr,addr) |
#define minix_set_bit(nr,addr) ((void)ext2_set_bit(nr,addr)) |
#define minix_test_and_clear_bit(nr,addr) ext2_clear_bit(nr,addr) |
#define minix_test_bit(nr,addr) ext2_test_bit(nr,addr) |
#define minix_find_first_zero_bit(addr,size) ext2_find_first_zero_bit(addr,size) |
|
#endif /* _PARISC_BITOPS_H */ |
/param.h
0,0 → 1,24
#ifndef _ASMPARISC_PARAM_H |
#define _ASMPARISC_PARAM_H |
|
#ifndef HZ |
#define HZ 100 |
#endif |
|
#define EXEC_PAGESIZE 4096 |
|
#ifndef NGROUPS |
#define NGROUPS 32 |
#endif |
|
#ifndef NOGROUP |
#define NOGROUP (-1) |
#endif |
|
#define MAXHOSTNAMELEN 64 /* max length of hostname */ |
|
#ifdef __KERNEL__ |
# define CLOCKS_PER_SEC HZ /* frequency at which times() counts */ |
#endif |
|
#endif |
/dma.h
0,0 → 1,192
/* $Id: dma.h,v 1.1.1.1 2004-04-15 02:38:36 phoenix Exp $ |
* linux/include/asm/dma.h: Defines for using and allocating dma channels. |
* Written by Hennus Bergman, 1992. |
* High DMA channel support & info by Hannu Savolainen |
* and John Boyd, Nov. 1992. |
* (c) Copyright 2000, Grant Grundler |
*/ |
|
#ifndef _ASM_DMA_H |
#define _ASM_DMA_H |
|
#include <linux/config.h> |
#include <asm/io.h> /* need byte IO */ |
#include <asm/system.h> |
|
#define dma_outb outb |
#define dma_inb inb |
|
/* |
** DMA_CHUNK_SIZE is used by the SCSI mid-layer to break up |
** (or rather not merge) DMA's into managable chunks. |
** On parisc, this is more of the software/tuning constraint |
** rather than the HW. I/O MMU allocation alogorithms can be |
** faster with smaller size is (to some degree). |
*/ |
#define DMA_CHUNK_SIZE (BITS_PER_LONG*PAGE_SIZE) |
|
/* The maximum address that we can perform a DMA transfer to on this platform |
** New dynamic DMA interfaces should obsolete this.... |
*/ |
#define MAX_DMA_ADDRESS (~0UL) |
|
|
/* |
** We don't have DMA channels... well V-class does but the |
** Dynamic DMA Mapping interface will support them... right? :^) |
** Note: this is not relevant right now for PA-RISC, but we cannot |
** leave this as undefined because some things (e.g. sound) |
** won't compile :-( |
*/ |
#define MAX_DMA_CHANNELS 8 |
#define DMA_MODE_READ 1 |
#define DMA_MODE_WRITE 2 |
#define DMA_AUTOINIT 0x10 |
|
/* 8237 DMA controllers */ |
#define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */ |
#define IO_DMA2_BASE 0xC0 /* 16 bit master DMA, ch 4(=slave input)..7 */ |
|
/* DMA controller registers */ |
#define DMA1_CMD_REG 0x08 /* command register (w) */ |
#define DMA1_STAT_REG 0x08 /* status register (r) */ |
#define DMA1_REQ_REG 0x09 /* request register (w) */ |
#define DMA1_MASK_REG 0x0A /* single-channel mask (w) */ |
#define DMA1_MODE_REG 0x0B /* mode register (w) */ |
#define DMA1_CLEAR_FF_REG 0x0C /* clear pointer flip-flop (w) */ |
#define DMA1_TEMP_REG 0x0D /* Temporary Register (r) */ |
#define DMA1_RESET_REG 0x0D /* Master Clear (w) */ |
#define DMA1_CLR_MASK_REG 0x0E /* Clear Mask */ |
#define DMA1_MASK_ALL_REG 0x0F /* all-channels mask (w) */ |
#define DMA1_EXT_MODE_REG (0x400 | DMA1_MODE_REG) |
|
#define DMA2_CMD_REG 0xD0 /* command register (w) */ |
#define DMA2_STAT_REG 0xD0 /* status register (r) */ |
#define DMA2_REQ_REG 0xD2 /* request register (w) */ |
#define DMA2_MASK_REG 0xD4 /* single-channel mask (w) */ |
#define DMA2_MODE_REG 0xD6 /* mode register (w) */ |
#define DMA2_CLEAR_FF_REG 0xD8 /* clear pointer flip-flop (w) */ |
#define DMA2_TEMP_REG 0xDA /* Temporary Register (r) */ |
#define DMA2_RESET_REG 0xDA /* Master Clear (w) */ |
#define DMA2_CLR_MASK_REG 0xDC /* Clear Mask */ |
#define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */ |
#define DMA2_EXT_MODE_REG (0x400 | DMA2_MODE_REG) |
|
extern spinlock_t dma_spin_lock; |
|
static __inline__ unsigned long claim_dma_lock(void) |
{ |
unsigned long flags; |
spin_lock_irqsave(&dma_spin_lock, flags); |
return flags; |
} |
|
static __inline__ void release_dma_lock(unsigned long flags) |
{ |
spin_unlock_irqrestore(&dma_spin_lock, flags); |
} |
|
|
/* Get DMA residue count. After a DMA transfer, this |
* should return zero. Reading this while a DMA transfer is |
* still in progress will return unpredictable results. |
* If called before the channel has been used, it may return 1. |
* Otherwise, it returns the number of _bytes_ left to transfer. |
* |
* Assumes DMA flip-flop is clear. |
*/ |
static __inline__ int get_dma_residue(unsigned int dmanr) |
{ |
unsigned int io_port = (dmanr<=3)? ((dmanr&3)<<1) + 1 + IO_DMA1_BASE |
: ((dmanr&3)<<2) + 2 + IO_DMA2_BASE; |
|
/* using short to get 16-bit wrap around */ |
unsigned short count; |
|
count = 1 + dma_inb(io_port); |
count += dma_inb(io_port) << 8; |
|
return (dmanr<=3)? count : (count<<1); |
} |
|
/* enable/disable a specific DMA channel */ |
static __inline__ void enable_dma(unsigned int dmanr) |
{ |
#ifdef CONFIG_SUPERIO |
if (dmanr<=3) |
dma_outb(dmanr, DMA1_MASK_REG); |
else |
dma_outb(dmanr & 3, DMA2_MASK_REG); |
#endif |
} |
|
static __inline__ void disable_dma(unsigned int dmanr) |
{ |
#ifdef CONFIG_SUPERIO |
if (dmanr<=3) |
dma_outb(dmanr | 4, DMA1_MASK_REG); |
else |
dma_outb((dmanr & 3) | 4, DMA2_MASK_REG); |
#endif |
} |
|
/* Clear the 'DMA Pointer Flip Flop'. |
* Write 0 for LSB/MSB, 1 for MSB/LSB access. |
* Use this once to initialize the FF to a known state. |
* After that, keep track of it. :-) |
* --- In order to do that, the DMA routines below should --- |
* --- only be used while holding the DMA lock ! --- |
*/ |
static __inline__ void clear_dma_ff(unsigned int dmanr) |
{ |
} |
|
/* set mode (above) for a specific DMA channel */ |
static __inline__ void set_dma_mode(unsigned int dmanr, char mode) |
{ |
} |
|
/* Set only the page register bits of the transfer address. |
* This is used for successive transfers when we know the contents of |
* the lower 16 bits of the DMA current address register, but a 64k boundary |
* may have been crossed. |
*/ |
static __inline__ void set_dma_page(unsigned int dmanr, char pagenr) |
{ |
} |
|
|
/* Set transfer address & page bits for specific DMA channel. |
* Assumes dma flipflop is clear. |
*/ |
static __inline__ void set_dma_addr(unsigned int dmanr, unsigned int a) |
{ |
} |
|
|
/* Set transfer size (max 64k for DMA1..3, 128k for DMA5..7) for |
* a specific DMA channel. |
* You must ensure the parameters are valid. |
* NOTE: from a manual: "the number of transfers is one more |
* than the initial word count"! This is taken into account. |
* Assumes dma flip-flop is clear. |
* NOTE 2: "count" represents _bytes_ and must be even for channels 5-7. |
*/ |
static __inline__ void set_dma_count(unsigned int dmanr, unsigned int count) |
{ |
} |
|
|
|
/* These are in kernel/dma.c: */ |
extern int request_dma(unsigned int dmanr, const char * device_id); /* reserve a DMA channel */ |
extern void free_dma(unsigned int dmanr); /* release it again */ |
extern int get_dma_list(char *buf); /* proc/dma support */ |
|
#ifdef CONFIG_PCI |
extern int isa_dma_bridge_buggy; |
#else |
#define isa_dma_bridge_buggy (0) |
#endif |
|
#endif /* _ASM_DMA_H */ |
/machdep.h
0,0 → 1,16
#ifndef _PARISC_MACHDEP_H |
#define _PARISC_MACHDEP_H |
|
#include <linux/notifier.h> |
|
#define MACH_RESTART 1 |
#define MACH_HALT 2 |
#define MACH_POWER_ON 3 |
#define MACH_POWER_OFF 4 |
|
extern struct notifier_block *mach_notifier; |
extern void pa7300lc_init(void); |
|
extern void (*cpu_lpmc)(int, struct pt_regs *); |
|
#endif |
/mmu_context.h
0,0 → 1,59
#ifndef __PARISC_MMU_CONTEXT_H |
#define __PARISC_MMU_CONTEXT_H |
|
#include <asm/pgalloc.h> |
|
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk, unsigned cpu) |
{ |
} |
|
/* on PA-RISC, we actually have enough contexts to justify an allocator |
* for them. prumpf */ |
|
extern unsigned long alloc_sid(void); |
extern void free_sid(unsigned long); |
|
static inline int |
init_new_context(struct task_struct *tsk, struct mm_struct *mm) |
{ |
if (atomic_read(&mm->mm_users) != 1) |
BUG(); |
|
mm->context = alloc_sid(); |
return 0; |
} |
|
static inline void |
destroy_context(struct mm_struct *mm) |
{ |
free_sid(mm->context); |
mm->context = 0; |
} |
|
static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk, unsigned cpu) |
{ |
|
if (prev != next) { |
mtctl(__pa(next->pgd), 25); |
load_context(next->context); |
} |
} |
|
static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next) |
{ |
/* |
* Activate_mm is our one chance to allocate a space id |
* for a new mm created in the exec path. There's also |
* some lazy tlb stuff, which is currently dead code, but |
* we only allocate a space id if one hasn't been allocated |
* already, so we should be OK. |
*/ |
|
if (next == &init_mm) BUG(); /* Should never happen */ |
|
if (next->context == 0) |
next->context = alloc_sid(); |
|
switch_mm(prev,next,current,0); |
} |
#endif |
/checksum.h
0,0 → 1,226
#ifndef _PARISC_CHECKSUM_H |
#define _PARISC_CHECKSUM_H |
|
/* |
* computes the checksum of a memory block at buff, length len, |
* and adds in "sum" (32-bit) |
* |
* returns a 32-bit number suitable for feeding into itself |
* or csum_tcpudp_magic |
* |
* this function must be called with even lengths, except |
* for the last fragment, which may be odd |
* |
* it's best to have buff aligned on a 32-bit boundary |
*/ |
extern unsigned int csum_partial(const unsigned char *, int, unsigned int); |
|
/* |
* the same as csum_partial, but copies from src while it |
* checksums |
* |
* here even more important to align src and dst on a 32-bit (or even |
* better 64-bit) boundary |
*/ |
extern unsigned int csum_partial_copy(const char *, char *, int, unsigned int); |
|
/* |
* the same as csum_partial, but copies from user space |
* |
* this is obsolete and will go away. |
*/ |
#define csum_partial_copy_fromuser csum_partial_copy |
|
/* |
* this is a new version of the above that records errors it finds in *errp, |
* but continues and zeros the rest of the buffer. |
*/ |
unsigned int csum_partial_copy_from_user(const char *src, char *dst, int len, unsigned int sum, int *errp); |
|
/* |
* Note: when you get a NULL pointer exception here this means someone |
* passed in an incorrect kernel address to one of these functions. |
* |
* If you use these functions directly please don't forget the |
* verify_area(). |
*/ |
extern __inline__ |
unsigned int csum_partial_copy_nocheck (const char *src, char *dst, |
int len, int sum) |
{ |
return csum_partial_copy (src, dst, len, sum); |
} |
|
/* |
* Optimized for IP headers, which always checksum on 4 octet boundaries. |
*/ |
static inline unsigned short ip_fast_csum(unsigned char * iph, |
unsigned int ihl) { |
unsigned int sum; |
|
|
__asm__ __volatile__ ( |
" ldws,ma 4(%1), %0\n" |
" addib,<= -4, %2, 2f\n" |
"\n" |
" ldws 4(%1), %%r20\n" |
" ldws 8(%1), %%r21\n" |
" add %0, %%r20, %0\n" |
" ldws,ma 12(%1), %%r19\n" |
" addc %0, %%r21, %0\n" |
" addc %0, %%r19, %0\n" |
"1: ldws,ma 4(%1), %%r19\n" |
" addib,< 0, %2, 1b\n" |
" addc %0, %%r19, %0\n" |
"\n" |
" extru %0, 31, 16, %%r20\n" |
" extru %0, 15, 16, %%r21\n" |
" addc %%r20, %%r21, %0\n" |
" extru %0, 15, 16, %%r21\n" |
" add %0, %%r21, %0\n" |
" subi -1, %0, %0\n" |
"2:\n" |
: "=r" (sum), "=r" (iph), "=r" (ihl) |
: "1" (iph), "2" (ihl) |
: "r19", "r20", "r21" ); |
|
return(sum); |
} |
|
/* |
* Fold a partial checksum |
*/ |
static inline unsigned int csum_fold(unsigned int sum) |
{ |
/* add the swapped two 16-bit halves of sum, |
a possible carry from adding the two 16-bit halves, |
will carry from the lower half into the upper half, |
giving us the correct sum in the upper half. */ |
sum += (sum << 16) + (sum >> 16); |
return (~sum) >> 16; |
} |
|
static inline unsigned long csum_tcpudp_nofold(unsigned long saddr, |
unsigned long daddr, |
unsigned short len, |
unsigned short proto, |
unsigned int sum) |
{ |
__asm__( |
" add %1, %0, %0\n" |
" addc %2, %0, %0\n" |
" addc %3, %0, %0\n" |
" addc %%r0, %0, %0\n" |
: "=r" (sum) |
: "r" (daddr), "r"(saddr), "r"((proto<<16)+len), "0"(sum)); |
return sum; |
} |
|
/* |
* computes the checksum of the TCP/UDP pseudo-header |
* returns a 16-bit checksum, already complemented |
*/ |
static inline unsigned short int csum_tcpudp_magic(unsigned long saddr, |
unsigned long daddr, |
unsigned short len, |
unsigned short proto, |
unsigned int sum) |
{ |
return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum)); |
} |
|
/* |
* this routine is used for miscellaneous IP-like checksums, mainly |
* in icmp.c |
*/ |
static inline unsigned short ip_compute_csum(unsigned char * buf, int len) { |
return csum_fold (csum_partial(buf, len, 0)); |
} |
|
|
#define _HAVE_ARCH_IPV6_CSUM |
static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, |
struct in6_addr *daddr, |
__u16 len, |
unsigned short proto, |
unsigned int sum) |
{ |
__asm__ __volatile__ ( |
|
#if BITS_PER_LONG > 32 |
|
/* |
** We can execute two loads and two adds per cycle on PA 8000. |
** But add insn's get serialized waiting for the carry bit. |
** Try to keep 4 registers with "live" values ahead of the ALU. |
*/ |
|
" ldd,ma 8(%1), %%r19\n" /* get 1st saddr word */ |
" ldd,ma 8(%2), %%r20\n" /* get 1st daddr word */ |
" add %8, %3, %3\n"/* add 16-bit proto + len */ |
" add %%r19, %0, %0\n" |
" ldd,ma 8(%1), %%r21\n" /* 2cd saddr */ |
" ldd,ma 8(%2), %%r22\n" /* 2cd daddr */ |
" add,dc %%r20, %0, %0\n" |
" add,dc %%r21, %0, %0\n" |
" add,dc %%r22, %0, %0\n" |
" add,dc %3, %0, %0\n" /* fold in proto+len | carry bit */ |
" extrd,u %0, 31, 32, %%r19\n" /* copy upper half down */ |
" depdi 0, 31, 32, %0\n" /* clear upper half */ |
" add %%r19, %0, %0\n" /* fold into 32-bits */ |
" addc 0, %0, %0\n" /* add carry */ |
|
#else |
|
/* |
** For PA 1.x, the insn order doesn't matter as much. |
** Insn stream is serialized on the carry bit here too. |
** result from the previous operation (eg r0 + x) |
*/ |
|
" ldw,ma 4(%1), %%r19\n" /* get 1st saddr word */ |
" ldw,ma 4(%2), %%r20\n" /* get 1st daddr word */ |
" add %8, %3, %3\n" /* add 16-bit proto + len */ |
" add %%r19, %0, %0\n" |
" ldw,ma 4(%1), %%r21\n" /* 2cd saddr */ |
" addc %%r20, %0, %0\n" |
" ldw,ma 4(%2), %%r22\n" /* 2cd daddr */ |
" addc %%r21, %0, %0\n" |
" ldw,ma 4(%1), %%r19\n" /* 3rd saddr */ |
" addc %%r22, %0, %0\n" |
" ldw,ma 4(%2), %%r20\n" /* 3rd daddr */ |
" addc %%r19, %0, %0\n" |
" ldw,ma 4(%1), %%r21\n" /* 4th saddr */ |
" addc %%r20, %0, %0\n" |
" ldw,ma 4(%2), %%r22\n" /* 4th daddr */ |
" addc %%r21, %0, %0\n" |
" addc %%r22, %0, %0\n" |
" addc %3, %0, %0\n" /* fold in proto+len, catch carry */ |
|
#endif |
: "=r" (sum), "=r" (saddr), "=r" (daddr), "=r" (len) |
: "0" (sum), "1" (saddr), "2" (daddr), "3" (len), "r" (proto) |
: "r19", "r20", "r21", "r22"); |
return csum_fold(sum); |
} |
|
/* |
* Copy and checksum to user |
*/ |
#define HAVE_CSUM_COPY_USER |
static __inline__ unsigned int csum_and_copy_to_user (const char *src, char *dst, |
int len, int sum, int *err_ptr) |
{ |
/* code stolen from include/asm-mips64 */ |
sum = csum_partial(src, len, sum); |
|
if (copy_to_user(dst, src, len)) { |
*err_ptr = -EFAULT; |
return -1; |
} |
|
return sum; |
} |
|
#endif |
|
/statfs.h
0,0 → 1,25
#ifndef _PARISC_STATFS_H |
#define _PARISC_STATFS_H |
|
#ifndef __KERNEL_STRICT_NAMES |
|
#include <linux/types.h> |
|
typedef __kernel_fsid_t fsid_t; |
|
#endif |
|
struct statfs { |
long f_type; |
long f_bsize; |
long f_blocks; |
long f_bfree; |
long f_bavail; |
long f_files; |
long f_ffree; |
__kernel_fsid_t f_fsid; |
long f_namelen; |
long f_spare[6]; |
}; |
|
#endif |
/shmparam.h
0,0 → 1,6
#ifndef _ASMPARISC_SHMPARAM_H |
#define _ASMPARISC_SHMPARAM_H |
|
#define SHMLBA 0x00400000 /* attach addr needs to be 4 Mb aligned */ |
|
#endif /* _ASMPARISC_SHMPARAM_H */ |
/atomic.h
0,0 → 1,196
#ifndef _ASM_PARISC_ATOMIC_H_ |
#define _ASM_PARISC_ATOMIC_H_ |
|
#include <linux/config.h> |
#include <asm/system.h> |
|
/* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>. */ |
|
/* |
* Atomic operations that C can't guarantee us. Useful for |
* resource counting etc.. |
* |
* And probably incredibly slow on parisc. OTOH, we don't |
* have to write any serious assembly. prumpf |
*/ |
#ifdef CONFIG_SMP |
#include <asm/spinlock_t.h> |
|
/* Use an array of spinlocks for our atomic_ts. |
** Hash function to index into a different SPINLOCK. |
** Since "a" is usually an address, ">>8" makes one spinlock per 64-bytes. |
*/ |
# define ATOMIC_HASH_SIZE 4 |
# define ATOMIC_HASH(a) (&__atomic_hash[(((unsigned long) a)>>8)&(ATOMIC_HASH_SIZE-1)]) |
|
extern spinlock_t __atomic_hash[ATOMIC_HASH_SIZE]; |
|
/* copied from <asm/spinlock.h> and modified. |
* No CONFIG_DEBUG_SPINLOCK support. |
* |
* XXX REVISIT these could be renamed and moved to spinlock_t.h as well |
*/ |
#define SPIN_LOCK(x) do { while(__ldcw(&(x)->lock) == 0); } while(0) |
#define SPIN_UNLOCK(x) do { (x)->lock = 1; } while(0) |
|
#else /* CONFIG_SMP */ |
|
#define ATOMIC_HASH_SIZE 1 |
#define ATOMIC_HASH(a) (0) |
|
#define SPIN_LOCK(x) (void)(x) |
#define SPIN_UNLOCK(x) do { } while(0) |
|
#endif /* CONFIG_SMP */ |
|
/* copied from <linux/spinlock.h> and modified */ |
#define SPIN_LOCK_IRQSAVE(lock, flags) do { \ |
local_irq_save(flags); SPIN_LOCK(lock); \ |
} while (0) |
|
#define SPIN_UNLOCK_IRQRESTORE(lock, flags) do { \ |
SPIN_UNLOCK(lock); local_irq_restore(flags); \ |
} while (0) |
|
/* Note that we need not lock read accesses - aligned word writes/reads |
* are atomic, so a reader never sees unconsistent values. |
* |
* Cache-line alignment would conflict with, for example, linux/module.h |
*/ |
|
typedef struct { |
volatile int counter; |
} atomic_t; |
|
|
/* This should get optimized out since it's never called. |
** Or get a link error if xchg is used "wrong". |
*/ |
extern void __xchg_called_with_bad_pointer(void); |
|
/* __xchg32/64 defined in arch/parisc/lib/bitops.c */ |
extern unsigned long __xchg8(char, char *); |
extern unsigned long __xchg32(int, int *); |
#ifdef __LP64__ |
extern unsigned long __xchg64(unsigned long, unsigned long *); |
#endif |
|
/* optimizer better get rid of switch since size is a constant */ |
static __inline__ unsigned long __xchg(unsigned long x, __volatile__ void * ptr, |
int size) |
{ |
|
switch(size) { |
#ifdef __LP64__ |
case 8: return __xchg64(x,(unsigned long *) ptr); |
#endif |
case 4: return __xchg32((int) x, (int *) ptr); |
case 1: return __xchg8((char) x, (char *) ptr); |
} |
__xchg_called_with_bad_pointer(); |
return x; |
} |
|
|
/* |
** REVISIT - Abandoned use of LDCW in xchg() for now: |
** o need to test sizeof(*ptr) to avoid clearing adjacent bytes |
** o and while we are at it, could 64-bit code use LDCD too? |
** |
** if (__builtin_constant_p(x) && (x == NULL)) |
** if (((unsigned long)p & 0xf) == 0) |
** return __ldcw(p); |
*/ |
#define xchg(ptr,x) \ |
((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) |
|
|
#define __HAVE_ARCH_CMPXCHG 1 |
|
/* bug catcher for when unsupported size is used - won't link */ |
extern void __cmpxchg_called_with_bad_pointer(void); |
|
/* __cmpxchg_u32/u64 defined in arch/parisc/lib/bitops.c */ |
extern unsigned long __cmpxchg_u32(volatile unsigned int *m, unsigned int old, unsigned int new_); |
extern unsigned long __cmpxchg_u64(volatile unsigned long *ptr, unsigned long old, unsigned long new_); |
|
/* don't worry...optimizer will get rid of most of this */ |
static __inline__ unsigned long |
__cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size) |
{ |
switch(size) { |
#ifdef __LP64__ |
case 8: return __cmpxchg_u64((unsigned long *)ptr, old, new_); |
#endif |
case 4: return __cmpxchg_u32((unsigned int *)ptr, (unsigned int) old, (unsigned int) new_); |
} |
__cmpxchg_called_with_bad_pointer(); |
return old; |
} |
|
#define cmpxchg(ptr,o,n) \ |
({ \ |
__typeof__(*(ptr)) _o_ = (o); \ |
__typeof__(*(ptr)) _n_ = (n); \ |
(__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ |
(unsigned long)_n_, sizeof(*(ptr))); \ |
}) |
|
|
|
/* It's possible to reduce all atomic operations to either |
* __atomic_add_return, __atomic_set and __atomic_ret (the latter |
* is there only for consistency). */ |
|
static __inline__ int __atomic_add_return(int i, atomic_t *v) |
{ |
int ret; |
unsigned long flags; |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(v), flags); |
|
ret = (v->counter += i); |
|
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(v), flags); |
return ret; |
} |
|
static __inline__ void __atomic_set(atomic_t *v, int i) |
{ |
unsigned long flags; |
SPIN_LOCK_IRQSAVE(ATOMIC_HASH(v), flags); |
|
v->counter = i; |
|
SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(v), flags); |
} |
|
static __inline__ int __atomic_read(atomic_t *v) |
{ |
return v->counter; |
} |
|
/* exported interface */ |
|
#define atomic_add(i,v) ((void)(__atomic_add_return( (i),(v)))) |
#define atomic_sub(i,v) ((void)(__atomic_add_return(-(i),(v)))) |
#define atomic_inc(v) ((void)(__atomic_add_return( 1,(v)))) |
#define atomic_dec(v) ((void)(__atomic_add_return( -1,(v)))) |
|
#define atomic_add_return(i,v) (__atomic_add_return( (i),(v))) |
#define atomic_sub_return(i,v) (__atomic_add_return(-(i),(v))) |
#define atomic_inc_return(v) (__atomic_add_return( 1,(v))) |
#define atomic_dec_return(v) (__atomic_add_return( -1,(v))) |
|
#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0) |
|
#define atomic_set(v,i) (__atomic_set((v),i)) |
#define atomic_read(v) (__atomic_read(v)) |
|
#define ATOMIC_INIT(i) { (i) } |
|
#define smp_mb__before_atomic_dec() smp_mb() |
#define smp_mb__after_atomic_dec() smp_mb() |
#define smp_mb__before_atomic_inc() smp_mb() |
#define smp_mb__after_atomic_inc() smp_mb() |
|
#endif |
/pgtable.h
0,0 → 1,453
#ifndef _PARISC_PGTABLE_H |
#define _PARISC_PGTABLE_H |
|
#include <asm/fixmap.h> |
|
#ifndef __ASSEMBLY__ |
/* |
* we simulate an x86-style page table for the linux mm code |
*/ |
|
#include <linux/spinlock.h> |
#include <asm/processor.h> |
#include <asm/cache.h> |
#include <asm/bitops.h> |
|
#define ARCH_STACK_GROWSUP |
|
/* |
* kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel |
* memory. For the return value to be meaningful, ADDR must be >= |
* PAGE_OFFSET. This operation can be relatively expensive (e.g., |
* require a hash-, or multi-level tree-lookup or something of that |
* sort) but it guarantees to return TRUE only if accessing the page |
* at that address does not cause an error. Note that there may be |
* addresses for which kern_addr_valid() returns FALSE even though an |
* access would not cause an error (e.g., this is typically true for |
* memory mapped I/O regions. |
* |
* XXX Need to implement this for parisc. |
*/ |
#define kern_addr_valid(addr) (1) |
|
/* Certain architectures need to do special things when PTEs |
* within a page table are directly modified. Thus, the following |
* hook is made available. |
*/ |
#define set_pte(pteptr, pteval) \ |
do{ \ |
*(pteptr) = (pteval); \ |
} while(0) |
|
#endif /* !__ASSEMBLY__ */ |
|
#define pte_ERROR(e) \ |
printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) |
#define pmd_ERROR(e) \ |
printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e)) |
#define pgd_ERROR(e) \ |
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) |
|
/* Note: If you change ISTACK_SIZE, you need to change the corresponding |
* values in vmlinux.lds and vmlinux64.lds (init_istack section). Also, |
* the "order" and size need to agree. |
*/ |
|
#define ISTACK_SIZE 32768 /* Interrupt Stack Size */ |
#define ISTACK_ORDER 3 |
|
/* |
* NOTE: Many of the below macros use PT_NLEVELS because |
* it is convenient that PT_NLEVELS == LOG2(pte size in bytes), |
* i.e. we use 3 level page tables when we use 8 byte pte's |
* (for 64 bit) and 2 level page tables when we use 4 byte pte's |
*/ |
|
#ifdef __LP64__ |
#define PT_NLEVELS 3 |
#define PT_INITIAL 4 /* Number of initial page tables */ |
#else |
#define PT_NLEVELS 2 |
#define PT_INITIAL 2 /* Number of initial page tables */ |
#endif |
|
#define MAX_ADDRBITS (PAGE_SHIFT + (PT_NLEVELS)*(PAGE_SHIFT - PT_NLEVELS)) |
#define MAX_ADDRESS (1UL << MAX_ADDRBITS) |
|
#define SPACEID_SHIFT (MAX_ADDRBITS - 32) |
|
/* Definitions for 1st level */ |
|
#define PGDIR_SHIFT (PAGE_SHIFT + (PT_NLEVELS - 1)*(PAGE_SHIFT - PT_NLEVELS)) |
#define PGDIR_SIZE (1UL << PGDIR_SHIFT) |
#define PGDIR_MASK (~(PGDIR_SIZE-1)) |
#define PTRS_PER_PGD (1UL << (PAGE_SHIFT - PT_NLEVELS)) |
#define USER_PTRS_PER_PGD PTRS_PER_PGD |
|
/* Definitions for 2nd level */ |
#define pgtable_cache_init() do { } while (0) |
|
#define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT - PT_NLEVELS)) |
#define PMD_SIZE (1UL << PMD_SHIFT) |
#define PMD_MASK (~(PMD_SIZE-1)) |
#if PT_NLEVELS == 3 |
#define PTRS_PER_PMD (1UL << (PAGE_SHIFT - PT_NLEVELS)) |
#else |
#define PTRS_PER_PMD 1 |
#endif |
|
/* Definitions for 3rd level */ |
|
#define PTRS_PER_PTE (1UL << (PAGE_SHIFT - PT_NLEVELS)) |
|
/* |
* pgd entries used up by user/kernel: |
*/ |
|
#define FIRST_USER_PGD_NR 0 |
|
#ifndef __ASSEMBLY__ |
extern void *vmalloc_start; |
#define PCXL_DMA_MAP_SIZE (8*1024*1024) |
#define VMALLOC_START ((unsigned long)vmalloc_start) |
#define VMALLOC_VMADDR(x) ((unsigned long)(x)) |
#define VMALLOC_END (FIXADDR_START) |
#endif |
|
/* NB: The tlb miss handlers make certain assumptions about the order */ |
/* of the following bits, so be careful (One example, bits 25-31 */ |
/* are moved together in one instruction). */ |
|
#define _PAGE_READ_BIT 31 /* (0x001) read access allowed */ |
#define _PAGE_WRITE_BIT 30 /* (0x002) write access allowed */ |
#define _PAGE_EXEC_BIT 29 /* (0x004) execute access allowed */ |
#define _PAGE_GATEWAY_BIT 28 /* (0x008) privilege promotion allowed */ |
#define _PAGE_DMB_BIT 27 /* (0x010) Data Memory Break enable (B bit) */ |
#define _PAGE_DIRTY_BIT 26 /* (0x020) Page Dirty (D bit) */ |
#define _PAGE_REFTRAP_BIT 25 /* (0x040) Page Ref. Trap enable (T bit) */ |
#define _PAGE_NO_CACHE_BIT 24 /* (0x080) Uncached Page (U bit) */ |
#define _PAGE_ACCESSED_BIT 23 /* (0x100) Software: Page Accessed */ |
#define _PAGE_PRESENT_BIT 22 /* (0x200) Software: translation valid */ |
#define _PAGE_FLUSH_BIT 21 /* (0x400) Software: translation valid */ |
/* for cache flushing only */ |
#define _PAGE_USER_BIT 20 /* (0x800) Software: User accessable page */ |
|
/* N.B. The bits are defined in terms of a 32 bit word above, so the */ |
/* following macro is ok for both 32 and 64 bit. */ |
|
#define xlate_pabit(x) (31 - x) |
|
#define _PAGE_READ (1 << xlate_pabit(_PAGE_READ_BIT)) |
#define _PAGE_WRITE (1 << xlate_pabit(_PAGE_WRITE_BIT)) |
#define _PAGE_RW (_PAGE_READ | _PAGE_WRITE) |
#define _PAGE_EXEC (1 << xlate_pabit(_PAGE_EXEC_BIT)) |
#define _PAGE_GATEWAY (1 << xlate_pabit(_PAGE_GATEWAY_BIT)) |
#define _PAGE_DMB (1 << xlate_pabit(_PAGE_DMB_BIT)) |
#define _PAGE_DIRTY (1 << xlate_pabit(_PAGE_DIRTY_BIT)) |
#define _PAGE_REFTRAP (1 << xlate_pabit(_PAGE_REFTRAP_BIT)) |
#define _PAGE_NO_CACHE (1 << xlate_pabit(_PAGE_NO_CACHE_BIT)) |
#define _PAGE_ACCESSED (1 << xlate_pabit(_PAGE_ACCESSED_BIT)) |
#define _PAGE_PRESENT (1 << xlate_pabit(_PAGE_PRESENT_BIT)) |
#define _PAGE_FLUSH (1 << xlate_pabit(_PAGE_FLUSH_BIT)) |
#define _PAGE_USER (1 << xlate_pabit(_PAGE_USER_BIT)) |
|
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | _PAGE_DIRTY | _PAGE_ACCESSED) |
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) |
#define _PAGE_KERNEL (_PAGE_PRESENT | _PAGE_EXEC | _PAGE_READ | _PAGE_WRITE | _PAGE_DIRTY | _PAGE_ACCESSED) |
|
#ifndef __ASSEMBLY__ |
|
#define PAGE_NONE __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED) |
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_ACCESSED) |
/* Others seem to make this executable, I don't know if that's correct |
or not. The stack is mapped this way though so this is necessary |
in the short term - dhd@linuxcare.com, 2000-08-08 */ |
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_ACCESSED) |
#define PAGE_WRITEONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_WRITE | _PAGE_ACCESSED) |
#define PAGE_EXECREAD __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_EXEC |_PAGE_ACCESSED) |
#define PAGE_COPY PAGE_EXECREAD |
#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_EXEC |_PAGE_ACCESSED) |
#define PAGE_KERNEL __pgprot(_PAGE_KERNEL) |
#define PAGE_KERNEL_RO __pgprot(_PAGE_PRESENT | _PAGE_EXEC | _PAGE_READ | _PAGE_DIRTY | _PAGE_ACCESSED) |
#define PAGE_KERNEL_UNC __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE) |
#define PAGE_GATEWAY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_GATEWAY| _PAGE_READ) |
#define PAGE_FLUSH __pgprot(_PAGE_FLUSH) |
|
|
/* |
* We could have an execute only page using "gateway - promote to priv |
* level 3", but that is kind of silly. So, the way things are defined |
* now, we must always have read permission for pages with execute |
* permission. For the fun of it we'll go ahead and support write only |
* pages. |
*/ |
|
/*xwr*/ |
#define __P000 PAGE_NONE |
#define __P001 PAGE_READONLY |
#define __P010 __P000 /* copy on write */ |
#define __P011 __P001 /* copy on write */ |
#define __P100 PAGE_EXECREAD |
#define __P101 PAGE_EXECREAD |
#define __P110 __P100 /* copy on write */ |
#define __P111 __P101 /* copy on write */ |
|
#define __S000 PAGE_NONE |
#define __S001 PAGE_READONLY |
#define __S010 PAGE_WRITEONLY |
#define __S011 PAGE_SHARED |
#define __S100 PAGE_EXECREAD |
#define __S101 PAGE_EXECREAD |
#define __S110 PAGE_RWX |
#define __S111 PAGE_RWX |
|
extern pgd_t swapper_pg_dir[]; /* declared in init_task.c */ |
|
/* initial page tables for 0-8MB for kernel */ |
|
extern unsigned long pg0[]; |
|
/* zero page used for uninitialized stuff */ |
|
extern unsigned long *empty_zero_page; |
|
/* |
* ZERO_PAGE is a global shared page that is always zero: used |
* for zero-mapped memory areas etc.. |
*/ |
|
#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) |
|
#define pte_none(x) ((pte_val(x) == 0) || (pte_val(x) & _PAGE_FLUSH)) |
#define pte_present(x) (pte_val(x) & _PAGE_PRESENT) |
#define pte_clear(xp) do { pte_val(*(xp)) = 0; } while (0) |
|
#define pmd_none(x) (!pmd_val(x)) |
#define pmd_bad(x) ((pmd_val(x) & ~PAGE_MASK) != _PAGE_TABLE) |
#define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) |
#define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0) |
|
|
|
#ifdef __LP64__ |
#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK)) |
|
/* For 64 bit we have three level tables */ |
|
#define pgd_none(x) (!pgd_val(x)) |
#define pgd_bad(x) ((pgd_val(x) & ~PAGE_MASK) != _PAGE_TABLE) |
#define pgd_present(x) (pgd_val(x) & _PAGE_PRESENT) |
#define pgd_clear(xp) do { pgd_val(*(xp)) = 0; } while (0) |
#else |
/* |
* The "pgd_xxx()" functions here are trivial for a folded two-level |
* setup: the pgd is never bad, and a pmd always exists (as it's folded |
* into the pgd entry) |
*/ |
extern inline int pgd_none(pgd_t pgd) { return 0; } |
extern inline int pgd_bad(pgd_t pgd) { return 0; } |
extern inline int pgd_present(pgd_t pgd) { return 1; } |
extern inline void pgd_clear(pgd_t * pgdp) { } |
#endif |
|
/* |
* The following only work if pte_present() is true. |
* Undefined behaviour if not.. |
*/ |
extern inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_READ; } |
extern inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
extern inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } |
|
extern inline pte_t pte_rdprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_READ; return pte; } |
extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; } |
extern inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; return pte; } |
extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_WRITE; return pte; } |
extern inline pte_t pte_mkread(pte_t pte) { pte_val(pte) |= _PAGE_READ; return pte; } |
extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } |
extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_WRITE; return pte; } |
|
/* |
* Conversion functions: convert a page and protection to a page entry, |
* and a page entry and page directory to the page they refer to. |
*/ |
#define __mk_pte(addr,pgprot) \ |
({ \ |
pte_t __pte; \ |
\ |
pte_val(__pte) = ((addr)+pgprot_val(pgprot)); \ |
\ |
__pte; \ |
}) |
|
/* |
* Change "struct page" to physical address. |
*/ |
#define page_to_phys(page) PAGE_TO_PA(page) |
|
#ifdef CONFIG_DISCONTIGMEM |
#define PAGE_TO_PA(page) \ |
((((page)-(page)->zone->zone_mem_map) << PAGE_SHIFT) \ |
+ ((page)->zone->zone_start_paddr)) |
#else |
#define PAGE_TO_PA(page) ((page - mem_map) << PAGE_SHIFT) |
#endif |
|
#define mk_pte(page, pgprot) \ |
({ \ |
pte_t __pte; \ |
\ |
pte_val(__pte) = ((unsigned long)(PAGE_TO_PA(page))) | \ |
pgprot_val(pgprot); \ |
\ |
__pte; \ |
}) |
|
/* This takes a physical page address that is used by the remapping functions */ |
#define mk_pte_phys(physpage, pgprot) \ |
({ pte_t __pte; pte_val(__pte) = physpage + pgprot_val(pgprot); __pte; }) |
|
extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
{ pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); return pte; } |
|
/* Permanent address of a page. On parisc we don't have highmem. */ |
|
#ifdef CONFIG_DISCONTIGMEM |
#define pte_page(x) (phys_to_page(pte_val(x))) |
#else |
#define pte_page(x) (mem_map+(pte_val(x) >> PAGE_SHIFT)) |
#endif |
|
|
#define pmd_page(pmd) ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) |
|
#define pgd_index(address) ((address) >> PGDIR_SHIFT) |
|
/* to find an entry in a page-table-directory */ |
#define pgd_offset(mm, address) \ |
((mm)->pgd + ((address) >> PGDIR_SHIFT)) |
|
/* to find an entry in a kernel page-table-directory */ |
#define pgd_offset_k(address) pgd_offset(&init_mm, address) |
|
/* Find an entry in the second-level page table.. */ |
|
#ifdef __LP64__ |
#define pmd_offset(dir,address) \ |
((pmd_t *) pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1))) |
#else |
#define pmd_offset(dir,addr) ((pmd_t *) dir) |
#endif |
|
/* Find an entry in the third-level page table.. */ |
#define pte_offset(pmd, address) \ |
((pte_t *) pmd_page(*(pmd)) + (((address)>>PAGE_SHIFT) & (PTRS_PER_PTE-1))) |
|
extern void paging_init (void); |
|
/* Used for deferring calls to flush_dcache_page() */ |
|
#define PG_dcache_dirty PG_arch_1 |
|
struct vm_area_struct; /* forward declaration (include/linux/mm.h) */ |
extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t); |
|
/* Encode and de-code a swap entry */ |
|
#define SWP_TYPE(x) ((x).val & 0x1f) |
#define SWP_OFFSET(x) ( (((x).val >> 5) & 0xf) | \ |
(((x).val >> 7) & ~0xf) ) |
#define SWP_ENTRY(type, offset) ((swp_entry_t) { (type) | \ |
((offset & 0xf) << 5) | \ |
((offset & ~0xf) << 7) }) |
#define pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) |
#define swp_entry_to_pte(x) ((pte_t) { (x).val }) |
|
static inline int ptep_test_and_clear_young(pte_t *ptep) |
{ |
#ifdef CONFIG_SMP |
return test_and_clear_bit(xlate_pabit(_PAGE_ACCESSED_BIT), ptep); |
#else |
pte_t pte = *ptep; |
if (!pte_young(pte)) |
return 0; |
set_pte(ptep, pte_mkold(pte)); |
return 1; |
#endif |
} |
|
static inline int ptep_test_and_clear_dirty(pte_t *ptep) |
{ |
#ifdef CONFIG_SMP |
return test_and_clear_bit(xlate_pabit(_PAGE_DIRTY_BIT), ptep); |
#else |
pte_t pte = *ptep; |
if (!pte_dirty(pte)) |
return 0; |
set_pte(ptep, pte_mkclean(pte)); |
return 1; |
#endif |
} |
|
#ifdef CONFIG_SMP |
extern spinlock_t pa_dbit_lock; |
#else |
static int pa_dbit_lock; /* dummy to keep the compilers happy */ |
#endif |
|
static inline pte_t ptep_get_and_clear(pte_t *ptep) |
{ |
pte_t old_pte; |
pte_t pte; |
|
spin_lock(&pa_dbit_lock); |
pte = old_pte = *ptep; |
pte_val(pte) &= ~_PAGE_PRESENT; |
pte_val(pte) |= _PAGE_FLUSH; |
set_pte(ptep,pte); |
spin_unlock(&pa_dbit_lock); |
|
return old_pte; |
} |
|
static inline void ptep_set_wrprotect(pte_t *ptep) |
{ |
#ifdef CONFIG_SMP |
unsigned long new, old; |
|
do { |
old = pte_val(*ptep); |
new = pte_val(pte_wrprotect(__pte (old))); |
} while (cmpxchg((unsigned long *) ptep, old, new) != old); |
#else |
pte_t old_pte = *ptep; |
set_pte(ptep, pte_wrprotect(old_pte)); |
#endif |
} |
|
static inline void ptep_mkdirty(pte_t *ptep) |
{ |
#ifdef CONFIG_SMP |
set_bit(xlate_pabit(_PAGE_DIRTY_BIT), ptep); |
#else |
pte_t old_pte = *ptep; |
set_pte(ptep, pte_mkdirty(old_pte)); |
#endif |
} |
|
#define pte_same(A,B) (pte_val(A) == pte_val(B)) |
|
|
#endif /* !__ASSEMBLY__ */ |
|
/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ |
#define PageSkip(page) (0) |
|
#define io_remap_page_range remap_page_range |
|
/* We provide our own get_unmapped_area to provide cache coherency */ |
|
#define HAVE_ARCH_UNMAPPED_AREA |
|
#endif /* _PARISC_PGTABLE_H */ |
/linux_logo.h
0,0 → 1,1438
/* linux_logo.h created with fblogo, 2002/12/21 04:44:04 |
* include/linux/linux_logo.h: This is a linux logo |
* to be displayed on boot. |
* |
* Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu) |
* Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) |
* |
* You can put anything here, but: |
* LINUX_LOGO_COLORS has to be less than 224 |
* Generated by fblogo version 0.5.0 |
* |
* |
* Remember to modify drivers/video/fbcon.c: |
* Change "#define LOGO_H 80" to "#define LOGO_H 80" |
* Change "#define LOGO_W 80" to "#define LOGO_W 80" |
* |
* You can put anything here, but: |
* LINUX_LOGO_COLORS has to be less than 224 |
* image size has to be 80x80 |
* values have to start from 0x20 |
* (i.e. RGB(linux_logo_red[0], |
* linux_logo_green[0], |
* linux_logo_blue[0]) is color 0x20) |
* 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 |
*/ |
|
#ifndef __HAVE_ARCH_LINUX_LOGO |
#define LINUX_LOGO_COLORS 223 |
#endif |
#ifdef INCLUDE_LINUX_LOGO_DATA |
#ifndef __HAVE_ARCH_LINUX_LOGO |
unsigned char linux_logo_red[] __initdata = { |
0x02, 0xFD, 0xF1, 0x02, 0xA2, 0x02, 0x76, 0xFE, |
0xB8, 0x32, 0x52, 0xCA, 0x66, 0x8E, 0x46, 0xFD, |
0x66, 0xB2, 0xB6, 0x3E, 0xA4, 0xFE, 0x21, 0xDB, |
0xEE, 0x2A, 0xCC, 0x9A, 0x1A, 0xFE, 0xFE, 0xA6, |
0xC2, 0xFE, 0x94, 0x12, 0xBA, 0xED, 0x8E, 0xFE, |
0xAE, 0xBC, 0xC2, 0xCE, 0xE2, 0x4A, 0x0E, 0x6F, |
0xBE, 0xA2, 0x02, 0x57, 0x78, 0xFE, 0xDA, 0xDA, |
0xFE, 0xEE, 0x8A, 0xF5, 0xB3, 0x0A, 0xCA, 0x77, |
0x52, 0xFE, 0x5A, 0x64, 0xFA, 0x96, 0xC2, 0x96, |
0xC2, 0x92, 0x4E, 0x52, 0xBE, 0xFE, 0x66, 0x8C, |
0xDA, 0xFE, 0xAA, 0x6E, 0xB6, 0x7A, 0xE2, 0x3F, |
0xA3, 0x06, 0xE6, 0xD6, 0xE6, 0x56, 0xF2, 0xB6, |
0x7E, 0xDD, 0xD6, 0xF9, 0x37, 0x26, 0xE7, 0xEC, |
0xBE, 0xDE, 0xA3, 0xFE, 0x92, 0xDE, 0x36, 0xC2, |
0x82, 0xEA, 0x26, 0xA7, 0x2D, 0xF2, 0xA6, 0x6A, |
0xDA, 0x2E, 0xE2, 0xFE, 0x69, 0xFE, 0x46, 0x9E, |
0x5E, 0xFE, 0x82, 0xFE, 0xFC, 0xAA, 0xB8, 0xFE, |
0xCE, 0xC6, 0x1D, 0x76, 0xF8, 0x92, 0xE2, 0xD6, |
0xFE, 0x9C, 0xCC, 0xB6, 0xE4, 0x0C, 0xE2, 0xC6, |
0xD2, 0x16, 0xD3, 0x9C, 0x59, 0x3A, 0xFE, 0x70, |
0xBB, 0xA6, 0xF6, 0xFA, 0x76, 0xB6, 0xAE, 0xB7, |
0xEE, 0x3E, 0x82, 0xCA, 0xBA, 0x17, 0xAB, 0xAF, |
0xCF, 0x86, 0x32, 0xB4, 0x2A, 0xFE, 0xEE, 0xE2, |
0x5A, 0xFE, 0x02, 0xFE, 0xEA, 0xFE, 0x77, 0x64, |
0xFE, 0xFD, 0xD5, 0xBF, 0x4E, 0xBB, 0xF8, 0x9B, |
0x78, 0x6E, 0xFA, 0xC6, 0xFE, 0xB2, 0x12, 0xF2, |
0xBE, 0x06, 0xAE, 0xC4, 0xEA, 0xAE, 0xFE, 0xD5, |
0x42, 0xBC, 0x86, 0xFE, 0x7A, 0xF0, 0xF1 |
}; |
|
unsigned char linux_logo_green[] __initdata = { |
0x02, 0xCF, 0xB7, 0x9A, 0x7A, 0x66, 0x4C, 0xCF, |
0xBA, 0x9A, 0x3A, 0x98, 0xCE, 0x66, 0x2E, 0xE0, |
0x9A, 0xB6, 0xB6, 0x27, 0x7C, 0xE2, 0x22, 0x9B, |
0xE6, 0x1E, 0x9A, 0xCE, 0x1A, 0xE6, 0xEA, 0x6E, |
0x86, 0xCE, 0x59, 0x12, 0x96, 0xEE, 0x5A, 0xD4, |
0x7E, 0x9A, 0xBA, 0xCE, 0xBE, 0x4A, 0x0E, 0x43, |
0xA7, 0x8A, 0x66, 0x3D, 0x4E, 0xEA, 0xDA, 0xAD, |
0xE6, 0xCA, 0x62, 0xF6, 0xA4, 0x0A, 0x82, 0x77, |
0x52, 0xE9, 0x34, 0x64, 0xC2, 0x7E, 0xB2, 0x96, |
0xC2, 0x62, 0x3A, 0x33, 0x91, 0xEC, 0x9A, 0x8C, |
0xB6, 0xE2, 0x70, 0x56, 0x76, 0x6A, 0xBE, 0x3E, |
0xA2, 0x06, 0xE6, 0xD6, 0xEA, 0x56, 0xC6, 0x9E, |
0x7E, 0x9A, 0xAA, 0xFA, 0x22, 0x26, 0xA6, 0xAE, |
0xC6, 0xB6, 0x8F, 0xDE, 0x7A, 0xDE, 0x36, 0x83, |
0x82, 0xBE, 0x16, 0x9B, 0x1A, 0xBE, 0xA6, 0x5C, |
0x9F, 0x2E, 0xAE, 0xD8, 0x6B, 0xBA, 0x46, 0x9E, |
0x5E, 0xC6, 0x72, 0xBE, 0xDA, 0x8E, 0xB0, 0xC2, |
0x89, 0x92, 0x1E, 0x6A, 0xB7, 0x92, 0xA2, 0xA2, |
0xFE, 0x65, 0xD0, 0xAA, 0xB0, 0x0E, 0xE2, 0xC6, |
0xD2, 0x16, 0x91, 0x6E, 0x3B, 0x3A, 0xCA, 0x70, |
0xBB, 0xAE, 0xBE, 0xD6, 0x5A, 0x8A, 0x86, 0xBA, |
0xC6, 0x42, 0x58, 0xCA, 0x7C, 0x0E, 0xAA, 0x7F, |
0x8F, 0x86, 0x32, 0x72, 0x2A, 0xC2, 0xA7, 0xA0, |
0x5A, 0xC6, 0x02, 0xFE, 0xEA, 0xEA, 0x7A, 0x3F, |
0xC6, 0xCA, 0xA3, 0xBF, 0x4E, 0x91, 0xB8, 0x99, |
0x70, 0x5E, 0xBE, 0x7E, 0xFE, 0xB1, 0x06, 0xB1, |
0xC2, 0x0A, 0xA2, 0x9D, 0xAA, 0x77, 0xC2, 0x96, |
0x42, 0xBE, 0x52, 0xE8, 0x7E, 0xAE, 0xF2 |
}; |
|
unsigned char linux_logo_blue[] __initdata = { |
0x02, 0x03, 0x07, 0x9A, 0x02, 0x66, 0x02, 0x0E, |
0xC3, 0x9A, 0x02, 0x02, 0xCE, 0x02, 0x02, 0x1C, |
0x9A, 0xBE, 0xB6, 0x02, 0x38, 0x2E, 0x23, 0x14, |
0x36, 0x02, 0x32, 0xCE, 0x1C, 0x46, 0x42, 0x0A, |
0x0A, 0x12, 0x03, 0x12, 0x4A, 0xEF, 0x05, 0x16, |
0x26, 0x52, 0xAE, 0xCE, 0x02, 0x4A, 0x0F, 0x03, |
0x6C, 0x56, 0x9A, 0x0D, 0x0C, 0xA2, 0xDB, 0x02, |
0x9A, 0x02, 0x12, 0xF8, 0x85, 0x0B, 0x02, 0x76, |
0x52, 0x07, 0x02, 0x66, 0x0D, 0x46, 0x92, 0x97, |
0xC3, 0x16, 0x1A, 0x07, 0x02, 0x0E, 0xCE, 0x8D, |
0x4E, 0x04, 0x04, 0x2A, 0x03, 0x52, 0x4E, 0x3F, |
0xA1, 0x07, 0xE7, 0xD7, 0xEB, 0x56, 0x02, 0x72, |
0x7F, 0x06, 0x1A, 0xFB, 0x03, 0x27, 0x07, 0x08, |
0xD6, 0x42, 0x6D, 0x07, 0x4E, 0xDF, 0x37, 0x06, |
0x84, 0x02, 0x02, 0x86, 0x02, 0x3A, 0xA7, 0x44, |
0x03, 0x2F, 0x38, 0x0E, 0x70, 0x07, 0x47, 0x9E, |
0x5F, 0x06, 0x56, 0x0B, 0x06, 0x32, 0x9E, 0x02, |
0x03, 0x36, 0x1F, 0x56, 0x03, 0x92, 0x10, 0x03, |
0xF2, 0x03, 0xDB, 0x92, 0x1C, 0x1A, 0xE2, 0xC8, |
0xD2, 0x17, 0x03, 0x02, 0x03, 0x3B, 0x0D, 0x70, |
0xBA, 0xBA, 0x0D, 0x03, 0x06, 0x16, 0x26, 0xBE, |
0x0E, 0x50, 0x02, 0xCA, 0x04, 0x02, 0xA7, 0x03, |
0x0C, 0x86, 0x33, 0x04, 0x2B, 0x09, 0x05, 0x06, |
0x5A, 0x0D, 0x0A, 0xFA, 0xEB, 0x2A, 0x82, 0x04, |
0x02, 0x02, 0x32, 0xBE, 0x4F, 0x35, 0x0C, 0x98, |
0x6C, 0x46, 0x0B, 0x02, 0xFE, 0xB1, 0x02, 0x07, |
0xD2, 0x18, 0x96, 0x48, 0x06, 0x04, 0x0E, 0x07, |
0x43, 0xC6, 0x02, 0x3A, 0x8C, 0x16, 0xF4 |
}; |
|
unsigned char linux_logo[] __initdata = { |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x79, |
0x79, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x79, 0xB9, 0x99, 0xBD, 0x9E, 0x60, |
0x60, 0xF8, 0x8E, 0x85, 0xB9, 0x79, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x79, 0xAA, 0x9E, 0xDE, 0x96, 0xE3, 0xB7, 0x4B, |
0x4B, 0x68, 0x32, 0x9F, 0x5F, 0x9E, 0xAA, 0x5D, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, |
0x8E, 0x80, 0xE3, 0xB6, 0xCB, 0x90, 0x80, 0x63, |
0x63, 0xDE, 0x78, 0xCB, 0xB6, 0xE3, 0xD1, 0x4D, |
0x3C, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4D, |
0x9F, 0x8D, 0x32, 0x77, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x77, 0x96, 0x7A, 0xE3, |
0x5F, 0x99, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xF8, 0x96, |
0x8D, 0xBF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, 0x68, |
0x7B, 0x6F, 0x8E, 0x5D, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x85, 0x6F, 0xB6, |
0xD8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x5D, 0x36, 0xB9, 0x20, 0x79, |
0x6F, 0x8D, 0x6F, 0xD4, 0x79, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x4E, 0x7D, 0xCB, 0xAD, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x3C, 0x63, 0xBF, 0xD4, 0x20, |
0x20, 0x78, 0xB8, 0x9C, 0xB9, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x36, 0xAD, 0xB6, 0x36, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xAA, 0x5F, 0x90, 0x9E, 0x3C, |
0x20, 0x5D, 0x4B, 0xED, 0x77, 0x79, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x79, 0x9E, 0xE3, 0x78, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xAA, 0xE4, 0x77, 0xAA, 0x43, |
0x20, 0x20, 0x7D, 0x8D, 0x5F, 0xB9, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x4E, 0x63, 0x56, 0x9E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x5D, 0x4E, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x79, 0xB7, 0xCE, 0x8E, 0x79, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xB9, 0x80, 0x7A, 0xB9, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xBF, 0x4B, 0x7D, 0x5D, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xAA, 0xAD, 0xB8, 0x79, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x85, 0xB6, 0x5F, 0x43, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20, |
0x20, 0x20, 0xB9, 0x3C, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x79, 0x8E, 0x79, 0x20, |
0x20, 0x20, 0x20, 0x43, 0xB6, 0x6F, 0x3C, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20, |
0x5D, 0xE4, 0x8E, 0x4E, 0x43, 0x20, 0x20, 0x20, |
0x20, 0x8E, 0x90, 0xCE, 0x90, 0x4E, 0xAA, 0x20, |
0x20, 0x20, 0x20, 0x20, 0xB7, 0xE7, 0x36, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20, |
0xD1, 0x8D, 0x7B, 0xD8, 0x20, 0x20, 0x20, 0x20, |
0x9E, 0x32, 0x56, 0x45, 0xFE, 0x6F, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0xCB, 0x96, 0xD4, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x85, |
0xDC, 0xEC, 0xEC, 0xEC, 0xAA, 0x20, 0x20, 0xDA, |
0x56, 0xEC, 0xEC, 0xB8, 0xEC, 0x83, 0x8E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x6F, 0xED, 0x8E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x9C, |
0x45, 0xAA, 0x9C, 0xEC, 0xDE, 0x20, 0x20, 0xAA, |
0xEC, 0x83, 0x79, 0xBD, 0xBF, 0xEC, 0x96, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x6F, 0x32, 0x8E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xAA, 0xAD, 0xB7, 0x20, 0x80, |
0x80, 0x20, 0xE4, 0x31, 0x67, 0xDA, 0x3C, 0xD4, |
0xEC, 0xDE, 0x20, 0xDA, 0x8E, 0xB6, 0x7A, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x6F, 0x32, 0x8E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x3C, 0xD1, 0xDC, 0xB9, 0x5F, |
0x90, 0x20, 0xF1, 0xFC, 0x7D, 0x39, 0x94, 0xCD, |
0x28, 0x63, 0x20, 0x20, 0x20, 0xB8, 0xDC, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x6F, 0xC0, 0xBD, 0x79, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x43, 0x5F, 0x7A, 0xB9, 0x9E, |
0x8D, 0x20, 0x20, 0x5A, 0x87, 0xE0, 0xC2, 0x2B, |
0x82, 0x51, 0x20, 0x20, 0xB5, 0xEC, 0xC7, 0x20, |
0x20, 0x20, 0x20, 0x20, 0xAD, 0x68, 0x9E, 0x79, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0xB9, 0x79, |
0x83, 0x93, 0xCC, 0xF4, 0xE0, 0xE1, 0x21, 0xC8, |
0x47, 0x9B, 0x57, 0xC4, 0xB8, 0xEC, 0x77, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x60, 0x4B, 0x60, 0x5D, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0xB9, 0x20, |
0x75, 0xD0, 0xF4, 0xA7, 0xE0, 0x21, 0xA4, 0xDD, |
0x3E, 0xDD, 0x61, 0x71, 0x21, 0xB4, 0x2E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x60, 0x7B, 0xA0, 0x5D, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0x85, 0xCD, |
0xCC, 0x81, 0xAC, 0xE0, 0xE1, 0xC3, 0x8B, 0x3D, |
0x3E, 0x61, 0x61, 0x6D, 0x71, 0x47, 0xAF, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x8E, 0xB6, 0x5F, 0xB9, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x5D, 0xA0, 0x7B, 0x7D, 0xDF, |
0xA8, 0xD6, 0xA3, 0xE0, 0x21, 0xA4, 0x35, 0xFB, |
0x61, 0x61, 0x61, 0x4C, 0x2B, 0x86, 0xCF, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x5D, 0x8D, 0x78, 0x99, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x5D, 0x60, 0xB8, 0x7D, 0x39, |
0xF5, 0xAC, 0xA7, 0xE1, 0x21, 0x8B, 0x35, 0x71, |
0x8B, 0x59, 0x6C, 0xD0, 0xD7, 0xD6, 0x5A, 0x20, |
0x20, 0xB9, 0x20, 0x20, 0x20, 0x90, 0xCB, 0x60, |
0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x5D, 0x60, 0xB8, 0x7D, 0x20, |
0xBC, 0xBB, 0x22, 0x21, 0x2F, 0x8B, 0xC3, 0x57, |
0xCF, 0x3F, 0xBA, 0xD7, 0x81, 0x3A, 0x77, 0x20, |
0x20, 0xA0, 0x63, 0x36, 0x20, 0xD2, 0x7A, 0x6F, |
0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x4E, 0xA0, 0x7B, 0x7D, 0x20, |
0xDE, 0x51, 0x46, 0xF5, 0x6C, 0xCF, 0x72, 0xCC, |
0x5E, 0xA8, 0x5E, 0xE5, 0x4A, 0xB2, 0xED, 0x20, |
0x20, 0x43, 0x6F, 0x90, 0x4E, 0x20, 0xED, 0xB7, |
0x7D, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x36, 0xD1, 0x7A, 0x8E, 0x20, |
0xAD, 0xCB, 0x34, 0xB1, 0xF7, 0xBA, 0xA8, 0xEB, |
0xD3, 0x74, 0x7F, 0xF9, 0xB2, 0x7A, 0x7B, 0x36, |
0x20, 0x20, 0xE4, 0xA0, 0x79, 0x20, 0xAA, 0xB6, |
0x67, 0xD4, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x4E, 0x60, 0x68, 0xC0, 0x79, 0x20, |
0x6F, 0xB2, 0x68, 0x8A, 0x42, 0x42, 0x42, 0x42, |
0x34, 0xA6, 0x28, 0xB2, 0xEC, 0xEC, 0xEC, 0x9F, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, |
0x4B, 0x63, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x79, 0x8E, 0x9F, 0xB6, 0xD2, 0x20, 0x20, |
0xDC, 0x7C, 0xB7, 0xF0, 0x28, 0xF2, 0xF2, 0xED, |
0xC7, 0xF9, 0xB2, 0x5B, 0xEC, 0xEC, 0xEC, 0xEC, |
0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xAA, |
0x56, 0xCE, 0xBD, 0x79, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x79, 0x85, 0xD1, 0x8D, 0xE8, 0x20, 0x20, 0x67, |
0xEC, 0xEC, 0xB8, 0xF9, 0xF9, 0x28, 0xC7, 0xC7, |
0x68, 0x8D, 0x83, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0x68, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x63, 0x8D, 0xDE, 0xAA, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x3C, 0xBF, 0x4B, 0xCE, 0x79, 0x20, 0x99, 0xEC, |
0xEC, 0xEC, 0xFE, 0xF9, 0xC0, 0xC7, 0xC7, 0x4B, |
0xFE, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0x99, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x79, 0x68, 0x68, 0xD8, 0x43, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, |
0x7D, 0xE3, 0x4B, 0x3C, 0x20, 0x20, 0x4B, 0xEC, |
0xEC, 0xEC, 0xEC, 0x5B, 0x56, 0x56, 0xDC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xCE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x99, 0xB6, 0xED, 0x4D, 0x4E, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x9E, |
0xCE, 0xB6, 0x99, 0x20, 0x20, 0x4D, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0x83, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x77, 0xDC, 0x78, 0xF8, 0x4E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x8E, 0xE7, |
0x7A, 0x60, 0x20, 0x20, 0x20, 0x68, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xBF, 0x7A, 0xE7, 0xBD, 0x79, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0xAA, 0x80, 0x8D, |
0xBF, 0x20, 0x20, 0x20, 0x4E, 0x56, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0x83, 0x83, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xDB, 0xEC, 0xD8, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0xBF, 0x8D, 0xD1, 0x85, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x5D, 0x4D, 0xE3, 0x32, |
0x79, 0x20, 0x20, 0x20, 0x99, 0x32, 0xDC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xDC, 0x8D, 0x8D, 0x45, 0x83, |
0x83, 0x83, 0x83, 0x7A, 0x8D, 0x56, 0x7B, 0xB8, |
0xB8, 0x8D, 0x78, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x79, 0x78, 0xCB, 0xD8, |
0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0xAA, 0xD1, 0x7A, 0xD2, |
0x20, 0x20, 0x20, 0x20, 0xE4, 0xED, 0x7B, 0xFE, |
0xEC, 0xEC, 0xEC, 0xDB, 0xB6, 0x5B, 0xEC, 0xEC, |
0xEC, 0xEC, 0xDB, 0xFE, 0x8D, 0x4B, 0xB7, 0x68, |
0x68, 0xB7, 0xDC, 0x5F, 0x20, 0x20, 0xAA, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x8D, 0x67, |
0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x79, 0xBD, 0xED, 0xCE, 0x20, |
0x20, 0x20, 0x20, 0x79, 0x67, 0xDC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xDB, 0x45, 0xEC, 0xDB, 0xDB, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x45, |
0x8D, 0x4B, 0xB8, 0x83, 0x99, 0x20, 0x20, 0x85, |
0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0xB7, |
0x60, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x5D, 0x7D, 0xB8, 0xBF, 0x20, |
0x20, 0x43, 0x20, 0xBF, 0xFE, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xDB, 0xDB, 0xDB, 0xDB, |
0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xDC, 0xB6, 0x7B, 0x20, 0x20, 0x20, |
0xD4, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x99, 0x7A, |
0xD1, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x3C, 0x80, 0x7A, 0xD2, 0x20, |
0x36, 0x20, 0x4E, 0x68, 0xEC, 0xEC, 0x5B, 0xEC, |
0xEC, 0x7C, 0x4B, 0x4B, 0x4B, 0x4B, 0x3B, 0x3B, |
0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x30, 0x30, 0xC1, |
0xB6, 0xEC, 0x5B, 0x5B, 0x5B, 0x9E, 0x20, 0x20, |
0x20, 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0xED, |
0xED, 0xBD, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0xD2, 0x96, 0xB8, 0x79, 0x79, |
0x4E, 0x20, 0xD1, 0x45, 0x83, 0xEC, 0xEC, 0xEC, |
0xEC, 0x30, 0x25, 0x52, 0x25, 0x25, 0x25, 0x25, |
0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x29, |
0xDC, 0xEC, 0xEC, 0xEC, 0x83, 0xB7, 0x20, 0x43, |
0xD2, 0xB9, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x9C, |
0x7B, 0x63, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x5D, 0x7D, 0x4B, 0x80, 0x20, 0x85, |
0x20, 0x79, 0x7A, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0x30, 0x25, 0x25, 0x23, 0x29, 0x2C, 0x3B, |
0x4B, 0x7C, 0x4B, 0x3B, 0x30, 0x52, 0x25, 0x29, |
0x5B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x4E, 0xAA, |
0xD2, 0x5D, 0xD4, 0x20, 0x20, 0x20, 0x20, 0x5D, |
0xB6, 0x67, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0xAA, 0xD1, 0x7A, 0x99, 0x20, 0xB9, |
0x20, 0xE4, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0x29, 0x29, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x3B, 0x52, 0x23, |
0xFE, 0xEC, 0x83, 0xEC, 0xEC, 0xEC, 0x4D, 0x20, |
0x20, 0x20, 0x5D, 0x85, 0x20, 0x20, 0x20, 0x20, |
0x96, 0xE3, 0xF8, 0x79, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x79, 0xF8, 0x32, 0x32, 0x20, 0xAA, 0x20, |
0x20, 0xCB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, |
0x30, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x29, 0x25, |
0x4B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x6F, 0x20, |
0x20, 0x20, 0x20, 0x99, 0x20, 0x20, 0x20, 0x20, |
0xD8, 0x7B, 0x63, 0x4E, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x3C, 0xDE, 0x8D, 0xE4, 0x20, 0x36, 0x20, |
0x36, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, |
0x4B, 0xEC, 0xEC, 0xEC, 0x7C, 0x3B, 0x30, 0x29, |
0x29, 0x29, 0x29, 0x3B, 0x7C, 0xEC, 0x29, 0x25, |
0x3B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE3, 0x20, |
0x20, 0x20, 0x20, 0xD2, 0x20, 0x20, 0x20, 0x20, |
0x3C, 0x7A, 0x80, 0xB9, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x5D, 0x4D, 0xC0, 0x68, 0x79, 0x20, 0x5D, 0x20, |
0x90, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x3B, 0x7C, |
0xEC, 0xEC, 0x3B, 0x29, 0x52, 0x52, 0x29, 0x29, |
0x29, 0x29, 0x25, 0x25, 0x29, 0x4B, 0x29, 0x25, |
0x2C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xB6, 0x20, |
0x20, 0x20, 0x20, 0xD4, 0x20, 0x20, 0x20, 0x20, |
0x79, 0x7B, 0x67, 0x36, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x85, 0x6F, 0x7A, 0x77, 0x20, 0xB9, 0x20, 0x20, |
0xB8, 0xEC, 0xEC, 0xEC, 0xEC, 0x4B, 0xEC, 0xEC, |
0x3B, 0x29, 0x29, 0x6E, 0x4B, 0x7C, 0xEC, 0xEC, |
0xEC, 0x7C, 0x4B, 0x30, 0x25, 0x52, 0x52, 0x25, |
0x30, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x5B, 0x20, |
0x20, 0x20, 0x20, 0x36, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x68, 0xCE, 0x99, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, |
0xD8, 0xCB, 0x67, 0x20, 0x20, 0xAA, 0x20, 0x20, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, |
0x29, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0x6E, 0x25, 0x52, 0x25, |
0x29, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, |
0x20, 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, |
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xAA, |
0x6F, 0x8D, 0x3C, 0x20, 0x20, 0x36, 0x20, 0xB5, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, 0x3B, |
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0x7C, 0x7C, |
0x7C, 0xEC, 0xEC, 0xEC, 0x7C, 0x52, 0x52, 0x25, |
0x29, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, |
0x20, 0x20, 0x79, 0x43, 0x20, 0x20, 0x20, 0x20, |
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, |
0xCE, 0x68, 0x20, 0x20, 0x20, 0xBD, 0xF1, 0x36, |
0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x6E, 0x7C, 0xEC, |
0xEC, 0xEC, 0x3B, 0x6E, 0x29, 0x29, 0x52, 0x52, |
0x23, 0x29, 0x3B, 0xEC, 0x7C, 0x23, 0x52, 0x52, |
0x23, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, |
0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xBD, |
0xC0, 0xD1, 0x20, 0x20, 0x20, 0x36, 0x3C, 0x8E, |
0xEC, 0xEC, 0xEC, 0xEC, 0x4B, 0xEC, 0xEC, 0xEC, |
0x3B, 0x29, 0x52, 0x29, 0x29, 0x30, 0x30, 0x30, |
0x29, 0x25, 0x25, 0x29, 0x3B, 0x52, 0x52, 0x52, |
0x52, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20, |
0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0xBD, |
0xC0, 0xD1, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x8E, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x3B, 0x30, |
0x30, 0x3B, 0x4B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0x4B, 0x29, 0x25, 0x52, 0x52, 0x52, 0x52, |
0x52, 0x3B, 0xEC, 0xEC, 0xEC, 0xEC, 0x45, 0x20, |
0x20, 0x3C, 0x4E, 0x4E, 0xB5, 0x20, 0x20, 0x20, |
0x20, 0x78, 0x32, 0x8E, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x8E, |
0x32, 0x68, 0xEE, 0xCA, 0x24, 0x84, 0x20, 0xC9, |
0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, 0x30, 0x7C, |
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0x29, 0x25, 0x25, 0x25, 0x25, |
0x25, 0x2C, 0xEC, 0xEC, 0xEC, 0xEC, 0xF9, 0x20, |
0x79, 0x20, 0x20, 0x20, 0xDA, 0xAA, 0xF8, 0xB9, |
0x20, 0xCB, 0x78, 0xD4, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x79, 0x5D, 0x5D, 0x43, 0x4D, |
0x68, 0x8D, 0xAE, 0x47, 0x21, 0xE1, 0x53, 0x20, |
0x90, 0xEC, 0xEC, 0x7C, 0x30, 0x4B, 0xEC, 0xEC, |
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0x4B, 0x30, 0x30, 0x30, 0x29, |
0x29, 0x30, 0xEC, 0xB0, 0x58, 0x55, 0x65, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x85, 0xC9, |
0x5D, 0xFE, 0x9F, 0xD4, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x5D, 0xAA, 0x77, 0x7D, 0xA0, 0x63, 0x9F, |
0x7A, 0x44, 0xAC, 0xBE, 0x21, 0x21, 0xE0, 0xBC, |
0x20, 0x9C, 0xEC, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0x7C, 0x7C, 0xEC, 0x95, 0x21, 0x71, 0xC3, 0xCD, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x4E, |
0xA5, 0x56, 0x68, 0xE4, 0x5D, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x5D, 0xBD, 0xD1, 0xC0, 0xB8, 0x7B, 0x56, 0xDC, |
0xA6, 0x98, 0x9D, 0xBE, 0x21, 0xE1, 0xE1, 0xC2, |
0x92, 0x20, 0xC9, 0x5B, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0x7A, 0xFE, 0xEC, 0xEC, 0xDB, 0xDB, |
0xDB, 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xB4, 0x9D, 0x21, 0x91, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDA, 0x53, |
0x6D, 0x38, 0x7A, 0x90, 0x3C, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0xD4, 0xAD, 0xB6, 0xA6, 0x7F, 0xF3, 0x44, 0xE5, |
0xF7, 0x87, 0xF6, 0xBE, 0xBE, 0xE1, 0xE0, 0xE0, |
0xAF, 0x20, 0x20, 0xB5, 0x7B, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, |
0xDB, 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0x9A, 0x9D, 0xA7, 0x98, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x22, |
0x8B, 0x8B, 0x68, 0xE7, 0x36, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, |
0x7D, 0x4B, 0x5C, 0xF4, 0x9D, 0xE6, 0xEF, 0x87, |
0xE6, 0xA3, 0xD9, 0xD9, 0xD9, 0xA1, 0xA1, 0xE0, |
0x21, 0x2D, 0x20, 0x20, 0x20, 0x96, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, |
0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xFE, 0xB2, 0xE2, 0xAC, 0x9D, 0x81, 0xDF, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xCF, 0xBE, |
0x47, 0x47, 0x68, 0x96, 0xD4, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, |
0x5F, 0x7A, 0xE2, 0x9D, 0xBE, 0xBE, 0xD9, 0xF6, |
0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xA1, 0xD5, |
0xE0, 0x7E, 0x92, 0x20, 0x20, 0x20, 0x63, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, |
0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xB2, 0xF0, 0xE2, 0xEF, 0xEF, 0xD7, 0xCC, |
0x26, 0x84, 0x94, 0x84, 0x26, 0x40, 0xEF, 0xD9, |
0x41, 0x41, 0xE3, 0xB7, 0x7D, 0x43, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, |
0xDE, 0x7A, 0x37, 0xA3, 0xBE, 0x41, 0xBE, 0xBE, |
0xD9, 0xD9, 0xF6, 0x64, 0x64, 0xD5, 0xD5, 0xA1, |
0xA1, 0x21, 0x6C, 0x20, 0x20, 0x20, 0x20, 0xD2, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB, |
0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xB2, 0x88, 0x3A, 0xF4, 0xAC, 0xF4, 0xBA, |
0xA8, 0x8F, 0x8F, 0x40, 0xBA, 0xF4, 0xD9, 0x41, |
0x41, 0x41, 0x89, 0x8D, 0x96, 0x9E, 0x4E, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, |
0x9C, 0x8D, 0xF3, 0xAC, 0xD9, 0x41, 0xBE, 0xD9, |
0xF6, 0x64, 0x64, 0x64, 0x64, 0x64, 0xD5, 0xD5, |
0xA1, 0xA1, 0x21, 0x2A, 0x20, 0x20, 0x20, 0x20, |
0x7D, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0x7B, 0x88, 0xE5, 0xD7, 0x22, 0x22, 0x86, |
0x98, 0x81, 0x81, 0x98, 0x87, 0xEA, 0xBE, 0xBE, |
0x41, 0xBE, 0xBE, 0x50, 0x7A, 0x78, 0x4D, 0xB9, |
0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, |
0xD8, 0x7B, 0x49, 0xFD, 0xF6, 0xBE, 0xD9, 0xD9, |
0x64, 0x64, 0xC2, 0xC2, 0xC2, 0xEA, 0x64, 0xD5, |
0xD9, 0xA1, 0xE1, 0x57, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x83, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0x7C, 0x88, 0xC6, 0x81, 0xAC, 0xEA, 0x22, |
0x87, 0x87, 0xF4, 0x87, 0x22, 0xF6, 0xD9, 0xD9, |
0xBE, 0xBE, 0xBE, 0xD9, 0x50, 0xDC, 0x32, 0xBF, |
0xD2, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, |
0x4D, 0xCB, 0x5C, 0x86, 0xA3, 0xBE, 0xD9, 0xF6, |
0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64, 0x64, |
0xD5, 0xD9, 0xA1, 0x21, 0xBB, 0x20, 0x20, 0x20, |
0x20, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xFE, 0x9C, 0x46, 0x81, 0x22, 0xD5, 0xA3, |
0x9D, 0x22, 0x22, 0xE6, 0xEA, 0xF6, 0xD9, 0xD9, |
0xD9, 0xBE, 0xBE, 0x41, 0x41, 0x70, 0x7B, 0x7B, |
0x6F, 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, |
0xF8, 0x68, 0xF2, 0xAE, 0xEA, 0xD9, 0xD9, 0x64, |
0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xEA, 0x64, |
0xD5, 0xD5, 0xA1, 0xE1, 0xE1, 0x33, 0x20, 0xF1, |
0x31, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xFC, 0x20, 0x46, 0x98, 0xAC, 0xD5, 0xD9, |
0xD9, 0xD5, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9, |
0xD9, 0xBE, 0xBE, 0x41, 0x47, 0x9B, 0x41, 0x66, |
0xB7, 0x4D, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, |
0xE4, 0xCB, 0x5C, 0xAE, 0xEA, 0xD9, 0xD9, 0x64, |
0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64, |
0x64, 0xD5, 0xA1, 0xD5, 0x21, 0xAF, 0xCE, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0x63, 0x20, 0x20, 0xB1, 0xD7, 0xE6, 0xD5, 0xD9, |
0xD5, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0xF6, |
0xD9, 0xBE, 0xBE, 0x41, 0x47, 0x9B, 0x9B, 0x76, |
0x7B, 0xD8, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, |
0xBF, 0x8D, 0x44, 0xAE, 0xF6, 0xD9, 0xD9, 0xF6, |
0x64, 0xEA, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64, |
0x64, 0xD5, 0xD5, 0xD5, 0xE0, 0x7E, 0xC5, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFE, 0x99, |
0x20, 0x20, 0x20, 0xB1, 0xD7, 0x9D, 0xD5, 0xD9, |
0xD5, 0x64, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9, |
0xD9, 0xBE, 0x41, 0x41, 0x47, 0x41, 0xD9, 0x66, |
0x4B, 0x60, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD4, |
0x9F, 0xB6, 0xBA, 0x87, 0xD9, 0xBE, 0xD9, 0xD9, |
0xF6, 0x64, 0x64, 0x64, 0x64, 0xEA, 0x64, 0x64, |
0x64, 0xD5, 0xD5, 0xD5, 0xD5, 0x7E, 0xAF, 0x8C, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x90, 0x20, 0x20, |
0x20, 0x20, 0xEE, 0xB1, 0x86, 0xEA, 0xD9, 0xD9, |
0xD5, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9, 0xD9, |
0xBE, 0xBE, 0x41, 0x41, 0xBE, 0xE6, 0x9A, 0x8D, |
0x9F, 0xD2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x9E, |
0xB7, 0xB3, 0xD7, 0xD5, 0x41, 0xBE, 0xBE, 0xD9, |
0xD9, 0xD9, 0xF6, 0x64, 0x64, 0x64, 0x64, 0x64, |
0x64, 0xD5, 0xD9, 0xA1, 0xA1, 0x22, 0x86, 0x46, |
0x77, 0x7B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, |
0xEC, 0xEC, 0x7A, 0xD1, 0x79, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x92, 0x3F, 0x86, 0xEA, 0xD9, 0xD9, |
0xD9, 0xF6, 0xF6, 0xF6, 0xD9, 0xD9, 0xD9, 0xBE, |
0xBE, 0xBE, 0xF6, 0xE6, 0xFD, 0x5C, 0xDC, 0xED, |
0x60, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xD8, |
0x7B, 0xF3, 0x86, 0xA3, 0xBE, 0xBE, 0xBE, 0xD9, |
0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, |
0xD9, 0xD5, 0xD9, 0xD9, 0xA1, 0x9D, 0x86, 0x72, |
0x94, 0x20, 0xB5, 0xE4, 0x5F, 0x80, 0xBF, 0xA0, |
0x8E, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x84, 0x72, 0x86, 0xA3, 0xBE, 0xBE, |
0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xF6, 0xD9, |
0xF6, 0xFD, 0x37, 0x5C, 0x7B, 0xB8, 0x67, 0x4D, |
0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xD8, |
0xB8, 0xF3, 0x81, 0xF4, 0xAC, 0xE6, 0xEA, 0xEA, |
0xA3, 0xF6, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, |
0xD9, 0xD9, 0xBE, 0xBE, 0xBE, 0xEA, 0xD7, 0x72, |
0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x6B, 0x74, 0xAE, 0xEA, 0xBE, 0xBE, |
0xBE, 0xBE, 0xD9, 0xD9, 0xD9, 0xEA, 0xE6, 0x87, |
0xF7, 0x93, 0xB6, 0xB8, 0x78, 0x63, 0x99, 0x5D, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0xF8, |
0xC0, 0xCB, 0xA9, 0x8F, 0xA8, 0xD0, 0xF7, 0x81, |
0xAE, 0x86, 0x87, 0x22, 0xE6, 0xEA, 0xD9, 0xD9, |
0xBE, 0xBE, 0xBE, 0xBE, 0xD9, 0xEF, 0xD0, 0xB1, |
0xDF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x6B, 0x72, 0xF7, 0xEF, 0xD9, 0xD9, |
0xBE, 0xD9, 0xD9, 0xF6, 0x22, 0x86, 0x81, 0xE5, |
0x4B, 0x56, 0x78, 0x63, 0x99, 0x43, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, |
0x9C, 0xC0, 0xB6, 0xB6, 0x32, 0x8A, 0x48, 0xD3, |
0xCC, 0xCC, 0x8F, 0x40, 0xD0, 0x81, 0xF4, 0x22, |
0xA3, 0xF6, 0xD9, 0xF6, 0xAC, 0x81, 0x74, 0x46, |
0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x2E, 0xB1, 0x40, 0xAE, 0xAC, 0xF6, |
0xF6, 0xF6, 0xAC, 0xF4, 0x81, 0xCC, 0x8A, 0xDC, |
0xC0, 0x5F, 0x8E, 0x4E, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, |
0x3C, 0x4D, 0xBF, 0x67, 0x32, 0xB8, 0x7A, 0xCB, |
0xCE, 0x8C, 0x69, 0x46, 0xB1, 0x3F, 0xCC, 0xA8, |
0xBA, 0x98, 0x86, 0xAE, 0xBA, 0x74, 0x42, 0x4F, |
0x84, 0xD2, 0x32, 0x32, 0xCB, 0x45, 0xDC, 0xDC, |
0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0x56, 0x32, |
0xED, 0x80, 0x6A, 0xCA, 0x74, 0xA8, 0x81, 0x86, |
0x86, 0xAE, 0xBA, 0x40, 0x3F, 0xF2, 0xB6, 0x78, |
0xE4, 0x3C, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x79, 0x43, 0x36, 0xBD, 0xD8, 0x90, 0x78, |
0x68, 0x56, 0xDC, 0xCB, 0x93, 0xA2, 0x26, 0x46, |
0xB1, 0x3F, 0x72, 0x72, 0xB1, 0xFA, 0x4F, 0xBC, |
0xAD, 0x56, 0x4B, 0xCE, 0xE7, 0x6F, 0x90, 0x80, |
0x80, 0x80, 0x80, 0x80, 0x80, 0xD1, 0x67, 0x96, |
0xE3, 0xDC, 0x90, 0xDF, 0xB1, 0x74, 0xCC, 0x8F, |
0x8F, 0xCC, 0x72, 0x46, 0xCE, 0x56, 0xAD, 0x77, |
0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x79, 0x5D, 0x3C, 0xD4, |
0xF8, 0x63, 0xD1, 0x96, 0x68, 0x8D, 0x7A, 0xE7, |
0x73, 0x4F, 0x4F, 0x26, 0x4F, 0xDF, 0x6B, 0x32, |
0x56, 0x9F, 0xA0, 0xD2, 0x36, 0x3C, 0xB9, 0xB9, |
0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x3C, 0x36, 0xD4, |
0xE4, 0x96, 0xB6, 0xE8, 0xBC, 0xFA, 0x42, 0xB1, |
0xB1, 0x46, 0x54, 0xCE, 0x56, 0xD1, 0xD2, 0x5D, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x79, 0x4E, 0x3C, 0x99, 0x9E, 0xBF, 0xE7, 0xB7, |
0x7A, 0xCB, 0x6F, 0xE9, 0xE9, 0xE7, 0x56, 0xCB, |
0x80, 0xD2, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x4E, 0x4D, 0x78, 0x8D, 0xE3, 0x5F, 0x97, 0xE9, |
0xAB, 0x67, 0xB6, 0xCB, 0x90, 0x99, 0x79, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x79, 0x43, 0xD4, 0xE4, |
0x80, 0xCE, 0xB7, 0x7B, 0x7B, 0x68, 0xE7, 0x63, |
0x36, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x4E, 0xBD, 0x80, 0xED, 0x4B, 0x7B, 0x7B, |
0xB8, 0x68, 0x67, 0xD8, 0x85, 0x79, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, |
0x3C, 0x99, 0x4D, 0xD8, 0xD8, 0x9E, 0x85, 0x4E, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x79, 0x3C, 0x8E, 0x60, 0xD8, 0xA0, |
0x7D, 0xF8, 0x85, 0x4E, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, |
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 |
}; |
|
#endif /* !__HAVE_ARCH_LINUX_LOGO */ |
|
#ifndef __HAVE_ARCH_LINUX_LOGOBW |
|
unsigned char linux_logo_bw[] __initdata = { |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xcf, 0xf3, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfd, 0xff, 0xf3, 0xdf, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x9f, 0x87, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x0f, 0x03, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x67, 0x33, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xe7, 0x79, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xf7, 0x79, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xff, 0xf9, 0xf7, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x60, 0x3b, 0xf7, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x89, 0x07, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x00, 0x03, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x00, 0x0d, 0xfb, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x80, 0x33, 0xfd, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xc0, 0xc3, 0xfd, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0xff, 0x0d, 0xdd, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xfb, 0x40, 0x31, 0xee, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf7, 0x20, 0xc1, 0xee, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf7, 0x1f, 0x00, 0xff, 0x7f, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xee, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xde, 0x00, 0x00, 0x7f, 0xdf, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xbc, 0x00, 0x00, 0x3f, 0xef, 0xff, 0xff, |
0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x3f, 0xf7, 0xff, 0xff, |
0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x1f, 0xf7, 0xff, 0xff, |
0xff, 0xff, 0xfe, 0xff, 0x1c, 0x07, 0xdf, 0xfb, 0xff, 0xff, |
0xff, 0xff, 0xfd, 0xfc, 0x08, 0x0f, 0xef, 0xfd, 0xff, 0xff, |
0xff, 0xff, 0xfd, 0xf8, 0x00, 0x01, 0xef, 0xfd, 0xff, 0xff, |
0xff, 0xff, 0xfb, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0xff, 0xff, |
0xff, 0xff, 0xfb, 0xe0, 0x00, 0x00, 0x1f, 0xfe, 0xff, 0xff, |
0xff, 0xff, 0xf7, 0xe0, 0x00, 0x00, 0x07, 0xbf, 0x7f, 0xff, |
0xff, 0xff, 0xf7, 0xc0, 0x00, 0x00, 0x03, 0xbf, 0x7f, 0xff, |
0xff, 0xff, 0xef, 0xc0, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, |
0xff, 0xff, 0xef, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, |
0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, |
0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff, |
0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff, |
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, |
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, |
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, |
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, |
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x03, 0x03, 0xdf, 0xff, |
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x02, 0xfd, 0xdf, 0xff, |
0xff, 0xff, 0xa3, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xdf, 0xff, |
0xff, 0xff, 0xc1, 0xc0, 0x00, 0x00, 0x11, 0xff, 0x3f, 0xff, |
0xff, 0xff, 0x80, 0xe0, 0x00, 0x00, 0x21, 0xfe, 0x3f, 0xff, |
0xff, 0xff, 0x00, 0x70, 0x00, 0x00, 0x21, 0xfc, 0x3f, 0xff, |
0xff, 0xfe, 0x00, 0x3c, 0x00, 0x00, 0x20, 0xf8, 0x3f, 0xff, |
0xff, 0xf0, 0x00, 0x3e, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff, |
0xff, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff, |
0xff, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x20, 0x00, 0x1f, 0xff, |
0xff, 0xc0, 0x00, 0x0f, 0x80, 0x00, 0x20, 0x00, 0x07, 0xff, |
0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x20, 0x00, 0x03, 0xff, |
0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x60, 0x00, 0x01, 0xff, |
0xff, 0xc0, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00, 0x01, 0xff, |
0xff, 0xc0, 0x00, 0x01, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xff, |
0xff, 0xc0, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x00, 0x03, 0xff, |
0xff, 0xc0, 0x00, 0x00, 0x80, 0x3f, 0xe0, 0x00, 0x0f, 0xff, |
0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x1f, 0xff, |
0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x7f, 0xff, |
0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0xff, 0xff, |
0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x03, 0xff, 0xff, |
0xff, 0xff, 0xc0, 0x00, 0x70, 0x00, 0xc0, 0x07, 0xff, 0xff, |
0xff, 0xff, 0xfc, 0x00, 0x8f, 0xff, 0x20, 0x0f, 0xff, 0xff, |
0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff |
}; |
|
#endif /* !__HAVE_ARCH_LINUX_LOGOBW */ |
|
#ifndef __HAVE_ARCH_LINUX_LOGO16 |
|
unsigned char linux_logo16[] __initdata = { |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x88, 0x80, 0x00, 0x00, 0x08, 0x88, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, |
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80, |
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x08, 0x70, 0x00, 0x00, 0x00, 0x77, 0x70, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x87, 0x77, 0x00, 0x00, 0x07, 0xff, 0xf7, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, |
0x77, 0xff, 0x00, 0x00, 0x7f, 0x77, 0xf7, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, |
0x70, 0x0f, 0x80, 0x00, 0xf7, 0x08, 0x7f, 0x70, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, |
0x80, 0x07, 0x80, 0x00, 0xf8, 0x00, 0x8f, 0x70, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, |
0x70, 0x07, 0x88, 0x88, 0xf8, 0x00, 0x8f, 0x70, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0xf0, 0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x77, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x77, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00, |
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, |
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x60, |
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66, 0x80, |
0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, |
0x86, 0xe6, 0xe6, 0xe6, 0x66, 0x66, 0x66, 0x80, |
0x08, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, |
0x86, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, 0x70, |
0x00, 0x77, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x87, 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x78, |
0x00, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x87, 0x76, 0x66, 0x66, 0x77, 0x77, 0xff, 0xf7, |
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, |
0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, |
0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, |
0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, |
0x70, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8f, |
0xff, 0xf7, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, |
0xf0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x7f, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf8, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf7, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x87, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x87, 0x77, |
0xff, 0xf7, 0x77, 0xff, 0xff, 0xff, 0x77, 0x77, |
0x77, 0x78, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x77, 0x7f, |
0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77, |
0x77, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf7, 0x77, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x80, 0x80, 0x08, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x77, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x08, 0x00, 0x80, 0x07, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0x78, 0x00, 0x08, 0x80, 0x00, 0x08, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x08, 0x08, 0x00, 0x8f, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x08, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x08, 0x08, 0x08, 0x7f, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x00, |
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x80, 0x08, 0x07, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0x80, 0x00, 0x08, 0x00, 0x00, |
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x80, 0x80, 0x0f, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, |
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x08, 0x00, 0x80, 0x8f, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, |
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x08, 0x08, 0x00, 0x7f, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x80, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x08, 0x00, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x88, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x08, 0x00, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf0, 0x88, 0x88, 0x80, 0x00, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x08, 0x06, 0xe6, 0x00, 0x8f, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x80, |
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff, 0xff, |
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xff, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x88, |
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x00, |
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xf6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x06, |
0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x0e, |
0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x08, 0xff, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xff, 0x76, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0xe6, |
0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, |
0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00, 0x08, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00, |
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00, |
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, |
0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0xf7, 0x8e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x88, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, |
0x78, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xef, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, |
0x80, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, |
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, |
0x00, 0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80, |
0x00, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, |
0x67, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80, 0x00, |
0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, |
0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e, |
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, |
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, |
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, |
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, |
0x66, 0x66, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, |
0x60, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, |
0x00, 0x06, 0x66, 0xe6, 0xe6, 0xe6, 0x66, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x66, 0x66, 0x66, 0x66, 0xe6, 0xe6, 0x66, |
0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, |
0x88, 0x86, 0x66, 0x6e, 0x6e, 0x66, 0x60, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x66, 0x66, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x06, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x60, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x66, 0x66, 0x66, 0x60, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
}; |
|
#endif /* !__HAVE_ARCH_LINUX_LOGO16 */ |
|
#else /* !INCLUDE_LINUX_LOGO_DATA */ |
|
/* prototypes only */ |
extern unsigned char linux_logo_red[]; |
extern unsigned char linux_logo_green[]; |
extern unsigned char linux_logo_blue[]; |
extern unsigned char linux_logo[]; |
extern unsigned char linux_logo_bw[]; |
extern unsigned char linux_logo16[]; |
|
#endif /* !INCLUDE_LINUX_LOGO_DATA */ |
|
/sembuf.h
0,0 → 1,29
#ifndef _PARISC_SEMBUF_H |
#define _PARISC_SEMBUF_H |
|
/* |
* The semid64_ds structure for parisc architecture. |
* Note extra padding because this structure is passed back and forth |
* between kernel and user space. |
* |
* Pad space is left for: |
* - 64-bit time_t to solve y2038 problem |
* - 2 miscellaneous 32-bit values |
*/ |
|
struct semid64_ds { |
struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
#ifndef __LP64__ |
unsigned int __pad1; |
#endif |
__kernel_time_t sem_otime; /* last semop time */ |
#ifndef __LP64__ |
unsigned int __pad2; |
#endif |
__kernel_time_t sem_ctime; /* last change time */ |
unsigned int sem_nsems; /* no. of semaphores in array */ |
unsigned int __unused1; |
unsigned int __unused2; |
}; |
|
#endif /* _PARISC_SEMBUF_H */ |
/current.h
0,0 → 1,18
#ifndef _PARISC_CURRENT_H |
#define _PARISC_CURRENT_H |
|
#include <asm/processor.h> |
|
struct task_struct; |
|
static inline struct task_struct * get_current(void) |
{ |
register unsigned long cr; |
|
__asm__ __volatile__("mfctl %%cr30,%0" : "=r" (cr) ); |
return (struct task_struct *)cr; |
} |
|
#define current get_current() |
|
#endif /* !(_PARISC_CURRENT_H) */ |
/termios.h
0,0 → 1,109
#ifndef _PARISC_TERMIOS_H |
#define _PARISC_TERMIOS_H |
|
#include <asm/termbits.h> |
#include <asm/ioctls.h> |
|
struct winsize { |
unsigned short ws_row; |
unsigned short ws_col; |
unsigned short ws_xpixel; |
unsigned short ws_ypixel; |
}; |
|
#define NCC 8 |
struct termio { |
unsigned short c_iflag; /* input mode flags */ |
unsigned short c_oflag; /* output mode flags */ |
unsigned short c_cflag; /* control mode flags */ |
unsigned short c_lflag; /* local mode flags */ |
unsigned char c_line; /* line discipline */ |
unsigned char c_cc[NCC]; /* control characters */ |
}; |
|
/* modem lines */ |
#define TIOCM_LE 0x001 |
#define TIOCM_DTR 0x002 |
#define TIOCM_RTS 0x004 |
#define TIOCM_ST 0x008 |
#define TIOCM_SR 0x010 |
#define TIOCM_CTS 0x020 |
#define TIOCM_CAR 0x040 |
#define TIOCM_RNG 0x080 |
#define TIOCM_DSR 0x100 |
#define TIOCM_CD TIOCM_CAR |
#define TIOCM_RI TIOCM_RNG |
#define TIOCM_OUT1 0x2000 |
#define TIOCM_OUT2 0x4000 |
#define TIOCM_LOOP 0x8000 |
|
/* IRDA support - PA-RISC uses OUT1 as hardware flow control bit. */ |
#define TIOCM_MODEM_BITS (TIOCM_OUT2 | TIOCM_OUT1) |
|
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ |
|
/* line disciplines */ |
#define N_TTY 0 |
#define N_SLIP 1 |
#define N_MOUSE 2 |
#define N_PPP 3 |
#define N_STRIP 4 |
#define N_AX25 5 |
#define N_X25 6 /* X.25 async */ |
#define N_6PACK 7 |
#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ |
#define N_R3964 9 /* Reserved for Simatic R3964 module */ |
#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ |
#define N_IRDA 11 /* Linux IR - http://irda.sourceforge.net/ */ |
#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */ |
#define N_HDLC 13 /* synchronous HDLC */ |
#define N_SYNC_PPP 14 |
#define N_HCI 15 /* Bluetooth HCI UART */ |
|
#ifdef __KERNEL__ |
|
/* intr=^C quit=^\ erase=del kill=^U |
eof=^D vtime=\0 vmin=\1 sxtc=\0 |
start=^Q stop=^S susp=^Z eol=\0 |
reprint=^R discard=^U werase=^W lnext=^V |
eol2=\0 |
*/ |
#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" |
|
/* |
* Translate a "termio" structure into a "termios". Ugh. |
*/ |
#define SET_LOW_TERMIOS_BITS(termios, termio, x) { \ |
unsigned short __tmp; \ |
get_user(__tmp,&(termio)->x); \ |
*(unsigned short *) &(termios)->x = __tmp; \ |
} |
|
#define user_termio_to_kernel_termios(termios, termio) \ |
({ \ |
SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ |
SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ |
SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ |
SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ |
copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ |
}) |
|
/* |
* Translate a "termios" structure into a "termio". Ugh. |
*/ |
#define kernel_termios_to_user_termio(termio, termios) \ |
({ \ |
put_user((termios)->c_iflag, &(termio)->c_iflag); \ |
put_user((termios)->c_oflag, &(termio)->c_oflag); \ |
put_user((termios)->c_cflag, &(termio)->c_cflag); \ |
put_user((termios)->c_lflag, &(termio)->c_lflag); \ |
put_user((termios)->c_line, &(termio)->c_line); \ |
copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ |
}) |
|
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) |
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) |
|
#endif /* __KERNEL__ */ |
|
#endif /* _PARISC_TERMIOS_H */ |
/pdc_chassis.h
0,0 → 1,382
/* |
* include/asm-parisc/pdc_chassis.h |
* |
* Copyright (C) 2002 Laurent Canet <canetl@esiee.fr> |
* Copyright (C) 2002 Thibaut Varene <varenet@esiee.fr> |
* |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2, or (at your option) |
* any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
* |
* TODO: - handle processor number on SMP systems (Reporting Entity ID) |
* - handle message ID |
* - handle timestamps |
*/ |
|
|
#ifndef _PARISC_PDC_CHASSIS_H |
#define _PARISC_PDC_CHASSIS_H |
|
/* |
* ---------- |
* Prototypes |
* ---------- |
*/ |
|
int pdc_chassis_send_status(int message); |
void __init parisc_pdc_chassis_init(void); |
|
|
/* |
* ----------------- |
* Direct call names |
* ----------------- |
* They setup everything for you, the Log message and the corresponding LED state |
*/ |
|
#define PDC_CHASSIS_DIRECT_BSTART 0 |
#define PDC_CHASSIS_DIRECT_BCOMPLETE 1 |
#define PDC_CHASSIS_DIRECT_SHUTDOWN 2 |
#define PDC_CHASSIS_DIRECT_PANIC 3 |
#define PDC_CHASSIS_DIRECT_HPMC 4 |
#define PDC_CHASSIS_DIRECT_LPMC 5 |
#define PDC_CHASSIS_DIRECT_DUMP 6 /* not yet implemented */ |
#define PDC_CHASSIS_DIRECT_OOPS 7 /* not yet implemented */ |
|
|
/* |
* ------------ |
* LEDs control |
* ------------ |
* Set the three LEDs -- Run, Attn, and Fault. |
*/ |
|
/* Old PDC LED control */ |
#define PDC_CHASSIS_DISP_DATA(v) ((unsigned long)(v) << 17) |
|
/* |
* Available PDC PAT LED states |
*/ |
|
#define PDC_CHASSIS_LED_RUN_OFF (0ULL << 4) |
#define PDC_CHASSIS_LED_RUN_FLASH (1ULL << 4) |
#define PDC_CHASSIS_LED_RUN_ON (2ULL << 4) |
#define PDC_CHASSIS_LED_RUN_NC (3ULL << 4) |
#define PDC_CHASSIS_LED_ATTN_OFF (0ULL << 6) |
#define PDC_CHASSIS_LED_ATTN_FLASH (1ULL << 6) |
#define PDC_CHASSIS_LED_ATTN_NC (3ULL << 6) /* ATTN ON is invalid */ |
#define PDC_CHASSIS_LED_FAULT_OFF (0ULL << 8) |
#define PDC_CHASSIS_LED_FAULT_FLASH (1ULL << 8) |
#define PDC_CHASSIS_LED_FAULT_ON (2ULL << 8) |
#define PDC_CHASSIS_LED_FAULT_NC (3ULL << 8) |
#define PDC_CHASSIS_LED_VALID (1ULL << 10) |
|
/* |
* Valid PDC PAT LED states combinations |
*/ |
|
/* System running normally */ |
#define PDC_CHASSIS_LSTATE_RUN_NORMAL (PDC_CHASSIS_LED_RUN_ON | \ |
PDC_CHASSIS_LED_ATTN_OFF | \ |
PDC_CHASSIS_LED_FAULT_OFF | \ |
PDC_CHASSIS_LED_VALID ) |
/* System crashed and rebooted itself successfully */ |
#define PDC_CHASSIS_LSTATE_RUN_CRASHREC (PDC_CHASSIS_LED_RUN_ON | \ |
PDC_CHASSIS_LED_ATTN_OFF | \ |
PDC_CHASSIS_LED_FAULT_FLASH | \ |
PDC_CHASSIS_LED_VALID ) |
/* There was a system interruption that did not take the system down */ |
#define PDC_CHASSIS_LSTATE_RUN_SYSINT (PDC_CHASSIS_LED_RUN_ON | \ |
PDC_CHASSIS_LED_ATTN_FLASH | \ |
PDC_CHASSIS_LED_FAULT_OFF | \ |
PDC_CHASSIS_LED_VALID ) |
/* System running and unexpected reboot or non-critical error detected */ |
#define PDC_CHASSIS_LSTATE_RUN_NCRIT (PDC_CHASSIS_LED_RUN_ON | \ |
PDC_CHASSIS_LED_ATTN_FLASH | \ |
PDC_CHASSIS_LED_FAULT_FLASH | \ |
PDC_CHASSIS_LED_VALID ) |
/* Executing non-OS code */ |
#define PDC_CHASSIS_LSTATE_NONOS (PDC_CHASSIS_LED_RUN_FLASH | \ |
PDC_CHASSIS_LED_ATTN_OFF | \ |
PDC_CHASSIS_LED_FAULT_OFF | \ |
PDC_CHASSIS_LED_VALID ) |
/* Boot failed - Executing non-OS code */ |
#define PDC_CHASSIS_LSTATE_NONOS_BFAIL (PDC_CHASSIS_LED_RUN_FLASH | \ |
PDC_CHASSIS_LED_ATTN_OFF | \ |
PDC_CHASSIS_LED_FAULT_ON | \ |
PDC_CHASSIS_LED_VALID ) |
/* Unexpected reboot occured - Executing non-OS code */ |
#define PDC_CHASSIS_LSTATE_NONOS_UNEXP (PDC_CHASSIS_LED_RUN_FLASH | \ |
PDC_CHASSIS_LED_ATTN_OFF | \ |
PDC_CHASSIS_LED_FAULT_FLASH | \ |
PDC_CHASSIS_LED_VALID ) |
/* Executing non-OS code - Non-critical error detected */ |
#define PDC_CHASSIS_LSTATE_NONOS_NCRIT (PDC_CHASSIS_LED_RUN_FLASH | \ |
PDC_CHASSIS_LED_ATTN_FLASH | \ |
PDC_CHASSIS_LED_FAULT_OFF | \ |
PDC_CHASSIS_LED_VALID ) |
/* Boot failed - Executing non-OS code - Non-critical error detected */ |
#define PDC_CHASSIS_LSTATE_BFAIL_NCRIT (PDC_CHASSIS_LED_RUN_FLASH | \ |
PDC_CHASSIS_LED_ATTN_FLASH | \ |
PDC_CHASSIS_LED_FAULT_ON | \ |
PDC_CHASSIS_LED_VALID ) |
/* Unexpected reboot/recovering - Executing non-OS code - Non-critical error detected */ |
#define PDC_CHASSIS_LSTATE_UNEXP_NCRIT (PDC_CHASSIS_LED_RUN_FLASH | \ |
PDC_CHASSIS_LED_ATTN_FLASH | \ |
PDC_CHASSIS_LED_FAULT_FLASH | \ |
PDC_CHASSIS_LED_VALID ) |
/* Cannot execute PDC */ |
#define PDC_CHASSIS_LSTATE_CANNOT_PDC (PDC_CHASSIS_LED_RUN_OFF | \ |
PDC_CHASSIS_LED_ATTN_OFF | \ |
PDC_CHASSIS_LED_FAULT_OFF | \ |
PDC_CHASSIS_LED_VALID ) |
/* Boot failed - OS not up - PDC has detected a failure that prevents boot */ |
#define PDC_CHASSIS_LSTATE_FATAL_BFAIL (PDC_CHASSIS_LED_RUN_OFF | \ |
PDC_CHASSIS_LED_ATTN_OFF | \ |
PDC_CHASSIS_LED_FAULT_ON | \ |
PDC_CHASSIS_LED_VALID ) |
/* No code running - Non-critical error detected (double fault situation) */ |
#define PDC_CHASSIS_LSTATE_NOCODE_NCRIT (PDC_CHASSIS_LED_RUN_OFF | \ |
PDC_CHASSIS_LED_ATTN_FLASH | \ |
PDC_CHASSIS_LED_FAULT_OFF | \ |
PDC_CHASSIS_LED_VALID ) |
/* Boot failed - OS not up - Fatal failure detected - Non-critical error detected */ |
#define PDC_CHASSIS_LSTATE_FATAL_NCRIT (PDC_CHASSIS_LED_RUN_OFF | \ |
PDC_CHASSIS_LED_ATTN_FLASH | \ |
PDC_CHASSIS_LED_FAULT_ON | \ |
PDC_CHASSIS_LED_VALID ) |
/* All other states are invalid */ |
|
|
/* |
* -------------- |
* PDC Log events |
* -------------- |
* Here follows bits needed to fill up the log event sent to PDC_CHASSIS |
* The log message contains: Alert level, Source, Source detail, |
* Source ID, Problem detail, Caller activity, Activity status, |
* Caller subactivity, Reporting entity type, Reporting entity ID, |
* Data type, Unique message ID and EOM. |
*/ |
|
/* Alert level */ |
#define PDC_CHASSIS_ALERT_FORWARD (0ULL << 36) /* no failure detected */ |
#define PDC_CHASSIS_ALERT_SERPROC (1ULL << 36) /* service proc - no failure */ |
#define PDC_CHASSIS_ALERT_NURGENT (2ULL << 36) /* non-urgent operator attn */ |
#define PDC_CHASSIS_ALERT_BLOCKED (3ULL << 36) /* system blocked */ |
#define PDC_CHASSIS_ALERT_CONF_CHG (4ULL << 36) /* unexpected configuration change */ |
#define PDC_CHASSIS_ALERT_ENV_PB (5ULL << 36) /* boot possible, environmental pb */ |
#define PDC_CHASSIS_ALERT_PENDING (6ULL << 36) /* boot possible, pending failure */ |
#define PDC_CHASSIS_ALERT_PERF_IMP (8ULL << 36) /* boot possible, performance impaired */ |
#define PDC_CHASSIS_ALERT_FUNC_IMP (10ULL << 36) /* boot possible, functionality impaired */ |
#define PDC_CHASSIS_ALERT_SOFT_FAIL (12ULL << 36) /* software failure */ |
#define PDC_CHASSIS_ALERT_HANG (13ULL << 36) /* system hang */ |
#define PDC_CHASSIS_ALERT_ENV_FATAL (14ULL << 36) /* fatal power or environmental pb */ |
#define PDC_CHASSIS_ALERT_HW_FATAL (15ULL << 36) /* fatal hardware problem */ |
|
/* Source */ |
#define PDC_CHASSIS_SRC_NONE (0ULL << 28) /* unknown, no source stated */ |
#define PDC_CHASSIS_SRC_PROC (1ULL << 28) /* processor */ |
/* For later use ? */ |
#define PDC_CHASSIS_SRC_PROC_CACHE (2ULL << 28) /* processor cache*/ |
#define PDC_CHASSIS_SRC_PDH (3ULL << 28) /* processor dependent hardware */ |
#define PDC_CHASSIS_SRC_PWR (4ULL << 28) /* power */ |
#define PDC_CHASSIS_SRC_FAB (5ULL << 28) /* fabric connector */ |
#define PDC_CHASSIS_SRC_PLATi (6ULL << 28) /* platform */ |
#define PDC_CHASSIS_SRC_MEM (7ULL << 28) /* memory */ |
#define PDC_CHASSIS_SRC_IO (8ULL << 28) /* I/O */ |
#define PDC_CHASSIS_SRC_CELL (9ULL << 28) /* cell */ |
#define PDC_CHASSIS_SRC_PD (10ULL << 28) /* protected domain */ |
|
/* Source detail field */ |
#define PDC_CHASSIS_SRC_D_PROC (1ULL << 24) /* processor general */ |
|
/* Source ID - platform dependent */ |
#define PDC_CHASSIS_SRC_ID_UNSPEC (0ULL << 16) |
|
/* Problem detail - problem source dependent */ |
#define PDC_CHASSIS_PB_D_PROC_NONE (0ULL << 32) /* no problem detail */ |
#define PDC_CHASSIS_PB_D_PROC_TIMEOUT (4ULL << 32) /* timeout */ |
|
/* Caller activity */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_BL (7ULL << 12) /* Boot Loader */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_PD (8ULL << 12) /* SAL_PD activities */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_EVENT (9ULL << 12) /* SAL_EVENTS activities */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_IO (10ULL << 12) /* SAL_IO activities */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_PANIC (11ULL << 12) /* System panic */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_INIT (12ULL << 12) /* System initialization */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_SHUT (13ULL << 12) /* System shutdown */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_WARN (14ULL << 12) /* System warning */ |
#define PDC_CHASSIS_CALL_ACT_HPUX_DU (15ULL << 12) /* Display_Activity() update */ |
|
/* Activity status - implementation dependent */ |
#define PDC_CHASSIS_ACT_STATUS_UNSPEC (0ULL << 0) |
|
/* Caller subactivity - implementation dependent */ |
/* FIXME: other subactivities ? */ |
#define PDC_CHASSIS_CALL_SACT_UNSPEC (0ULL << 4) /* implementation dependent */ |
|
/* Reporting entity type */ |
#define PDC_CHASSIS_RET_GENERICOS (12ULL << 52) /* generic OSes */ |
#define PDC_CHASSIS_RET_IA64_NT (13ULL << 52) /* IA-64 NT */ |
#define PDC_CHASSIS_RET_HPUX (14ULL << 52) /* HP-UX */ |
#define PDC_CHASSIS_RET_DIAG (15ULL << 52) /* offline diagnostics & utilities */ |
|
/* Reporting entity ID */ |
#define PDC_CHASSIS_REID_UNSPEC (0ULL << 44) |
|
/* Data type */ |
#define PDC_CHASSIS_DT_NONE (0ULL << 59) /* data field unused */ |
/* For later use ? Do we need these ? */ |
#define PDC_CHASSIS_DT_PHYS_ADDR (1ULL << 59) /* physical address */ |
#define PDC_CHASSIS_DT_DATA_EXPECT (2ULL << 59) /* expected data */ |
#define PDC_CHASSIS_DT_ACTUAL (3ULL << 59) /* actual data */ |
#define PDC_CHASSIS_DT_PHYS_LOC (4ULL << 59) /* physical location */ |
#define PDC_CHASSIS_DT_PHYS_LOC_EXT (5ULL << 59) /* physical location extension */ |
#define PDC_CHASSIS_DT_TAG (6ULL << 59) /* tag */ |
#define PDC_CHASSIS_DT_SYNDROME (7ULL << 59) /* syndrome */ |
#define PDC_CHASSIS_DT_CODE_ADDR (8ULL << 59) /* code address */ |
#define PDC_CHASSIS_DT_ASCII_MSG (9ULL << 59) /* ascii message */ |
#define PDC_CHASSIS_DT_POST (10ULL << 59) /* POST code */ |
#define PDC_CHASSIS_DT_TIMESTAMP (11ULL << 59) /* timestamp */ |
#define PDC_CHASSIS_DT_DEV_STAT (12ULL << 59) /* device status */ |
#define PDC_CHASSIS_DT_DEV_TYPE (13ULL << 59) /* device type */ |
#define PDC_CHASSIS_DT_PB_DET (14ULL << 59) /* problem detail */ |
#define PDC_CHASSIS_DT_ACT_LEV (15ULL << 59) /* activity level/timeout */ |
#define PDC_CHASSIS_DT_SER_NUM (16ULL << 59) /* serial number */ |
#define PDC_CHASSIS_DT_REV_NUM (17ULL << 59) /* revision number */ |
#define PDC_CHASSIS_DT_INTERRUPT (18ULL << 59) /* interruption information */ |
#define PDC_CHASSIS_DT_TEST_NUM (19ULL << 59) /* test number */ |
#define PDC_CHASSIS_DT_STATE_CHG (20ULL << 59) /* major changes in system state */ |
#define PDC_CHASSIS_DT_PROC_DEALLOC (21ULL << 59) /* processor deallocate */ |
#define PDC_CHASSIS_DT_RESET (30ULL << 59) /* reset type and cause */ |
#define PDC_CHASSIS_DT_PA_LEGACY (31ULL << 59) /* legacy PA hex chassis code */ |
|
/* System states - part of major changes in system state data field */ |
#define PDC_CHASSIS_SYSTATE_BSTART (0ULL << 0) /* boot start */ |
#define PDC_CHASSIS_SYSTATE_BCOMP (1ULL << 0) /* boot complete */ |
#define PDC_CHASSIS_SYSTATE_CHANGE (2ULL << 0) /* major change */ |
#define PDC_CHASSIS_SYSTATE_LED (3ULL << 0) /* LED change */ |
#define PDC_CHASSIS_SYSTATE_PANIC (9ULL << 0) /* OS Panic */ |
#define PDC_CHASSIS_SYSTATE_DUMP (10ULL << 0) /* memory dump */ |
#define PDC_CHASSIS_SYSTATE_HPMC (11ULL << 0) /* processing HPMC */ |
#define PDC_CHASSIS_SYSTATE_HALT (15ULL << 0) /* system halted */ |
|
/* Message ID */ |
#define PDC_CHASSIS_MSG_ID (0ULL << 40) /* we do not handle msg IDs atm */ |
|
/* EOM - separates log entries */ |
#define PDC_CHASSIS_EOM_CLEAR (0ULL << 43) |
#define PDC_CHASSIS_EOM_SET (1ULL << 43) |
|
/* |
* Preformated well known messages |
*/ |
|
/* Boot started */ |
#define PDC_CHASSIS_PMSG_BSTART (PDC_CHASSIS_ALERT_SERPROC | \ |
PDC_CHASSIS_SRC_PROC | \ |
PDC_CHASSIS_SRC_D_PROC | \ |
PDC_CHASSIS_SRC_ID_UNSPEC | \ |
PDC_CHASSIS_PB_D_PROC_NONE | \ |
PDC_CHASSIS_CALL_ACT_HPUX_INIT | \ |
PDC_CHASSIS_ACT_STATUS_UNSPEC | \ |
PDC_CHASSIS_CALL_SACT_UNSPEC | \ |
PDC_CHASSIS_RET_HPUX | \ |
PDC_CHASSIS_REID_UNSPEC | \ |
PDC_CHASSIS_DT_STATE_CHG | \ |
PDC_CHASSIS_SYSTATE_BSTART | \ |
PDC_CHASSIS_MSG_ID | \ |
PDC_CHASSIS_EOM_SET ) |
|
/* Boot complete */ |
#define PDC_CHASSIS_PMSG_BCOMPLETE (PDC_CHASSIS_ALERT_SERPROC | \ |
PDC_CHASSIS_SRC_PROC | \ |
PDC_CHASSIS_SRC_D_PROC | \ |
PDC_CHASSIS_SRC_ID_UNSPEC | \ |
PDC_CHASSIS_PB_D_PROC_NONE | \ |
PDC_CHASSIS_CALL_ACT_HPUX_INIT | \ |
PDC_CHASSIS_ACT_STATUS_UNSPEC | \ |
PDC_CHASSIS_CALL_SACT_UNSPEC | \ |
PDC_CHASSIS_RET_HPUX | \ |
PDC_CHASSIS_REID_UNSPEC | \ |
PDC_CHASSIS_DT_STATE_CHG | \ |
PDC_CHASSIS_SYSTATE_BCOMP | \ |
PDC_CHASSIS_MSG_ID | \ |
PDC_CHASSIS_EOM_SET ) |
|
/* Shutdown */ |
#define PDC_CHASSIS_PMSG_SHUTDOWN (PDC_CHASSIS_ALERT_SERPROC | \ |
PDC_CHASSIS_SRC_PROC | \ |
PDC_CHASSIS_SRC_D_PROC | \ |
PDC_CHASSIS_SRC_ID_UNSPEC | \ |
PDC_CHASSIS_PB_D_PROC_NONE | \ |
PDC_CHASSIS_CALL_ACT_HPUX_SHUT | \ |
PDC_CHASSIS_ACT_STATUS_UNSPEC | \ |
PDC_CHASSIS_CALL_SACT_UNSPEC | \ |
PDC_CHASSIS_RET_HPUX | \ |
PDC_CHASSIS_REID_UNSPEC | \ |
PDC_CHASSIS_DT_STATE_CHG | \ |
PDC_CHASSIS_SYSTATE_HALT | \ |
PDC_CHASSIS_MSG_ID | \ |
PDC_CHASSIS_EOM_SET ) |
|
/* Panic */ |
#define PDC_CHASSIS_PMSG_PANIC (PDC_CHASSIS_ALERT_SOFT_FAIL | \ |
PDC_CHASSIS_SRC_PROC | \ |
PDC_CHASSIS_SRC_D_PROC | \ |
PDC_CHASSIS_SRC_ID_UNSPEC | \ |
PDC_CHASSIS_PB_D_PROC_NONE | \ |
PDC_CHASSIS_CALL_ACT_HPUX_PANIC| \ |
PDC_CHASSIS_ACT_STATUS_UNSPEC | \ |
PDC_CHASSIS_CALL_SACT_UNSPEC | \ |
PDC_CHASSIS_RET_HPUX | \ |
PDC_CHASSIS_REID_UNSPEC | \ |
PDC_CHASSIS_DT_STATE_CHG | \ |
PDC_CHASSIS_SYSTATE_PANIC | \ |
PDC_CHASSIS_MSG_ID | \ |
PDC_CHASSIS_EOM_SET ) |
|
// FIXME: extrapolated data |
/* HPMC */ |
#define PDC_CHASSIS_PMSG_HPMC (PDC_CHASSIS_ALERT_CONF_CHG /*?*/ | \ |
PDC_CHASSIS_SRC_PROC | \ |
PDC_CHASSIS_SRC_D_PROC | \ |
PDC_CHASSIS_SRC_ID_UNSPEC | \ |
PDC_CHASSIS_PB_D_PROC_NONE | \ |
PDC_CHASSIS_CALL_ACT_HPUX_WARN | \ |
PDC_CHASSIS_RET_HPUX | \ |
PDC_CHASSIS_DT_STATE_CHG | \ |
PDC_CHASSIS_SYSTATE_HPMC | \ |
PDC_CHASSIS_MSG_ID | \ |
PDC_CHASSIS_EOM_SET ) |
|
/* LPMC */ |
#define PDC_CHASSIS_PMSG_LPMC (PDC_CHASSIS_ALERT_BLOCKED /*?*/| \ |
PDC_CHASSIS_SRC_PROC | \ |
PDC_CHASSIS_SRC_D_PROC | \ |
PDC_CHASSIS_SRC_ID_UNSPEC | \ |
PDC_CHASSIS_PB_D_PROC_NONE | \ |
PDC_CHASSIS_CALL_ACT_HPUX_WARN | \ |
PDC_CHASSIS_ACT_STATUS_UNSPEC | \ |
PDC_CHASSIS_CALL_SACT_UNSPEC | \ |
PDC_CHASSIS_RET_HPUX | \ |
PDC_CHASSIS_REID_UNSPEC | \ |
PDC_CHASSIS_DT_STATE_CHG | \ |
PDC_CHASSIS_SYSTATE_CHANGE | \ |
PDC_CHASSIS_MSG_ID | \ |
PDC_CHASSIS_EOM_SET ) |
|
#endif /* _PARISC_PDC_CHASSIS_H */ |
/* vim: set ts=8 */ |
/msgbuf.h
0,0 → 1,37
#ifndef _PARISC_MSGBUF_H |
#define _PARISC_MSGBUF_H |
|
/* |
* The msqid64_ds structure for parisc architecture, copied from sparc. |
* Note extra padding because this structure is passed back and forth |
* between kernel and user space. |
* |
* Pad space is left for: |
* - 64-bit time_t to solve y2038 problem |
* - 2 miscellaneous 32-bit values |
*/ |
|
struct msqid64_ds { |
struct ipc64_perm msg_perm; |
#ifndef __LP64__ |
unsigned int __pad1; |
#endif |
__kernel_time_t msg_stime; /* last msgsnd time */ |
#ifndef __LP64__ |
unsigned int __pad2; |
#endif |
__kernel_time_t msg_rtime; /* last msgrcv time */ |
#ifndef __LP64__ |
unsigned int __pad3; |
#endif |
__kernel_time_t msg_ctime; /* last change time */ |
unsigned int msg_cbytes; /* current number of bytes on queue */ |
unsigned int msg_qnum; /* number of messages in queue */ |
unsigned int msg_qbytes; /* max number of bytes on queue */ |
__kernel_pid_t msg_lspid; /* pid of last msgsnd */ |
__kernel_pid_t msg_lrpid; /* last receive pid */ |
unsigned int __unused1; |
unsigned int __unused2; |
}; |
|
#endif /* _PARISC_MSGBUF_H */ |
/fixmap.h
0,0 → 1,12
#ifndef _ASM_FIXMAP_H |
#define _ASM_FIXMAP_H |
|
/* |
* Allocate a 8 Mb temporary mapping area for copy_user_page/clear_user_page. |
* This area needs to be aligned on a 8 Mb boundary. |
*/ |
|
#define TMPALIAS_MAP_START (__PAGE_OFFSET - 0x01000000) |
#define FIXADDR_START ((unsigned long)TMPALIAS_MAP_START) |
|
#endif |
/module.h
0,0 → 1,12
#ifndef _ASM_PARISC_MODULE_H |
#define _ASM_PARISC_MODULE_H |
/* |
* This file contains the parisc architecture specific module code. |
*/ |
|
#define module_map(x) vmalloc(x) |
#define module_unmap(x) vfree(x) |
#define module_arch_init(x) (0) |
#define arch_init_modules(x) do { } while (0) |
|
#endif /* _ASM_PARISC_MODULE_H */ |
/termbits.h
0,0 → 1,174
#ifndef __ARCH_PARISC_TERMBITS_H__ |
#define __ARCH_PARISC_TERMBITS_H__ |
|
#include <linux/posix_types.h> |
|
typedef unsigned char cc_t; |
typedef unsigned int speed_t; |
typedef unsigned int tcflag_t; |
|
#define NCCS 19 |
struct termios { |
tcflag_t c_iflag; /* input mode flags */ |
tcflag_t c_oflag; /* output mode flags */ |
tcflag_t c_cflag; /* control mode flags */ |
tcflag_t c_lflag; /* local mode flags */ |
cc_t c_line; /* line discipline */ |
cc_t c_cc[NCCS]; /* control characters */ |
}; |
|
/* c_cc characters */ |
#define VINTR 0 |
#define VQUIT 1 |
#define VERASE 2 |
#define VKILL 3 |
#define VEOF 4 |
#define VTIME 5 |
#define VMIN 6 |
#define VSWTC 7 |
#define VSTART 8 |
#define VSTOP 9 |
#define VSUSP 10 |
#define VEOL 11 |
#define VREPRINT 12 |
#define VDISCARD 13 |
#define VWERASE 14 |
#define VLNEXT 15 |
#define VEOL2 16 |
|
|
/* c_iflag bits */ |
#define IGNBRK 0000001 |
#define BRKINT 0000002 |
#define IGNPAR 0000004 |
#define PARMRK 0000010 |
#define INPCK 0000020 |
#define ISTRIP 0000040 |
#define INLCR 0000100 |
#define IGNCR 0000200 |
#define ICRNL 0000400 |
#define IUCLC 0001000 |
#define IXON 0002000 |
#define IXANY 0004000 |
#define IXOFF 0010000 |
#define IMAXBEL 0040000 |
|
/* c_oflag bits */ |
#define OPOST 0000001 |
#define OLCUC 0000002 |
#define ONLCR 0000004 |
#define OCRNL 0000010 |
#define ONOCR 0000020 |
#define ONLRET 0000040 |
#define OFILL 0000100 |
#define OFDEL 0000200 |
#define NLDLY 0000400 |
#define NL0 0000000 |
#define NL1 0000400 |
#define CRDLY 0003000 |
#define CR0 0000000 |
#define CR1 0001000 |
#define CR2 0002000 |
#define CR3 0003000 |
#define TABDLY 0014000 |
#define TAB0 0000000 |
#define TAB1 0004000 |
#define TAB2 0010000 |
#define TAB3 0014000 |
#define XTABS 0014000 |
#define BSDLY 0020000 |
#define BS0 0000000 |
#define BS1 0020000 |
#define VTDLY 0040000 |
#define VT0 0000000 |
#define VT1 0040000 |
#define FFDLY 0100000 |
#define FF0 0000000 |
#define FF1 0100000 |
|
/* c_cflag bit meaning */ |
#define CBAUD 0010017 |
#define B0 0000000 /* hang up */ |
#define B50 0000001 |
#define B75 0000002 |
#define B110 0000003 |
#define B134 0000004 |
#define B150 0000005 |
#define B200 0000006 |
#define B300 0000007 |
#define B600 0000010 |
#define B1200 0000011 |
#define B1800 0000012 |
#define B2400 0000013 |
#define B4800 0000014 |
#define B9600 0000015 |
#define B19200 0000016 |
#define B38400 0000017 |
#define EXTA B19200 |
#define EXTB B38400 |
#define CSIZE 0000060 |
#define CS5 0000000 |
#define CS6 0000020 |
#define CS7 0000040 |
#define CS8 0000060 |
#define CSTOPB 0000100 |
#define CREAD 0000200 |
#define PARENB 0000400 |
#define PARODD 0001000 |
#define HUPCL 0002000 |
#define CLOCAL 0004000 |
#define CBAUDEX 0010000 |
#define B57600 0010001 |
#define B115200 0010002 |
#define B230400 0010003 |
#define B460800 0010004 |
#define B500000 0010005 |
#define B576000 0010006 |
#define B921600 0010007 |
#define B1000000 0010010 |
#define B1152000 0010011 |
#define B1500000 0010012 |
#define B2000000 0010013 |
#define B2500000 0010014 |
#define B3000000 0010015 |
#define B3500000 0010016 |
#define B4000000 0010017 |
#define CIBAUD 002003600000 /* input baud rate (not used) */ |
#define CMSPAR 010000000000 /* mark or space (stick) parity */ |
#define CRTSCTS 020000000000 /* flow control */ |
|
|
/* c_lflag bits */ |
#define ISIG 0000001 |
#define ICANON 0000002 |
#define XCASE 0000004 |
#define ECHO 0000010 |
#define ECHOE 0000020 |
#define ECHOK 0000040 |
#define ECHONL 0000100 |
#define NOFLSH 0000200 |
#define TOSTOP 0000400 |
#define ECHOCTL 0001000 |
#define ECHOPRT 0002000 |
#define ECHOKE 0004000 |
#define FLUSHO 0010000 |
#define PENDIN 0040000 |
#define IEXTEN 0100000 |
|
/* tcflow() and TCXONC use these */ |
#define TCOOFF 0 |
#define TCOON 1 |
#define TCIOFF 2 |
#define TCION 3 |
|
/* tcflush() and TCFLSH use these */ |
#define TCIFLUSH 0 |
#define TCOFLUSH 1 |
#define TCIOFLUSH 2 |
|
/* tcsetattr uses these */ |
#define TCSANOW 0 |
#define TCSADRAIN 1 |
#define TCSAFLUSH 2 |
|
#endif |
/perf.h
0,0 → 1,74
#ifndef _ASM_PERF_H_ |
#define _ASM_PERF_H_ |
|
/* ioctls */ |
#define PA_PERF_ON _IO('p', 1) |
#define PA_PERF_OFF _IOR('p', 2, unsigned int) |
#define PA_PERF_VERSION _IOR('p', 3, int) |
|
#define PA_PERF_DEV "perf" |
#define PA_PERF_MINOR 146 |
|
/* Interface types */ |
#define UNKNOWN_INTF 255 |
#define ONYX_INTF 0 |
#define CUDA_INTF 1 |
|
/* Common Onyx and Cuda images */ |
#define CPI 0 |
#define BUSUTIL 1 |
#define TLBMISS 2 |
#define TLBHANDMISS 3 |
#define PTKN 4 |
#define PNTKN 5 |
#define IMISS 6 |
#define DMISS 7 |
#define DMISS_ACCESS 8 |
#define BIG_CPI 9 |
#define BIG_LS 10 |
#define BR_ABORT 11 |
#define ISNT 12 |
#define QUADRANT 13 |
#define RW_PDFET 14 |
#define RW_WDFET 15 |
#define SHLIB_CPI 16 |
|
/* Cuda only Images */ |
#define FLOPS 17 |
#define CACHEMISS 18 |
#define BRANCHES 19 |
#define CRSTACK 20 |
#define I_CACHE_SPEC 21 |
#define MAX_CUDA_IMAGES 22 |
|
/* Onyx only Images */ |
#define ADDR_INV_ABORT_ALU 17 |
#define BRAD_STALL 18 |
#define CNTL_IN_PIPEL 19 |
#define DSNT_XFH 20 |
#define FET_SIG1 21 |
#define FET_SIG2 22 |
#define G7_1 23 |
#define G7_2 24 |
#define G7_3 25 |
#define G7_4 26 |
#define MPB_LABORT 27 |
#define PANIC 28 |
#define RARE_INST 29 |
#define RW_DFET 30 |
#define RW_IFET 31 |
#define RW_SDFET 32 |
#define SPEC_IFET 33 |
#define ST_COND0 34 |
#define ST_COND1 35 |
#define ST_COND2 36 |
#define ST_COND3 37 |
#define ST_COND4 38 |
#define ST_UNPRED0 39 |
#define ST_UNPRED1 40 |
#define UNPRED 41 |
#define GO_STORE 42 |
#define SHLIB_CALL 43 |
#define MAX_ONYX_IMAGES 44 |
|
#endif |
/hardware.h
0,0 → 1,159
#ifndef _PARISC_HARDWARE_H |
#define _PARISC_HARDWARE_H |
|
#include <asm/pdc.h> |
|
struct parisc_device_id { |
unsigned char hw_type; /* 5 bits used */ |
unsigned char hversion_rev; /* 4 bits */ |
unsigned short hversion; /* 12 bits */ |
unsigned int sversion; /* 20 bits */ |
}; |
|
#define HWTYPE_ANY_ID 0xff |
#define HVERSION_REV_ANY_ID 0xff |
#define HVERSION_ANY_ID 0xffff |
#define SVERSION_ANY_ID 0xffffffffU |
|
struct hp_hardware { |
unsigned short hw_type:5; /* HPHW_xxx */ |
unsigned short hversion; |
unsigned long sversion:28; |
unsigned short opt; |
const char name[80]; /* The hardware description */ |
}; |
|
struct parisc_device { |
unsigned long hpa; /* Hard Physical Address */ |
struct parisc_device_id id; |
struct parisc_device *parent; |
struct parisc_device *sibling; |
struct parisc_device *child; |
struct parisc_driver *driver; /* Driver for this device */ |
void *sysdata; /* Driver instance private data */ |
char name[80]; /* The hardware description */ |
int irq; |
|
char hw_path; /* The module number on this bus */ |
unsigned int num_addrs; /* some devices have additional address ranges. */ |
unsigned long *addr; /* which will be stored here */ |
|
#ifdef __LP64__ |
/* parms for pdc_pat_cell_module() call */ |
unsigned long pcell_loc; /* Physical Cell location */ |
unsigned long mod_index; /* PAT specific - Misc Module info */ |
|
/* generic info returned from pdc_pat_cell_module() */ |
unsigned long mod_info; /* PAT specific - Misc Module info */ |
unsigned long pmod_loc; /* physical Module location */ |
#endif |
}; |
|
enum cpu_type { |
pcx = 0, /* pa7000 pa 1.0 */ |
pcxs = 1, /* pa7000 pa 1.1a */ |
pcxt = 2, /* pa7100 pa 1.1b */ |
pcxt_ = 3, /* pa7200 (t') pa 1.1c */ |
pcxl = 4, /* pa7100lc pa 1.1d */ |
pcxl2 = 5, /* pa7300lc pa 1.1e */ |
pcxu = 6, /* pa8000 pa 2.0 */ |
pcxu_ = 7, /* pa8200 (u+) pa 2.0 */ |
pcxw = 8, /* pa8500 pa 2.0 */ |
pcxw_ = 9, /* pa8600 (w+) pa 2.0 */ |
pcxw2 = 10 /* pa8700 pa 2.0 */ |
}; |
|
extern char *cpu_name_version[][2]; /* mapping from enum cpu_type to strings */ |
|
struct parisc_driver { |
struct parisc_driver *next; |
char *name; |
const struct parisc_device_id *id_table; |
int (*probe) (struct parisc_device *dev); /* New device discovered */ |
}; |
|
struct io_module { |
volatile uint32_t nothing; /* reg 0 */ |
volatile uint32_t io_eim; |
volatile uint32_t io_dc_adata; |
volatile uint32_t io_ii_cdata; |
volatile uint32_t io_dma_link; /* reg 4 */ |
volatile uint32_t io_dma_command; |
volatile uint32_t io_dma_address; |
volatile uint32_t io_dma_count; |
volatile uint32_t io_flex; /* reg 8 */ |
volatile uint32_t io_spa_address; |
volatile uint32_t reserved1[2]; |
volatile uint32_t io_command; /* reg 12 */ |
volatile uint32_t io_status; |
volatile uint32_t io_control; |
volatile uint32_t io_data; |
volatile uint32_t reserved2; /* reg 16 */ |
volatile uint32_t chain_addr; |
volatile uint32_t sub_mask_clr; |
volatile uint32_t reserved3[13]; |
volatile uint32_t undefined[480]; |
volatile uint32_t unpriv[512]; |
}; |
|
struct bc_module { |
volatile uint32_t unused1[12]; |
volatile uint32_t io_command; |
volatile uint32_t io_status; |
volatile uint32_t io_control; |
volatile uint32_t unused2[1]; |
volatile uint32_t io_err_resp; |
volatile uint32_t io_err_info; |
volatile uint32_t io_err_req; |
volatile uint32_t unused3[11]; |
volatile uint32_t io_io_low; |
volatile uint32_t io_io_high; |
}; |
|
#define HPHW_NPROC 0 |
#define HPHW_MEMORY 1 |
#define HPHW_B_DMA 2 |
#define HPHW_OBSOLETE 3 |
#define HPHW_A_DMA 4 |
#define HPHW_A_DIRECT 5 |
#define HPHW_OTHER 6 |
#define HPHW_BCPORT 7 |
#define HPHW_CIO 8 |
#define HPHW_CONSOLE 9 |
#define HPHW_FIO 10 |
#define HPHW_BA 11 |
#define HPHW_IOA 12 |
#define HPHW_BRIDGE 13 |
#define HPHW_FABRIC 14 |
#define HPHW_FAULTY 31 |
|
|
/* hardware.c: */ |
extern const char *parisc_hardware_description(struct parisc_device_id *id); |
extern enum cpu_type parisc_get_cpu_type(unsigned long hversion); |
|
struct pci_dev; |
|
/* drivers.c: */ |
extern struct parisc_device *alloc_pa_dev(unsigned long hpa, |
struct hardware_path *path); |
extern int register_parisc_device(struct parisc_device *dev); |
extern int register_parisc_driver(struct parisc_driver *driver); |
extern int count_parisc_driver(struct parisc_driver *driver); |
extern int unregister_parisc_driver(struct parisc_driver *driver); |
extern void walk_central_bus(void); |
extern void fixup_child_irqs(struct parisc_device *parent, int irqbase, |
int (*choose)(struct parisc_device *parent)); |
extern void print_subdevices(struct parisc_device *dev); |
extern const struct parisc_device *find_pa_parent_type(const struct parisc_device *, int); |
extern void print_parisc_devices(void); |
extern char *print_pa_hwpath(struct parisc_device *dev, char *path); |
extern char *print_pci_hwpath(struct pci_dev *dev, char *path); |
extern void get_pci_node_path(struct pci_dev *dev, struct hardware_path *path); |
|
|
/* inventory.c: */ |
extern void do_memory_inventory(void); |
extern void do_device_inventory(void); |
|
#endif /* _PARISC_HARDWARE_H */ |
/mmu.h
0,0 → 1,7
#ifndef _PARISC_MMU_H_ |
#define _PARISC_MMU_H_ |
|
/* On parisc, we store the space id here */ |
typedef unsigned long mm_context_t; |
|
#endif /* _PARISC_MMU_H_ */ |
/setup.h
0,0 → 1,10
/* |
* Just a place holder. We don't want to have to test x86 before |
* we include stuff |
*/ |
|
#ifndef _i386_SETUP_H |
#define _i386_SETUP_H |
|
|
#endif /* _i386_SETUP_H */ |
/asmregs.h
0,0 → 1,183
/* |
* Copyright (C) 1999 Hewlett-Packard (Frank Rowand) |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2, or (at your option) |
* any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
*/ |
|
#ifndef _PARISC_ASMREGS_H |
#define _PARISC_ASMREGS_H |
|
;! General Registers |
|
rp: .reg %r2 |
arg3: .reg %r23 |
arg2: .reg %r24 |
arg1: .reg %r25 |
arg0: .reg %r26 |
dp: .reg %r27 |
ret0: .reg %r28 |
ret1: .reg %r29 |
sl: .reg %r29 |
sp: .reg %r30 |
|
#if 0 |
/* PA20_REVISIT */ |
arg7: .reg r19 |
arg6: .reg r20 |
arg5: .reg r21 |
arg4: .reg r22 |
gp: .reg r27 |
ap: .reg r29 |
#endif |
|
|
r0: .reg %r0 |
r1: .reg %r1 |
r2: .reg %r2 |
r3: .reg %r3 |
r4: .reg %r4 |
r5: .reg %r5 |
r6: .reg %r6 |
r7: .reg %r7 |
r8: .reg %r8 |
r9: .reg %r9 |
r10: .reg %r10 |
r11: .reg %r11 |
r12: .reg %r12 |
r13: .reg %r13 |
r14: .reg %r14 |
r15: .reg %r15 |
r16: .reg %r16 |
r17: .reg %r17 |
r18: .reg %r18 |
r19: .reg %r19 |
r20: .reg %r20 |
r21: .reg %r21 |
r22: .reg %r22 |
r23: .reg %r23 |
r24: .reg %r24 |
r25: .reg %r25 |
r26: .reg %r26 |
r27: .reg %r27 |
r28: .reg %r28 |
r29: .reg %r29 |
r30: .reg %r30 |
r31: .reg %r31 |
|
|
;! Space Registers |
|
sr0: .reg %sr0 |
sr1: .reg %sr1 |
sr2: .reg %sr2 |
sr3: .reg %sr3 |
sr4: .reg %sr4 |
sr5: .reg %sr5 |
sr6: .reg %sr6 |
sr7: .reg %sr7 |
|
|
;! Floating Point Registers |
|
fr0: .reg %fr0 |
fr1: .reg %fr1 |
fr2: .reg %fr2 |
fr3: .reg %fr3 |
fr4: .reg %fr4 |
fr5: .reg %fr5 |
fr6: .reg %fr6 |
fr7: .reg %fr7 |
fr8: .reg %fr8 |
fr9: .reg %fr9 |
fr10: .reg %fr10 |
fr11: .reg %fr11 |
fr12: .reg %fr12 |
fr13: .reg %fr13 |
fr14: .reg %fr14 |
fr15: .reg %fr15 |
fr16: .reg %fr16 |
fr17: .reg %fr17 |
fr18: .reg %fr18 |
fr19: .reg %fr19 |
fr20: .reg %fr20 |
fr21: .reg %fr21 |
fr22: .reg %fr22 |
fr23: .reg %fr23 |
fr24: .reg %fr24 |
fr25: .reg %fr25 |
fr26: .reg %fr26 |
fr27: .reg %fr27 |
fr28: .reg %fr28 |
fr29: .reg %fr29 |
fr30: .reg %fr30 |
fr31: .reg %fr31 |
|
|
;! Control Registers |
|
rctr: .reg %cr0 |
pidr1: .reg %cr8 |
pidr2: .reg %cr9 |
ccr: .reg %cr10 |
sar: .reg %cr11 |
pidr3: .reg %cr12 |
pidr4: .reg %cr13 |
iva: .reg %cr14 |
eiem: .reg %cr15 |
itmr: .reg %cr16 |
pcsq: .reg %cr17 |
pcoq: .reg %cr18 |
iir: .reg %cr19 |
isr: .reg %cr20 |
ior: .reg %cr21 |
ipsw: .reg %cr22 |
eirr: .reg %cr23 |
tr0: .reg %cr24 |
tr1: .reg %cr25 |
tr2: .reg %cr26 |
tr3: .reg %cr27 |
tr4: .reg %cr28 |
tr5: .reg %cr29 |
tr6: .reg %cr30 |
tr7: .reg %cr31 |
|
|
cr0: .reg %cr0 |
cr8: .reg %cr8 |
cr9: .reg %cr9 |
cr10: .reg %cr10 |
cr11: .reg %cr11 |
cr12: .reg %cr12 |
cr13: .reg %cr13 |
cr14: .reg %cr14 |
cr15: .reg %cr15 |
cr16: .reg %cr16 |
cr17: .reg %cr17 |
cr18: .reg %cr18 |
cr19: .reg %cr19 |
cr20: .reg %cr20 |
cr21: .reg %cr21 |
cr22: .reg %cr22 |
cr23: .reg %cr23 |
cr24: .reg %cr24 |
cr25: .reg %cr25 |
cr26: .reg %cr26 |
cr27: .reg %cr27 |
cr28: .reg %cr28 |
cr29: .reg %cr29 |
cr30: .reg %cr30 |
cr31: .reg %cr31 |
|
#endif |
/ide.h
0,0 → 1,85
/* |
* linux/include/asm-parisc/ide.h |
* |
* Copyright (C) 1994-1996 Linus Torvalds & authors |
*/ |
|
/* |
* This file contains the PARISC architecture specific IDE code. |
*/ |
|
#ifndef __ASM_PARISC_IDE_H |
#define __ASM_PARISC_IDE_H |
|
#ifdef __KERNEL__ |
|
#include <linux/config.h> |
#include <asm/superio.h> |
|
#ifndef MAX_HWIFS |
#define MAX_HWIFS 2 |
#endif |
|
static __inline__ int ide_default_irq(ide_ioreg_t base) |
{ |
switch (base) { |
#ifdef CONFIG_SUPERIO |
case 0x1f0: |
case 0x170: |
return superio_get_ide_irq(); |
#endif /* CONFIG_SUPERIO */ |
default: |
return 0; |
} |
} |
|
static __inline__ ide_ioreg_t ide_default_io_base(int index) |
{ |
switch (index) { |
#ifdef CONFIG_SUPERIO |
case 0: return (superio_get_ide_irq() ? 0x1f0 : 0); |
case 1: return (superio_get_ide_irq() ? 0x170 : 0); |
#endif /* CONFIG_SUPERIO */ |
default: |
return 0; |
} |
} |
|
static __inline__ void ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq) |
{ |
ide_ioreg_t reg = data_port; |
int i; |
|
for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { |
hw->io_ports[i] = reg; |
reg += 1; |
} |
if (ctrl_port) { |
hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port; |
} else { |
hw->io_ports[IDE_CONTROL_OFFSET] = hw->io_ports[IDE_DATA_OFFSET] + 0x206; |
} |
if (irq != NULL) |
*irq = 0; |
hw->io_ports[IDE_IRQ_OFFSET] = 0; |
} |
|
static __inline__ void ide_init_default_hwifs(void) |
{ |
#ifndef CONFIG_BLK_DEV_IDEPCI |
hw_regs_t hw; |
int index; |
|
for(index = 0; index < MAX_HWIFS; index++) { |
ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, NULL); |
hw.irq = ide_default_irq(ide_default_io_base(index)); |
ide_register_hw(&hw, NULL); |
} |
#endif /* CONFIG_BLK_DEV_IDEPCI */ |
} |
|
#include <asm-generic/ide_iops.h> |
|
#endif /* __KERNEL__ */ |
|
#endif /* __ASM_PARISC_IDE_H */ |
/segment.h
0,0 → 1,6
#ifndef __PARISC_SEGMENT_H |
#define __PARISC_SEGMENT_H |
|
/* Only here because we have some old header files that expect it.. */ |
|
#endif |
/types.h
0,0 → 1,55
#ifndef _PARISC_TYPES_H |
#define _PARISC_TYPES_H |
|
typedef unsigned short umode_t; |
|
/* |
* __xx is ok: it doesn't pollute the POSIX namespace. Use these in the |
* header files exported to user space |
*/ |
|
typedef __signed__ char __s8; |
typedef unsigned char __u8; |
|
typedef __signed__ short __s16; |
typedef unsigned short __u16; |
|
typedef __signed__ int __s32; |
typedef unsigned int __u32; |
|
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) |
typedef __signed__ long long __s64; |
typedef unsigned long long __u64; |
#endif |
|
/* |
* These aren't exported outside the kernel to avoid name space clashes |
*/ |
#ifdef __KERNEL__ |
|
typedef signed char s8; |
typedef unsigned char u8; |
|
typedef signed short s16; |
typedef unsigned short u16; |
|
typedef signed int s32; |
typedef unsigned int u32; |
|
typedef signed long long s64; |
typedef unsigned long long u64; |
|
#ifdef __LP64__ |
#define BITS_PER_LONG 64 |
#else |
#define BITS_PER_LONG 32 |
#endif |
|
/* Dma addresses are 32-bits wide. */ |
|
typedef u32 dma_addr_t; |
typedef u64 dma64_addr_t; |
|
#endif /* __KERNEL__ */ |
|
#endif |
/mmzone.h
0,0 → 1,31
#ifndef _PARISC_MMZONE_H |
#define _PARISC_MMZONE_H |
|
struct node_map_data { |
pg_data_t pg_data; |
struct page *adj_node_mem_map; |
}; |
|
extern struct node_map_data node_data[]; |
extern unsigned char *chunkmap; |
|
#define BADCHUNK ((unsigned char)0xff) |
#define CHUNKSZ (256*1024*1024) |
#define CHUNKSHIFT 28 |
#define CHUNKMASK (~(CHUNKSZ - 1)) |
#define CHUNKNUM(paddr) ((paddr) >> CHUNKSHIFT) |
|
#define NODE_DATA(nid) (&node_data[nid].pg_data) |
#define NODE_MEM_MAP(nid) (NODE_DATA(nid)->node_mem_map) |
#define ADJ_NODE_MEM_MAP(nid) (node_data[nid].adj_node_mem_map) |
|
#define phys_to_page(paddr) \ |
(ADJ_NODE_MEM_MAP(chunkmap[CHUNKNUM((paddr))]) \ |
+ ((paddr) >> PAGE_SHIFT)) |
|
#define virt_to_page(kvaddr) phys_to_page(__pa(kvaddr)) |
|
/* This is kind of bogus, need to investigate performance of doing it right */ |
#define VALID_PAGE(page) ((page - mem_map) < max_mapnr) |
|
#endif /* !_PARISC_MMZONE_H */ |
/fcntl.h
0,0 → 1,91
#ifndef _PARISC_FCNTL_H |
#define _PARISC_FCNTL_H |
|
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files |
located on an ext2 file system */ |
#define O_ACCMODE 00000003 |
#define O_RDONLY 00000000 |
#define O_WRONLY 00000001 |
#define O_RDWR 00000002 |
#define O_APPEND 00000010 |
#define O_BLKSEEK 00000100 /* HPUX only */ |
#define O_CREAT 00000400 /* not fcntl */ |
#define O_TRUNC 00001000 /* not fcntl */ |
#define O_EXCL 00002000 /* not fcntl */ |
#define O_LARGEFILE 00004000 |
#define O_SYNC 00100000 |
#define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */ |
#define O_NDELAY O_NONBLOCK |
#define O_NOCTTY 00400000 /* not fcntl */ |
#define O_DSYNC 01000000 /* HPUX only */ |
#define O_RSYNC 02000000 /* HPUX only */ |
|
#define FASYNC 00020000 /* fcntl, for BSD compatibility */ |
#define O_DIRECT 00040000 /* direct disk access hint - currently ignored */ |
#define O_DIRECTORY 00010000 /* must be a directory */ |
#define O_NOFOLLOW 00000200 /* don't follow links */ |
#define O_INVISIBLE 04000000 /* invisible I/O, for DMAPI/XDSM */ |
|
#define F_DUPFD 0 /* dup */ |
#define F_GETFD 1 /* get f_flags */ |
#define F_SETFD 2 /* set f_flags */ |
#define F_GETFL 3 /* more flags (cloexec) */ |
#define F_SETFL 4 |
#define F_GETLK 5 |
#define F_SETLK 6 |
#define F_SETLKW 7 |
#define F_GETLK64 8 |
#define F_SETLK64 9 |
#define F_SETLKW64 10 |
|
#define F_GETOWN 11 /* for sockets. */ |
#define F_SETOWN 12 /* for sockets. */ |
#define F_SETSIG 13 /* for sockets. */ |
#define F_GETSIG 14 /* for sockets. */ |
|
/* for F_[GET|SET]FL */ |
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ |
|
/* for posix fcntl() and lockf() */ |
#define F_RDLCK 01 |
#define F_WRLCK 02 |
#define F_UNLCK 03 |
|
/* for old implementation of bsd flock () */ |
#define F_EXLCK 4 /* or 3 */ |
#define F_SHLCK 8 /* or 4 */ |
|
/* for leases */ |
#define F_INPROGRESS 16 |
|
/* operations for bsd flock(), also used by the kernel implementation */ |
#define LOCK_SH 1 /* shared lock */ |
#define LOCK_EX 2 /* exclusive lock */ |
#define LOCK_NB 4 /* or'd with one of the above to prevent |
blocking */ |
#define LOCK_UN 8 /* remove lock */ |
|
#define LOCK_MAND 32 /* This is a mandatory flock */ |
#define LOCK_READ 64 /* ... Which allows concurrent read operations */ |
#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */ |
#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */ |
|
struct flock { |
short l_type; |
short l_whence; |
off_t l_start; |
off_t l_len; |
pid_t l_pid; |
}; |
|
struct flock64 { |
short l_type; |
short l_whence; |
loff_t l_start; |
loff_t l_len; |
pid_t l_pid; |
}; |
|
#define F_LINUX_SPECIFIC_BASE 1024 |
|
#endif |
/pdc.h
0,0 → 1,1015
#ifndef _PARISC_PDC_H |
#define _PARISC_PDC_H |
|
/* |
* PDC return values ... |
* All PDC calls return a subset of these errors. |
*/ |
|
#define PDC_WARN 3 /* Call completed with a warning */ |
#define PDC_REQ_ERR_1 2 /* See above */ |
#define PDC_REQ_ERR_0 1 /* Call would generate a requestor error */ |
#define PDC_OK 0 /* Call completed successfully */ |
#define PDC_BAD_PROC -1 /* Called non-existent procedure*/ |
#define PDC_BAD_OPTION -2 /* Called with non-existent option */ |
#define PDC_ERROR -3 /* Call could not complete without an error */ |
#define PDC_NE_MOD -5 /* Module not found */ |
#define PDC_NE_CELL_MOD -7 /* Cell module not found */ |
#define PDC_INVALID_ARG -10 /* Called with an invalid argument */ |
#define PDC_BUS_POW_WARN -12 /* Call could not complete in allowed power budget */ |
#define PDC_NOT_NARROW -17 /* Narrow mode not supported */ |
|
|
/* |
* PDC entry points... |
*/ |
|
#define PDC_POW_FAIL 1 /* perform a power-fail */ |
#define PDC_POW_FAIL_PREPARE 0 /* prepare for powerfail */ |
|
#define PDC_CHASSIS 2 /* PDC-chassis functions */ |
#define PDC_CHASSIS_DISP 0 /* update chassis display */ |
#define PDC_CHASSIS_WARN 1 /* return chassis warnings */ |
#define PDC_CHASSIS_DISPWARN 2 /* update&return chassis status */ |
#define PDC_RETURN_CHASSIS_INFO 128 /* HVERSION dependent: return chassis LED/LCD info */ |
|
#define PDC_PIM 3 /* Get PIM data */ |
#define PDC_PIM_HPMC 0 /* Transfer HPMC data */ |
#define PDC_PIM_RETURN_SIZE 1 /* Get Max buffer needed for PIM*/ |
#define PDC_PIM_LPMC 2 /* Transfer HPMC data */ |
#define PDC_PIM_SOFT_BOOT 3 /* Transfer Soft Boot data */ |
#define PDC_PIM_TOC 4 /* Transfer TOC data */ |
|
#define PDC_MODEL 4 /* PDC model information call */ |
#define PDC_MODEL_INFO 0 /* returns information */ |
#define PDC_MODEL_BOOTID 1 /* set the BOOT_ID */ |
#define PDC_MODEL_VERSIONS 2 /* returns cpu-internal versions*/ |
#define PDC_MODEL_SYSMODEL 3 /* return system model info */ |
#define PDC_MODEL_ENSPEC 4 /* enable specific option */ |
#define PDC_MODEL_DISPEC 5 /* disable specific option */ |
#define PDC_MODEL_CPU_ID 6 /* returns cpu-id (only newer machines!) */ |
#define PDC_MODEL_CAPABILITIES 7 /* returns OS32/OS64-flags */ |
#define PDC_MODEL_GET_BOOT__OP 8 /* returns boot test options */ |
#define PDC_MODEL_SET_BOOT__OP 9 /* set boot test options */ |
|
#define PA89_INSTRUCTION_SET 0x4 /* capatibilies returned */ |
#define PA90_INSTRUCTION_SET 0x8 |
|
#define PDC_CACHE 5 /* return/set cache (& TLB) info*/ |
#define PDC_CACHE_INFO 0 /* returns information */ |
#define PDC_CACHE_SET_COH 1 /* set coherence state */ |
#define PDC_CACHE_RET_SPID 2 /* returns space-ID bits */ |
|
#define PDC_HPA 6 /* return HPA of processor */ |
#define PDC_HPA_PROCESSOR 0 |
#define PDC_HPA_MODULES 1 |
|
#define PDC_COPROC 7 /* Co-Processor (usually FP unit(s)) */ |
#define PDC_COPROC_CFG 0 /* Co-Processor Cfg (FP unit(s) enabled?) */ |
|
#define PDC_IODC 8 /* talk to IODC */ |
#define PDC_IODC_READ 0 /* read IODC entry point */ |
/* PDC_IODC_RI_ * INDEX parameter of PDC_IODC_READ */ |
#define PDC_IODC_RI_DATA_BYTES 0 /* IODC Data Bytes */ |
/* 1, 2 obsolete - HVERSION dependent*/ |
#define PDC_IODC_RI_INIT 3 /* Initialize module */ |
#define PDC_IODC_RI_IO 4 /* Module input/output */ |
#define PDC_IODC_RI_SPA 5 /* Module input/output */ |
#define PDC_IODC_RI_CONFIG 6 /* Module input/output */ |
/* 7 obsolete - HVERSION dependent */ |
#define PDC_IODC_RI_TEST 8 /* Module input/output */ |
#define PDC_IODC_RI_TLB 9 /* Module input/output */ |
#define PDC_IODC_NINIT 2 /* non-destructive init */ |
#define PDC_IODC_DINIT 3 /* destructive init */ |
#define PDC_IODC_MEMERR 4 /* check for memory errors */ |
#define PDC_IODC_INDEX_DATA 0 /* get first 16 bytes from mod IODC */ |
#define PDC_IODC_BUS_ERROR -4 /* bus error return value */ |
#define PDC_IODC_INVALID_INDEX -5 /* invalid index return value */ |
#define PDC_IODC_COUNT -6 /* count is too small */ |
|
#define PDC_TOD 9 /* time-of-day clock (TOD) */ |
#define PDC_TOD_READ 0 /* read TOD */ |
#define PDC_TOD_WRITE 1 /* write TOD */ |
#define PDC_TOD_ITIMER 2 /* calibrate Interval Timer (CR16) */ |
|
#define PDC_STABLE 10 /* stable storage (sprockets) */ |
#define PDC_STABLE_READ 0 |
#define PDC_STABLE_WRITE 1 |
#define PDC_STABLE_RETURN_SIZE 2 |
#define PDC_STABLE_VERIFY_CONTENTS 3 |
#define PDC_STABLE_INITIALIZE 4 |
|
#define PDC_NVOLATILE 11 /* often not implemented */ |
|
#define PDC_ADD_VALID 12 /* Memory validation PDC call */ |
#define PDC_ADD_VALID_VERIFY 0 /* Make PDC_ADD_VALID verify region */ |
|
#define PDC_INSTR 15 /* get instr to invoke PDCE_CHECK() */ |
|
#define PDC_PROC 16 /* (sprockets) */ |
|
#define PDC_CONFIG 16 /* (sprockets) */ |
#define PDC_CONFIG_DECONFIG 0 |
#define PDC_CONFIG_DRECONFIG 1 |
#define PDC_CONFIG_DRETURN_CONFIG 2 |
|
#define PDC_BLOCK_TLB 18 /* manage hardware block-TLB */ |
#define PDC_BTLB_INFO 0 /* returns parameter */ |
#define PDC_BTLB_INSERT 1 /* insert BTLB entry */ |
#define PDC_BTLB_PURGE 2 /* purge BTLB entries */ |
#define PDC_BTLB_PURGE_ALL 3 /* purge all BTLB entries */ |
|
#define PDC_TLB 19 /* manage hardware TLB miss handling */ |
#define PDC_TLB_INFO 0 /* returns parameter */ |
#define PDC_TLB_SETUP 1 /* set up miss handling */ |
|
#define PDC_MEM 20 /* Manage memory */ |
#define PDC_MEM_MEMINFO 0 |
#define PDC_MEM_ADD_PAGE 1 |
#define PDC_MEM_CLEAR_PDT 2 |
#define PDC_MEM_READ_PDT 3 |
#define PDC_MEM_RESET_CLEAR 4 |
#define PDC_MEM_GOODMEM 5 |
#define PDC_MEM_TABLE 128 /* Non contig mem map (sprockets) */ |
#define PDC_MEM_RETURN_ADDRESS_TABLE PDC_MEM_TABLE |
#define PDC_MEM_GET_MEMORY_SYSTEM_TABLES_SIZE 131 |
#define PDC_MEM_GET_MEMORY_SYSTEM_TABLES 132 |
#define PDC_MEM_GET_PHYSICAL_LOCATION_FROM_MEMORY_ADDRESS 133 |
|
#define PDC_MEM_RET_SBE_REPLACED 5 /* PDC_MEM return values */ |
#define PDC_MEM_RET_DUPLICATE_ENTRY 4 |
#define PDC_MEM_RET_BUF_SIZE_SMALL 1 |
#define PDC_MEM_RET_PDT_FULL -11 |
#define PDC_MEM_RET_INVALID_PHYSICAL_LOCATION ~0ULL |
|
#ifndef __ASSEMBLY__ |
typedef struct { |
unsigned long long baseAddr; |
unsigned int pages; |
unsigned int reserved; |
} MemAddrTable_t; |
#endif |
|
|
#define PDC_PSW 21 /* Get/Set default System Mask */ |
#define PDC_PSW_MASK 0 /* Return mask */ |
#define PDC_PSW_GET_DEFAULTS 1 /* Return defaults */ |
#define PDC_PSW_SET_DEFAULTS 2 /* Set default */ |
#define PDC_PSW_ENDIAN_BIT 1 /* set for big endian */ |
#define PDC_PSW_WIDE_BIT 2 /* set for wide mode */ |
|
#define PDC_SYSTEM_MAP 22 /* find system modules */ |
#define PDC_FIND_MODULE 0 |
#define PDC_FIND_ADDRESS 1 |
#define PDC_TRANSLATE_PATH 2 |
|
#define PDC_SOFT_POWER 23 /* soft power switch */ |
#define PDC_SOFT_POWER_INFO 0 /* return info about the soft power switch */ |
#define PDC_SOFT_POWER_ENABLE 1 /* enable/disable soft power switch */ |
|
|
/* HVERSION dependent */ |
|
/* The PDC_MEM_MAP calls */ |
#define PDC_MEM_MAP 128 /* on s700: return page info */ |
#define PDC_MEM_MAP_HPA 0 /* returns hpa of a module */ |
|
#define PDC_EEPROM 129 /* EEPROM access */ |
#define PDC_EEPROM_READ_WORD 0 |
#define PDC_EEPROM_WRITE_WORD 1 |
#define PDC_EEPROM_READ_BYTE 2 |
#define PDC_EEPROM_WRITE_BYTE 3 |
#define PDC_EEPROM_EEPROM_PASSWORD -1000 |
|
#define PDC_NVM 130 /* NVM (non-volatile memory) access */ |
#define PDC_NVM_READ_WORD 0 |
#define PDC_NVM_WRITE_WORD 1 |
#define PDC_NVM_READ_BYTE 2 |
#define PDC_NVM_WRITE_BYTE 3 |
|
#define PDC_SEED_ERROR 132 /* (sprockets) */ |
|
#define PDC_IO 135 /* log error info, reset IO system */ |
#define PDC_IO_READ_AND_CLEAR_ERRORS 0 |
#define PDC_IO_READ_AND_LOG_ERRORS 1 |
#define PDC_IO_SUSPEND_USB 2 |
/* sets bits 6&7 (little endian) of the HcControl Register */ |
#define PDC_IO_USB_SUSPEND 0xC000000000000000 |
#define PDC_IO_EEPROM_IO_ERR_TABLE_FULL -5 /* return value */ |
#define PDC_IO_NO_SUSPEND -6 /* return value */ |
|
#define PDC_BROADCAST_RESET 136 /* reset all processors */ |
#define PDC_DO_RESET 0 /* option: perform a broadcast reset */ |
#define PDC_DO_FIRM_TEST_RESET 1 /* Do broadcast reset with bitmap */ |
#define PDC_BR_RECONFIGURATION 2 /* reset w/reconfiguration */ |
#define PDC_FIRM_TEST_MAGIC 0xab9ec36fUL /* for this reboot only */ |
|
#define PDC_LAN_STATION_ID 138 /* Hversion dependent mechanism for */ |
#define PDC_LAN_STATION_ID_READ 0 /* getting the lan station address */ |
|
#define PDC_LAN_STATION_ID_SIZE 6 |
|
#define PDC_CHECK_RANGES 139 /* (sprockets) */ |
|
#define PDC_NV_SECTIONS 141 /* (sprockets) */ |
|
#define PDC_PERFORMANCE 142 /* performance monitoring */ |
|
#define PDC_SYSTEM_INFO 143 /* system information */ |
#define PDC_SYSINFO_RETURN_INFO_SIZE 0 |
#define PDC_SYSINFO_RRETURN_SYS_INFO 1 |
#define PDC_SYSINFO_RRETURN_ERRORS 2 |
#define PDC_SYSINFO_RRETURN_WARNINGS 3 |
#define PDC_SYSINFO_RETURN_REVISIONS 4 |
#define PDC_SYSINFO_RRETURN_DIAGNOSE 5 |
#define PDC_SYSINFO_RRETURN_HV_DIAGNOSE 1005 |
|
#define PDC_RDR 144 /* (sprockets) */ |
#define PDC_RDR_READ_BUFFER 0 |
#define PDC_RDR_READ_SINGLE 1 |
#define PDC_RDR_WRITE_SINGLE 2 |
|
#define PDC_INTRIGUE 145 /* (sprockets) */ |
#define PDC_INTRIGUE_WRITE_BUFFER 0 |
#define PDC_INTRIGUE_GET_SCRATCH_BUFSIZE 1 |
#define PDC_INTRIGUE_START_CPU_COUNTERS 2 |
#define PDC_INTRIGUE_STOP_CPU_COUNTERS 3 |
|
#define PDC_STI 146 /* STI access */ |
/* same as PDC_PCI_XXX values (see below) */ |
|
/* Legacy PDC definitions for same stuff */ |
#define PDC_PCI_INDEX 147 |
#define PDC_PCI_INTERFACE_INFO 0 |
#define PDC_PCI_SLOT_INFO 1 |
#define PDC_PCI_INFLIGHT_BYTES 2 |
#define PDC_PCI_READ_CONFIG 3 |
#define PDC_PCI_WRITE_CONFIG 4 |
#define PDC_PCI_READ_PCI_IO 5 |
#define PDC_PCI_WRITE_PCI_IO 6 |
#define PDC_PCI_READ_CONFIG_DELAY 7 |
#define PDC_PCI_UPDATE_CONFIG_DELAY 8 |
#define PDC_PCI_PCI_PATH_TO_PCI_HPA 9 |
#define PDC_PCI_PCI_HPA_TO_PCI_PATH 10 |
#define PDC_PCI_PCI_PATH_TO_PCI_BUS 11 |
#define PDC_PCI_PCI_RESERVED 12 |
#define PDC_PCI_PCI_INT_ROUTE_SIZE 13 |
#define PDC_PCI_GET_INT_TBL_SIZE PDC_PCI_PCI_INT_ROUTE_SIZE |
#define PDC_PCI_PCI_INT_ROUTE 14 |
#define PDC_PCI_GET_INT_TBL PDC_PCI_PCI_INT_ROUTE |
#define PDC_PCI_READ_MON_TYPE 15 |
#define PDC_PCI_WRITE_MON_TYPE 16 |
|
|
/* Get SCSI Interface Card info: SDTR, SCSI ID, mode (SE vs LVD) */ |
#define PDC_INITIATOR 163 |
#define PDC_GET_INITIATOR 0 |
#define PDC_SET_INITIATOR 1 |
#define PDC_DELETE_INITIATOR 2 |
#define PDC_RETURN_TABLE_SIZE 3 |
#define PDC_RETURN_TABLE 4 |
|
#define PDC_LINK 165 /* (sprockets) */ |
#define PDC_LINK_PCI_ENTRY_POINTS 0 /* list (Arg1) = 0 */ |
#define PDC_LINK_USB_ENTRY_POINTS 1 /* list (Arg1) = 1 */ |
|
|
/* constants for OS (NVM...) */ |
#define OS_ID_NONE 0 /* Undefined OS ID */ |
#define OS_ID_HPUX 1 /* HP-UX OS */ |
#define OS_ID_LINUX OS_ID_HPUX /* just use the same value as hpux */ |
#define OS_ID_MPEXL 2 /* MPE XL OS */ |
#define OS_ID_OSF 3 /* OSF OS */ |
#define OS_ID_HPRT 4 /* HP-RT OS */ |
#define OS_ID_NOVEL 5 /* NOVELL OS */ |
#define OS_ID_NT 6 /* NT OS */ |
|
|
/* constants for PDC_CHASSIS */ |
#define OSTAT_OFF 0 |
#define OSTAT_FLT 1 |
#define OSTAT_TEST 2 |
#define OSTAT_INIT 3 |
#define OSTAT_SHUT 4 |
#define OSTAT_WARN 5 |
#define OSTAT_RUN 6 |
#define OSTAT_ON 7 |
|
#ifdef __LP64__ |
/* PDC PAT CELL */ |
#define PDC_PAT_CELL 64L /* Interface for gaining and |
* manipulating cell state within PD */ |
#define PDC_PAT_CELL_GET_NUMBER 0L /* Return Cell number */ |
#define PDC_PAT_CELL_GET_INFO 1L /* Returns info about Cell */ |
#define PDC_PAT_CELL_MODULE 2L /* Returns info about Module */ |
#define PDC_PAT_CELL_SET_ATTENTION 9L /* Set Cell Attention indicator */ |
#define PDC_PAT_CELL_NUMBER_TO_LOC 10L /* Cell Number -> Location */ |
#define PDC_PAT_CELL_WALK_FABRIC 11L /* Walk the Fabric */ |
#define PDC_PAT_CELL_GET_RDT_SIZE 12L /* Return Route Distance Table Sizes */ |
#define PDC_PAT_CELL_GET_RDT 13L /* Return Route Distance Tables */ |
#define PDC_PAT_CELL_GET_LOCAL_PDH_SZ 14L /* Read Local PDH Buffer Size*/ |
#define PDC_PAT_CELL_SET_LOCAL_PDH 15L /* Write Local PDH Buffer */ |
#define PDC_PAT_CELL_GET_REMOTE_PDH_SZ 16L /* Return Remote PDH Buffer Size */ |
#define PDC_PAT_CELL_GET_REMOTE_PDH 17L /* Read Remote PDH Buffer */ |
#define PDC_PAT_CELL_GET_DBG_INFO 128L /* Return DBG Buffer Info */ |
#define PDC_PAT_CELL_CHANGE_ALIAS 129L /* Change Non-Equivalent Alias Checking */ |
|
/* |
** Arg to PDC_PAT_CELL_MODULE memaddr[4] |
** |
** Addresses on the Merced Bus != all Runway Bus addresses. |
** This is intended for programming SBA/LBA chips range registers. |
*/ |
#define IO_VIEW 0UL |
#define PA_VIEW 1UL |
|
/* PDC_PAT_CELL_MODULE entity type values */ |
#define PAT_ENTITY_CA 0 /* central agent */ |
#define PAT_ENTITY_PROC 1 /* processor */ |
#define PAT_ENTITY_MEM 2 /* memory controller */ |
#define PAT_ENTITY_SBA 3 /* system bus adapter */ |
#define PAT_ENTITY_LBA 4 /* local bus adapter */ |
#define PAT_ENTITY_PBC 5 /* processor bus converter */ |
#define PAT_ENTITY_XBC 6 /* crossbar fabric connect */ |
#define PAT_ENTITY_RC 7 /* fabric interconnect */ |
|
/* PDC_PAT_CELL_MODULE address range type values */ |
#define PAT_PBNUM 0 /* PCI Bus Number */ |
#define PAT_LMMIO 1 /* < 4G MMIO Space */ |
#define PAT_GMMIO 2 /* > 4G MMIO Space */ |
#define PAT_NPIOP 3 /* Non Postable I/O Port Space */ |
#define PAT_PIOP 4 /* Postable I/O Port Space */ |
#define PAT_AHPA 5 /* Additional HPA Space */ |
#define PAT_UFO 6 /* HPA Space (UFO for Mariposa) */ |
#define PAT_GNIP 7 /* GNI Reserved Space */ |
|
|
/* PDC PAT CHASSIS LOG */ |
#define PDC_PAT_CHASSIS_LOG 65L /* Platform logging & forward |
** progress functions */ |
#define PDC_PAT_CHASSIS_WRITE_LOG 0L /* Write Log Entry */ |
#define PDC_PAT_CHASSIS_READ_LOG 1L /* Read Log Entry */ |
|
|
/* PDC PAT CPU */ |
#define PDC_PAT_CPU 67L /* Interface to CPU configuration |
* within the protection domain */ |
#define PDC_PAT_CPU_INFO 0L /* Return CPU config info */ |
#define PDC_PAT_CPU_DELETE 1L /* Delete CPU */ |
#define PDC_PAT_CPU_ADD 2L /* Add CPU */ |
#define PDC_PAT_CPU_GET_NUMBER 3L /* Return CPU Number */ |
#define PDC_PAT_CPU_GET_HPA 4L /* Return CPU HPA */ |
#define PDC_PAT_CPU_STOP 5L /* Stop CPU */ |
#define PDC_PAT_CPU_RENDEZVOUS 6L /* Rendezvous CPU */ |
#define PDC_PAT_CPU_GET_CLOCK_INFO 7L /* Return CPU Clock info */ |
#define PDC_PAT_CPU_GET_RENDEZVOUS_STATE 8L /* Return Rendezvous State */ |
#define PDC_PAT_CPU_PLUNGE_FABRIC 128L /* Plunge Fabric */ |
#define PDC_PAT_CPU_UPDATE_CACHE_CLEANSING 129L /* Manipulate Cache |
* Cleansing Mode */ |
|
/* PDC PAT EVENT */ |
#define PDC_PAT_EVENT 68L /* Interface to Platform Events */ |
#define PDC_PAT_EVENT_GET_CAPS 0L /* Get Capabilities */ |
#define PDC_PAT_EVENT_SET_MODE 1L /* Set Notification Mode */ |
#define PDC_PAT_EVENT_SCAN 2L /* Scan Event */ |
#define PDC_PAT_EVENT_HANDLE 3L /* Handle Event */ |
#define PDC_PAT_EVENT_GET_NB_CALL 4L /* Get Non-Blocking call Args*/ |
|
/* PDC PAT HPMC */ |
#define PDC_PAT_HPMC 70L /* Cause processor to go into spin |
** loop, and wait for wake up from |
** Monarch Processor */ |
#define PDC_PAT_HPMC_RENDEZ_CPU 0L /* go into spin loop */ |
#define PDC_PAT_HPMC_SET_PARAMS 1L /* Allows OS to specify intr which PDC |
* will use to interrupt OS during machine |
* check rendezvous */ |
|
/* parameters for PDC_PAT_HPMC_SET_PARAMS */ |
#define HPMC_SET_PARAMS_INTR 1L /* Rendezvous Interrupt */ |
#define HPMC_SET_PARAMS_WAKE 2L /* Wake up processor */ |
|
/* PDC PAT IO */ |
#define PDC_PAT_IO 71L /* On-line services for I/O modules */ |
#define PDC_PAT_IO_GET_SLOT_STATUS 5L /* Get Slot Status Info */ |
#define PDC_PAT_IO_GET_LOC_FROM_HARDWARE 6L /* Get Physical Location from */ |
/* Hardware Path */ |
#define PDC_PAT_IO_GET_HARDWARE_FROM_LOC 7L /* Get Hardware Path from |
* Physical Location */ |
#define PDC_PAT_IO_GET_PCI_CONFIG_FROM_HW 11L /* Get PCI Configuration |
* Address from Hardware Path */ |
#define PDC_PAT_IO_GET_HW_FROM_PCI_CONFIG 12L /* Get Hardware Path |
* from PCI Configuration Address */ |
#define PDC_PAT_IO_READ_HOST_BRIDGE_INFO 13L /* Read Host Bridge State Info */ |
#define PDC_PAT_IO_CLEAR_HOST_BRIDGE_INFO 14L /* Clear Host Bridge State Info*/ |
#define PDC_PAT_IO_GET_PCI_ROUTING_TABLE_SIZE 15L /* Get PCI INT Routing Table |
* Size */ |
#define PDC_PAT_IO_GET_PCI_ROUTING_TABLE 16L /* Get PCI INT Routing Table */ |
#define PDC_PAT_IO_GET_HINT_TABLE_SIZE 17L /* Get Hint Table Size */ |
#define PDC_PAT_IO_GET_HINT_TABLE 18L /* Get Hint Table */ |
#define PDC_PAT_IO_PCI_CONFIG_READ 19L /* PCI Config Read */ |
#define PDC_PAT_IO_PCI_CONFIG_WRITE 20L /* PCI Config Write */ |
#define PDC_PAT_IO_GET_NUM_IO_SLOTS 21L /* Get Number of I/O Bay Slots in |
* Cabinet */ |
#define PDC_PAT_IO_GET_LOC_IO_SLOTS 22L /* Get Physical Location of I/O */ |
/* Bay Slots in Cabinet */ |
#define PDC_PAT_IO_BAY_STATUS_INFO 28L /* Get I/O Bay Slot Status Info */ |
#define PDC_PAT_IO_GET_PROC_VIEW 29L /* Get Processor view of IO address */ |
#define PDC_PAT_IO_PROG_SBA_DIR_RANGE 30L /* Program directed range */ |
|
/* PDC PAT MEM */ |
#define PDC_PAT_MEM 72L /* Manage memory page deallocation */ |
#define PDC_PAT_MEM_PD_INFO 0L /* Return PDT info for PD */ |
#define PDC_PAT_MEM_PD_CLEAR 1L /* Clear PDT for PD */ |
#define PDC_PAT_MEM_PD_READ 2L /* Read PDT entries for PD */ |
#define PDC_PAT_MEM_PD_RESET 3L /* Reset clear bit for PD */ |
#define PDC_PAT_MEM_CELL_INFO 5L /* Return PDT info For Cell */ |
#define PDC_PAT_MEM_CELL_CLEAR 6L /* Clear PDT For Cell */ |
#define PDC_PAT_MEM_CELL_READ 7L /* Read PDT entries For Cell */ |
#define PDC_PAT_MEM_CELL_RESET 8L /* Reset clear bit For Cell */ |
#define PDC_PAT_MEM_SETGM 9L /* Set Golden Memory value */ |
#define PDC_PAT_MEM_ADD_PAGE 10L /* ADDs a page to the cell */ |
#define PDC_PAT_MEM_ADDRESS 11L /* Get Physical Location From*/ |
/* Memory Address */ |
#define PDC_PAT_MEM_GET_TXT_SIZE 12L /* Get Formatted Text Size */ |
#define PDC_PAT_MEM_GET_PD_TXT 13L /* Get PD Formatted Text */ |
#define PDC_PAT_MEM_GET_CELL_TXT 14L /* Get Cell Formatted Text */ |
#define PDC_PAT_MEM_RD_STATE_INFO 15L /* Read Mem Module State Info*/ |
#define PDC_PAT_MEM_CLR_STATE_INFO 16L /*Clear Mem Module State Info*/ |
#define PDC_PAT_MEM_CLEAN_RANGE 128L /*Clean Mem in specific range*/ |
#define PDC_PAT_MEM_GET_TBL_SIZE 131L /* Get Memory Table Size */ |
#define PDC_PAT_MEM_GET_TBL 132L /* Get Memory Table */ |
|
/* PDC PAT NVOLATILE */ |
#define PDC_PAT_NVOLATILE 73L /* Access Non-Volatile Memory*/ |
#define PDC_PAT_NVOLATILE_READ 0L /* Read Non-Volatile Memory */ |
#define PDC_PAT_NVOLATILE_WRITE 1L /* Write Non-Volatile Memory */ |
#define PDC_PAT_NVOLATILE_GET_SIZE 2L /* Return size of NVM */ |
#define PDC_PAT_NVOLATILE_VERIFY 3L /* Verify contents of NVM */ |
#define PDC_PAT_NVOLATILE_INIT 4L /* Initialize NVM */ |
|
/* PDC PAT PD */ |
#define PDC_PAT_PD 74L /* Protection Domain Info */ |
#define PDC_PAT_PD_GET_ADDR_MAP 0L /* Get Address Map */ |
|
/* PDC_PAT_PD_GET_ADDR_MAP entry types */ |
#define PAT_MEMORY_DESCRIPTOR 1 |
|
/* PDC_PAT_PD_GET_ADDR_MAP memory types */ |
#define PAT_MEMTYPE_MEMORY 0 |
#define PAT_MEMTYPE_FIRMWARE 4 |
|
/* PDC_PAT_PD_GET_ADDR_MAP memory usage */ |
#define PAT_MEMUSE_GENERAL 0 |
#define PAT_MEMUSE_GI 128 |
#define PAT_MEMUSE_GNI 129 |
#endif /* __LP64__ */ |
|
#ifndef __ASSEMBLY__ |
|
#include <linux/types.h> |
|
extern int pdc_type; |
|
/* Values for pdc_type */ |
#define PDC_TYPE_ILLEGAL -1 |
#define PDC_TYPE_PAT 0 /* 64-bit PAT-PDC */ |
#define PDC_TYPE_SYSTEM_MAP 1 /* 32-bit, but supports PDC_SYSTEM_MAP */ |
#define PDC_TYPE_SNAKE 2 /* Doesn't support SYSTEM_MAP */ |
|
#define is_pdc_pat() (pdc_type == PDC_TYPE_PAT) |
|
struct pdc_chassis_info { /* for PDC_CHASSIS_INFO */ |
unsigned long actcnt; /* actual number of bytes returned */ |
unsigned long maxcnt; /* maximum number of bytes that could be returned */ |
}; |
|
struct pdc_coproc_cfg { /* for PDC_COPROC_CFG */ |
unsigned long ccr_functional; |
unsigned long ccr_present; |
unsigned long revision; |
unsigned long model; |
}; |
|
struct pdc_model { /* for PDC_MODEL */ |
unsigned long hversion; |
unsigned long sversion; |
unsigned long hw_id; |
unsigned long boot_id; |
unsigned long sw_id; |
unsigned long sw_cap; |
unsigned long arch_rev; |
unsigned long pot_key; |
unsigned long curr_key; |
}; |
|
/* Values for PDC_MODEL_CAPABILITES non-equivalent virtual aliasing support */ |
|
#define PDC_MODEL_IOPDIR_FDC (1 << 2) /* see sba_iommu.c */ |
#define PDC_MODEL_NVA_MASK (3 << 4) |
#define PDC_MODEL_NVA_SUPPORTED (0 << 4) |
#define PDC_MODEL_NVA_SLOW (1 << 4) |
#define PDC_MODEL_NVA_UNSUPPORTED (3 << 4) |
|
struct pdc_cache_cf { /* for PDC_CACHE (I/D-caches) */ |
unsigned long |
#ifdef __LP64__ |
cc_padW:32, |
#endif |
cc_alias:4, /* alias boundaries for virtual addresses */ |
cc_block: 4, /* to determine most efficient stride */ |
cc_line : 3, /* maximum amount written back as a result of store (multiple of 16 bytes) */ |
cc_pad0 : 2, /* reserved */ |
cc_wt : 1, /* 0 = WT-Dcache, 1 = WB-Dcache */ |
cc_sh : 2, /* 0 = separate I/D-cache, else shared I/D-cache */ |
cc_cst : 3, /* 0 = incoherent D-cache, 1=coherent D-cache */ |
cc_pad1 : 5, /* reserved */ |
cc_assoc: 8; /* associativity of I/D-cache */ |
}; |
|
struct pdc_tlb_cf { /* for PDC_CACHE (I/D-TLB's) */ |
unsigned long tc_pad0:12, /* reserved */ |
#ifdef __LP64__ |
tc_padW:32, |
#endif |
tc_sh : 2, /* 0 = separate I/D-TLB, else shared I/D-TLB */ |
tc_hv : 1, /* HV */ |
tc_page : 1, /* 0 = 2K page-size-machine, 1 = 4k page size */ |
tc_cst : 3, /* 0 = incoherent operations, else coherent operations */ |
tc_aid : 5, /* ITLB: width of access ids of processor (encoded!) */ |
tc_pad1 : 8; /* ITLB: width of space-registers (encoded) */ |
}; |
|
struct pdc_cache_info { /* main-PDC_CACHE-structure (caches & TLB's) */ |
/* I-cache */ |
unsigned long ic_size; /* size in bytes */ |
struct pdc_cache_cf ic_conf; /* configuration */ |
unsigned long ic_base; /* base-addr */ |
unsigned long ic_stride; |
unsigned long ic_count; |
unsigned long ic_loop; |
/* D-cache */ |
unsigned long dc_size; /* size in bytes */ |
struct pdc_cache_cf dc_conf; /* configuration */ |
unsigned long dc_base; /* base-addr */ |
unsigned long dc_stride; |
unsigned long dc_count; |
unsigned long dc_loop; |
/* Instruction-TLB */ |
unsigned long it_size; /* number of entries in I-TLB */ |
struct pdc_tlb_cf it_conf; /* I-TLB-configuration */ |
unsigned long it_sp_base; |
unsigned long it_sp_stride; |
unsigned long it_sp_count; |
unsigned long it_off_base; |
unsigned long it_off_stride; |
unsigned long it_off_count; |
unsigned long it_loop; |
/* data-TLB */ |
unsigned long dt_size; /* number of entries in D-TLB */ |
struct pdc_tlb_cf dt_conf; /* D-TLB-configuration */ |
unsigned long dt_sp_base; |
unsigned long dt_sp_stride; |
unsigned long dt_sp_count; |
unsigned long dt_off_base; |
unsigned long dt_off_stride; |
unsigned long dt_off_count; |
unsigned long dt_loop; |
}; |
|
#if 0 |
/* If you start using the next struct, you'll have to adjust it to |
* work with 64-bit firmware I think -PB |
*/ |
struct pdc_iodc { /* PDC_IODC */ |
unsigned char hversion_model; |
unsigned char hversion; |
unsigned char spa; |
unsigned char type; |
unsigned int sversion_rev:4; |
unsigned int sversion_model:19; |
unsigned int sversion_opt:8; |
unsigned char rev; |
unsigned char dep; |
unsigned char features; |
unsigned char pad1; |
unsigned int checksum:16; |
unsigned int length:16; |
unsigned int pad[15]; |
} __attribute__((aligned(8))) ; |
#endif |
|
#ifndef CONFIG_PA20 |
/* no BLTBs in pa2.0 processors */ |
struct pdc_btlb_info_range { |
__u8 res00; |
__u8 num_i; |
__u8 num_d; |
__u8 num_comb; |
}; |
|
struct pdc_btlb_info { /* PDC_BLOCK_TLB, return of PDC_BTLB_INFO */ |
unsigned int min_size; /* minimum size of BTLB in pages */ |
unsigned int max_size; /* maximum size of BTLB in pages */ |
struct pdc_btlb_info_range fixed_range_info; |
struct pdc_btlb_info_range variable_range_info; |
}; |
|
#endif /* !CONFIG_PA20 */ |
|
#ifdef __LP64__ |
struct pdc_memory_table_raddr { /* PDC_MEM/PDC_MEM_TABLE (return info) */ |
unsigned long entries_returned; |
unsigned long entries_total; |
}; |
|
struct pdc_memory_table { /* PDC_MEM/PDC_MEM_TABLE (arguments) */ |
unsigned long paddr; |
unsigned int pages; |
unsigned int reserved; |
}; |
#endif /* __LP64__ */ |
|
struct pdc_system_map_mod_info { /* PDC_SYSTEM_MAP/FIND_MODULE */ |
unsigned long mod_addr; |
unsigned long mod_pgs; |
unsigned long add_addrs; |
}; |
|
struct pdc_system_map_addr_info { /* PDC_SYSTEM_MAP/FIND_ADDRESS */ |
unsigned long mod_addr; |
unsigned long mod_pgs; |
}; |
|
struct hardware_path { |
char flags; /* see bit definitions below */ |
char bc[6]; /* Bus Converter routing info to a specific */ |
/* I/O adaptor (< 0 means none, > 63 resvd) */ |
char mod; /* fixed field of specified module */ |
}; |
|
/* |
* Device path specifications used by PDC. |
*/ |
struct pdc_module_path { |
struct hardware_path path; |
unsigned int layers[6]; /* device-specific info (ctlr #, unit # ...) */ |
}; |
|
#ifndef CONFIG_PA20 |
/* Only used on some pre-PA2.0 boxes */ |
struct pdc_memory_map { /* PDC_MEMORY_MAP */ |
unsigned long hpa; /* mod's register set address */ |
unsigned long more_pgs; /* number of additional I/O pgs */ |
}; |
#endif |
|
struct pdc_tod { |
unsigned long tod_sec; |
unsigned long tod_usec; |
}; |
|
#ifdef __LP64__ |
struct pdc_pat_cell_num { |
unsigned long cell_num; |
unsigned long cell_loc; |
}; |
|
struct pdc_pat_cpu_num { |
unsigned long cpu_num; |
unsigned long cpu_loc; |
}; |
|
struct pdc_pat_pd_addr_map_entry { |
unsigned char entry_type; /* 1 = Memory Descriptor Entry Type */ |
unsigned char reserve1[5]; |
unsigned char memory_type; |
unsigned char memory_usage; |
unsigned long paddr; |
unsigned int pages; /* Length in 4K pages */ |
unsigned int reserve2; |
unsigned long cell_map; |
}; |
|
/* FIXME: mod[508] should really be a union of the various mod components */ |
struct pdc_pat_cell_mod_maddr_block { /* PDC_PAT_CELL_MODULE */ |
unsigned long cba; /* function 0 configuration space address */ |
unsigned long mod_info; /* module information */ |
unsigned long mod_location; /* physical location of the module */ |
struct hardware_path mod_path; /* hardware path */ |
unsigned long mod[508]; /* PAT cell module components */ |
}; |
|
typedef struct pdc_pat_cell_mod_maddr_block pdc_pat_cell_mod_maddr_block_t; |
#endif /* __LP64__ */ |
|
/* architected results from PDC_PIM/transfer hpmc on a PA1.1 machine */ |
|
struct pdc_hpmc_pim_11 { /* PDC_PIM */ |
__u32 gr[32]; |
__u32 cr[32]; |
__u32 sr[8]; |
__u32 iasq_back; |
__u32 iaoq_back; |
__u32 check_type; |
__u32 cpu_state; |
__u32 rsvd1; |
__u32 cache_check; |
__u32 tlb_check; |
__u32 bus_check; |
__u32 assists_check; |
__u32 rsvd2; |
__u32 assist_state; |
__u32 responder_addr; |
__u32 requestor_addr; |
__u32 path_info; |
__u64 fr[32]; |
}; |
|
/* |
* architected results from PDC_PIM/transfer hpmc on a PA2.0 machine |
* |
* Note that PDC_PIM doesn't care whether or not wide mode was enabled |
* so the results are different on PA1.1 vs. PA2.0 when in narrow mode. |
* |
* Note also that there are unarchitected results available, which |
* are hversion dependent. Do a "ser pim 0 hpmc" after rebooting, since |
* the firmware is probably the best way of printing hversion dependent |
* data. |
*/ |
|
struct pdc_hpmc_pim_20 { /* PDC_PIM */ |
__u64 gr[32]; |
__u64 cr[32]; |
__u64 sr[8]; |
__u64 iasq_back; |
__u64 iaoq_back; |
__u32 check_type; |
__u32 cpu_state; |
__u32 cache_check; |
__u32 tlb_check; |
__u32 bus_check; |
__u32 assists_check; |
__u32 assist_state; |
__u32 path_info; |
__u64 responder_addr; |
__u64 requestor_addr; |
__u64 fr[32]; |
}; |
|
#endif /* __ASSEMBLY__ */ |
|
/* flags of the device_path (see below) */ |
#define PF_AUTOBOOT 0x80 |
#define PF_AUTOSEARCH 0x40 |
#define PF_TIMER 0x0F |
|
#ifndef __ASSEMBLY__ |
|
struct device_path { /* page 1-69 */ |
unsigned char flags; /* flags see above! */ |
unsigned char bc[6]; /* bus converter routing info */ |
unsigned char mod; |
unsigned int layers[6];/* device-specific layer-info */ |
} __attribute__((aligned(8))) ; |
|
struct pz_device { |
struct device_path dp; /* see above */ |
/* struct iomod *hpa; */ |
unsigned int hpa; /* HPA base address */ |
/* char *spa; */ |
unsigned int spa; /* SPA base address */ |
/* int (*iodc_io)(struct iomod*, ...); */ |
unsigned int iodc_io; /* device entry point */ |
short pad; /* reserved */ |
unsigned short cl_class;/* see below */ |
} __attribute__((aligned(8))) ; |
|
#endif /* __ASSEMBLY__ */ |
|
/* cl_class |
* page 3-33 of IO-Firmware ARS |
* IODC ENTRY_INIT(Search first) RET[1] |
*/ |
#define CL_NULL 0 /* invalid */ |
#define CL_RANDOM 1 /* random access (as disk) */ |
#define CL_SEQU 2 /* sequential access (as tape) */ |
#define CL_DUPLEX 7 /* full-duplex point-to-point (RS-232, Net) */ |
#define CL_KEYBD 8 /* half-duplex console (HIL Keyboard) */ |
#define CL_DISPL 9 /* half-duplex console (display) */ |
#define CL_FC 10 /* FiberChannel access media */ |
|
#if 0 |
/* FIXME: DEVCLASS_* duplicates CL_* (above). Delete DEVCLASS_*? */ |
#define DEVCLASS_RANDOM 1 |
#define DEVCLASS_SEQU 2 |
#define DEVCLASS_DUPLEX 7 |
#define DEVCLASS_KEYBD 8 |
#define DEVCLASS_DISP 9 |
#endif |
|
/* IODC ENTRY_INIT() */ |
#define ENTRY_INIT_SRCH_FRST 2 |
#define ENTRY_INIT_SRCH_NEXT 3 |
#define ENTRY_INIT_MOD_DEV 4 |
#define ENTRY_INIT_DEV 5 |
#define ENTRY_INIT_MOD 6 |
#define ENTRY_INIT_MSG 9 |
|
/* IODC ENTRY_IO() */ |
#define ENTRY_IO_BOOTIN 0 |
#define ENTRY_IO_BOOTOUT 1 |
#define ENTRY_IO_CIN 2 |
#define ENTRY_IO_COUT 3 |
#define ENTRY_IO_CLOSE 4 |
#define ENTRY_IO_GETMSG 9 |
#define ENTRY_IO_BBLOCK_IN 16 |
#define ENTRY_IO_BBLOCK_OUT 17 |
|
/* IODC ENTRY_SPA() */ |
|
/* IODC ENTRY_CONFIG() */ |
|
/* IODC ENTRY_TEST() */ |
|
/* IODC ENTRY_TLB() */ |
|
|
/* DEFINITION OF THE ZERO-PAGE (PAG0) */ |
/* based on work by Jason Eckhardt (jason@equator.com) */ |
|
#ifndef __ASSEMBLY__ |
|
#define PAGE0 ((struct zeropage *)__PAGE_OFFSET) |
|
struct zeropage { |
/* [0x000] initialize vectors (VEC) */ |
unsigned int vec_special; /* must be zero */ |
/* int (*vec_pow_fail)(void);*/ |
unsigned int vec_pow_fail; /* power failure handler */ |
/* int (*vec_toc)(void); */ |
unsigned int vec_toc; |
unsigned int vec_toclen; |
/* int (*vec_rendz)(void); */ |
unsigned int vec_rendz; |
int vec_pow_fail_flen; |
int vec_pad[10]; |
|
/* [0x040] reserved processor dependent */ |
int pad0[112]; |
|
/* [0x200] reserved */ |
int pad1[84]; |
|
/* [0x350] memory configuration (MC) */ |
int memc_cont; /* contiguous mem size (bytes) */ |
int memc_phsize; /* physical memory size */ |
int memc_adsize; /* additional mem size, bytes of SPA space used by PDC */ |
unsigned int mem_pdc_hi; /* used for 64-bit */ |
|
/* [0x360] various parameters for the boot-CPU */ |
/* unsigned int *mem_booterr[8]; */ |
unsigned int mem_booterr[8]; /* ptr to boot errors */ |
unsigned int mem_free; /* first location, where OS can be loaded */ |
/* struct iomod *mem_hpa; */ |
unsigned int mem_hpa; /* HPA of the boot-CPU */ |
/* int (*mem_pdc)(int, ...); */ |
unsigned int mem_pdc; /* PDC entry point */ |
unsigned int mem_10msec; /* number of clock ticks in 10msec */ |
|
/* [0x390] initial memory module (IMM) */ |
/* struct iomod *imm_hpa; */ |
unsigned int imm_hpa; /* HPA of the IMM */ |
int imm_soft_boot; /* 0 = was hard boot, 1 = was soft boot */ |
unsigned int imm_spa_size; /* SPA size of the IMM in bytes */ |
unsigned int imm_max_mem; /* bytes of mem in IMM */ |
|
/* [0x3A0] boot console, display device and keyboard */ |
struct pz_device mem_cons; /* description of console device */ |
struct pz_device mem_boot; /* description of boot device */ |
struct pz_device mem_kbd; /* description of keyboard device */ |
|
/* [0x430] reserved */ |
int pad430[116]; |
|
/* [0x600] processor dependent */ |
__u32 pad600[1]; |
__u32 proc_sti; /* pointer to STI ROM */ |
__u32 pad608[126]; |
}; |
|
#endif /* __ASSEMBLY__ */ |
|
/* Page Zero constant offsets used by the HPMC handler */ |
|
#define BOOT_CONSOLE_HPA_OFFSET 0x3c0 |
#define BOOT_CONSOLE_SPA_OFFSET 0x3c4 |
#define BOOT_CONSOLE_PATH_OFFSET 0x3a8 |
|
#ifndef __ASSEMBLY__ |
void pdc_console_init(void); /* in pdc_console.c */ |
void pdc_console_restart(void); |
|
void setup_pdc(void); /* in inventory.c */ |
|
/* wrapper-functions from pdc.c */ |
|
int pdc_add_valid(unsigned long address); |
int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len); |
int pdc_chassis_disp(unsigned long disp); |
int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info); |
int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index, |
void *iodc_data, unsigned int iodc_data_size); |
int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info, |
struct pdc_module_path *mod_path, long mod_index); |
int pdc_system_map_find_addrs(struct pdc_system_map_addr_info *pdc_addr_info, |
long mod_index, long addr_index); |
int pdc_model_info(struct pdc_model *model); |
int pdc_model_sysmodel(char *name); |
int pdc_model_cpuid(unsigned long *cpu_id); |
int pdc_model_versions(unsigned long *versions, int id); |
int pdc_model_capabilities(unsigned long *capabilities); |
int pdc_cache_info(struct pdc_cache_info *cache); |
#ifndef CONFIG_PA20 |
int pdc_btlb_info(struct pdc_btlb_info *btlb); |
int pdc_mem_map_hpa(struct pdc_memory_map *r_addr, struct pdc_module_path *mod_path); |
#endif /* !CONFIG_PA20 */ |
int pdc_lan_station_id(char *lan_addr, unsigned long net_hpa); |
|
int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa); |
int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl); |
|
int pdc_get_initiator(struct hardware_path *hwpath, unsigned char *scsi_id, unsigned long *period, char *width, char *mode); |
int pdc_tod_read(struct pdc_tod *tod); |
int pdc_tod_set(unsigned long sec, unsigned long usec); |
|
#ifdef __LP64__ |
int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr, |
struct pdc_memory_table *tbl, unsigned long entries); |
#endif |
|
int pdc_do_firm_test_reset(unsigned long ftc_bitmap); |
int pdc_do_reset(void); |
int pdc_soft_power_info(unsigned long *power_reg); |
int pdc_soft_power_button(int sw_control); |
void pdc_suspend_usb(void); |
int pdc_iodc_getc(void); |
void pdc_iodc_putc(unsigned char c); |
void pdc_iodc_outc(unsigned char c); |
|
void pdc_emergency_unlock(void); |
int pdc_sti_call(unsigned long func, unsigned long flags, |
unsigned long inptr, unsigned long outputr, |
unsigned long glob_cfg); |
|
#ifdef __LP64__ |
int pdc_pat_chassis_send_log(unsigned long status, unsigned long data); |
|
int pdc_pat_cell_get_number(struct pdc_pat_cell_num *cell_info); |
int pdc_pat_cell_module(unsigned long *actcnt, unsigned long ploc, unsigned long mod, |
unsigned long view_type, void *mem_addr); |
int pdc_pat_cpu_get_number(struct pdc_pat_cpu_num *cpu_info, void *hpa); |
int pdc_pat_get_irt_size(unsigned long *num_entries, unsigned long cell_num); |
int pdc_pat_get_irt(void *r_addr, unsigned long cell_num); |
int pdc_pat_pd_get_addr_map(unsigned long *actual_len, void *mem_addr, |
unsigned long count, unsigned long offset); |
|
/******************************************************************** |
* PDC_PAT_CELL[Return Cell Module] memaddr[0] conf_base_addr |
* ---------------------------------------------------------- |
* Bit 0 to 51 - conf_base_addr |
* Bit 52 to 62 - reserved |
* Bit 63 - endianess bit |
********************************************************************/ |
#define PAT_GET_CBA(value) ((value) & 0xfffffffffffff000UL) |
|
/******************************************************************** |
* PDC_PAT_CELL[Return Cell Module] memaddr[1] mod_info |
* ---------------------------------------------------- |
* Bit 0 to 7 - entity type |
* 0 = central agent, 1 = processor, |
* 2 = memory controller, 3 = system bus adapter, |
* 4 = local bus adapter, 5 = processor bus converter, |
* 6 = crossbar fabric connect, 7 = fabric interconnect, |
* 8 to 254 reserved, 255 = unknown. |
* Bit 8 to 15 - DVI |
* Bit 16 to 23 - IOC functions |
* Bit 24 to 39 - reserved |
* Bit 40 to 63 - mod_pages |
* number of 4K pages a module occupies starting at conf_base_addr |
********************************************************************/ |
#define PAT_GET_ENTITY(value) (((value) >> 56) & 0xffUL) |
#define PAT_GET_DVI(value) (((value) >> 48) & 0xffUL) |
#define PAT_GET_IOC(value) (((value) >> 40) & 0xffUL) |
#define PAT_GET_MOD_PAGES(value)(((value) & 0xffffffUL) |
|
#else /* !__LP64__ */ |
/* No PAT support for 32-bit kernels...sorry */ |
#define pdc_pat_get_irt_size(num_entries, cell_numn) PDC_BAD_PROC |
#define pdc_pat_get_irt(r_addr, cell_num) PDC_BAD_PROC |
#endif /* !__LP64__ */ |
|
extern void pdc_init(void); |
|
#endif /* __ASSEMBLY__ */ |
|
#endif /* _PARISC_PDC_H */ |
/string.h
0,0 → 1,3
|
#define __HAVE_ARCH_MEMSET |
extern void * memset(void *, int, size_t); |
/io.h
0,0 → 1,265
#ifndef _ASM_IO_H |
#define _ASM_IO_H |
|
/* USE_HPPA_IOREMAP IS THE MAGIC FLAG TO ENABLE OR DISABLE REAL IOREMAP() FUNCTIONALITY */ |
/* FOR 712 or 715 MACHINES THIS SHOULD BE ENABLED, |
NEWER MACHINES STILL HAVE SOME ISSUES IN THE SCSI AND/OR NETWORK DRIVERS AND |
BECAUSE OF THAT I WILL LEAVE IT DISABLED FOR NOW <deller@gmx.de> */ |
/* WHEN THOSE ISSUES ARE SOLVED, USE_HPPA_IOREMAP WILL GO AWAY */ |
#define USE_HPPA_IOREMAP 0 |
|
|
#include <linux/config.h> |
#include <linux/types.h> |
#include <asm/pgtable.h> |
|
#define virt_to_phys(a) ((unsigned long)__pa(a)) |
#define phys_to_virt(a) __va(a) |
#define virt_to_bus virt_to_phys |
#define bus_to_virt phys_to_virt |
|
/* Memory mapped IO */ |
|
extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags); |
|
extern inline void * ioremap(unsigned long offset, unsigned long size) |
{ |
return __ioremap(offset, size, 0); |
} |
|
/* |
* This one maps high address device memory and turns off caching for that area. |
* it's useful if some control registers are in such an area and write combining |
* or read caching is not desirable: |
*/ |
extern inline void * ioremap_nocache (unsigned long offset, unsigned long size) |
{ |
return __ioremap(offset, size, _PAGE_NO_CACHE /* _PAGE_PCD */); |
} |
|
extern void iounmap(void *addr); |
|
/* |
* __raw_ variants have no defined meaning. on hppa, it means `i was |
* too lazy to ioremap first'. kind of like isa_, except that there's |
* no additional base address to add on. |
*/ |
extern __inline__ unsigned char __raw_readb(unsigned long addr) |
{ |
long flags; |
unsigned char ret; |
|
__asm__ __volatile__( |
" rsm 2,%0\n" |
" ldb,ma 0(%2),%1\n" |
" mtsm %0\n" |
: "=&r" (flags), "=r" (ret) : "r" (addr) ); |
|
return ret; |
} |
|
extern __inline__ unsigned short __raw_readw(unsigned long addr) |
{ |
long flags; |
unsigned short ret; |
|
__asm__ __volatile__( |
" rsm 2,%0\n" |
" ldh,ma 0(%2),%1\n" |
" mtsm %0\n" |
: "=&r" (flags), "=r" (ret) : "r" (addr) ); |
|
return ret; |
} |
|
extern __inline__ unsigned int __raw_readl(unsigned long addr) |
{ |
u32 ret; |
|
__asm__ __volatile__( |
" ldwa,ma 0(%1),%0\n" |
: "=r" (ret) : "r" (addr) ); |
|
return ret; |
} |
|
extern __inline__ unsigned long long __raw_readq(unsigned long addr) |
{ |
unsigned long long ret; |
#ifdef __LP64__ |
__asm__ __volatile__( |
" ldda,ma 0(%1),%0\n" |
: "=r" (ret) : "r" (addr) ); |
#else |
/* two reads may have side effects.. */ |
ret = ((u64) __raw_readl(addr)) << 32; |
ret |= __raw_readl(addr+4); |
#endif |
return ret; |
} |
|
extern __inline__ void __raw_writeb(unsigned char val, unsigned long addr) |
{ |
long flags; |
__asm__ __volatile__( |
" rsm 2,%0\n" |
" stb,ma %1,0(%2)\n" |
" mtsm %0\n" |
: "=&r" (flags) : "r" (val), "r" (addr) ); |
} |
|
extern __inline__ void __raw_writew(unsigned short val, unsigned long addr) |
{ |
long flags; |
__asm__ __volatile__( |
" rsm 2,%0\n" |
" sth,ma %1,0(%2)\n" |
" mtsm %0\n" |
: "=&r" (flags) : "r" (val), "r" (addr) ); |
} |
|
extern __inline__ void __raw_writel(unsigned int val, unsigned long addr) |
{ |
__asm__ __volatile__( |
" stwa,ma %0,0(%1)\n" |
: : "r" (val), "r" (addr) ); |
} |
|
extern __inline__ void __raw_writeq(unsigned long long val, unsigned long addr) |
{ |
#ifdef __LP64__ |
__asm__ __volatile__( |
" stda,ma %0,0(%1)\n" |
: : "r" (val), "r" (addr) ); |
#else |
/* two writes may have side effects.. */ |
__raw_writel(val >> 32, addr); |
__raw_writel(val, addr+4); |
#endif |
} |
|
#if USE_HPPA_IOREMAP |
#define readb(addr) (*(volatile unsigned char *) (addr)) |
#define readw(addr) (*(volatile unsigned short *) (addr)) |
#define readl(addr) (*(volatile unsigned int *) (addr)) |
#define readq(addr) (*(volatile u64 *) (addr)) |
#define writeb(b,addr) (*(volatile unsigned char *) (addr) = (b)) |
#define writew(b,addr) (*(volatile unsigned short *) (addr) = (b)) |
#define writel(b,addr) (*(volatile unsigned int *) (addr) = (b)) |
#define writeq(b,addr) (*(volatile u64 *) (addr) = (b)) |
#else /* !USE_HPPA_IOREMAP */ |
#define readb(addr) __raw_readb((unsigned long)(addr)) |
#define readw(addr) le16_to_cpu(__raw_readw((unsigned long)(addr))) |
#define readl(addr) le32_to_cpu(__raw_readl((unsigned long)(addr))) |
#define readq(addr) le64_to_cpu(__raw_readq((unsigned long)(addr))) |
#define writeb(b,addr) __raw_writeb(b,(unsigned long)(addr)) |
#define writew(b,addr) __raw_writew(cpu_to_le16(b),(unsigned long)(addr)) |
#define writel(b,addr) __raw_writel(cpu_to_le32(b),(unsigned long)(addr)) |
#define writeq(b,addr) __raw_writeq(cpu_to_le64(b),(unsigned long)(addr)) |
#endif /* !USE_HPPA_IOREMAP */ |
|
extern void memcpy_fromio(void *dest, unsigned long src, int count); |
extern void memcpy_toio(unsigned long dest, const void *src, int count); |
extern void memset_io(unsigned long dest, char fill, int count); |
|
/* Support old drivers which don't ioremap. |
* NB this interface is scheduled to disappear in 2.5 |
*/ |
|
#define EISA_BASE 0xfffffffffc000000UL |
#define isa_readb(a) readb(EISA_BASE | (a)) |
#define isa_readw(a) readw(EISA_BASE | (a)) |
#define isa_readl(a) readl(EISA_BASE | (a)) |
#define isa_writeb(b,a) writeb((b), EISA_BASE | (a)) |
#define isa_writew(b,a) writew((b), EISA_BASE | (a)) |
#define isa_writel(b,a) writel((b), EISA_BASE | (a)) |
#define isa_memset_io(a,b,c) memset_io(EISA_BASE | (a), (b), (c)) |
#define isa_memcpy_fromio(a,b,c) memcpy_fromio((a), EISA_BASE | (b), (c)) |
#define isa_memcpy_toio(a,b,c) memcpy_toio(EISA_BASE | (a), (b), (c)) |
|
/* |
* XXX - We don't have csum_partial_copy_fromio() yet, so we cheat here and |
* just copy it. The net code will then do the checksum later. Presently |
* only used by some shared memory 8390 Ethernet cards anyway. |
*/ |
|
#define eth_io_copy_and_sum(skb,src,len,unused) \ |
memcpy_fromio((skb)->data,(src),(len)) |
#define isa_eth_io_copy_and_sum(skb,src,len,unused) \ |
isa_memcpy_fromio((skb)->data,(src),(len)) |
|
/* Port-space IO */ |
|
#define inb_p inb |
#define inw_p inw |
#define inl_p inl |
#define outb_p outb |
#define outw_p outw |
#define outl_p outl |
|
extern unsigned char eisa_in8(unsigned short port); |
extern unsigned short eisa_in16(unsigned short port); |
extern unsigned int eisa_in32(unsigned short port); |
extern void eisa_out8(unsigned char data, unsigned short port); |
extern void eisa_out16(unsigned short data, unsigned short port); |
extern void eisa_out32(unsigned int data, unsigned short port); |
|
#if defined(CONFIG_PCI) |
extern unsigned char inb(int addr); |
extern unsigned short inw(int addr); |
extern unsigned int inl(int addr); |
|
extern void outb(unsigned char b, int addr); |
extern void outw(unsigned short b, int addr); |
extern void outl(unsigned int b, int addr); |
#elif defined(CONFIG_EISA) |
#define inb eisa_in8 |
#define inw eisa_in16 |
#define inl eisa_in32 |
#define outb eisa_out8 |
#define outw eisa_out16 |
#define outl eisa_out32 |
#else |
static inline char inb(unsigned long addr) |
{ |
BUG(); |
return -1; |
} |
|
static inline short inw(unsigned long addr) |
{ |
BUG(); |
return -1; |
} |
|
static inline int inl(unsigned long addr) |
{ |
BUG(); |
return -1; |
} |
|
#define outb(x, y) BUG() |
#define outw(x, y) BUG() |
#define outl(x, y) BUG() |
#endif |
|
/* |
* String versions of in/out ops: |
*/ |
extern void insb (unsigned long port, void *dst, unsigned long count); |
extern void insw (unsigned long port, void *dst, unsigned long count); |
extern void insl (unsigned long port, void *dst, unsigned long count); |
extern void outsb (unsigned long port, const void *src, unsigned long count); |
extern void outsw (unsigned long port, const void *src, unsigned long count); |
extern void outsl (unsigned long port, const void *src, unsigned long count); |
|
|
/* IO Port space is : BBiiii where BB is HBA number. */ |
#define IO_SPACE_LIMIT 0x00ffffff |
|
|
#define dma_cache_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while(0) |
#define dma_cache_wback(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) |
#define dma_cache_wback_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) |
|
#endif |
/xor.h
0,0 → 1,265
#include <asm-generic/xor.h> |
/floppy.h
0,0 → 1,266
/* |
* Architecture specific parts of the Floppy driver |
* |
* This file is subject to the terms and conditions of the GNU General Public |
* License. See the file "COPYING" in the main directory of this archive |
* for more details. |
* |
* Copyright (C) 1995 |
*/ |
#ifndef __ASM_PARISC_FLOPPY_H |
#define __ASM_PARISC_FLOPPY_H |
|
#include <linux/vmalloc.h> |
|
|
/* |
* The DMA channel used by the floppy controller cannot access data at |
* addresses >= 16MB |
* |
* Went back to the 1MB limit, as some people had problems with the floppy |
* driver otherwise. It doesn't matter much for performance anyway, as most |
* floppy accesses go through the track buffer. |
*/ |
#define _CROSS_64KB(a,s,vdma) \ |
(!vdma && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64)) |
|
#define CROSS_64KB(a,s) _CROSS_64KB(a,s,use_virtual_dma & 1) |
|
|
#define SW fd_routine[use_virtual_dma&1] |
#define CSW fd_routine[can_use_virtual_dma & 1] |
|
|
#define fd_inb(port) inb_p(port) |
#define fd_outb(port,value) outb_p(port,value) |
|
#define fd_request_dma() CSW._request_dma(FLOPPY_DMA,"floppy") |
#define fd_free_dma() CSW._free_dma(FLOPPY_DMA) |
#define fd_enable_irq() enable_irq(FLOPPY_IRQ) |
#define fd_disable_irq() disable_irq(FLOPPY_IRQ) |
#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) |
#define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA) |
#define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size) |
#define fd_dma_setup(addr, size, mode, io) SW._dma_setup(addr, size, mode, io) |
|
#define FLOPPY_CAN_FALLBACK_ON_NODMA |
|
static int virtual_dma_count=0; |
static int virtual_dma_residue=0; |
static char *virtual_dma_addr=0; |
static int virtual_dma_mode=0; |
static int doing_pdma=0; |
|
static void floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) |
{ |
register unsigned char st; |
|
#undef TRACE_FLPY_INT |
#define NO_FLOPPY_ASSEMBLER |
|
#ifdef TRACE_FLPY_INT |
static int calls=0; |
static int bytes=0; |
static int dma_wait=0; |
#endif |
if(!doing_pdma) { |
floppy_interrupt(irq, dev_id, regs); |
return; |
} |
|
#ifdef TRACE_FLPY_INT |
if(!calls) |
bytes = virtual_dma_count; |
#endif |
|
{ |
register int lcount; |
register char *lptr; |
|
st = 1; |
for(lcount=virtual_dma_count, lptr=virtual_dma_addr; |
lcount; lcount--, lptr++) { |
st=inb(virtual_dma_port+4) & 0xa0 ; |
if(st != 0xa0) |
break; |
if(virtual_dma_mode) |
outb_p(*lptr, virtual_dma_port+5); |
else |
*lptr = inb_p(virtual_dma_port+5); |
} |
virtual_dma_count = lcount; |
virtual_dma_addr = lptr; |
st = inb(virtual_dma_port+4); |
} |
|
#ifdef TRACE_FLPY_INT |
calls++; |
#endif |
if(st == 0x20) |
return; |
if(!(st & 0x20)) { |
virtual_dma_residue += virtual_dma_count; |
virtual_dma_count=0; |
#ifdef TRACE_FLPY_INT |
printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", |
virtual_dma_count, virtual_dma_residue, calls, bytes, |
dma_wait); |
calls = 0; |
dma_wait=0; |
#endif |
doing_pdma = 0; |
floppy_interrupt(irq, dev_id, regs); |
return; |
} |
#ifdef TRACE_FLPY_INT |
if(!virtual_dma_count) |
dma_wait++; |
#endif |
} |
|
static void fd_disable_dma(void) |
{ |
if(! (can_use_virtual_dma & 1)) |
disable_dma(FLOPPY_DMA); |
doing_pdma = 0; |
virtual_dma_residue += virtual_dma_count; |
virtual_dma_count=0; |
} |
|
static int vdma_request_dma(unsigned int dmanr, const char * device_id) |
{ |
return 0; |
} |
|
static void vdma_nop(unsigned int dummy) |
{ |
} |
|
|
static int vdma_get_dma_residue(unsigned int dummy) |
{ |
return virtual_dma_count + virtual_dma_residue; |
} |
|
|
static int fd_request_irq(void) |
{ |
if(can_use_virtual_dma) |
return request_irq(FLOPPY_IRQ, floppy_hardint,SA_INTERRUPT, |
"floppy", NULL); |
else |
return request_irq(FLOPPY_IRQ, floppy_interrupt, |
SA_INTERRUPT|SA_SAMPLE_RANDOM, |
"floppy", NULL); |
|
} |
|
static unsigned long dma_mem_alloc(unsigned long size) |
{ |
return __get_dma_pages(GFP_KERNEL,__get_order(size)); |
} |
|
|
static unsigned long vdma_mem_alloc(unsigned long size) |
{ |
return (unsigned long) vmalloc(size); |
|
} |
|
#define nodma_mem_alloc(size) vdma_mem_alloc(size) |
|
static void _fd_dma_mem_free(unsigned long addr, unsigned long size) |
{ |
if((unsigned int) addr >= (unsigned int) high_memory) |
return vfree((void *)addr); |
else |
free_pages(addr, __get_order(size)); |
} |
|
#define fd_dma_mem_free(addr, size) _fd_dma_mem_free(addr, size) |
|
static void _fd_chose_dma_mode(char *addr, unsigned long size) |
{ |
if(can_use_virtual_dma == 2) { |
if((unsigned int) addr >= (unsigned int) high_memory || |
virt_to_bus(addr) >= 0x1000000 || |
_CROSS_64KB(addr, size, 0)) |
use_virtual_dma = 1; |
else |
use_virtual_dma = 0; |
} else { |
use_virtual_dma = can_use_virtual_dma & 1; |
} |
} |
|
#define fd_chose_dma_mode(addr, size) _fd_chose_dma_mode(addr, size) |
|
|
static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) |
{ |
doing_pdma = 1; |
virtual_dma_port = io; |
virtual_dma_mode = (mode == DMA_MODE_WRITE); |
virtual_dma_addr = addr; |
virtual_dma_count = size; |
virtual_dma_residue = 0; |
return 0; |
} |
|
static int hard_dma_setup(char *addr, unsigned long size, int mode, int io) |
{ |
#ifdef FLOPPY_SANITY_CHECK |
if (CROSS_64KB(addr, size)) { |
printk("DMA crossing 64-K boundary %p-%p\n", addr, addr+size); |
return -1; |
} |
#endif |
/* actual, physical DMA */ |
doing_pdma = 0; |
clear_dma_ff(FLOPPY_DMA); |
set_dma_mode(FLOPPY_DMA,mode); |
set_dma_addr(FLOPPY_DMA,virt_to_bus(addr)); |
set_dma_count(FLOPPY_DMA,size); |
enable_dma(FLOPPY_DMA); |
return 0; |
} |
|
struct fd_routine_l { |
int (*_request_dma)(unsigned int dmanr, const char * device_id); |
void (*_free_dma)(unsigned int dmanr); |
int (*_get_dma_residue)(unsigned int dummy); |
unsigned long (*_dma_mem_alloc) (unsigned long size); |
int (*_dma_setup)(char *addr, unsigned long size, int mode, int io); |
} fd_routine[] = { |
{ |
request_dma, |
free_dma, |
get_dma_residue, |
dma_mem_alloc, |
hard_dma_setup |
}, |
{ |
vdma_request_dma, |
vdma_nop, |
vdma_get_dma_residue, |
vdma_mem_alloc, |
vdma_dma_setup |
} |
}; |
|
|
static int FDC1 = 0x3f0; |
static int FDC2 = -1; |
|
#define FLOPPY0_TYPE ((CMOS_READ(0x10) >> 4) & 15) |
#define FLOPPY1_TYPE (CMOS_READ(0x10) & 15) |
|
#define N_FDC 1 |
#define N_DRIVE 8 |
|
#define FLOPPY_MOTOR_MASK 0xf0 |
|
#define AUTO_DMA |
|
|
#endif /* __ASM_PARISC_FLOPPY_H */ |
/stat.h
0,0 → 1,98
#ifndef _PARISC_STAT_H |
#define _PARISC_STAT_H |
|
#include <linux/types.h> |
|
struct stat { |
dev_t st_dev; /* dev_t is 32 bits on parisc */ |
ino_t st_ino; /* 32 bits */ |
mode_t st_mode; /* 16 bits */ |
nlink_t st_nlink; /* 16 bits */ |
unsigned short st_reserved1; /* old st_uid */ |
unsigned short st_reserved2; /* old st_gid */ |
dev_t st_rdev; |
off_t st_size; |
time_t st_atime; |
unsigned int st_spare1; |
time_t st_mtime; |
unsigned int st_spare2; |
time_t st_ctime; |
unsigned int st_spare3; |
int st_blksize; |
int st_blocks; |
unsigned int __unused1; /* ACL stuff */ |
dev_t __unused2; /* network */ |
ino_t __unused3; /* network */ |
unsigned int __unused4; /* cnodes */ |
unsigned short __unused5; /* netsite */ |
short st_fstype; |
dev_t st_realdev; |
unsigned short st_basemode; |
unsigned short st_spareshort; |
uid_t st_uid; |
gid_t st_gid; |
unsigned int st_spare4[3]; |
}; |
|
typedef __kernel_off64_t off64_t; |
|
struct hpux_stat64 { |
dev_t st_dev; /* dev_t is 32 bits on parisc */ |
ino_t st_ino; /* 32 bits */ |
mode_t st_mode; /* 16 bits */ |
nlink_t st_nlink; /* 16 bits */ |
unsigned short st_reserved1; /* old st_uid */ |
unsigned short st_reserved2; /* old st_gid */ |
dev_t st_rdev; |
off64_t st_size; |
time_t st_atime; |
unsigned int st_spare1; |
time_t st_mtime; |
unsigned int st_spare2; |
time_t st_ctime; |
unsigned int st_spare3; |
int st_blksize; |
__u64 st_blocks; |
unsigned int __unused1; /* ACL stuff */ |
dev_t __unused2; /* network */ |
ino_t __unused3; /* network */ |
unsigned int __unused4; /* cnodes */ |
unsigned short __unused5; /* netsite */ |
short st_fstype; |
dev_t st_realdev; |
unsigned short st_basemode; |
unsigned short st_spareshort; |
uid_t st_uid; |
gid_t st_gid; |
unsigned int st_spare4[3]; |
}; |
|
/* This is the struct that 32-bit userspace applications are expecting. |
* How 64-bit apps are going to be compiled, I have no idea. But at least |
* this way, we don't have a wrapper in the kernel. |
*/ |
struct stat64 { |
unsigned long long st_dev; |
unsigned int __pad1; |
|
unsigned int __st_ino; /* Not actually filled in */ |
unsigned int st_mode; |
unsigned int st_nlink; |
unsigned int st_uid; |
unsigned int st_gid; |
unsigned long long st_rdev; |
unsigned int __pad2; |
signed long long st_size; |
signed int st_blksize; |
|
signed long long st_blocks; |
signed int st_atime; |
unsigned int __unused1; |
signed int st_mtime; |
unsigned int __unused2; |
signed int st_ctime; |
unsigned int __unused3; |
unsigned long long st_ino; |
}; |
|
#endif |
/page.h
0,0 → 1,122
#ifndef _PARISC_PAGE_H |
#define _PARISC_PAGE_H |
|
/* PAGE_SHIFT determines the page size */ |
#define PAGE_SHIFT 12 |
#define PAGE_SIZE (1UL << PAGE_SHIFT) |
#define PAGE_MASK (~(PAGE_SIZE-1)) |
|
#ifdef __KERNEL__ |
#ifndef __ASSEMBLY__ |
|
#include <asm/cache.h> |
|
#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) |
#define copy_page(to,from) copy_user_page_asm((void *)(to), (void *)(from)) |
|
extern void purge_kernel_dcache_page(unsigned long); |
extern void copy_user_page_asm(void *to, void *from); |
extern void clear_user_page_asm(void *page, unsigned long vaddr); |
|
static inline void |
copy_user_page(void *to, void *from, unsigned long vaddr) |
{ |
copy_user_page_asm(to, from); |
flush_kernel_dcache_page(to); |
} |
|
static inline void |
clear_user_page(void *page, unsigned long vaddr) |
{ |
purge_kernel_dcache_page((unsigned long)page); |
clear_user_page_asm(page, vaddr); |
} |
|
/* |
* These are used to make use of C type-checking.. |
*/ |
typedef struct { unsigned long pte; } pte_t; |
typedef struct { unsigned long pmd; } pmd_t; |
typedef struct { unsigned long pgd; } pgd_t; |
typedef struct { unsigned long pgprot; } pgprot_t; |
|
#define pte_val(x) ((x).pte) |
#define pmd_val(x) ((x).pmd) |
#define pgd_val(x) ((x).pgd) |
#define pgprot_val(x) ((x).pgprot) |
|
#define __pte(x) ((pte_t) { (x) } ) |
#define __pmd(x) ((pmd_t) { (x) } ) |
#define __pgd(x) ((pgd_t) { (x) } ) |
#define __pgprot(x) ((pgprot_t) { (x) } ) |
|
/* Pure 2^n version of get_order */ |
extern __inline__ int get_order(unsigned long size) |
{ |
int order; |
|
size = (size-1) >> (PAGE_SHIFT-1); |
order = -1; |
do { |
size >>= 1; |
order++; |
} while (size); |
return order; |
} |
|
#ifdef __LP64__ |
#define MAX_PHYSMEM_RANGES 8 /* Fix the size for now (current known max is 3) */ |
#else |
#define MAX_PHYSMEM_RANGES 1 /* First range is only range that fits in 32 bits */ |
#endif |
|
typedef struct __physmem_range { |
unsigned long start_pfn; |
unsigned long pages; /* PAGE_SIZE pages */ |
} physmem_range_t; |
|
extern physmem_range_t pmem_ranges[]; |
extern int npmem_ranges; |
|
#endif /* !__ASSEMBLY__ */ |
|
/* to align the pointer to the (next) page boundary */ |
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) |
|
/* |
* Tell the user there is some problem. Beep too, so we can |
* see^H^H^Hhear bugs in early bootup as well! |
* |
* We don't beep yet. prumpf |
*/ |
#define BUG() do { \ |
printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ |
} while (0) |
|
#define PAGE_BUG(page) do { \ |
BUG(); \ |
} while (0) |
|
|
#define LINUX_GATEWAY_SPACE 0 |
#define __PAGE_OFFSET (0x10000000) |
|
#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) |
/* These macros don't work for 64-bit C code -- don't allow in C at all */ |
#ifdef __ASSEMBLY__ |
# define PA(x) ((x)-__PAGE_OFFSET) |
# define VA(x) ((x)+__PAGE_OFFSET) |
#endif |
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) |
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) |
#ifndef CONFIG_DISCONTIGMEM |
#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT)) |
#define VALID_PAGE(page) ((page - mem_map) < max_mapnr) |
#endif /* !CONFIG_DISCONTIGMEM */ |
|
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ |
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) |
|
#endif /* __KERNEL__ */ |
|
#endif /* _PARISC_PAGE_H */ |
/processor.h
0,0 → 1,344
/* |
* include/asm-parisc/processor.h |
* |
* Copyright (C) 1994 Linus Torvalds |
* Copyright (C) 2001 Grant Grundler |
*/ |
|
#ifndef __ASM_PARISC_PROCESSOR_H |
#define __ASM_PARISC_PROCESSOR_H |
|
#ifndef __ASSEMBLY__ |
#include <linux/config.h> |
#include <linux/threads.h> |
|
#include <asm/hardware.h> |
#include <asm/page.h> |
#include <asm/pdc.h> |
#include <asm/ptrace.h> |
#include <asm/types.h> |
#include <asm/system.h> |
#ifdef CONFIG_SMP |
#include <asm/spinlock_t.h> |
#endif |
#endif /* __ASSEMBLY__ */ |
|
/* |
* Default implementation of macro that returns current |
* instruction pointer ("program counter"). |
*/ |
|
/* We cannot use MFIA as it was added for PA2.0 - prumpf |
|
At one point there were no "0f/0b" type local symbols in gas for |
PA-RISC. This is no longer true, but this still seems like the |
nicest way to implement this. */ |
|
#define current_text_addr() ({ void *pc; __asm__("\n\tblr 0,%0\n\tnop":"=r" (pc)); pc; }) |
|
#define TASK_SIZE (current->thread.task_size) |
#define DEFAULT_TASK_SIZE (0xFFF00000UL) |
|
#define TASK_UNMAPPED_BASE (current->thread.map_base) |
#define DEFAULT_MAP_BASE (0x40000000UL) |
|
#ifndef __ASSEMBLY__ |
|
/* |
** Data detected about CPUs at boot time which is the same for all CPU's. |
** HP boxes are SMP - ie identical processors. |
** |
** FIXME: some CPU rev info may be processor specific... |
*/ |
struct system_cpuinfo_parisc { |
unsigned int cpu_count; |
unsigned int cpu_hz; |
unsigned int hversion; |
unsigned int sversion; |
enum cpu_type cpu_type; |
|
struct { |
struct pdc_model model; |
unsigned long versions; |
unsigned long cpuid; |
unsigned long capabilities; |
char sys_model_name[81]; /* PDC-ROM returnes this model name */ |
} pdc; |
|
char *cpu_name; /* e.g. "PA7300LC (PCX-L2)" */ |
char *family_name; /* e.g. "1.1e" */ |
}; |
|
|
/* |
** Per CPU data structure - ie varies per CPU. |
*/ |
struct cpuinfo_parisc { |
|
unsigned long it_value; /* Interval Timer value at last timer Intr */ |
unsigned long it_delta; /* Interval Timer delta (tic_10ms / HZ * 100) */ |
unsigned long irq_count; /* number of IRQ's since boot */ |
unsigned long irq_max_cr16; /* longest time to handle a single IRQ */ |
unsigned long cpuid; /* aka slot_number or set to NO_PROC_ID */ |
unsigned long hpa; /* Host Physical address */ |
unsigned long txn_addr; /* MMIO addr of EIR or id_eid */ |
#ifdef CONFIG_SMP |
spinlock_t lock; /* synchronization for ipi's */ |
unsigned long pending_ipi; /* bitmap of type ipi_message_type */ |
unsigned long ipi_count; /* number ipi Interrupts */ |
#endif |
unsigned long bh_count; /* number of times bh was invoked */ |
unsigned long prof_counter; /* per CPU profiling support */ |
unsigned long prof_multiplier; /* per CPU profiling support */ |
unsigned long fp_rev; |
unsigned long fp_model; |
unsigned int state; |
struct parisc_device *dev; |
}; |
|
extern struct system_cpuinfo_parisc boot_cpu_data; |
extern struct cpuinfo_parisc cpu_data[NR_CPUS]; |
#define current_cpu_data cpu_data[smp_processor_id()] |
|
#define CPU_HVERSION ((boot_cpu_data.hversion >> 4) & 0x0FFF) |
|
#ifdef CONFIG_EISA |
extern int EISA_bus; |
#else |
#define EISA_bus 0 |
#endif |
|
#define MCA_bus 0 |
#define MCA_bus__is_a_macro /* for versions in ksyms.c */ |
|
typedef struct { |
int seg; |
} mm_segment_t; |
|
struct thread_struct { |
struct pt_regs regs; |
unsigned long task_size; |
unsigned long map_base; |
unsigned long flags; |
}; |
|
/* Thread struct flags. */ |
#define PARISC_KERNEL_DEATH (1UL << 31) /* see die_if_kernel()... */ |
|
#define INIT_THREAD { \ |
regs: { gr: { 0, }, \ |
fr: { 0, }, \ |
sr: { 0, }, \ |
iasq: { 0, }, \ |
iaoq: { 0, }, \ |
cr27: 0, \ |
}, \ |
task_size: DEFAULT_TASK_SIZE, \ |
map_base: DEFAULT_MAP_BASE, \ |
flags: 0 \ |
} |
|
/* |
* Return saved PC of a blocked thread. This is used by ps mostly. |
*/ |
|
static inline unsigned long thread_saved_pc(struct thread_struct *t) |
{ |
return 0xabcdef; |
} |
|
/* |
* Start user thread in another space. |
* |
* Note that we set both the iaoq and r31 to the new pc. When |
* the kernel initially calls execve it will return through an |
* rfi path that will use the values in the iaoq. The execve |
* syscall path will return through the gateway page, and |
* that uses r31 to branch to. |
* |
* For ELF we clear r23, because the dynamic linker uses it to pass |
* the address of the finalizer function. |
* |
* We also initialize sr3 to an illegal value (illegal for our |
* implementation, not for the architecture). |
*/ |
|
#define start_thread_som(regs, new_pc, new_sp) do { \ |
unsigned long *sp = (unsigned long *)new_sp; \ |
__u32 spaceid = (__u32)current->mm->context; \ |
unsigned long pc = (unsigned long)new_pc; \ |
/* offset pc for priv. level */ \ |
pc |= 3; \ |
\ |
set_fs(USER_DS); \ |
regs->iasq[0] = spaceid; \ |
regs->iasq[1] = spaceid; \ |
regs->iaoq[0] = pc; \ |
regs->iaoq[1] = pc + 4; \ |
regs->sr[2] = LINUX_GATEWAY_SPACE; \ |
regs->sr[3] = 0xffff; \ |
regs->sr[4] = spaceid; \ |
regs->sr[5] = spaceid; \ |
regs->sr[6] = spaceid; \ |
regs->sr[7] = spaceid; \ |
regs->gr[ 0] = USER_PSW; \ |
regs->gr[30] = ((new_sp)+63)&~63; \ |
regs->gr[31] = pc; \ |
\ |
get_user(regs->gr[26],&sp[0]); \ |
get_user(regs->gr[25],&sp[-1]); \ |
get_user(regs->gr[24],&sp[-2]); \ |
get_user(regs->gr[23],&sp[-3]); \ |
} while(0) |
|
/* The ELF abi wants things done a "wee bit" differently than |
* som does. Supporting this behavior here avoids |
* having our own version of create_elf_tables. |
* |
* Oh, and yes, that is not a typo, we are really passing argc in r25 |
* and argv in r24 (rather than r26 and r25). This is because that's |
* where __libc_start_main wants them. |
* |
* Duplicated from dl-machine.h for the benefit of readers: |
* |
* Our initial stack layout is rather different from everyone else's |
* due to the unique PA-RISC ABI. As far as I know it looks like |
* this: |
|
----------------------------------- (user startup code creates this frame) |
| 32 bytes of magic | |
|---------------------------------| |
| 32 bytes argument/sp save area | |
|---------------------------------| (bprm->p) |
| ELF auxiliary info | |
| (up to 28 words) | |
|---------------------------------| |
| NULL | |
|---------------------------------| |
| Environment pointers | |
|---------------------------------| |
| NULL | |
|---------------------------------| |
| Argument pointers | |
|---------------------------------| <- argv |
| argc (1 word) | |
|---------------------------------| <- bprm->exec (HACK!) |
| N bytes of slack | |
|---------------------------------| |
| filename passed to execve | |
|---------------------------------| (mm->env_end) |
| env strings | |
|---------------------------------| (mm->env_start, mm->arg_end) |
| arg strings | |
|---------------------------------| |
| additional faked arg strings if | |
| we're invoked via binfmt_script | |
|---------------------------------| (mm->arg_start) |
stack base is at TASK_SIZE - rlim_max. |
|
on downward growing arches, it looks like this: |
stack base at TASK_SIZE |
| filename passed to execve |
| env strings |
| arg strings |
| faked arg strings |
| slack |
| ELF |
| envps |
| argvs |
| argc |
|
* The pleasant part of this is that if we need to skip arguments we |
* can just decrement argc and move argv, because the stack pointer |
* is utterly unrelated to the location of the environment and |
* argument vectors. |
* |
* Note that the S/390 people took the easy way out and hacked their |
* GCC to make the stack grow downwards. |
*/ |
|
#define start_thread(regs, new_pc, new_sp) do { \ |
elf_addr_t *sp = (elf_addr_t *)new_sp; \ |
__u32 spaceid = (__u32)current->mm->context; \ |
elf_addr_t pc = (elf_addr_t)new_pc | 3; \ |
elf_caddr_t *argv = (elf_caddr_t *)bprm->exec + 1; \ |
\ |
set_fs(USER_DS); \ |
regs->iasq[0] = spaceid; \ |
regs->iasq[1] = spaceid; \ |
regs->iaoq[0] = pc; \ |
regs->iaoq[1] = pc + 4; \ |
regs->sr[2] = LINUX_GATEWAY_SPACE; \ |
regs->sr[3] = 0xffff; \ |
regs->sr[4] = spaceid; \ |
regs->sr[5] = spaceid; \ |
regs->sr[6] = spaceid; \ |
regs->sr[7] = spaceid; \ |
regs->gr[ 0] = USER_PSW; \ |
regs->fr[ 0] = 0LL; \ |
regs->fr[ 1] = 0LL; \ |
regs->fr[ 2] = 0LL; \ |
regs->fr[ 3] = 0LL; \ |
regs->gr[30] = ((unsigned long)sp + 63) &~ 63; \ |
regs->gr[31] = pc; \ |
\ |
get_user(regs->gr[25], (argv - 1)); \ |
regs->gr[24] = (long) argv; \ |
regs->gr[23] = 0; \ |
} while(0) |
|
struct task_struct; |
struct mm_struct; |
|
/* Free all resources held by a thread. */ |
extern void release_thread(struct task_struct *); |
extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); |
|
extern void map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm); |
|
#define copy_segments(tsk, mm) do { \ |
if (tsk->personality == PER_HPUX) \ |
map_hpux_gateway_page(tsk,mm); \ |
} while (0) |
#define release_segments(mm) do { } while (0) |
|
static inline unsigned long get_wchan(struct task_struct *p) |
{ |
return 0xdeadbeef; /* XXX */ |
} |
|
#define KSTK_EIP(tsk) ((tsk)->thread.regs.iaoq[0]) |
#define KSTK_ESP(tsk) ((tsk)->thread.regs.gr[30]) |
|
#endif /* __ASSEMBLY__ */ |
|
#ifdef CONFIG_PA20 |
#define ARCH_HAS_PREFETCH |
extern inline void prefetch(const void *addr) |
{ |
__asm__("ldw 0(%0), %%r0" : : "r" (addr)); |
} |
|
#define ARCH_HAS_PREFETCHW |
extern inline void prefetchw(const void *addr) |
{ |
__asm__("ldd 0(%0), %%r0" : : "r" (addr)); |
} |
#endif |
|
/* Be sure to hunt all references to this down when you change the size of |
* the kernel stack */ |
|
#define THREAD_SIZE (4*PAGE_SIZE) |
|
#define alloc_task_struct() \ |
((struct task_struct *) __get_free_pages(GFP_KERNEL,2)) |
#define free_task_struct(p) free_pages((unsigned long)(p),2) |
#define get_task_struct(tsk) atomic_inc(&virt_to_page(tsk)->count) |
|
#define init_task (init_task_union.task) |
#define init_stack (init_task_union.stack) |
|
#define cpu_relax() do { } while (0) |
|
#endif /* __ASM_PARISC_PROCESSOR_H */ |
/serial.h
0,0 → 1,47
/* |
* include/asm-parisc/serial.h |
*/ |
|
#include <linux/config.h> |
#include <asm/gsc.h> |
|
/* |
* This assumes you have a 7.272727 MHz clock for your UART. |
* The documentation implies a 40Mhz clock, and elsewhere a 7Mhz clock |
* Clarified: 7.2727MHz on LASI. Not yet clarified for DINO |
*/ |
|
#define LASI_BASE_BAUD ( 7272727 / 16 ) |
#define BASE_BAUD LASI_BASE_BAUD |
|
#ifdef CONFIG_SERIAL_DETECT_IRQ |
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ) |
#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ) |
#else |
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) |
#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF |
#endif |
|
#ifdef CONFIG_SERIAL_MANY_PORTS |
#define FOURPORT_FLAGS ASYNC_FOURPORT |
#define ACCENT_FLAGS 0 |
#define BOCA_FLAGS 0 |
#define HUB6_FLAGS 0 |
#define RS_TABLE_SIZE 64 |
#else |
#define RS_TABLE_SIZE 4 |
#endif |
|
/* |
* The base is relative to the LASI base. We can fix that |
* up later. We could also virtually map LASI so that we get |
* nice constants all over our kernel... |
*/ |
|
#define STD_SERIAL_PORT_DEFNS \ |
/* UART CLK PORT IRQ FLAGS */ \ |
{ 0, LASI_BASE_BAUD, -1, 4, ASYNC_SKIP_TEST, 0, PORT_UNKNOWN,}, /* ttyS0 */ |
|
#define SERIAL_PORT_DFNS \ |
STD_SERIAL_PORT_DEFNS |
|
/spinlock.h
0,0 → 1,77
#ifndef __ASM_SPINLOCK_H |
#define __ASM_SPINLOCK_H |
|
#include <asm/spinlock_t.h> /* get spinlock primitives */ |
#include <asm/psw.h> /* local_* primitives need PSW_I */ |
#include <asm/system_irqsave.h> /* get local_* primitives */ |
|
/* |
* Read-write spinlocks, allowing multiple readers |
* but only one writer. |
*/ |
typedef struct { |
spinlock_t lock; |
volatile int counter; |
} rwlock_t; |
|
#define RW_LOCK_UNLOCKED (rwlock_t) { SPIN_LOCK_UNLOCKED, 0 } |
|
#define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while (0) |
|
/* read_lock, read_unlock are pretty straightforward. Of course it somehow |
* sucks we end up saving/restoring flags twice for read_lock_irqsave aso. */ |
|
static inline void read_lock(rwlock_t *rw) |
{ |
unsigned long flags; |
spin_lock_irqsave(&rw->lock, flags); |
|
rw->counter++; |
|
spin_unlock_irqrestore(&rw->lock, flags); |
} |
|
static inline void read_unlock(rwlock_t *rw) |
{ |
unsigned long flags; |
spin_lock_irqsave(&rw->lock, flags); |
|
rw->counter--; |
|
spin_unlock_irqrestore(&rw->lock, flags); |
} |
|
/* write_lock is less trivial. We optimistically grab the lock and check |
* if we surprised any readers. If so we release the lock and wait till |
* they're all gone before trying again |
* |
* Also note that we don't use the _irqsave / _irqrestore suffixes here. |
* If we're called with interrupts enabled and we've got readers (or other |
* writers) in interrupt handlers someone fucked up and we'd dead-lock |
* sooner or later anyway. prumpf */ |
|
static inline void write_lock(rwlock_t *rw) |
{ |
retry: |
spin_lock(&rw->lock); |
|
if(rw->counter != 0) { |
/* this basically never happens */ |
spin_unlock(&rw->lock); |
|
while(rw->counter != 0); |
|
goto retry; |
} |
|
/* got it. now leave without unlocking */ |
} |
|
/* write_unlock is absolutely trivial - we don't have to wait for anything */ |
|
static inline void write_unlock(rwlock_t *rw) |
{ |
spin_unlock(&rw->lock); |
} |
|
#endif /* __ASM_SPINLOCK_H */ |
/semaphore.h
0,0 → 1,152
#ifndef _ASM_PARISC_SEMAPHORE_H |
#define _ASM_PARISC_SEMAPHORE_H |
|
/* |
* SMP- and interrupt-safe semaphores. |
* |
* (C) Copyright 1996 Linus Torvalds |
* |
* PA-RISC version by Matthew Wilcox |
* |
*/ |
|
#include <linux/spinlock.h> |
#include <linux/wait.h> |
#include <linux/rwsem.h> |
|
#include <asm/system.h> |
|
/* |
* The `count' is initialised to the number of people who are allowed to |
* take the lock. (Normally we want a mutex, so this is `1'). if |
* `count' is positive, the lock can be taken. if it's 0, no-one is |
* waiting on it. if it's -1, at least one task is waiting. |
*/ |
struct semaphore { |
spinlock_t sentry; |
int count; |
wait_queue_head_t wait; |
#if WAITQUEUE_DEBUG |
long __magic; |
#endif |
}; |
|
#if WAITQUEUE_DEBUG |
# define __SEM_DEBUG_INIT(name) \ |
, (long)&(name).__magic |
#else |
# define __SEM_DEBUG_INIT(name) |
#endif |
|
#define __SEMAPHORE_INITIALIZER(name,count) \ |
{ SPIN_LOCK_UNLOCKED, count, __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \ |
__SEM_DEBUG_INIT(name) } |
|
#define __MUTEX_INITIALIZER(name) \ |
__SEMAPHORE_INITIALIZER(name,1) |
|
#define __DECLARE_SEMAPHORE_GENERIC(name,count) \ |
struct semaphore name = __SEMAPHORE_INITIALIZER(name,count) |
|
#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1) |
#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0) |
|
extern inline void sema_init (struct semaphore *sem, int val) |
{ |
*sem = (struct semaphore)__SEMAPHORE_INITIALIZER((*sem),val); |
} |
|
static inline void init_MUTEX (struct semaphore *sem) |
{ |
sema_init(sem, 1); |
} |
|
static inline void init_MUTEX_LOCKED (struct semaphore *sem) |
{ |
sema_init(sem, 0); |
} |
|
static inline int sem_getcount(struct semaphore *sem) |
{ |
return sem->count; |
} |
|
asmlinkage void __down(struct semaphore * sem); |
asmlinkage int __down_interruptible(struct semaphore * sem); |
asmlinkage void __up(struct semaphore * sem); |
|
/* Semaphores can be `tried' from irq context. So we have to disable |
* interrupts while we're messing with the semaphore. Sorry. |
*/ |
|
extern __inline__ void down(struct semaphore * sem) |
{ |
#if WAITQUEUE_DEBUG |
CHECK_MAGIC(sem->__magic); |
#endif |
|
spin_lock_irq(&sem->sentry); |
if (sem->count > 0) { |
sem->count--; |
} else { |
__down(sem); |
} |
spin_unlock_irq(&sem->sentry); |
} |
|
extern __inline__ int down_interruptible(struct semaphore * sem) |
{ |
int ret = 0; |
#if WAITQUEUE_DEBUG |
CHECK_MAGIC(sem->__magic); |
#endif |
|
spin_lock_irq(&sem->sentry); |
if (sem->count > 0) { |
sem->count--; |
} else { |
ret = __down_interruptible(sem); |
} |
spin_unlock_irq(&sem->sentry); |
return ret; |
} |
|
/* |
* down_trylock returns 0 on success, 1 if we failed to get the lock. |
* May not sleep, but must preserve irq state |
*/ |
extern __inline__ int down_trylock(struct semaphore * sem) |
{ |
int flags, count; |
#if WAITQUEUE_DEBUG |
CHECK_MAGIC(sem->__magic); |
#endif |
|
spin_lock_irqsave(&sem->sentry, flags); |
count = sem->count - 1; |
if (count >= 0) |
sem->count = count; |
spin_unlock_irqrestore(&sem->sentry, flags); |
return (count < 0); |
} |
|
/* |
* Note! This is subtle. We jump to wake people up only if |
* the semaphore was negative (== somebody was waiting on it). |
*/ |
extern __inline__ void up(struct semaphore * sem) |
{ |
int flags; |
#if WAITQUEUE_DEBUG |
CHECK_MAGIC(sem->__magic); |
#endif |
spin_lock_irqsave(&sem->sentry, flags); |
if (sem->count < 0) { |
__up(sem); |
} else { |
sem->count++; |
} |
spin_unlock_irqrestore(&sem->sentry, flags); |
} |
|
#endif /* _ASM_PARISC_SEMAPHORE_H */ |
/parport_gsc.h
0,0 → 1,193
#ifndef __LINUX_PARPORT_GSC_H |
#define __LINUX_PARPORT_GSC_H |
|
#include <asm/io.h> |
#include <linux/delay.h> |
|
#undef DEBUG_PARPORT /* undefine for production */ |
#define DELAY_TIME 0 |
|
#if DELAY_TIME == 0 |
#define parport_readb gsc_readb |
#define parport_writeb gsc_writeb |
#else |
static __inline__ unsigned char parport_readb( unsigned long port ) |
{ |
udelay(DELAY_TIME); |
return gsc_readb(port); |
} |
|
static __inline__ void parport_writeb( unsigned char value, unsigned long port ) |
{ |
gsc_writeb(value,port); |
udelay(DELAY_TIME); |
} |
#endif |
|
/* --- register definitions ------------------------------- */ |
|
#define EPPDATA(p) ((p)->base + 0x4) |
#define EPPADDR(p) ((p)->base + 0x3) |
#define CONTROL(p) ((p)->base + 0x2) |
#define STATUS(p) ((p)->base + 0x1) |
#define DATA(p) ((p)->base + 0x0) |
|
struct parport_gsc_private { |
/* Contents of CTR. */ |
unsigned char ctr; |
|
/* Bitmask of writable CTR bits. */ |
unsigned char ctr_writable; |
|
/* Number of bytes per portword. */ |
int pword; |
|
/* Not used yet. */ |
int readIntrThreshold; |
int writeIntrThreshold; |
|
/* buffer suitable for DMA, if DMA enabled */ |
char *dma_buf; |
dma_addr_t dma_handle; |
struct pci_dev *dev; |
}; |
|
extern __inline__ void parport_gsc_write_data(struct parport *p, unsigned char d) |
{ |
#ifdef DEBUG_PARPORT |
printk (KERN_DEBUG "parport_gsc_write_data(%p,0x%02x)\n", p, d); |
#endif |
parport_writeb(d, DATA(p)); |
} |
|
extern __inline__ unsigned char parport_gsc_read_data(struct parport *p) |
{ |
unsigned char val = parport_readb (DATA (p)); |
#ifdef DEBUG_PARPORT |
printk (KERN_DEBUG "parport_gsc_read_data(%p) = 0x%02x\n", |
p, val); |
#endif |
return val; |
} |
|
/* __parport_gsc_frob_control differs from parport_gsc_frob_control in that |
* it doesn't do any extra masking. */ |
static __inline__ unsigned char __parport_gsc_frob_control (struct parport *p, |
unsigned char mask, |
unsigned char val) |
{ |
struct parport_gsc_private *priv = p->physport->private_data; |
unsigned char ctr = priv->ctr; |
#ifdef DEBUG_PARPORT |
printk (KERN_DEBUG |
"__parport_gsc_frob_control(%02x,%02x): %02x -> %02x\n", |
mask, val, ctr, ((ctr & ~mask) ^ val) & priv->ctr_writable); |
#endif |
ctr = (ctr & ~mask) ^ val; |
ctr &= priv->ctr_writable; /* only write writable bits. */ |
parport_writeb (ctr, CONTROL (p)); |
priv->ctr = ctr; /* Update soft copy */ |
return ctr; |
} |
|
extern __inline__ void parport_gsc_data_reverse (struct parport *p) |
{ |
__parport_gsc_frob_control (p, 0x20, 0x20); |
} |
|
extern __inline__ void parport_gsc_data_forward (struct parport *p) |
{ |
__parport_gsc_frob_control (p, 0x20, 0x00); |
} |
|
extern __inline__ void parport_gsc_write_control (struct parport *p, |
unsigned char d) |
{ |
const unsigned char wm = (PARPORT_CONTROL_STROBE | |
PARPORT_CONTROL_AUTOFD | |
PARPORT_CONTROL_INIT | |
PARPORT_CONTROL_SELECT); |
|
/* Take this out when drivers have adapted to newer interface. */ |
if (d & 0x20) { |
printk (KERN_DEBUG "%s (%s): use data_reverse for this!\n", |
p->name, p->cad->name); |
parport_gsc_data_reverse (p); |
} |
|
__parport_gsc_frob_control (p, wm, d & wm); |
} |
|
extern __inline__ unsigned char parport_gsc_read_control(struct parport *p) |
{ |
const unsigned char rm = (PARPORT_CONTROL_STROBE | |
PARPORT_CONTROL_AUTOFD | |
PARPORT_CONTROL_INIT | |
PARPORT_CONTROL_SELECT); |
const struct parport_gsc_private *priv = p->physport->private_data; |
return priv->ctr & rm; /* Use soft copy */ |
} |
|
extern __inline__ unsigned char parport_gsc_frob_control (struct parport *p, |
unsigned char mask, |
unsigned char val) |
{ |
const unsigned char wm = (PARPORT_CONTROL_STROBE | |
PARPORT_CONTROL_AUTOFD | |
PARPORT_CONTROL_INIT | |
PARPORT_CONTROL_SELECT); |
|
/* Take this out when drivers have adapted to newer interface. */ |
if (mask & 0x20) { |
printk (KERN_DEBUG "%s (%s): use data_%s for this!\n", |
p->name, p->cad->name, |
(val & 0x20) ? "reverse" : "forward"); |
if (val & 0x20) |
parport_gsc_data_reverse (p); |
else |
parport_gsc_data_forward (p); |
} |
|
/* Restrict mask and val to control lines. */ |
mask &= wm; |
val &= wm; |
|
return __parport_gsc_frob_control (p, mask, val); |
} |
|
extern __inline__ unsigned char parport_gsc_read_status(struct parport *p) |
{ |
return parport_readb (STATUS(p)); |
} |
|
|
extern __inline__ void parport_gsc_disable_irq(struct parport *p) |
{ |
__parport_gsc_frob_control (p, 0x10, 0x00); |
} |
|
extern __inline__ void parport_gsc_enable_irq(struct parport *p) |
{ |
__parport_gsc_frob_control (p, 0x10, 0x10); |
} |
|
extern void parport_gsc_release_resources(struct parport *p); |
|
extern int parport_gsc_claim_resources(struct parport *p); |
|
extern void parport_gsc_init_state(struct pardevice *, struct parport_state *s); |
|
extern void parport_gsc_save_state(struct parport *p, struct parport_state *s); |
|
extern void parport_gsc_restore_state(struct parport *p, struct parport_state *s); |
|
extern void parport_gsc_inc_use_count(void); |
|
extern void parport_gsc_dec_use_count(void); |
|
extern struct parport *parport_gsc_probe_port (unsigned long base, |
unsigned long base_hi, |
int irq, int dma, |
struct pci_dev *dev); |
|
#endif |
/system.h
0,0 → 1,149
#ifndef __PARISC_SYSTEM_H |
#define __PARISC_SYSTEM_H |
|
#include <linux/config.h> |
#include <asm/psw.h> |
#include <asm/system_irqsave.h> |
|
#ifdef CONFIG_SMP |
#include <asm/spinlock_t.h> |
#endif |
|
/* The program status word as bitfields. */ |
struct pa_psw { |
unsigned int y:1; |
unsigned int z:1; |
unsigned int rv:2; |
unsigned int w:1; |
unsigned int e:1; |
unsigned int s:1; |
unsigned int t:1; |
|
unsigned int h:1; |
unsigned int l:1; |
unsigned int n:1; |
unsigned int x:1; |
unsigned int b:1; |
unsigned int c:1; |
unsigned int v:1; |
unsigned int m:1; |
|
unsigned int cb:8; |
|
unsigned int o:1; |
unsigned int g:1; |
unsigned int f:1; |
unsigned int r:1; |
unsigned int q:1; |
unsigned int p:1; |
unsigned int d:1; |
unsigned int i:1; |
}; |
|
#ifdef __LP64__ |
#define pa_psw(task) ((struct pa_psw *) ((char *) (task) + TASK_PT_PSW + 4)) |
#else |
#define pa_psw(task) ((struct pa_psw *) ((char *) (task) + TASK_PT_PSW)) |
#endif |
|
struct task_struct; |
|
extern struct task_struct *_switch_to(struct task_struct *, struct task_struct *); |
|
#define prepare_to_switch() do { } while(0) |
#define switch_to(prev, next, last) do { \ |
(last) = _switch_to(prev, next); \ |
} while(0) |
|
|
#ifdef CONFIG_SMP |
extern void __global_cli(void); |
extern void __global_sti(void); |
extern unsigned long __global_save_flags(void); |
extern void __global_restore_flags(unsigned long); |
|
#define cli() __global_cli() |
#define sti() __global_sti() |
#define save_flags(x) ((x)=__global_save_flags()) |
#define restore_flags(x) __global_restore_flags(x) |
#define save_and_cli(x) do { save_flags(x); cli(); } while(0); |
#define save_and_sti(x) do { save_flags(x); sti(); } while(0); |
|
#else |
|
#define cli() __cli() |
#define sti() __sti() |
#define save_flags(x) __save_flags(x) |
#define restore_flags(x) __restore_flags(x) |
#define save_and_cli(x) __save_and_cli(x) |
#define save_and_sti(x) __save_and_sti(x) |
|
#endif |
|
|
#define mfctl(reg) ({ \ |
unsigned long cr; \ |
__asm__ __volatile__( \ |
"mfctl " #reg ",%0" : \ |
"=r" (cr) \ |
); \ |
cr; \ |
}) |
|
#define mtctl(gr, cr) \ |
__asm__ __volatile__("mtctl %0,%1" \ |
: /* no outputs */ \ |
: "r" (gr), "i" (cr)) |
|
/* these are here to de-mystefy the calling code, and to provide hooks */ |
/* which I needed for debugging EIEM problems -PB */ |
#define get_eiem() mfctl(15) |
static inline void set_eiem(unsigned long val) |
{ |
mtctl(val, 15); |
} |
|
#define mfsp(reg) ({ \ |
unsigned long cr; \ |
__asm__ __volatile__( \ |
"mfsp " #reg ",%0" : \ |
"=r" (cr) \ |
); \ |
cr; \ |
}) |
|
#define mtsp(gr, cr) \ |
__asm__ __volatile__("mtsp %0,%1" \ |
: /* no outputs */ \ |
: "r" (gr), "i" (cr)) |
|
|
/* |
** This is simply the barrier() macro from linux/kernel.h but when serial.c |
** uses tqueue.h uses smp_mb() defined using barrier(), linux/kernel.h |
** hasn't yet been included yet so it fails, thus repeating the macro here. |
** |
** PA-RISC architecture allows for weakly ordered memory accesses although |
** none of the processors use it. There is a strong ordered bit that is |
** set in the O-bit of the page directory entry. Operating systems that |
** can not tolerate out of order accesses should set this bit when mapping |
** pages. The O-bit of the PSW should also be set to 1 (I don't believe any |
** of the processor implemented the PSW O-bit). The PCX-W ERS states that |
** the TLB O-bit is not implemented so the page directory does not need to |
** have the O-bit set when mapping pages (section 3.1). This section also |
** states that the PSW Y, Z, G, and O bits are not implemented. |
** So it looks like nothing needs to be done for parisc-linux (yet). |
** (thanks to chada for the above comment -ggg) |
** |
** The __asm__ op below simple prevents gcc/ld from reordering |
** instructions across the mb() "call". |
*/ |
#define mb() __asm__ __volatile__("":::"memory"); /* barrier() */ |
#define rmb() mb() |
#define wmb() mb() |
#define smp_mb() mb() |
#define smp_wmb() mb() |
|
#define set_mb(var, value) do { var = value; mb(); } while (0) |
|
#endif |
/runway.h
0,0 → 1,9
#ifndef ASM_PARISC_RUNWAY_H |
#define ASM_PARISC_RUNWAY_H |
#ifdef __KERNEL__ |
|
/* declared in arch/parisc/kernel/setup.c */ |
extern struct proc_dir_entry * proc_runway_root; |
|
#endif /* __KERNEL__ */ |
#endif /* ASM_PARISC_RUNWAY_H */ |
/iosapic.h
0,0 → 1,53
/* |
** This file is private to iosapic driver. |
** If stuff needs to be used by another driver, move it to a common file. |
** |
** WARNING: fields most data structures here are ordered to make sure |
** they pack nicely for 64-bit compilation. (ie sizeof(long) == 8) |
*/ |
|
|
/* |
** I/O SAPIC init function |
** Caller knows where an I/O SAPIC is. LBA has an integrated I/O SAPIC. |
** Call setup as part of per instance initialization. |
** (ie *not* init_module() function unless only one is present.) |
** fixup_irq is to initialize PCI IRQ line support and |
** virtualize pcidev->irq value. To be called by pci_fixup_bus(). |
*/ |
extern void *iosapic_register(unsigned long hpa); |
extern int iosapic_fixup_irq(void *obj, struct pci_dev *pcidev); |
|
|
#ifdef __IA64__ |
/* |
** PA: PIB (Processor Interrupt Block) is handled by Runway bus adapter. |
** and is hardcoded to 0xfeeNNNN0 where NNNN is id_eid field. |
** |
** IA64: PIB is handled by "Local SAPIC" (integrated in the processor). |
*/ |
struct local_sapic_info { |
struct local_sapic_info *lsi_next; /* point to next CPU info */ |
int *lsi_cpu_id; /* point to logical CPU id */ |
unsigned long *lsi_id_eid; /* point to IA-64 CPU id */ |
int *lsi_status; /* point to CPU status */ |
void *lsi_private; /* point to special info */ |
}; |
|
/* |
** "root" data structure which ties everything together. |
** Should always be able to start with sapic_root and locate |
** the desired information. |
*/ |
struct sapic_info { |
struct sapic_info *si_next; /* info is per cell */ |
int si_cellid; /* cell id */ |
unsigned int si_status; /* status */ |
char *si_pib_base; /* intr blk base address */ |
local_sapic_info_t *si_local_info; |
io_sapic_info_t *si_io_info; |
extint_info_t *si_extint_info;/* External Intr info */ |
}; |
|
#endif /* IA64 */ |
|
/resource.h
0,0 → 1,47
#ifndef _ASM_PARISC_RESOURCE_H |
#define _ASM_PARISC_RESOURCE_H |
|
/* |
* Resource limits |
*/ |
|
#define RLIMIT_CPU 0 /* CPU time in ms */ |
#define RLIMIT_FSIZE 1 /* Maximum filesize */ |
#define RLIMIT_DATA 2 /* max data size */ |
#define RLIMIT_STACK 3 /* max stack size */ |
#define RLIMIT_CORE 4 /* max core file size */ |
#define RLIMIT_RSS 5 /* max resident set size */ |
#define RLIMIT_NPROC 6 /* max number of processes */ |
#define RLIMIT_NOFILE 7 /* max number of open files */ |
#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */ |
#define RLIMIT_AS 9 /* address space limit */ |
#define RLIMIT_LOCKS 10 /* maximum file locks held */ |
|
#define RLIM_NLIMITS 11 |
|
/* |
* SuS says limits have to be unsigned. |
* Which makes a ton more sense anyway. |
*/ |
#define RLIM_INFINITY (~0UL) |
|
#ifdef __KERNEL__ |
|
#define INIT_RLIMITS \ |
{ \ |
{ RLIM_INFINITY, RLIM_INFINITY }, \ |
{ RLIM_INFINITY, RLIM_INFINITY }, \ |
{ RLIM_INFINITY, RLIM_INFINITY }, \ |
{ _STK_LIM, 10 * _STK_LIM }, \ |
{ 0, RLIM_INFINITY }, \ |
{ RLIM_INFINITY, RLIM_INFINITY }, \ |
{ 0, 0 }, \ |
{ INR_OPEN, INR_OPEN }, \ |
{ RLIM_INFINITY, RLIM_INFINITY }, \ |
{ RLIM_INFINITY, RLIM_INFINITY }, \ |
{ RLIM_INFINITY, RLIM_INFINITY }, \ |
} |
|
#endif /* __KERNEL__ */ |
|
#endif |
/rtc.h
0,0 → 1,132
/* include/asm-parisc/rtc.h */ |
|
#ifndef _ASM_RTC_H |
#define _ASM_RTC_H |
|
#ifdef __KERNEL__ |
|
#include <linux/rtc.h> |
#include <asm/errno.h> |
|
#define RTC_PIE 0x40 /* periodic interrupt enable */ |
#define RTC_AIE 0x20 /* alarm interrupt enable */ |
#define RTC_UIE 0x10 /* update-finished interrupt enable */ |
|
#define RTC_BATT_BAD 0x100 /* battery bad */ |
|
/* some dummy definitions */ |
#define RTC_SQWE 0x08 /* enable square-wave output */ |
#define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */ |
#define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */ |
#define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */ |
|
|
/* constants for calculation */ |
#define SECS_PER_HOUR (60 * 60) |
#define SECS_PER_DAY (SECS_PER_HOUR * 24) |
|
#define __isleap(year) \ |
((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) |
|
|
/* How many days come before each month (0-12). */ |
static const unsigned short int __mon_yday[2][13] = |
{ |
/* Normal years. */ |
{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, |
/* Leap years. */ |
{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } |
}; |
|
static inline unsigned int get_rtc_time(struct rtc_time *wtime) |
{ |
/* |
* Only the values that we read from the RTC are set. We leave |
* tm_wday, tm_yday and tm_isdst untouched. Even though the |
* RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated |
* by the RTC when initially set to a non-zero value. |
*/ |
|
struct pdc_tod tod_data; |
long int days, rem, y; |
const unsigned short int *ip; |
|
if (pdc_tod_read(&tod_data) < 0) |
return (RTC_24H | RTC_BATT_BAD); |
|
|
// most of the remainder of this function is: |
// Copyright (C) 1991, 1993, 1997, 1998 Free Software Foundation, Inc. |
// This was originally a part of the GNU C Library. |
// It is distributed under the GPL, and was swiped from offtime.c |
|
|
days = tod_data.tod_sec / SECS_PER_DAY; |
rem = tod_data.tod_sec % SECS_PER_DAY; |
|
wtime->tm_hour = rem / SECS_PER_HOUR; |
rem %= SECS_PER_HOUR; |
wtime->tm_min = rem / 60; |
wtime->tm_sec = rem % 60; |
|
y = 1970; |
|
#define DIV(a, b) ((a) / (b) - ((a) % (b) < 0)) |
#define LEAPS_THRU_END_OF(y) (DIV (y, 4) - DIV (y, 100) + DIV (y, 400)) |
|
while (days < 0 || days >= (__isleap (y) ? 366 : 365)) |
{ |
/* Guess a corrected year, assuming 365 days per year. */ |
long int yg = y + days / 365 - (days % 365 < 0); |
|
/* Adjust DAYS and Y to match the guessed year. */ |
days -= ((yg - y) * 365 |
+ LEAPS_THRU_END_OF (yg - 1) |
- LEAPS_THRU_END_OF (y - 1)); |
y = yg; |
} |
wtime->tm_year = y - 1900; |
#undef DIV |
#undef LEAPS_THRU_END_OF |
|
ip = __mon_yday[__isleap(y)]; |
for (y = 11; days < (long int) ip[y]; --y) |
continue; |
days -= ip[y]; |
wtime->tm_mon = y; |
wtime->tm_mday = days + 1; |
|
return (RTC_24H); |
} |
|
static inline int set_rtc_time(struct rtc_time *wtime) |
{ |
u_int32_t secs; |
|
secs = mktime(wtime->tm_year + 1900, wtime->tm_mon + 1, wtime->tm_mday, |
wtime->tm_hour, wtime->tm_min, wtime->tm_sec); |
|
if (pdc_tod_set(secs, 0) < 0) |
return -EINVAL; |
else |
return 0; |
} |
|
static inline unsigned int get_rtc_ss(void) |
{ |
return -EINVAL; |
} |
|
static inline int get_rtc_pll(struct rtc_pll_info *pll) |
{ |
return -EINVAL; |
} |
static inline int set_rtc_pll(struct rtc_pll_info *pll) |
{ |
return -EINVAL; |
} |
|
#endif /* __KERNEL__ */ |
|
#endif /* _ASM__RTC_H */ |
|
/div64.h
0,0 → 1,54
#ifndef __ASM_PARISC_DIV64 |
#define __ASM_PARISC_DIV64 |
|
#ifdef __LP64__ |
|
/* |
* Copyright (C) 1999 Hewlett-Packard Co |
* Copyright (C) 1999 David Mosberger-Tang <davidm@hpl.hp.com> |
* |
* vsprintf uses this to divide a 64-bit integer N by a small integer BASE. |
* This is incredibly hard on IA-64 and HPPA |
*/ |
|
#define do_div(n,base) \ |
({ \ |
int _res; \ |
_res = ((unsigned long) (n)) % (unsigned) (base); \ |
(n) = ((unsigned long) (n)) / (unsigned) (base); \ |
_res; \ |
}) |
|
#else |
/* |
* unsigned long long division. Yuck Yuck! What is Linux coming to? |
* This is 100% disgusting |
*/ |
#define do_div(n,base) \ |
({ \ |
unsigned long __low, __low2, __high, __rem; \ |
__low = (n) & 0xffffffff; \ |
__high = (n) >> 32; \ |
if (__high) { \ |
__rem = __high % (unsigned long)base; \ |
__high = __high / (unsigned long)base; \ |
__low2 = __low >> 16; \ |
__low2 += __rem << 16; \ |
__rem = __low2 % (unsigned long)base; \ |
__low2 = __low2 / (unsigned long)base; \ |
__low = __low & 0xffff; \ |
__low += __rem << 16; \ |
__rem = __low % (unsigned long)base; \ |
__low = __low / (unsigned long)base; \ |
n = __low + ((long long)__low2 << 16) + \ |
((long long) __high << 32); \ |
} else { \ |
__rem = __low % (unsigned long)base; \ |
n = (__low / (unsigned long)base); \ |
} \ |
__rem; \ |
}) |
#endif |
|
#endif |
|
/scatterlist.h
0,0 → 1,33
#ifndef _ASM_PARISC_SCATTERLIST_H |
#define _ASM_PARISC_SCATTERLIST_H |
|
#include <asm/page.h> |
|
struct scatterlist { |
/* This will disappear in 2.5.x */ |
char *address; |
|
/* page/offset only valid if ADDRESS member is NULL. |
** Needed to support CONFIG_HIGHMEM on x386. |
** I still think davem is a dork for forcing other |
** arches to add this to 2.4.x. -ggg |
*/ |
struct page *page; |
unsigned int offset; |
|
unsigned int length; |
|
/* an IOVA can be 64-bits on some PA-Risc platforms. */ |
dma_addr_t iova; /* I/O Virtual Address */ |
__u32 iova_length; /* bytes mapped */ |
}; |
|
#define sg_virt_addr(sg) (((sg)->address) ? ((sg)->address) : \ |
(page_address((sg)->page) + (sg)->offset)) |
|
#define sg_dma_address(sg) ((sg)->iova) |
#define sg_dma_len(sg) ((sg)->iova_length) |
|
#define ISA_DMA_THRESHOLD (~0UL) |
|
#endif /* _ASM_PARISC_SCATTERLIST_H */ |
/cache.h
0,0 → 1,74
/* |
* include/asm-parisc/cache.h |
*/ |
|
#ifndef __ARCH_PARISC_CACHE_H |
#define __ARCH_PARISC_CACHE_H |
|
#include <linux/config.h> |
|
#ifndef __ASSEMBLY__ |
/* |
* PA 2.0 processors have 64-byte cachelines; PA 1.1 processors have |
* 32-byte cachelines. The default configuration is not for SMP anyway, |
* so if you're building for SMP, you should select the appropriate |
* processor type. There is a potential livelock danger when running |
* a machine with this value set too small, but it's more probable you'll |
* just ruin performance. |
*/ |
#ifdef CONFIG_PA20 |
#define L1_CACHE_BYTES 64 |
#else |
#define L1_CACHE_BYTES 32 |
#endif |
|
#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) |
|
#define SMP_CACHE_BYTES L1_CACHE_BYTES |
|
#define __cacheline_aligned __attribute__((__aligned__(L1_CACHE_BYTES))) |
|
extern void flush_data_cache_local(void); /* flushes local data-cache only */ |
extern void flush_instruction_cache_local(void); /* flushes local code-cache only */ |
#ifdef CONFIG_SMP |
extern void flush_data_cache(void); /* flushes data-cache only (all processors) */ |
#else |
#define flush_data_cache flush_data_cache_local |
#define flush_instruction_cache flush_instruction_cache_local |
#endif |
|
extern void cache_init(void); /* initializes cache-flushing */ |
extern void flush_all_caches(void); /* flush everything (tlb & cache) */ |
extern int get_cache_info(char *); |
extern void flush_user_icache_range_asm(unsigned long, unsigned long); |
extern void flush_kernel_icache_range_asm(unsigned long, unsigned long); |
extern void flush_user_dcache_range_asm(unsigned long, unsigned long); |
extern void flush_kernel_dcache_range_asm(unsigned long, unsigned long); |
extern void flush_kernel_dcache_page(void *); |
extern void flush_kernel_icache_page(void *); |
extern void disable_sr_hashing(void); /* turns off space register hashing */ |
extern void disable_sr_hashing_asm(int); /* low level support for above */ |
extern void free_sid(unsigned long); |
unsigned long alloc_sid(void); |
|
struct seq_file; |
extern void show_cache_info(struct seq_file *m); |
|
extern int split_tlb; |
extern int dcache_stride; |
extern int icache_stride; |
extern struct pdc_cache_info cache_info; |
|
#define pdtlb(addr) asm volatile("pdtlb 0(%%sr1,%0)" : : "r" (addr)); |
#define pitlb(addr) asm volatile("pitlb 0(%%sr1,%0)" : : "r" (addr)); |
#define pdtlb_kernel(addr) asm volatile("pdtlb 0(%0)" : : "r" (addr)); |
|
#endif /* ! __ASSEMBLY__ */ |
|
/* Classes of processor wrt: disabling space register hashing */ |
|
#define SRHASH_PCXST 0 /* pcxs, pcxt, pcxt_ */ |
#define SRHASH_PCXL 1 /* pcxl */ |
#define SRHASH_PA20 2 /* pcxu, pcxu_, pcxw, pcxw_ */ |
|
#endif |
/led.h
0,0 → 1,41
#ifndef LED_H |
#define LED_H |
|
#define LED7 0x80 /* top (or furthest right) LED */ |
#define LED6 0x40 |
#define LED5 0x20 |
#define LED4 0x10 |
#define LED3 0x08 |
#define LED2 0x04 |
#define LED1 0x02 |
#define LED0 0x01 /* bottom (or furthest left) LED */ |
|
#define LED_LAN_TX LED0 /* for LAN transmit activity */ |
#define LED_LAN_RCV LED1 /* for LAN receive activity */ |
#define LED_DISK_IO LED2 /* for disk activity */ |
#define LED_HEARTBEAT LED3 /* heartbeat */ |
|
/* values for pdc_chassis_lcd_info_ret_block.model: */ |
#define DISPLAY_MODEL_LCD 0 /* KittyHawk LED or LCD */ |
#define DISPLAY_MODEL_NONE 1 /* no LED or LCD */ |
#define DISPLAY_MODEL_LASI 2 /* LASI style 8 bit LED */ |
#define DISPLAY_MODEL_OLD_ASP 0x7F /* faked: ASP style 8 x 1 bit LED (only very old ASP versions) */ |
|
#define LED_CMD_REG_NONE NULL /* NULL == no addr for the cmd register */ |
|
/* led tasklet struct */ |
extern struct tasklet_struct led_tasklet; |
|
/* register_led_driver() */ |
int __init register_led_driver( int model, char *cmd_reg, char *data_reg ); |
|
/* registers the LED regions for procfs */ |
void __init register_led_regions(void); |
|
/* writes a string to the LCD display (if possible on this h/w) */ |
int lcd_print(char *str); |
|
/* main LED initialization function (uses PDC) */ |
int __init led_init(void); |
|
#endif /* LED_H */ |
/unistd.h
0,0 → 1,909
#ifndef _ASM_PARISC_UNISTD_H_ |
#define _ASM_PARISC_UNISTD_H_ |
|
/* |
* This file contains the system call numbers. |
*/ |
|
/* |
* HP-UX system calls get their native numbers for binary compatibility. |
*/ |
|
#define __NR_HPUX_exit 1 |
#define __NR_HPUX_fork 2 |
#define __NR_HPUX_read 3 |
#define __NR_HPUX_write 4 |
#define __NR_HPUX_open 5 |
#define __NR_HPUX_close 6 |
#define __NR_HPUX_wait 7 |
#define __NR_HPUX_creat 8 |
#define __NR_HPUX_link 9 |
#define __NR_HPUX_unlink 10 |
#define __NR_HPUX_execv 11 |
#define __NR_HPUX_chdir 12 |
#define __NR_HPUX_time 13 |
#define __NR_HPUX_mknod 14 |
#define __NR_HPUX_chmod 15 |
#define __NR_HPUX_chown 16 |
#define __NR_HPUX_break 17 |
#define __NR_HPUX_lchmod 18 |
#define __NR_HPUX_lseek 19 |
#define __NR_HPUX_getpid 20 |
#define __NR_HPUX_mount 21 |
#define __NR_HPUX_umount 22 |
#define __NR_HPUX_setuid 23 |
#define __NR_HPUX_getuid 24 |
#define __NR_HPUX_stime 25 |
#define __NR_HPUX_ptrace 26 |
#define __NR_HPUX_alarm 27 |
#define __NR_HPUX_oldfstat 28 |
#define __NR_HPUX_pause 29 |
#define __NR_HPUX_utime 30 |
#define __NR_HPUX_stty 31 |
#define __NR_HPUX_gtty 32 |
#define __NR_HPUX_access 33 |
#define __NR_HPUX_nice 34 |
#define __NR_HPUX_ftime 35 |
#define __NR_HPUX_sync 36 |
#define __NR_HPUX_kill 37 |
#define __NR_HPUX_stat 38 |
#define __NR_HPUX_setpgrp3 39 |
#define __NR_HPUX_lstat 40 |
#define __NR_HPUX_dup 41 |
#define __NR_HPUX_pipe 42 |
#define __NR_HPUX_times 43 |
#define __NR_HPUX_profil 44 |
#define __NR_HPUX_ki_call 45 |
#define __NR_HPUX_setgid 46 |
#define __NR_HPUX_getgid 47 |
#define __NR_HPUX_sigsys 48 |
#define __NR_HPUX_reserved1 49 |
#define __NR_HPUX_reserved2 50 |
#define __NR_HPUX_acct 51 |
#define __NR_HPUX_set_userthreadid 52 |
#define __NR_HPUX_oldlock 53 |
#define __NR_HPUX_ioctl 54 |
#define __NR_HPUX_reboot 55 |
#define __NR_HPUX_symlink 56 |
#define __NR_HPUX_utssys 57 |
#define __NR_HPUX_readlink 58 |
#define __NR_HPUX_execve 59 |
#define __NR_HPUX_umask 60 |
#define __NR_HPUX_chroot 61 |
#define __NR_HPUX_fcntl 62 |
#define __NR_HPUX_ulimit 63 |
#define __NR_HPUX_getpagesize 64 |
#define __NR_HPUX_mremap 65 |
#define __NR_HPUX_vfork 66 |
#define __NR_HPUX_vread 67 |
#define __NR_HPUX_vwrite 68 |
#define __NR_HPUX_sbrk 69 |
#define __NR_HPUX_sstk 70 |
#define __NR_HPUX_mmap 71 |
#define __NR_HPUX_vadvise 72 |
#define __NR_HPUX_munmap 73 |
#define __NR_HPUX_mprotect 74 |
#define __NR_HPUX_madvise 75 |
#define __NR_HPUX_vhangup 76 |
#define __NR_HPUX_swapoff 77 |
#define __NR_HPUX_mincore 78 |
#define __NR_HPUX_getgroups 79 |
#define __NR_HPUX_setgroups 80 |
#define __NR_HPUX_getpgrp2 81 |
#define __NR_HPUX_setpgrp2 82 |
#define __NR_HPUX_setitimer 83 |
#define __NR_HPUX_wait3 84 |
#define __NR_HPUX_swapon 85 |
#define __NR_HPUX_getitimer 86 |
#define __NR_HPUX_gethostname42 87 |
#define __NR_HPUX_sethostname42 88 |
#define __NR_HPUX_getdtablesize 89 |
#define __NR_HPUX_dup2 90 |
#define __NR_HPUX_getdopt 91 |
#define __NR_HPUX_fstat 92 |
#define __NR_HPUX_select 93 |
#define __NR_HPUX_setdopt 94 |
#define __NR_HPUX_fsync 95 |
#define __NR_HPUX_setpriority 96 |
#define __NR_HPUX_socket_old 97 |
#define __NR_HPUX_connect_old 98 |
#define __NR_HPUX_accept_old 99 |
#define __NR_HPUX_getpriority 100 |
#define __NR_HPUX_send_old 101 |
#define __NR_HPUX_recv_old 102 |
#define __NR_HPUX_socketaddr_old 103 |
#define __NR_HPUX_bind_old 104 |
#define __NR_HPUX_setsockopt_old 105 |
#define __NR_HPUX_listen_old 106 |
#define __NR_HPUX_vtimes_old 107 |
#define __NR_HPUX_sigvector 108 |
#define __NR_HPUX_sigblock 109 |
#define __NR_HPUX_siggetmask 110 |
#define __NR_HPUX_sigpause 111 |
#define __NR_HPUX_sigstack 112 |
#define __NR_HPUX_recvmsg_old 113 |
#define __NR_HPUX_sendmsg_old 114 |
#define __NR_HPUX_vtrace_old 115 |
#define __NR_HPUX_gettimeofday 116 |
#define __NR_HPUX_getrusage 117 |
#define __NR_HPUX_getsockopt_old 118 |
#define __NR_HPUX_resuba_old 119 |
#define __NR_HPUX_readv 120 |
#define __NR_HPUX_writev 121 |
#define __NR_HPUX_settimeofday 122 |
#define __NR_HPUX_fchown 123 |
#define __NR_HPUX_fchmod 124 |
#define __NR_HPUX_recvfrom_old 125 |
#define __NR_HPUX_setresuid 126 |
#define __NR_HPUX_setresgid 127 |
#define __NR_HPUX_rename 128 |
#define __NR_HPUX_truncate 129 |
#define __NR_HPUX_ftruncate 130 |
#define __NR_HPUX_flock_old 131 |
#define __NR_HPUX_sysconf 132 |
#define __NR_HPUX_sendto_old 133 |
#define __NR_HPUX_shutdown_old 134 |
#define __NR_HPUX_socketpair_old 135 |
#define __NR_HPUX_mkdir 136 |
#define __NR_HPUX_rmdir 137 |
#define __NR_HPUX_utimes_old 138 |
#define __NR_HPUX_sigcleanup_old 139 |
#define __NR_HPUX_setcore 140 |
#define __NR_HPUX_getpeername_old 141 |
#define __NR_HPUX_gethostid 142 |
#define __NR_HPUX_sethostid 143 |
#define __NR_HPUX_getrlimit 144 |
#define __NR_HPUX_setrlimit 145 |
#define __NR_HPUX_killpg_old 146 |
#define __NR_HPUX_cachectl 147 |
#define __NR_HPUX_quotactl 148 |
#define __NR_HPUX_get_sysinfo 149 |
#define __NR_HPUX_getsockname_old 150 |
#define __NR_HPUX_privgrp 151 |
#define __NR_HPUX_rtprio 152 |
#define __NR_HPUX_plock 153 |
#define __NR_HPUX_reserved3 154 |
#define __NR_HPUX_lockf 155 |
#define __NR_HPUX_semget 156 |
#define __NR_HPUX_osemctl 157 |
#define __NR_HPUX_semop 158 |
#define __NR_HPUX_msgget 159 |
#define __NR_HPUX_omsgctl 160 |
#define __NR_HPUX_msgsnd 161 |
#define __NR_HPUX_msgrecv 162 |
#define __NR_HPUX_shmget 163 |
#define __NR_HPUX_oshmctl 164 |
#define __NR_HPUX_shmat 165 |
#define __NR_HPUX_shmdt 166 |
#define __NR_HPUX_m68020_advise 167 |
/* [168,189] are for Discless/DUX */ |
#define __NR_HPUX_csp 168 |
#define __NR_HPUX_cluster 169 |
#define __NR_HPUX_mkrnod 170 |
#define __NR_HPUX_test 171 |
#define __NR_HPUX_unsp_open 172 |
#define __NR_HPUX_reserved4 173 |
#define __NR_HPUX_getcontext_old 174 |
#define __NR_HPUX_osetcontext 175 |
#define __NR_HPUX_bigio 176 |
#define __NR_HPUX_pipenode 177 |
#define __NR_HPUX_lsync 178 |
#define __NR_HPUX_getmachineid 179 |
#define __NR_HPUX_cnodeid 180 |
#define __NR_HPUX_cnodes 181 |
#define __NR_HPUX_swapclients 182 |
#define __NR_HPUX_rmt_process 183 |
#define __NR_HPUX_dskless_stats 184 |
#define __NR_HPUX_sigprocmask 185 |
#define __NR_HPUX_sigpending 186 |
#define __NR_HPUX_sigsuspend 187 |
#define __NR_HPUX_sigaction 188 |
#define __NR_HPUX_reserved5 189 |
#define __NR_HPUX_nfssvc 190 |
#define __NR_HPUX_getfh 191 |
#define __NR_HPUX_getdomainname 192 |
#define __NR_HPUX_setdomainname 193 |
#define __NR_HPUX_async_daemon 194 |
#define __NR_HPUX_getdirentries 195 |
#define __NR_HPUX_statfs 196 |
#define __NR_HPUX_fstatfs 197 |
#define __NR_HPUX_vfsmount 198 |
#define __NR_HPUX_reserved6 199 |
#define __NR_HPUX_waitpid 200 |
/* 201 - 223 missing */ |
#define __NR_HPUX_sigsetreturn 224 |
#define __NR_HPUX_sigsetstatemask 225 |
/* 226 missing */ |
#define __NR_HPUX_cs 227 |
#define __NR_HPUX_cds 228 |
#define __NR_HPUX_set_no_trunc 229 |
#define __NR_HPUX_pathconf 230 |
#define __NR_HPUX_fpathconf 231 |
/* 232, 233 missing */ |
#define __NR_HPUX_nfs_fcntl 234 |
#define __NR_HPUX_ogetacl 235 |
#define __NR_HPUX_ofgetacl 236 |
#define __NR_HPUX_osetacl 237 |
#define __NR_HPUX_ofsetacl 238 |
#define __NR_HPUX_pstat 239 |
#define __NR_HPUX_getaudid 240 |
#define __NR_HPUX_setaudid 241 |
#define __NR_HPUX_getaudproc 242 |
#define __NR_HPUX_setaudproc 243 |
#define __NR_HPUX_getevent 244 |
#define __NR_HPUX_setevent 245 |
#define __NR_HPUX_audwrite 246 |
#define __NR_HPUX_audswitch 247 |
#define __NR_HPUX_audctl 248 |
#define __NR_HPUX_ogetaccess 249 |
#define __NR_HPUX_fsctl 250 |
/* 251 - 258 missing */ |
#define __NR_HPUX_swapfs 259 |
#define __NR_HPUX_fss 260 |
/* 261 - 266 missing */ |
#define __NR_HPUX_tsync 267 |
#define __NR_HPUX_getnumfds 268 |
#define __NR_HPUX_poll 269 |
#define __NR_HPUX_getmsg 270 |
#define __NR_HPUX_putmsg 271 |
#define __NR_HPUX_fchdir 272 |
#define __NR_HPUX_getmount_cnt 273 |
#define __NR_HPUX_getmount_entry 274 |
#define __NR_HPUX_accept 275 |
#define __NR_HPUX_bind 276 |
#define __NR_HPUX_connect 277 |
#define __NR_HPUX_getpeername 278 |
#define __NR_HPUX_getsockname 279 |
#define __NR_HPUX_getsockopt 280 |
#define __NR_HPUX_listen 281 |
#define __NR_HPUX_recv 282 |
#define __NR_HPUX_recvfrom 283 |
#define __NR_HPUX_recvmsg 284 |
#define __NR_HPUX_send 285 |
#define __NR_HPUX_sendmsg 286 |
#define __NR_HPUX_sendto 287 |
#define __NR_HPUX_setsockopt 288 |
#define __NR_HPUX_shutdown 289 |
#define __NR_HPUX_socket 290 |
#define __NR_HPUX_socketpair 291 |
#define __NR_HPUX_proc_open 292 |
#define __NR_HPUX_proc_close 293 |
#define __NR_HPUX_proc_send 294 |
#define __NR_HPUX_proc_recv 295 |
#define __NR_HPUX_proc_sendrecv 296 |
#define __NR_HPUX_proc_syscall 297 |
/* 298 - 311 missing */ |
#define __NR_HPUX_semctl 312 |
#define __NR_HPUX_msgctl 313 |
#define __NR_HPUX_shmctl 314 |
#define __NR_HPUX_mpctl 315 |
#define __NR_HPUX_exportfs 316 |
#define __NR_HPUX_getpmsg 317 |
#define __NR_HPUX_putpmsg 318 |
/* 319 missing */ |
#define __NR_HPUX_msync 320 |
#define __NR_HPUX_msleep 321 |
#define __NR_HPUX_mwakeup 322 |
#define __NR_HPUX_msem_init 323 |
#define __NR_HPUX_msem_remove 324 |
#define __NR_HPUX_adjtime 325 |
#define __NR_HPUX_kload 326 |
#define __NR_HPUX_fattach 327 |
#define __NR_HPUX_fdetach 328 |
#define __NR_HPUX_serialize 329 |
#define __NR_HPUX_statvfs 330 |
#define __NR_HPUX_fstatvfs 331 |
#define __NR_HPUX_lchown 332 |
#define __NR_HPUX_getsid 333 |
#define __NR_HPUX_sysfs 334 |
/* 335, 336 missing */ |
#define __NR_HPUX_sched_setparam 337 |
#define __NR_HPUX_sched_getparam 338 |
#define __NR_HPUX_sched_setscheduler 339 |
#define __NR_HPUX_sched_getscheduler 340 |
#define __NR_HPUX_sched_yield 341 |
#define __NR_HPUX_sched_get_priority_max 342 |
#define __NR_HPUX_sched_get_priority_min 343 |
#define __NR_HPUX_sched_rr_get_interval 344 |
#define __NR_HPUX_clock_settime 345 |
#define __NR_HPUX_clock_gettime 346 |
#define __NR_HPUX_clock_getres 347 |
#define __NR_HPUX_timer_create 348 |
#define __NR_HPUX_timer_delete 349 |
#define __NR_HPUX_timer_settime 350 |
#define __NR_HPUX_timer_gettime 351 |
#define __NR_HPUX_timer_getoverrun 352 |
#define __NR_HPUX_nanosleep 353 |
#define __NR_HPUX_toolbox 354 |
/* 355 missing */ |
#define __NR_HPUX_getdents 356 |
#define __NR_HPUX_getcontext 357 |
#define __NR_HPUX_sysinfo 358 |
#define __NR_HPUX_fcntl64 359 |
#define __NR_HPUX_ftruncate64 360 |
#define __NR_HPUX_fstat64 361 |
#define __NR_HPUX_getdirentries64 362 |
#define __NR_HPUX_getrlimit64 363 |
#define __NR_HPUX_lockf64 364 |
#define __NR_HPUX_lseek64 365 |
#define __NR_HPUX_lstat64 366 |
#define __NR_HPUX_mmap64 367 |
#define __NR_HPUX_setrlimit64 368 |
#define __NR_HPUX_stat64 369 |
#define __NR_HPUX_truncate64 370 |
#define __NR_HPUX_ulimit64 371 |
#define __NR_HPUX_pread 372 |
#define __NR_HPUX_preadv 373 |
#define __NR_HPUX_pwrite 374 |
#define __NR_HPUX_pwritev 375 |
#define __NR_HPUX_pread64 376 |
#define __NR_HPUX_preadv64 377 |
#define __NR_HPUX_pwrite64 378 |
#define __NR_HPUX_pwritev64 379 |
#define __NR_HPUX_setcontext 380 |
#define __NR_HPUX_sigaltstack 381 |
#define __NR_HPUX_waitid 382 |
#define __NR_HPUX_setpgrp 383 |
#define __NR_HPUX_recvmsg2 384 |
#define __NR_HPUX_sendmsg2 385 |
#define __NR_HPUX_socket2 386 |
#define __NR_HPUX_socketpair2 387 |
#define __NR_HPUX_setregid 388 |
#define __NR_HPUX_lwp_create 389 |
#define __NR_HPUX_lwp_terminate 390 |
#define __NR_HPUX_lwp_wait 391 |
#define __NR_HPUX_lwp_suspend 392 |
#define __NR_HPUX_lwp_resume 393 |
/* 394 missing */ |
#define __NR_HPUX_lwp_abort_syscall 395 |
#define __NR_HPUX_lwp_info 396 |
#define __NR_HPUX_lwp_kill 397 |
#define __NR_HPUX_ksleep 398 |
#define __NR_HPUX_kwakeup 399 |
/* 400 missing */ |
#define __NR_HPUX_pstat_getlwp 401 |
#define __NR_HPUX_lwp_exit 402 |
#define __NR_HPUX_lwp_continue 403 |
#define __NR_HPUX_getacl 404 |
#define __NR_HPUX_fgetacl 405 |
#define __NR_HPUX_setacl 406 |
#define __NR_HPUX_fsetacl 407 |
#define __NR_HPUX_getaccess 408 |
#define __NR_HPUX_lwp_mutex_init 409 |
#define __NR_HPUX_lwp_mutex_lock_sys 410 |
#define __NR_HPUX_lwp_mutex_unlock 411 |
#define __NR_HPUX_lwp_cond_init 412 |
#define __NR_HPUX_lwp_cond_signal 413 |
#define __NR_HPUX_lwp_cond_broadcast 414 |
#define __NR_HPUX_lwp_cond_wait_sys 415 |
#define __NR_HPUX_lwp_getscheduler 416 |
#define __NR_HPUX_lwp_setscheduler 417 |
#define __NR_HPUX_lwp_getstate 418 |
#define __NR_HPUX_lwp_setstate 419 |
#define __NR_HPUX_lwp_detach 420 |
#define __NR_HPUX_mlock 421 |
#define __NR_HPUX_munlock 422 |
#define __NR_HPUX_mlockall 423 |
#define __NR_HPUX_munlockall 424 |
#define __NR_HPUX_shm_open 425 |
#define __NR_HPUX_shm_unlink 426 |
#define __NR_HPUX_sigqueue 427 |
#define __NR_HPUX_sigwaitinfo 428 |
#define __NR_HPUX_sigtimedwait 429 |
#define __NR_HPUX_sigwait 430 |
#define __NR_HPUX_aio_read 431 |
#define __NR_HPUX_aio_write 432 |
#define __NR_HPUX_lio_listio 433 |
#define __NR_HPUX_aio_error 434 |
#define __NR_HPUX_aio_return 435 |
#define __NR_HPUX_aio_cancel 436 |
#define __NR_HPUX_aio_suspend 437 |
#define __NR_HPUX_aio_fsync 438 |
#define __NR_HPUX_mq_open 439 |
#define __NR_HPUX_mq_close 440 |
#define __NR_HPUX_mq_unlink 441 |
#define __NR_HPUX_mq_send 442 |
#define __NR_HPUX_mq_receive 443 |
#define __NR_HPUX_mq_notify 444 |
#define __NR_HPUX_mq_setattr 445 |
#define __NR_HPUX_mq_getattr 446 |
#define __NR_HPUX_ksem_open 447 |
#define __NR_HPUX_ksem_unlink 448 |
#define __NR_HPUX_ksem_close 449 |
#define __NR_HPUX_ksem_post 450 |
#define __NR_HPUX_ksem_wait 451 |
#define __NR_HPUX_ksem_read 452 |
#define __NR_HPUX_ksem_trywait 453 |
#define __NR_HPUX_lwp_rwlock_init 454 |
#define __NR_HPUX_lwp_rwlock_destroy 455 |
#define __NR_HPUX_lwp_rwlock_rdlock_sys 456 |
#define __NR_HPUX_lwp_rwlock_wrlock_sys 457 |
#define __NR_HPUX_lwp_rwlock_tryrdlock 458 |
#define __NR_HPUX_lwp_rwlock_trywrlock 459 |
#define __NR_HPUX_lwp_rwlock_unlock 460 |
#define __NR_HPUX_ttrace 461 |
#define __NR_HPUX_ttrace_wait 462 |
#define __NR_HPUX_lf_wire_mem 463 |
#define __NR_HPUX_lf_unwire_mem 464 |
#define __NR_HPUX_lf_send_pin_map 465 |
#define __NR_HPUX_lf_free_buf 466 |
#define __NR_HPUX_lf_wait_nq 467 |
#define __NR_HPUX_lf_wakeup_conn_q 468 |
#define __NR_HPUX_lf_unused 469 |
#define __NR_HPUX_lwp_sema_init 470 |
#define __NR_HPUX_lwp_sema_post 471 |
#define __NR_HPUX_lwp_sema_wait 472 |
#define __NR_HPUX_lwp_sema_trywait 473 |
#define __NR_HPUX_lwp_sema_destroy 474 |
#define __NR_HPUX_statvfs64 475 |
#define __NR_HPUX_fstatvfs64 476 |
#define __NR_HPUX_msh_register 477 |
#define __NR_HPUX_ptrace64 478 |
#define __NR_HPUX_sendfile 479 |
#define __NR_HPUX_sendpath 480 |
#define __NR_HPUX_sendfile64 481 |
#define __NR_HPUX_sendpath64 482 |
#define __NR_HPUX_modload 483 |
#define __NR_HPUX_moduload 484 |
#define __NR_HPUX_modpath 485 |
#define __NR_HPUX_getksym 486 |
#define __NR_HPUX_modadm 487 |
#define __NR_HPUX_modstat 488 |
#define __NR_HPUX_lwp_detached_exit 489 |
#define __NR_HPUX_crashconf 490 |
#define __NR_HPUX_siginhibit 491 |
#define __NR_HPUX_sigenable 492 |
#define __NR_HPUX_spuctl 493 |
#define __NR_HPUX_zerokernelsum 494 |
#define __NR_HPUX_nfs_kstat 495 |
#define __NR_HPUX_aio_read64 496 |
#define __NR_HPUX_aio_write64 497 |
#define __NR_HPUX_aio_error64 498 |
#define __NR_HPUX_aio_return64 499 |
#define __NR_HPUX_aio_cancel64 500 |
#define __NR_HPUX_aio_suspend64 501 |
#define __NR_HPUX_aio_fsync64 502 |
#define __NR_HPUX_lio_listio64 503 |
#define __NR_HPUX_recv2 504 |
#define __NR_HPUX_recvfrom2 505 |
#define __NR_HPUX_send2 506 |
#define __NR_HPUX_sendto2 507 |
#define __NR_HPUX_acl 508 |
#define __NR_HPUX___cnx_p2p_ctl 509 |
#define __NR_HPUX___cnx_gsched_ctl 510 |
#define __NR_HPUX___cnx_pmon_ctl 511 |
|
#define __NR_HPUX_syscalls 512 |
|
/* |
* Linux system call numbers. |
* |
* Cary Coutant says that we should just use another syscall gateway |
* page to avoid clashing with the HPUX space, and I think he's right: |
* it will would keep a branch out of our syscall entry path, at the |
* very least. If we decide to change it later, we can ``just'' tweak |
* the LINUX_GATEWAY_ADDR define at the bottom and make __NR_Linux be |
* 1024 or something. Oh, and recompile libc. =) |
* |
* 64-bit HPUX binaries get the syscall gateway address passed in a register |
* from the kernel at startup, which seems a sane strategy. |
*/ |
|
#define __NR_Linux 0 |
#define __NR_syscall (__NR_Linux + 0) |
#define __NR_exit (__NR_Linux + 1) |
#define __NR_fork (__NR_Linux + 2) |
#define __NR_read (__NR_Linux + 3) |
#define __NR_write (__NR_Linux + 4) |
#define __NR_open (__NR_Linux + 5) |
#define __NR_close (__NR_Linux + 6) |
#define __NR_waitpid (__NR_Linux + 7) |
#define __NR_creat (__NR_Linux + 8) |
#define __NR_link (__NR_Linux + 9) |
#define __NR_unlink (__NR_Linux + 10) |
#define __NR_execve (__NR_Linux + 11) |
#define __NR_chdir (__NR_Linux + 12) |
#define __NR_time (__NR_Linux + 13) |
#define __NR_mknod (__NR_Linux + 14) |
#define __NR_chmod (__NR_Linux + 15) |
#define __NR_lchown (__NR_Linux + 16) |
#define __NR_socket (__NR_Linux + 17) |
#define __NR_stat (__NR_Linux + 18) |
#define __NR_lseek (__NR_Linux + 19) |
#define __NR_getpid (__NR_Linux + 20) |
#define __NR_mount (__NR_Linux + 21) |
#define __NR_bind (__NR_Linux + 22) |
#define __NR_setuid (__NR_Linux + 23) |
#define __NR_getuid (__NR_Linux + 24) |
#define __NR_stime (__NR_Linux + 25) |
#define __NR_ptrace (__NR_Linux + 26) |
#define __NR_alarm (__NR_Linux + 27) |
#define __NR_fstat (__NR_Linux + 28) |
#define __NR_pause (__NR_Linux + 29) |
#define __NR_utime (__NR_Linux + 30) |
#define __NR_connect (__NR_Linux + 31) |
#define __NR_listen (__NR_Linux + 32) |
#define __NR_access (__NR_Linux + 33) |
#define __NR_nice (__NR_Linux + 34) |
#define __NR_accept (__NR_Linux + 35) |
#define __NR_sync (__NR_Linux + 36) |
#define __NR_kill (__NR_Linux + 37) |
#define __NR_rename (__NR_Linux + 38) |
#define __NR_mkdir (__NR_Linux + 39) |
#define __NR_rmdir (__NR_Linux + 40) |
#define __NR_dup (__NR_Linux + 41) |
#define __NR_pipe (__NR_Linux + 42) |
#define __NR_times (__NR_Linux + 43) |
#define __NR_getsockname (__NR_Linux + 44) |
#define __NR_brk (__NR_Linux + 45) |
#define __NR_setgid (__NR_Linux + 46) |
#define __NR_getgid (__NR_Linux + 47) |
#define __NR_signal (__NR_Linux + 48) |
#define __NR_geteuid (__NR_Linux + 49) |
#define __NR_getegid (__NR_Linux + 50) |
#define __NR_acct (__NR_Linux + 51) |
#define __NR_umount2 (__NR_Linux + 52) |
#define __NR_getpeername (__NR_Linux + 53) |
#define __NR_ioctl (__NR_Linux + 54) |
#define __NR_fcntl (__NR_Linux + 55) |
#define __NR_socketpair (__NR_Linux + 56) |
#define __NR_setpgid (__NR_Linux + 57) |
#define __NR_send (__NR_Linux + 58) |
#define __NR_uname (__NR_Linux + 59) |
#define __NR_umask (__NR_Linux + 60) |
#define __NR_chroot (__NR_Linux + 61) |
#define __NR_ustat (__NR_Linux + 62) |
#define __NR_dup2 (__NR_Linux + 63) |
#define __NR_getppid (__NR_Linux + 64) |
#define __NR_getpgrp (__NR_Linux + 65) |
#define __NR_setsid (__NR_Linux + 66) |
#define __NR_pivot_root (__NR_Linux + 67) |
#define __NR_sgetmask (__NR_Linux + 68) |
#define __NR_ssetmask (__NR_Linux + 69) |
#define __NR_setreuid (__NR_Linux + 70) |
#define __NR_setregid (__NR_Linux + 71) |
#define __NR_mincore (__NR_Linux + 72) |
#define __NR_sigpending (__NR_Linux + 73) |
#define __NR_sethostname (__NR_Linux + 74) |
#define __NR_setrlimit (__NR_Linux + 75) |
#define __NR_getrlimit (__NR_Linux + 76) |
#define __NR_getrusage (__NR_Linux + 77) |
#define __NR_gettimeofday (__NR_Linux + 78) |
#define __NR_settimeofday (__NR_Linux + 79) |
#define __NR_getgroups (__NR_Linux + 80) |
#define __NR_setgroups (__NR_Linux + 81) |
#define __NR_sendto (__NR_Linux + 82) |
#define __NR_symlink (__NR_Linux + 83) |
#define __NR_lstat (__NR_Linux + 84) |
#define __NR_readlink (__NR_Linux + 85) |
#define __NR_uselib (__NR_Linux + 86) |
#define __NR_swapon (__NR_Linux + 87) |
#define __NR_reboot (__NR_Linux + 88) |
#define __NR_mmap2 (__NR_Linux + 89) |
#define __NR_mmap (__NR_Linux + 90) |
#define __NR_munmap (__NR_Linux + 91) |
#define __NR_truncate (__NR_Linux + 92) |
#define __NR_ftruncate (__NR_Linux + 93) |
#define __NR_fchmod (__NR_Linux + 94) |
#define __NR_fchown (__NR_Linux + 95) |
#define __NR_getpriority (__NR_Linux + 96) |
#define __NR_setpriority (__NR_Linux + 97) |
#define __NR_recv (__NR_Linux + 98) |
#define __NR_statfs (__NR_Linux + 99) |
#define __NR_fstatfs (__NR_Linux + 100) |
#define __NR_stat64 (__NR_Linux + 101) |
/* #define __NR_socketcall (__NR_Linux + 102) */ |
#define __NR_syslog (__NR_Linux + 103) |
#define __NR_setitimer (__NR_Linux + 104) |
#define __NR_getitimer (__NR_Linux + 105) |
#define __NR_capget (__NR_Linux + 106) |
#define __NR_capset (__NR_Linux + 107) |
#define __NR_pread (__NR_Linux + 108) |
#define __NR_pwrite (__NR_Linux + 109) |
#define __NR_getcwd (__NR_Linux + 110) |
#define __NR_vhangup (__NR_Linux + 111) |
#define __NR_fstat64 (__NR_Linux + 112) |
#define __NR_vfork (__NR_Linux + 113) |
#define __NR_wait4 (__NR_Linux + 114) |
#define __NR_swapoff (__NR_Linux + 115) |
#define __NR_sysinfo (__NR_Linux + 116) |
#define __NR_shutdown (__NR_Linux + 117) |
#define __NR_fsync (__NR_Linux + 118) |
#define __NR_madvise (__NR_Linux + 119) |
#define __NR_clone (__NR_Linux + 120) |
#define __NR_setdomainname (__NR_Linux + 121) |
#define __NR_sendfile (__NR_Linux + 122) |
#define __NR_recvfrom (__NR_Linux + 123) |
#define __NR_adjtimex (__NR_Linux + 124) |
#define __NR_mprotect (__NR_Linux + 125) |
#define __NR_sigprocmask (__NR_Linux + 126) |
#define __NR_create_module (__NR_Linux + 127) |
#define __NR_init_module (__NR_Linux + 128) |
#define __NR_delete_module (__NR_Linux + 129) |
#define __NR_get_kernel_syms (__NR_Linux + 130) |
#define __NR_quotactl (__NR_Linux + 131) |
#define __NR_getpgid (__NR_Linux + 132) |
#define __NR_fchdir (__NR_Linux + 133) |
#define __NR_bdflush (__NR_Linux + 134) |
#define __NR_sysfs (__NR_Linux + 135) |
#define __NR_personality (__NR_Linux + 136) |
#define __NR_afs_syscall (__NR_Linux + 137) /* Syscall for Andrew File System */ |
#define __NR_setfsuid (__NR_Linux + 138) |
#define __NR_setfsgid (__NR_Linux + 139) |
#define __NR__llseek (__NR_Linux + 140) |
#define __NR_getdents (__NR_Linux + 141) |
#define __NR__newselect (__NR_Linux + 142) |
#define __NR_flock (__NR_Linux + 143) |
#define __NR_msync (__NR_Linux + 144) |
#define __NR_readv (__NR_Linux + 145) |
#define __NR_writev (__NR_Linux + 146) |
#define __NR_getsid (__NR_Linux + 147) |
#define __NR_fdatasync (__NR_Linux + 148) |
#define __NR__sysctl (__NR_Linux + 149) |
#define __NR_mlock (__NR_Linux + 150) |
#define __NR_munlock (__NR_Linux + 151) |
#define __NR_mlockall (__NR_Linux + 152) |
#define __NR_munlockall (__NR_Linux + 153) |
#define __NR_sched_setparam (__NR_Linux + 154) |
#define __NR_sched_getparam (__NR_Linux + 155) |
#define __NR_sched_setscheduler (__NR_Linux + 156) |
#define __NR_sched_getscheduler (__NR_Linux + 157) |
#define __NR_sched_yield (__NR_Linux + 158) |
#define __NR_sched_get_priority_max (__NR_Linux + 159) |
#define __NR_sched_get_priority_min (__NR_Linux + 160) |
#define __NR_sched_rr_get_interval (__NR_Linux + 161) |
#define __NR_nanosleep (__NR_Linux + 162) |
#define __NR_mremap (__NR_Linux + 163) |
#define __NR_setresuid (__NR_Linux + 164) |
#define __NR_getresuid (__NR_Linux + 165) |
#define __NR_sigaltstack (__NR_Linux + 166) |
#define __NR_query_module (__NR_Linux + 167) |
#define __NR_poll (__NR_Linux + 168) |
#define __NR_nfsservctl (__NR_Linux + 169) |
#define __NR_setresgid (__NR_Linux + 170) |
#define __NR_getresgid (__NR_Linux + 171) |
#define __NR_prctl (__NR_Linux + 172) |
#define __NR_rt_sigreturn (__NR_Linux + 173) |
#define __NR_rt_sigaction (__NR_Linux + 174) |
#define __NR_rt_sigprocmask (__NR_Linux + 175) |
#define __NR_rt_sigpending (__NR_Linux + 176) |
#define __NR_rt_sigtimedwait (__NR_Linux + 177) |
#define __NR_rt_sigqueueinfo (__NR_Linux + 178) |
#define __NR_rt_sigsuspend (__NR_Linux + 179) |
#define __NR_chown (__NR_Linux + 180) |
#define __NR_setsockopt (__NR_Linux + 181) |
#define __NR_getsockopt (__NR_Linux + 182) |
#define __NR_sendmsg (__NR_Linux + 183) |
#define __NR_recvmsg (__NR_Linux + 184) |
#define __NR_semop (__NR_Linux + 185) |
#define __NR_semget (__NR_Linux + 186) |
#define __NR_semctl (__NR_Linux + 187) |
#define __NR_msgsnd (__NR_Linux + 188) |
#define __NR_msgrcv (__NR_Linux + 189) |
#define __NR_msgget (__NR_Linux + 190) |
#define __NR_msgctl (__NR_Linux + 191) |
#define __NR_shmat (__NR_Linux + 192) |
#define __NR_shmdt (__NR_Linux + 193) |
#define __NR_shmget (__NR_Linux + 194) |
#define __NR_shmctl (__NR_Linux + 195) |
|
#define __NR_getpmsg (__NR_Linux + 196) /* some people actually want streams */ |
#define __NR_putpmsg (__NR_Linux + 197) /* some people actually want streams */ |
|
#define __NR_lstat64 (__NR_Linux + 198) |
#define __NR_truncate64 (__NR_Linux + 199) |
#define __NR_ftruncate64 (__NR_Linux + 200) |
#define __NR_getdents64 (__NR_Linux + 201) |
#define __NR_fcntl64 (__NR_Linux + 202) |
#define __NR_attrctl (__NR_Linux + 203) |
#define __NR_acl_get (__NR_Linux + 204) |
#define __NR_acl_set (__NR_Linux + 205) |
#define __NR_gettid (__NR_Linux + 206) |
#define __NR_readahead (__NR_Linux + 207) |
#define __NR_tkill (__NR_Linux + 208) |
|
#define __NR_Linux_syscalls 208 |
|
#define HPUX_GATEWAY_ADDR 0xC0000004 |
#define LINUX_GATEWAY_ADDR 0x100 |
|
#ifndef __ASSEMBLY__ |
|
/* The old syscall code here didn't work, and it looks like it's only used |
* by applications such as fdisk which for some reason need to produce |
* their own syscall instead of using same from libc. The code below |
* is leveraged from glibc/sysdeps/unix/sysv/linux/hppa/sysdep.h where |
* it is essentially duplicated -- which sucks. -PB |
*/ |
|
#define SYS_ify(syscall_name) __NR_##syscall_name |
|
/* The system call number MUST ALWAYS be loaded in the delay slot of |
the ble instruction, or restarting system calls WILL NOT WORK. See |
arch/parisc/kernel/signal.c - dhd, 2000-07-26 */ |
#define K_INLINE_SYSCALL(name, nr, args...) ({ \ |
unsigned long __sys_res; \ |
{ \ |
register unsigned long __res asm("r28"); \ |
K_LOAD_ARGS_##nr(args) \ |
asm volatile( \ |
"ble 0x100(%%sr2, %%r0)\n\t" \ |
" ldi %1, %%r20" \ |
: "=r" (__res) \ |
: "i" (SYS_ify(name)) K_ASM_ARGS_##nr \ |
); \ |
__sys_res = __res; \ |
} \ |
if (__sys_res >= (unsigned long)-4095) { \ |
errno = -__sys_res; \ |
__sys_res = (unsigned long)-1; \ |
} \ |
__sys_res; \ |
}) |
|
#define K_LOAD_ARGS_0() |
#define K_LOAD_ARGS_1(r26) \ |
register unsigned long __r26 __asm__("r26") = (unsigned long)r26; \ |
K_LOAD_ARGS_0() |
#define K_LOAD_ARGS_2(r26,r25) \ |
register unsigned long __r25 __asm__("r25") = (unsigned long)r25; \ |
K_LOAD_ARGS_1(r26) |
#define K_LOAD_ARGS_3(r26,r25,r24) \ |
register unsigned long __r24 __asm__("r24") = (unsigned long)r24; \ |
K_LOAD_ARGS_2(r26,r25) |
#define K_LOAD_ARGS_4(r26,r25,r24,r23) \ |
register unsigned long __r23 __asm__("r23") = (unsigned long)r23; \ |
K_LOAD_ARGS_3(r26,r25,r24) |
#define K_LOAD_ARGS_5(r26,r25,r24,r23,r22) \ |
register unsigned long __r22 __asm__("r22") = (unsigned long)r22; \ |
K_LOAD_ARGS_4(r26,r25,r24,r23) |
#define K_LOAD_ARGS_6(r26,r25,r24,r23,r22,r21) \ |
register unsigned long __r21 __asm__("r21") = (unsigned long)r21; \ |
K_LOAD_ARGS_5(r26,r25,r24,r23,r22) |
|
#define K_ASM_ARGS_0 |
#define K_ASM_ARGS_1 , "r" (__r26) |
#define K_ASM_ARGS_2 , "r" (__r26), "r" (__r25) |
#define K_ASM_ARGS_3 , "r" (__r26), "r" (__r25), "r" (__r24) |
#define K_ASM_ARGS_4 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23) |
#define K_ASM_ARGS_5 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23), "r" (__r22) |
#define K_ASM_ARGS_6 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23), "r" (__r22), "r" (__r21) |
|
#define _syscall0(type,name) \ |
type name(void) \ |
{ \ |
return K_INLINE_SYSCALL(name, 0); \ |
} |
|
#define _syscall1(type,name,type1,arg1) \ |
type name(type1 arg1) \ |
{ \ |
return K_INLINE_SYSCALL(name, 1, arg1); \ |
} |
|
#define _syscall2(type,name,type1,arg1,type2,arg2) \ |
type name(type1 arg1, type2 arg2) \ |
{ \ |
return K_INLINE_SYSCALL(name, 2, arg1, arg2); \ |
} |
|
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ |
type name(type1 arg1, type2 arg2, type3 arg3) \ |
{ \ |
return K_INLINE_SYSCALL(name, 3, arg1, arg2, arg3); \ |
} |
|
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ |
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ |
{ \ |
return K_INLINE_SYSCALL(name, 4, arg1, arg2, arg3, arg4); \ |
} |
|
/* select takes 5 arguments */ |
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ |
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ |
{ \ |
return K_INLINE_SYSCALL(name, 5, arg1, arg2, arg3, arg4, arg5); \ |
} |
|
|
/* mmap & mmap2 take 6 arguments */ |
|
#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ |
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ |
{ \ |
return K_INLINE_SYSCALL(name, 6, arg1, arg2, arg3, arg4, arg5, arg6); \ |
} |
|
|
#ifdef __KERNEL_SYSCALLS__ |
|
static inline int pause(void) |
{ |
extern int sys_pause(void); |
return sys_pause(); |
} |
|
static inline int sync(void) |
{ |
extern int sys_sync(void); |
return sys_sync(); |
} |
|
static inline pid_t setsid(void) |
{ |
extern int sys_setsid(void); |
return sys_setsid(); |
} |
|
static inline int write(int fd, const char *buf, off_t count) |
{ |
extern int sys_write(int, const char *, int); |
return sys_write(fd, buf, count); |
} |
|
static inline int read(int fd, char *buf, off_t count) |
{ |
extern int sys_read(int, char *, int); |
return sys_read(fd, buf, count); |
} |
|
static inline off_t lseek(int fd, off_t offset, int count) |
{ |
extern off_t sys_lseek(int, off_t, int); |
return sys_lseek(fd, offset, count); |
} |
|
static inline int dup(int fd) |
{ |
extern int sys_dup(int); |
return sys_dup(fd); |
} |
|
static inline int execve(char *filename, char * argv [], |
char * envp[]) |
{ |
extern int __execve(char *, char **, char **, struct task_struct *); |
return __execve(filename, argv, envp, current); |
} |
|
static inline int open(const char *file, int flag, int mode) |
{ |
extern long sys_open(const char *, int, int); |
return sys_open(file, flag, mode); |
} |
|
static inline int close(int fd) |
{ |
return sys_close(fd); |
} |
|
static inline int _exit(int exitcode) |
{ |
extern int sys_exit(int) __attribute__((noreturn)); |
return sys_exit(exitcode); |
} |
|
static inline pid_t waitpid(pid_t pid, int *wait_stat, int options) |
{ |
return sys_wait4((int)pid, wait_stat, options, NULL); |
} |
|
static inline int delete_module(const char *name) |
{ |
extern int sys_delete_module(const char *name); |
return sys_delete_module(name); |
} |
|
static inline pid_t wait(int * wait_stat) |
{ |
return sys_wait4(-1, wait_stat, 0, NULL); |
} |
|
#endif /* __KERNEL_SYSCALLS__ */ |
|
#endif /* __ASSEMBLY__ */ |
|
#undef STR |
|
#endif /* _ASM_PARISC_UNISTD_H_ */ |
/ipcbuf.h
0,0 → 1,27
#ifndef __PARISC_IPCBUF_H__ |
#define __PARISC_IPCBUF_H__ |
|
/* |
* The ipc64_perm structure for PA-RISC is almost identical to |
* kern_ipc_perm as we have always had 32-bit UIDs and GIDs in the kernel. |
* 'seq' has been changed from long to int so that it's the same size |
* on 64-bit kernels as on 32-bit ones. |
*/ |
|
struct ipc64_perm |
{ |
key_t key; |
uid_t uid; |
gid_t gid; |
uid_t cuid; |
gid_t cgid; |
unsigned short int __pad1; |
mode_t mode; |
unsigned short int __pad2; |
unsigned short int seq; |
unsigned int __pad3; |
unsigned long long int __unused1; |
unsigned long long int __unused2; |
}; |
|
#endif /* __PARISC_IPCBUF_H__ */ |
/grfioctl.h
0,0 → 1,95
/* |
* Architecture specific parts of HP's STI (framebuffer) driver |
* structures are HP-UX compatible for XFree86 usage |
*/ |
|
#ifndef __ASM_PARISC_GRFIOCTL_H |
#define __ASM_PARISC_GRFIOCTL_H |
|
/* upper 32 bits of graphics id (HP/UX identifier) */ |
|
#define GRFGATOR 8 |
#define S9000_ID_S300 9 |
#define GRFBOBCAT 9 |
#define GRFCATSEYE 9 |
#define S9000_ID_98720 10 |
#define GRFRBOX 10 |
#define S9000_ID_98550 11 |
#define GRFFIREEYE 11 |
#define S9000_ID_A1096A 12 |
#define GRFHYPERION 12 |
#define S9000_ID_FRI 13 |
#define S9000_ID_98730 14 |
#define GRFDAVINCI 14 |
#define S9000_ID_98705 0x26C08070 /* Tigershark */ |
#define S9000_ID_98736 0x26D148AB |
#define S9000_ID_A1659A 0x26D1482A /* CRX 8 plane color (=ELK) */ |
#define S9000_ID_ELK S9000_ID_A1659A |
#define S9000_ID_A1439A 0x26D148EE /* CRX24 = CRX+ (24-plane color) */ |
#define S9000_ID_A1924A 0x26D1488C /* GRX gray-scale */ |
#define S9000_ID_ELM S9000_ID_A1924A |
#define S9000_ID_98765 0x27480DEF |
#define S9000_ID_ELK_768 0x27482101 |
#define S9000_ID_STINGER 0x27A4A402 |
#define S9000_ID_TIMBER 0x27F12392 /* Bushmaster (710) Graphics */ |
#define S9000_ID_TOMCAT 0x27FCCB6D /* dual-headed ELK (Dual CRX) */ |
#define S9000_ID_ARTIST 0x2B4DED6D /* Artist (Gecko/712 & 715) onboard Graphics */ |
#define S9000_ID_HCRX 0x2BCB015A /* Hyperdrive/Hyperbowl (A4071A) Graphics */ |
#define CRX24_OVERLAY_PLANES 0x920825AA /* Overlay planes on CRX24 */ |
|
#define CRT_ID_ELK_1024 S9000_ID_ELK_768 /* Elk 1024x768 CRX */ |
#define CRT_ID_ELK_1280 S9000_ID_A1659A /* Elk 1280x1024 CRX */ |
#define CRT_ID_ELK_1024DB 0x27849CA5 /* Elk 1024x768 double buffer */ |
#define CRT_ID_ELK_GS S9000_ID_A1924A /* Elk 1280x1024 GreyScale */ |
#define CRT_ID_CRX24 S9000_ID_A1439A /* Piranha */ |
#define CRT_ID_VISUALIZE_EG 0x2D08C0A7 /* Graffiti (built-in B132+/B160L) */ |
#define CRT_ID_THUNDER 0x2F23E5FC /* Thunder 1 VISUALIZE 48*/ |
#define CRT_ID_THUNDER2 0x2F8D570E /* Thunder 2 VISUALIZE 48 XP*/ |
#define CRT_ID_HCRX S9000_ID_HCRX /* Hyperdrive HCRX */ |
#define CRT_ID_CRX48Z S9000_ID_STINGER /* Stinger */ |
#define CRT_ID_DUAL_CRX S9000_ID_TOMCAT /* Tomcat */ |
#define CRT_ID_PVRX S9000_ID_98705 /* Tigershark */ |
#define CRT_ID_TIMBER S9000_ID_TIMBER /* Timber (710 builtin) */ |
#define CRT_ID_TVRX S9000_ID_98765 /* TVRX (gto/falcon) */ |
#define CRT_ID_ARTIST S9000_ID_ARTIST /* Artist */ |
#define CRT_ID_SUMMIT 0x2FC1066B /* Summit FX2, FX4, FX6 ... */ |
|
/* structure for ioctl(GCDESCRIBE) */ |
|
#define gaddr_t unsigned long /* FIXME: PA2.0 (64bit) portable ? */ |
|
struct grf_fbinfo { |
unsigned int id; /* upper 32 bits of graphics id */ |
unsigned int mapsize; /* mapped size of framebuffer */ |
unsigned int dwidth, dlength;/* x and y sizes */ |
unsigned int width, length; /* total x and total y size */ |
unsigned int xlen; /* x pitch size */ |
unsigned int bpp, bppu; /* bits per pixel and used bpp */ |
unsigned int npl, nplbytes; /* # of planes and bytes per plane */ |
char name[32]; /* name of the device (from ROM) */ |
unsigned int attr; /* attributes */ |
gaddr_t fbbase, regbase;/* framebuffer and register base addr */ |
gaddr_t regions[6]; /* region bases */ |
}; |
|
#define GCID _IOR('G', 0, int) |
#define GCON _IO('G', 1) |
#define GCOFF _IO('G', 2) |
#define GCAON _IO('G', 3) |
#define GCAOFF _IO('G', 4) |
#define GCMAP _IOWR('G', 5, int) |
#define GCUNMAP _IOWR('G', 6, int) |
#define GCMAP_HPUX _IO('G', 5) |
#define GCUNMAP_HPUX _IO('G', 6) |
#define GCLOCK _IO('G', 7) |
#define GCUNLOCK _IO('G', 8) |
#define GCLOCK_MINIMUM _IO('G', 9) |
#define GCUNLOCK_MINIMUM _IO('G', 10) |
#define GCSTATIC_CMAP _IO('G', 11) |
#define GCVARIABLE_CMAP _IO('G', 12) |
#define GCTERM _IOWR('G',20,int) /* multi-headed Tomcat */ |
#define GCDESCRIBE _IOR('G', 21, struct grf_fbinfo) |
#define GCFASTLOCK _IO('G', 26) |
|
#endif /* __ASM_PARISC_GRFIOCTL_H */ |
|
/sockios.h
0,0 → 1,12
#ifndef __ARCH_PARISC_SOCKIOS__ |
#define __ARCH_PARISC_SOCKIOS__ |
|
/* Socket-level I/O control calls. */ |
#define FIOSETOWN 0x8901 |
#define SIOCSPGRP 0x8902 |
#define FIOGETOWN 0x8903 |
#define SIOCGPGRP 0x8904 |
#define SIOCATMARK 0x8905 |
#define SIOCGSTAMP 0x8906 /* Get stamp */ |
|
#endif |
/pci.h
0,0 → 1,298
#ifndef __ASM_PARISC_PCI_H |
#define __ASM_PARISC_PCI_H |
|
#include <asm/scatterlist.h> |
|
/* |
** HP PCI platforms generally support multiple bus adapters. |
** (workstations 1-~4, servers 2-~32) |
** |
** Newer platforms number the busses across PCI bus adapters *sparsely*. |
** E.g. 0, 8, 16, ... |
** |
** Under a PCI bus, most HP platforms support PPBs up to two or three |
** levels deep. See "Bit3" product line. |
*/ |
#define PCI_MAX_BUSSES 256 |
|
/* [soapbox on] |
** Who the hell can develop stuff without ASSERT or VASSERT? |
** No one understands all the modules across all platforms. |
** For linux add another dimension - processor architectures. |
** |
** This should be a standard/global macro used liberally |
** in all code. Every respectable engineer I know in HP |
** would support this argument. - grant |
** [soapbox off] |
*/ |
#ifdef PCI_DEBUG |
#define ASSERT(expr) \ |
if(!(expr)) { \ |
printk( "\n" __FILE__ ":%d: Assertion " #expr " failed!\n",__LINE__); \ |
panic(#expr); \ |
} |
#else |
#define ASSERT(expr) |
#endif |
|
|
/* |
** pci_hba_data (aka H2P_OBJECT in HP/UX) |
** |
** This is the "common" or "base" data structure which HBA drivers |
** (eg Dino or LBA) are required to place at the top of their own |
** dev->sysdata structure. I've heard this called "C inheritance" too. |
** |
** Data needed by pcibios layer belongs here. |
*/ |
struct pci_hba_data { |
unsigned long base_addr; /* aka Host Physical Address */ |
const struct parisc_device *dev; /* device from PA bus walk */ |
struct pci_bus *hba_bus; /* primary PCI bus below HBA */ |
int hba_num; /* I/O port space access "key" */ |
struct resource bus_num; /* PCI bus numbers */ |
struct resource io_space; /* PIOP */ |
struct resource lmmio_space; /* bus addresses < 4Gb */ |
struct resource elmmio_space; /* additional bus addresses < 4Gb */ |
unsigned long lmmio_space_offset; /* CPU view - PCI view */ |
void * iommu; /* IOMMU this device is under */ |
/* REVISIT - spinlock to protect resources? */ |
}; |
|
#define HBA_DATA(d) ((struct pci_hba_data *) (d)) |
|
/* |
** We support 2^16 I/O ports per HBA. These are set up in the form |
** 0xbbxxxx, where bb is the bus number and xxxx is the I/O port |
** space address. |
*/ |
#define HBA_PORT_SPACE_BITS 16 |
|
#define HBA_PORT_BASE(h) ((h) << HBA_PORT_SPACE_BITS) |
#define HBA_PORT_SPACE_SIZE (1UL << HBA_PORT_SPACE_BITS) |
|
#define PCI_PORT_HBA(a) ((a) >> HBA_PORT_SPACE_BITS) |
#define PCI_PORT_ADDR(a) ((a) & (HBA_PORT_SPACE_SIZE - 1)) |
|
/* |
** Convert between PCI (IO_VIEW) addresses and processor (PA_VIEW) addresses. |
** Note that we currently support only LMMIO. |
*/ |
#define PCI_BUS_ADDR(hba,a) ((a) - hba->lmmio_space_offset) |
#define PCI_HOST_ADDR(hba,a) ((a) + hba->lmmio_space_offset) |
|
/* The PCI address space equals the physical memory address space. |
The networking and block device layers use this boolean for bounce buffer |
decisions. */ |
#define PCI_DMA_BUS_IS_PHYS 1 |
|
/* |
** KLUGE: linux/pci.h include asm/pci.h BEFORE declaring struct pci_bus |
** (This eliminates some of the warnings). |
*/ |
struct pci_bus; |
struct pci_dev; |
|
/* |
** Most PCI devices (eg Tulip, NCR720) also export the same registers |
** to both MMIO and I/O port space. Due to poor performance of I/O Port |
** access under HP PCI bus adapters, strongly reccomend use of MMIO |
** address space. |
** |
** While I'm at it more PA programming notes: |
** |
** 1) MMIO stores (writes) are posted operations. This means the processor |
** gets an "ACK" before the write actually gets to the device. A read |
** to the same device (or typically the bus adapter above it) will |
** force in-flight write transaction(s) out to the targeted device |
** before the read can complete. |
** |
** 2) The Programmed I/O (PIO) data may not always be strongly ordered with |
** respect to DMA on all platforms. Ie PIO data can reach the processor |
** before in-flight DMA reaches memory. Since most SMP PA platforms |
** are I/O coherent, it generally doesn't matter...but sometimes |
** it does. |
** |
** I've helped device driver writers debug both types of problems. |
*/ |
struct pci_port_ops { |
u8 (*inb) (struct pci_hba_data *hba, u16 port); |
u16 (*inw) (struct pci_hba_data *hba, u16 port); |
u32 (*inl) (struct pci_hba_data *hba, u16 port); |
void (*outb) (struct pci_hba_data *hba, u16 port, u8 data); |
void (*outw) (struct pci_hba_data *hba, u16 port, u16 data); |
void (*outl) (struct pci_hba_data *hba, u16 port, u32 data); |
}; |
|
|
struct pci_bios_ops { |
void (*init)(void); |
void (*fixup_bus)(struct pci_bus *bus); |
}; |
|
/* |
** See Documentation/DMA-mapping.txt |
*/ |
struct pci_dma_ops { |
int (*dma_supported)(struct pci_dev *dev, u64 mask); |
void *(*alloc_consistent)(struct pci_dev *dev, size_t size, dma_addr_t *iova); |
void (*free_consistent)(struct pci_dev *dev, size_t size, void *vaddr, dma_addr_t iova); |
dma_addr_t (*map_single)(struct pci_dev *dev, void *addr, size_t size, int direction); |
void (*unmap_single)(struct pci_dev *dev, dma_addr_t iova, size_t size, int direction); |
int (*map_sg)(struct pci_dev *dev, struct scatterlist *sg, int nents, int direction); |
void (*unmap_sg)(struct pci_dev *dev, struct scatterlist *sg, int nhwents, int direction); |
void (*dma_sync_single)(struct pci_dev *dev, dma_addr_t iova, size_t size, int direction); |
void (*dma_sync_sg)(struct pci_dev *dev, struct scatterlist *sg, int nelems, int direction); |
}; |
|
|
/* |
** We could live without the hppa_dma_ops indirection if we didn't want |
** to support 4 different coherent dma models with one binary (they will |
** someday be loadable modules): |
** I/O MMU consistent method dma_sync behavior |
** ============= ====================== ======================= |
** a) PA-7x00LC uncachable host memory flush/purge |
** b) U2/Uturn cachable host memory NOP |
** c) Ike/Astro cachable host memory NOP |
** d) EPIC/SAGA memory on EPIC/SAGA flush/reset DMA channel |
** |
** PA-7[13]00LC processors have a GSC bus interface and no I/O MMU. |
** |
** Systems (eg PCX-T workstations) that don't fall into the above |
** categories will need to modify the needed drivers to perform |
** flush/purge and allocate "regular" cacheable pages for everything. |
*/ |
|
extern struct pci_dma_ops *hppa_dma_ops; |
|
#ifdef CONFIG_PA11 |
extern struct pci_dma_ops pcxl_dma_ops; |
extern struct pci_dma_ops pcx_dma_ops; |
#endif |
|
/* |
** Oops hard if we haven't setup hppa_dma_ops by the time the first driver |
** attempts to initialize. |
** Since panic() is a (void)(), pci_dma_panic() is needed to satisfy |
** the (int)() required by pci_dma_supported() interface. |
*/ |
static inline int pci_dma_panic(char *msg) |
{ |
extern void panic(const char *, ...); /* linux/kernel.h */ |
panic(msg); |
/* NOTREACHED */ |
return -1; |
} |
|
#define pci_dma_supported(p, m) ( \ |
(NULL == hppa_dma_ops) \ |
? pci_dma_panic("Dynamic DMA support missing...OOPS!\n(Hint: was Astro/Ike/U2/Uturn not claimed?)\n") \ |
: hppa_dma_ops->dma_supported(p,m) \ |
) |
|
#define pci_alloc_consistent(p, s, a) hppa_dma_ops->alloc_consistent(p,s,a) |
#define pci_free_consistent(p, s, v, a) hppa_dma_ops->free_consistent(p,s,v,a) |
#define pci_map_single(p, v, s, d) hppa_dma_ops->map_single(p, v, s, d) |
#define pci_unmap_single(p, a, s, d) hppa_dma_ops->unmap_single(p, a, s, d) |
#define pci_map_sg(p, sg, n, d) hppa_dma_ops->map_sg(p, sg, n, d) |
#define pci_unmap_sg(p, sg, n, d) hppa_dma_ops->unmap_sg(p, sg, n, d) |
|
/* pci_unmap_{single,page} is not a nop, thus... */ |
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ |
dma_addr_t ADDR_NAME; |
#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ |
__u32 LEN_NAME; |
#define pci_unmap_addr(PTR, ADDR_NAME) \ |
((PTR)->ADDR_NAME) |
#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ |
(((PTR)->ADDR_NAME) = (VAL)) |
#define pci_unmap_len(PTR, LEN_NAME) \ |
((PTR)->LEN_NAME) |
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ |
(((PTR)->LEN_NAME) = (VAL)) |
|
/* For U2/Astro/Ike based platforms (which are fully I/O coherent) |
** dma_sync is a NOP. Let's keep the performance path short here. |
*/ |
#define pci_dma_sync_single(p, a, s, d) { if (hppa_dma_ops->dma_sync_single) \ |
hppa_dma_ops->dma_sync_single(p, a, s, d); \ |
} |
#define pci_dma_sync_sg(p, sg, n, d) { if (hppa_dma_ops->dma_sync_sg) \ |
hppa_dma_ops->dma_sync_sg(p, sg, n, d); \ |
} |
|
/* No highmem on parisc, plus we have an IOMMU, so mapping pages is easy. */ |
#define pci_map_page(dev, page, off, size, dir) \ |
pci_map_single(dev, (page_address(page) + (off)), size, dir) |
#define pci_unmap_page(dev,addr,sz,dir) pci_unmap_single(dev,addr,sz,dir) |
|
/* Don't support DAC yet. */ |
#define pci_dac_dma_supported(pci_dev, mask) (0) |
|
/* |
** Stuff declared in arch/parisc/kernel/pci.c |
*/ |
extern struct pci_port_ops *pci_port; |
extern struct pci_bios_ops *pci_bios; |
extern int pci_post_reset_delay; /* delay after de-asserting #RESET */ |
extern int pci_hba_count; |
extern struct pci_hba_data *parisc_pci_hba[]; |
|
#ifdef CONFIG_PCI |
extern void pcibios_register_hba(struct pci_hba_data *); |
extern void pcibios_set_master(struct pci_dev *); |
extern void pcibios_assign_unassigned_resources(struct pci_bus *); |
#else |
extern inline void pcibios_register_hba(struct pci_hba_data *x) |
{ |
} |
#endif |
|
/* |
** used by drivers/pci/pci.c:pci_do_scan_bus() |
** 0 == check if bridge is numbered before re-numbering. |
** 1 == pci_do_scan_bus() should automatically number all PCI-PCI bridges. |
** |
** REVISIT: |
** To date, only alpha sets this to one. We'll need to set this |
** to zero for legacy platforms and one for PAT platforms. |
*/ |
#define pcibios_assign_all_busses() (pdc_type == PDC_TYPE_PAT) |
#define pcibios_scan_all_fns() 0 |
|
#define PCIBIOS_MIN_IO 0x10 |
#define PCIBIOS_MIN_MEM 0x1000 /* NBPG - but pci/setup-res.c dies */ |
|
/* Return the index of the PCI controller for device PDEV. */ |
#define pci_controller_num(PDEV) (0) |
|
#define GET_IOC(dev) ((struct ioc *)(HBA_DATA(dev->sysdata)->iommu)) |
|
#ifdef CONFIG_IOMMU_CCIO |
struct parisc_device; |
struct ioc; |
void * ccio_get_iommu(const struct parisc_device *dev); |
struct pci_dev * ccio_get_fake(const struct parisc_device *dev); |
int ccio_request_resource(const struct parisc_device *dev, |
struct resource *res); |
int ccio_allocate_resource(const struct parisc_device *dev, |
struct resource *res, unsigned long size, |
unsigned long min, unsigned long max, unsigned long align, |
void (*alignf)(void *, struct resource *, unsigned long, unsigned long), |
void *alignf_data); |
#else /* !CONFIG_IOMMU_CCIO */ |
#define ccio_get_iommu(dev) NULL |
#define ccio_get_fake(dev) NULL |
#define ccio_request_resource(dev, res) request_resource(&iomem_resource, res) |
#define ccio_allocate_resource(dev, res, size, min, max, align, alignf, data) \ |
allocate_resource(&iomem_resource, res, size, min, max, \ |
align, alignf, data) |
#endif /* !CONFIG_IOMMU_CCIO */ |
|
#ifdef CONFIG_IOMMU_SBA |
struct parisc_device; |
void * sba_get_iommu(struct parisc_device *dev); |
#endif |
|
#endif /* __ASM_PARISC_PCI_H */ |
/gsc.h
0,0 → 1,33
#ifndef ASM_PARISC_GSC_H |
#define ASM_PARISC_GSC_H |
#ifdef __KERNEL__ |
|
#include <linux/types.h> |
#include <asm/io.h> /* temporary for __raw_{read,write} */ |
|
/* Please, call ioremap and use {read,write}[bwl] instead. These functions |
* are not very fast. |
*/ |
#define gsc_readb(x) __raw_readb((unsigned long)x) |
#define gsc_readw(x) __raw_readw((unsigned long)x) |
#define gsc_readl(x) __raw_readl((unsigned long)x) |
#define gsc_writeb(x, y) __raw_writeb(x, (unsigned long)y) |
#define gsc_writew(x, y) __raw_writew(x, (unsigned long)y) |
#define gsc_writel(x, y) __raw_writel(x, (unsigned long)y) |
|
struct gsc_irq { |
unsigned long txn_addr; /* IRQ "target" */ |
int txn_data; /* HW "IRQ" */ |
int irq; /* virtual IRQ */ |
}; |
|
/* PA I/O Architected devices support at least 5 bits in the EIM register. */ |
#define GSC_EIM_WIDTH 5 |
|
extern int gsc_alloc_irq(struct gsc_irq *dev); /* dev needs an irq */ |
extern int gsc_claim_irq(struct gsc_irq *dev, int irq); /* dev needs this irq */ |
|
extern void probe_serial_gsc(void); |
|
#endif /* __KERNEL__ */ |
#endif /* LINUX_GSC_H */ |
/signal.h
0,0 → 1,163
#ifndef _ASM_PARISC_SIGNAL_H |
#define _ASM_PARISC_SIGNAL_H |
|
#define SIGHUP 1 |
#define SIGINT 2 |
#define SIGQUIT 3 |
#define SIGILL 4 |
#define SIGTRAP 5 |
#define SIGABRT 6 |
#define SIGIOT 6 |
#define SIGEMT 7 |
#define SIGFPE 8 |
#define SIGKILL 9 |
#define SIGBUS 10 |
#define SIGSEGV 11 |
#define SIGSYS 12 /* Linux doesn't use this */ |
#define SIGPIPE 13 |
#define SIGALRM 14 |
#define SIGTERM 15 |
#define SIGUSR1 16 |
#define SIGUSR2 17 |
#define SIGCHLD 18 |
#define SIGPWR 19 |
#define SIGVTALRM 20 |
#define SIGPROF 21 |
#define SIGIO 22 |
#define SIGPOLL SIGIO |
#define SIGWINCH 23 |
#define SIGSTOP 24 |
#define SIGTSTP 25 |
#define SIGCONT 26 |
#define SIGTTIN 27 |
#define SIGTTOU 28 |
#define SIGURG 29 |
#define SIGLOST 30 /* Linux doesn't use this either */ |
#define SIGUNUSED 31 |
#define SIGRESERVE SIGUNUSED |
|
#define SIGXCPU 33 |
#define SIGXFSZ 34 |
#define SIGSTKFLT 36 |
|
/* These should not be considered constants from userland. */ |
#define SIGRTMIN 37 |
#define SIGRTMAX (_NSIG-1) /* it's 44 under HP/UX */ |
|
/* |
* SA_FLAGS values: |
* |
* SA_ONSTACK indicates that a registered stack_t will be used. |
* SA_INTERRUPT is a no-op, but left due to historical reasons. Use the |
* SA_RESTART flag to get restarting signals (which were the default long ago) |
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. |
* SA_RESETHAND clears the handler when the signal is delivered. |
* SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. |
* SA_NODEFER prevents the current signal from being masked in the handler. |
* |
* SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single |
* Unix names RESETHAND and NODEFER respectively. |
*/ |
#define SA_ONSTACK 0x00000001 |
#define SA_RESETHAND 0x00000004 |
#define SA_NOCLDSTOP 0x00000008 |
#define SA_SIGINFO 0x00000010 |
#define SA_NODEFER 0x00000020 |
#define SA_RESTART 0x00000040 |
#define SA_NOCLDWAIT 0x00000080 /* not supported yet */ |
#define _SA_SIGGFAULT 0x00000100 /* HPUX */ |
|
#define SA_NOMASK SA_NODEFER |
#define SA_ONESHOT SA_RESETHAND |
#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ |
|
#define SA_RESTORER 0x04000000 /* obsolete -- ignored */ |
|
/* |
* sigaltstack controls |
*/ |
#define SS_ONSTACK 1 |
#define SS_DISABLE 2 |
|
#define MINSIGSTKSZ 2048 |
#define SIGSTKSZ 8192 |
|
#ifdef __KERNEL__ |
|
#define _NSIG 64 |
/* bits-per-word, where word apparently means 'long' not 'int' */ |
#define _NSIG_BPW BITS_PER_LONG |
#define _NSIG_WORDS (_NSIG / _NSIG_BPW) |
|
/* |
* These values of sa_flags are used only by the kernel as part of the |
* irq handling routines. |
* |
* SA_INTERRUPT is also used by the irq handling routines. |
* SA_SHIRQ is for shared interrupt support on PCI and EISA. |
*/ |
#define SA_PROBE SA_ONESHOT |
#define SA_SAMPLE_RANDOM SA_RESTART |
#define SA_SHIRQ 0x04000000 |
|
#endif /* __KERNEL__ */ |
|
#define SIG_BLOCK 0 /* for blocking signals */ |
#define SIG_UNBLOCK 1 /* for unblocking signals */ |
#define SIG_SETMASK 2 /* for setting the signal mask */ |
|
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */ |
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */ |
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */ |
|
# ifndef __ASSEMBLY__ |
|
# include <linux/types.h> |
|
/* Avoid too many header ordering problems. */ |
struct siginfo; |
|
/* Type of a signal handler. */ |
#ifdef __LP64__ |
/* function pointers on 64-bit parisc are pointers to little structs and the |
* compiler doesn't support code which changes or tests the address of |
* the function in the little struct. This is really ugly -PB |
*/ |
typedef __kernel_caddr_t __sighandler_t; |
#else |
typedef void (*__sighandler_t)(int); |
#endif |
|
typedef struct sigaltstack { |
void *ss_sp; |
int ss_flags; |
size_t ss_size; |
} stack_t; |
|
#ifdef __KERNEL__ |
|
/* Most things should be clean enough to redefine this at will, if care |
is taken to make libc match. */ |
|
typedef unsigned long old_sigset_t; /* at least 32 bits */ |
|
typedef struct { |
/* next_signal() assumes this is a long - no choice */ |
unsigned long sig[_NSIG_WORDS]; |
} sigset_t; |
|
struct sigaction { |
__sighandler_t sa_handler; |
unsigned long sa_flags; |
sigset_t sa_mask; /* mask last for extensibility */ |
}; |
|
struct k_sigaction { |
struct sigaction sa; |
}; |
|
#include <asm/sigcontext.h> |
|
#endif /* __KERNEL__ */ |
#endif /* !__ASSEMBLY */ |
#endif /* _ASM_PARISC_SIGNAL_H */ |
/ptrace.h
0,0 → 1,57
#ifndef _PARISC_PTRACE_H |
#define _PARISC_PTRACE_H |
|
/* written by Philipp Rumpf, Copyright (C) 1999 SuSE GmbH Nuernberg |
** Copyright (C) 2000 Grant Grundler, Hewlett-Packard |
*/ |
|
#include <linux/types.h> |
|
/* This struct defines the way the registers are stored on the |
* stack during a system call. |
* |
* N.B. gdb/strace care about the size and offsets within this |
* structure. If you change things, you may break object compatibility |
* for those applications. |
*/ |
|
struct pt_regs { |
unsigned long gr[32]; /* PSW is in gr[0] */ |
__u64 fr[32]; |
unsigned long sr[ 8]; |
unsigned long iasq[2]; |
unsigned long iaoq[2]; |
unsigned long cr27; |
unsigned long pad0; /* available for other uses */ |
unsigned long orig_r28; |
unsigned long ksp; |
unsigned long kpc; |
unsigned long sar; /* CR11 */ |
unsigned long iir; /* CR19 */ |
unsigned long isr; /* CR20 */ |
unsigned long ior; /* CR21 */ |
unsigned long ipsw; /* CR22 */ |
}; |
|
#define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) |
/* |
* The numbers chosen here are somewhat arbitrary but absolutely MUST |
* not overlap with any of the number assigned in <linux/ptrace.h>. |
* |
* These ones are taken from IA-64 on the assumption that theirs are |
* the most correct (and we also want to support PTRACE_SINGLEBLOCK |
* since we have taken branch traps too) |
*/ |
#define PTRACE_SINGLEBLOCK 12 /* resume execution until next branch */ |
#define PTRACE_GETSIGINFO 13 /* get child's siginfo structure */ |
#define PTRACE_SETSIGINFO 14 /* set child's siginfo structure */ |
|
#ifdef __KERNEL__ |
|
/* XXX should we use iaoq[1] or iaoq[0] ? */ |
#define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) |
#define instruction_pointer(regs) ((regs)->iaoq[0] & ~3) |
extern void show_regs(struct pt_regs *); |
#endif |
|
#endif |
/system_irqsave.h
0,0 → 1,28
#ifndef __PARISC_SYSTEM_IRQSAVE_H |
#define __PARISC_SYSTEM_IRQSAVE_H |
|
/* interrupt control */ |
#define __save_flags(x) __asm__ __volatile__("ssm 0, %0" : "=r" (x) : : "memory") |
#define __restore_flags(x) __asm__ __volatile__("mtsm %0" : : "r" (x) : "memory") |
#define __cli() __asm__ __volatile__("rsm %0,%%r0\n" : : "i" (PSW_I) : "memory" ) |
#define __sti() __asm__ __volatile__("ssm %0,%%r0\n" : : "i" (PSW_I) : "memory" ) |
|
#define __save_and_cli(x) do { __save_flags(x); __cli(); } while(0); |
#define __save_and_sti(x) do { __save_flags(x); __sti(); } while(0); |
|
/* For spinlocks etc */ |
#if 0 |
#define local_irq_save(x) \ |
__asm__ __volatile__("rsm %1,%0" : "=r" (x) :"i" (PSW_I) : "memory" ) |
#define local_irq_set(x) \ |
# "Warning local_irq_set(x) is not yet defined" |
#else |
#define local_irq_save(x) __save_and_cli(x) |
#define local_irq_set(x) __save_and_sti(x) |
#endif |
|
#define local_irq_restore(x) __restore_flags(x) |
#define local_irq_disable() __cli() |
#define local_irq_enable() __sti() |
|
#endif /* __PARISC_SYSTEM_IRQSAVE_H */ |
/pgalloc.h
0,0 → 1,309
#ifndef _ASM_PGALLOC_H |
#define _ASM_PGALLOC_H |
|
/* The usual comment is "Caches aren't brain-dead on the <architecture>". |
* Unfortunately, that doesn't apply to PA-RISC. */ |
|
#include <asm/processor.h> |
#include <asm/fixmap.h> |
#include <linux/threads.h> |
|
#include <asm/pgtable.h> |
#include <asm/cache.h> |
|
#define flush_kernel_dcache_range(start,size) \ |
flush_kernel_dcache_range_asm((start), (start)+(size)); |
|
static inline void |
flush_page_to_ram(struct page *page) |
{ |
} |
|
extern void flush_cache_all_local(void); |
|
#ifdef CONFIG_SMP |
static inline void flush_cache_all(void) |
{ |
smp_call_function((void (*)(void *))flush_cache_all_local, NULL, 1, 1); |
flush_cache_all_local(); |
} |
#else |
#define flush_cache_all flush_cache_all_local |
#endif |
|
#ifdef CONFIG_SMP |
#define flush_cache_mm(mm) flush_cache_all() |
#else |
#define flush_cache_mm(mm) flush_cache_all_local() |
#endif |
|
/* The following value needs to be tuned and probably scaled with the |
* cache size. |
*/ |
|
#define FLUSH_THRESHOLD 0x80000 |
|
static inline void |
flush_user_dcache_range(unsigned long start, unsigned long end) |
{ |
#ifdef CONFIG_SMP |
flush_user_dcache_range_asm(start,end); |
#else |
if ((end - start) < FLUSH_THRESHOLD) |
flush_user_dcache_range_asm(start,end); |
else |
flush_data_cache(); |
#endif |
} |
|
static inline void |
flush_user_icache_range(unsigned long start, unsigned long end) |
{ |
#ifdef CONFIG_SMP |
flush_user_icache_range_asm(start,end); |
#else |
if ((end - start) < FLUSH_THRESHOLD) |
flush_user_icache_range_asm(start,end); |
else |
flush_instruction_cache(); |
#endif |
} |
|
static inline void |
flush_cache_range(struct mm_struct *mm, unsigned long start, unsigned long end) |
{ |
int sr3; |
|
if (!mm->context) { |
BUG(); |
return; |
} |
|
sr3 = mfsp(3); |
if (mm->context == sr3) { |
flush_user_dcache_range(start,end); |
flush_user_icache_range(start,end); |
} else { |
flush_cache_all(); |
} |
} |
|
static inline void |
flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr) |
{ |
int sr3; |
|
if (!vma->vm_mm->context) { |
BUG(); |
return; |
} |
|
sr3 = mfsp(3); |
if (vma->vm_mm->context == sr3) { |
flush_user_dcache_range(vmaddr,vmaddr + PAGE_SIZE); |
if (vma->vm_flags & VM_EXEC) |
flush_user_icache_range(vmaddr,vmaddr + PAGE_SIZE); |
} else { |
if (vma->vm_flags & VM_EXEC) |
flush_cache_all(); |
else |
flush_data_cache(); |
} |
} |
|
extern void __flush_dcache_page(struct page *page); |
static inline void flush_dcache_page(struct page *page) |
{ |
if (page->mapping && !page->mapping->i_mmap && |
!page->mapping->i_mmap_shared) { |
set_bit(PG_dcache_dirty, &page->flags); |
} else { |
__flush_dcache_page(page); |
} |
} |
|
#define flush_icache_page(vma,page) do { flush_kernel_dcache_page(page_address(page)); flush_kernel_icache_page(page_address(page)); } while (0) |
|
#define flush_icache_user_range(vma, page, addr, len) \ |
flush_user_icache_range(addr, addr + len); |
|
#define flush_icache_range(s,e) do { flush_kernel_dcache_range_asm(s,e); flush_kernel_icache_range_asm(s,e); } while (0) |
|
/* TLB flushing routines.... */ |
|
extern void flush_tlb_all(void); |
|
static inline void load_context(mm_context_t context) |
{ |
mtsp(context, 3); |
#if SPACEID_SHIFT == 0 |
mtctl(context << 1,8); |
#else |
mtctl(context >> (SPACEID_SHIFT - 1),8); |
#endif |
} |
|
/* |
* flush_tlb_mm() |
* |
* XXX This code is NOT valid for HP-UX compatibility processes, |
* (although it will probably work 99% of the time). HP-UX |
* processes are free to play with the space id's and save them |
* over long periods of time, etc. so we have to preserve the |
* space and just flush the entire tlb. We need to check the |
* personality in order to do that, but the personality is not |
* currently being set correctly. |
* |
* Of course, Linux processes could do the same thing, but |
* we don't support that (and the compilers, dynamic linker, |
* etc. do not do that). |
*/ |
|
static inline void flush_tlb_mm(struct mm_struct *mm) |
{ |
if (mm == &init_mm) BUG(); /* Should never happen */ |
|
#ifdef CONFIG_SMP |
flush_tlb_all(); |
#else |
if (mm) { |
if (mm->context != 0) |
free_sid(mm->context); |
mm->context = alloc_sid(); |
if (mm == current->active_mm) |
load_context(mm->context); |
} |
#endif |
} |
|
extern __inline__ void flush_tlb_pgtables(struct mm_struct *mm, unsigned long start, unsigned long end) |
{ |
} |
|
static inline void flush_tlb_page(struct vm_area_struct *vma, |
unsigned long addr) |
{ |
/* For one page, it's not worth testing the split_tlb variable */ |
|
mtsp(vma->vm_mm->context,1); |
pdtlb(addr); |
pitlb(addr); |
} |
|
static inline void flush_tlb_range(struct mm_struct *mm, |
unsigned long start, unsigned long end) |
{ |
unsigned long npages; |
|
npages = ((end - (start & PAGE_MASK)) + (PAGE_SIZE - 1)) >> PAGE_SHIFT; |
if (npages >= 512) /* XXX arbitrary, should be tuned */ |
flush_tlb_all(); |
else { |
|
mtsp(mm->context,1); |
if (split_tlb) { |
while (npages--) { |
pdtlb(start); |
pitlb(start); |
start += PAGE_SIZE; |
} |
} else { |
while (npages--) { |
pdtlb(start); |
start += PAGE_SIZE; |
} |
} |
} |
} |
|
static inline pgd_t *pgd_alloc_one_fast (void) |
{ |
return NULL; /* not implemented */ |
} |
|
static inline pgd_t *pgd_alloc (struct mm_struct *mm) |
{ |
/* the VM system never calls pgd_alloc_one_fast(), so we do it here. */ |
pgd_t *pgd = pgd_alloc_one_fast(); |
if (!pgd) { |
pgd = (pgd_t *)__get_free_page(GFP_KERNEL); |
if (pgd) |
clear_page(pgd); |
} |
return pgd; |
} |
|
static inline void pgd_free(pgd_t *pgd) |
{ |
free_page((unsigned long)pgd); |
} |
|
#ifdef __LP64__ |
|
/* Three Level Page Table Support for pmd's */ |
|
static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) |
{ |
pgd_val(*pgd) = _PAGE_TABLE + __pa((unsigned long)pmd); |
} |
|
static inline pmd_t *pmd_alloc_one_fast(struct mm_struct *mm, unsigned long address) |
{ |
return NULL; /* la la */ |
} |
|
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) |
{ |
pmd_t *pmd = (pmd_t *) __get_free_page(GFP_KERNEL); |
if (pmd) |
clear_page(pmd); |
return pmd; |
} |
|
static inline void pmd_free(pmd_t *pmd) |
{ |
free_page((unsigned long)pmd); |
} |
|
#else |
|
/* Two Level Page Table Support for pmd's */ |
|
/* |
* allocating and freeing a pmd is trivial: the 1-entry pmd is |
* inside the pgd, so has no extra memory associated with it. |
*/ |
|
#define pmd_alloc_one_fast(mm, addr) ({ BUG(); ((pmd_t *)1); }) |
#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) |
#define pmd_free(x) do { } while (0) |
#define pgd_populate(mm, pmd, pte) BUG() |
|
#endif |
|
static inline void pmd_populate (struct mm_struct *mm, pmd_t *pmd_entry, pte_t *pte) |
{ |
pmd_val(*pmd_entry) = _PAGE_TABLE + __pa((unsigned long)pte); |
} |
|
static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm, unsigned long address) |
{ |
return NULL; /* la la */ |
} |
|
static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address) |
{ |
pte_t *pte = (pte_t *) __get_free_page(GFP_KERNEL); |
if (pte) |
clear_page(pte); |
return pte; |
} |
|
static inline void pte_free(pte_t *pte) |
{ |
free_page((unsigned long)pte); |
} |
|
extern int do_check_pgt_cache(int, int); |
|
#endif |
/shmbuf.h
0,0 → 1,58
#ifndef _PARISC_SHMBUF_H |
#define _PARISC_SHMBUF_H |
|
/* |
* The shmid64_ds structure for parisc architecture. |
* Note extra padding because this structure is passed back and forth |
* between kernel and user space. |
* |
* Pad space is left for: |
* - 64-bit time_t to solve y2038 problem |
* - 2 miscellaneous 32-bit values |
*/ |
|
struct shmid64_ds { |
struct ipc64_perm shm_perm; /* operation perms */ |
#ifndef __LP64__ |
unsigned int __pad1; |
#endif |
__kernel_time_t shm_atime; /* last attach time */ |
#ifndef __LP64__ |
unsigned int __pad2; |
#endif |
__kernel_time_t shm_dtime; /* last detach time */ |
#ifndef __LP64__ |
unsigned int __pad3; |
#endif |
__kernel_time_t shm_ctime; /* last change time */ |
#ifndef __LP64__ |
unsigned int __pad4; |
#endif |
size_t shm_segsz; /* size of segment (bytes) */ |
__kernel_pid_t shm_cpid; /* pid of creator */ |
__kernel_pid_t shm_lpid; /* pid of last operator */ |
unsigned int shm_nattch; /* no. of current attaches */ |
unsigned int __unused1; |
unsigned int __unused2; |
}; |
|
#ifdef __LP64__ |
/* The 'unsigned int' (formerly 'unsigned long') data types below will |
* ensure that a 32-bit app calling shmctl(*,IPC_INFO,*) will work on |
* a wide kernel, but if some of these values are meant to contain pointers |
* they may need to be 'long long' instead. -PB XXX FIXME |
*/ |
#endif |
struct shminfo64 { |
unsigned int shmmax; |
unsigned int shmmin; |
unsigned int shmmni; |
unsigned int shmseg; |
unsigned int shmall; |
unsigned int __unused1; |
unsigned int __unused2; |
unsigned int __unused3; |
unsigned int __unused4; |
}; |
|
#endif /* _PARISC_SHMBUF_H */ |
/errno.h
0,0 → 1,147
#ifndef _PARISC_ERRNO_H |
#define _PARISC_ERRNO_H |
|
#define EPERM 1 /* Operation not permitted */ |
#define ENOENT 2 /* No such file or directory */ |
#define ESRCH 3 /* No such process */ |
#define EINTR 4 /* Interrupted system call */ |
#define EIO 5 /* I/O error */ |
#define ENXIO 6 /* No such device or address */ |
#define E2BIG 7 /* Arg list too long */ |
#define ENOEXEC 8 /* Exec format error */ |
#define EBADF 9 /* Bad file number */ |
#define ECHILD 10 /* No child processes */ |
#define EAGAIN 11 /* Try again */ |
#define ENOMEM 12 /* Out of memory */ |
#define EACCES 13 /* Permission denied */ |
#define EFAULT 14 /* Bad address */ |
#define ENOTBLK 15 /* Block device required */ |
#define EBUSY 16 /* Device or resource busy */ |
#define EEXIST 17 /* File exists */ |
#define EXDEV 18 /* Cross-device link */ |
#define ENODEV 19 /* No such device */ |
#define ENOTDIR 20 /* Not a directory */ |
#define EISDIR 21 /* Is a directory */ |
#define EINVAL 22 /* Invalid argument */ |
#define ENFILE 23 /* File table overflow */ |
#define EMFILE 24 /* Too many open files */ |
#define ENOTTY 25 /* Not a typewriter */ |
#define ETXTBSY 26 /* Text file busy */ |
#define EFBIG 27 /* File too large */ |
#define ENOSPC 28 /* No space left on device */ |
#define ESPIPE 29 /* Illegal seek */ |
#define EROFS 30 /* Read-only file system */ |
#define EMLINK 31 /* Too many links */ |
#define EPIPE 32 /* Broken pipe */ |
#define EDOM 33 /* Math argument out of domain of func */ |
#define ERANGE 34 /* Math result not representable */ |
#define ENOMSG 35 /* No message of desired type */ |
#define EIDRM 36 /* Identifier removed */ |
#define ECHRNG 37 /* Channel number out of range */ |
#define EL2NSYNC 38 /* Level 2 not synchronized */ |
#define EL3HLT 39 /* Level 3 halted */ |
#define EL3RST 40 /* Level 3 reset */ |
#define ELNRNG 41 /* Link number out of range */ |
#define EUNATCH 42 /* Protocol driver not attached */ |
#define ENOCSI 43 /* No CSI structure available */ |
#define EL2HLT 44 /* Level 2 halted */ |
#define EDEADLK 45 /* Resource deadlock would occur */ |
#define EDEADLOCK EDEADLK |
#define ENOLCK 46 /* No record locks available */ |
#define EILSEQ 47 /* Illegal byte sequence */ |
|
#define ENONET 50 /* Machine is not on the network */ |
#define ENODATA 51 /* No data available */ |
#define ETIME 52 /* Timer expired */ |
#define ENOSR 53 /* Out of streams resources */ |
#define ENOSTR 54 /* Device not a stream */ |
#define ENOPKG 55 /* Package not installed */ |
|
#define ENOLINK 57 /* Link has been severed */ |
#define EADV 58 /* Advertise error */ |
#define ESRMNT 59 /* Srmount error */ |
#define ECOMM 60 /* Communication error on send */ |
#define EPROTO 61 /* Protocol error */ |
|
#define EMULTIHOP 64 /* Multihop attempted */ |
|
#define EDOTDOT 66 /* RFS specific error */ |
#define EBADMSG 67 /* Not a data message */ |
#define EUSERS 68 /* Too many users */ |
#define EDQUOT 69 /* Quota exceeded */ |
#define ESTALE 70 /* Stale NFS file handle */ |
#define EREMOTE 71 /* Object is remote */ |
#define EOVERFLOW 72 /* Value too large for defined data type */ |
|
/* these errnos are defined by Linux but not HPUX. */ |
|
#define EBADE 160 /* Invalid exchange */ |
#define EBADR 161 /* Invalid request descriptor */ |
#define EXFULL 162 /* Exchange full */ |
#define ENOANO 163 /* No anode */ |
#define EBADRQC 164 /* Invalid request code */ |
#define EBADSLT 165 /* Invalid slot */ |
#define EBFONT 166 /* Bad font file format */ |
#define ENOTUNIQ 167 /* Name not unique on network */ |
#define EBADFD 168 /* File descriptor in bad state */ |
#define EREMCHG 169 /* Remote address changed */ |
#define ELIBACC 170 /* Can not access a needed shared library */ |
#define ELIBBAD 171 /* Accessing a corrupted shared library */ |
#define ELIBSCN 172 /* .lib section in a.out corrupted */ |
#define ELIBMAX 173 /* Attempting to link in too many shared libraries */ |
#define ELIBEXEC 174 /* Cannot exec a shared library directly */ |
#define ERESTART 175 /* Interrupted system call should be restarted */ |
#define ESTRPIPE 176 /* Streams pipe error */ |
#define EUCLEAN 177 /* Structure needs cleaning */ |
#define ENOTNAM 178 /* Not a XENIX named type file */ |
#define ENAVAIL 179 /* No XENIX semaphores available */ |
#define EISNAM 180 /* Is a named type file */ |
#define EREMOTEIO 181 /* Remote I/O error */ |
#define ENOMEDIUM 182 /* No medium found */ |
#define EMEDIUMTYPE 183 /* Wrong medium type */ |
|
/* We now return you to your regularly scheduled HPUX. */ |
|
#define ENOSYM 215 /* symbol does not exist in executable */ |
#define ENOTSOCK 216 /* Socket operation on non-socket */ |
#define EDESTADDRREQ 217 /* Destination address required */ |
#define EMSGSIZE 218 /* Message too long */ |
#define EPROTOTYPE 219 /* Protocol wrong type for socket */ |
#define ENOPROTOOPT 220 /* Protocol not available */ |
#define EPROTONOSUPPORT 221 /* Protocol not supported */ |
#define ESOCKTNOSUPPORT 222 /* Socket type not supported */ |
#define EOPNOTSUPP 223 /* Operation not supported on transport endpoint */ |
#define EPFNOSUPPORT 224 /* Protocol family not supported */ |
#define EAFNOSUPPORT 225 /* Address family not supported by protocol */ |
#define EADDRINUSE 226 /* Address already in use */ |
#define EADDRNOTAVAIL 227 /* Cannot assign requested address */ |
#define ENETDOWN 228 /* Network is down */ |
#define ENETUNREACH 229 /* Network is unreachable */ |
#define ENETRESET 230 /* Network dropped connection because of reset */ |
#define ECONNABORTED 231 /* Software caused connection abort */ |
#define ECONNRESET 232 /* Connection reset by peer */ |
#define ENOBUFS 233 /* No buffer space available */ |
#define EISCONN 234 /* Transport endpoint is already connected */ |
#define ENOTCONN 235 /* Transport endpoint is not connected */ |
#define ESHUTDOWN 236 /* Cannot send after transport endpoint shutdown */ |
#define ETOOMANYREFS 237 /* Too many references: cannot splice */ |
#define EREFUSED ECONNREFUSED /* for HP's NFS apparently */ |
#define ETIMEDOUT 238 /* Connection timed out */ |
#define ECONNREFUSED 239 /* Connection refused */ |
#define EREMOTERELEASE 240 /* Remote peer released connection */ |
#define EHOSTDOWN 241 /* Host is down */ |
#define EHOSTUNREACH 242 /* No route to host */ |
|
#define EALREADY 244 /* Operation already in progress */ |
#define EINPROGRESS 245 /* Operation now in progress */ |
#define EWOULDBLOCK 246 /* Operation would block (Linux returns EAGAIN) */ |
#define ENOTEMPTY 247 /* Directory not empty */ |
#define ENAMETOOLONG 248 /* File name too long */ |
#define ELOOP 249 /* Too many symbolic links encountered */ |
#define ENOSYS 251 /* Function not implemented */ |
|
#define ENOTSUP 252 /* Function not implemented (POSIX.4 / HPUX) */ |
#define ECANCELLED 253 /* aio request was canceled before complete (POSIX.4 / HPUX) */ |
|
|
#endif |
/superio.h
0,0 → 1,81
#ifndef _PARISC_SUPERIO_H |
#define _PARISC_SUPERIO_H |
|
/* Offsets to configuration and base address registers */ |
#define IC_PIC1 0x20 /* PCI I/O address of master 8259 */ |
#define IC_PIC2 0xA0 /* PCI I/O address of slave */ |
#define SIO_CR 0x5A /* Configuration Register */ |
#define SIO_ACPIBAR 0x88 /* ACPI BAR */ |
#define SIO_FDCBAR 0x90 /* Floppy Disk Controller BAR */ |
#define SIO_SP1BAR 0x94 /* Serial 1 BAR */ |
#define SIO_SP2BAR 0x98 /* Serial 2 BAR */ |
#define SIO_PPBAR 0x9C /* Parallel BAR */ |
|
/* Interrupt triggers and routing */ |
#define TRIGGER_1 0x67 /* Edge/level trigger register 1 */ |
#define TRIGGER_2 0x68 /* Edge/level trigger register 2 */ |
#define IR_SER 0x69 /* Serial 1 [0:3] and Serial 2 [4:7] */ |
#define IR_PFD 0x6a /* Parallel [0:3] and Floppy [4:7] */ |
#define IR_IDE 0x6b /* IDE1 [0:3] and IDE2 [4:7] */ |
#define IR_USB 0x6d /* USB [4:7] */ |
#define IR_LOW 0x69 /* Lowest interrupt routing reg */ |
#define IR_HIGH 0x71 /* Highest interrupt routing reg */ |
|
/* 8259 operational control words */ |
#define OCW2_EOI 0x20 /* Non-specific EOI */ |
#define OCW2_SEOI 0x60 /* Specific EOI */ |
#define OCW3_IIR 0x0A /* Read request register */ |
#define OCW3_ISR 0x0B /* Read service register */ |
#define OCW3_POLL 0x0C /* Poll the PIC for an interrupt vector */ |
|
/* Interrupt lines. Only PIC1 is used */ |
#define USB_IRQ 1 /* USB */ |
#define SP1_IRQ 3 /* Serial port 1 */ |
#define SP2_IRQ 4 /* Serial port 2 */ |
#define PAR_IRQ 5 /* Parallel port */ |
#define FDC_IRQ 6 /* Floppy controller */ |
#define IDE_IRQ 7 /* IDE (pri+sec) */ |
|
/* ACPI registers */ |
#define USB_REG_CR 0x1f /* USB Regulator Control Register */ |
|
#define SUPERIO_NIRQS 8 |
|
struct superio_device { |
u16 fdc_base; |
u16 sp1_base; |
u16 sp2_base; |
u16 pp_base; |
u16 acpi_base; |
int iosapic_irq; |
int iosapic_irq_enabled; |
struct irq_region *irq_region; |
struct pci_dev *lio_pdev; /* pci device for legacy IO fn */ |
}; |
|
/* |
* Does NS make a 87415 based plug in PCI card? If so, because of this |
* macro we currently don't support it being plugged into a machine |
* that contains a SuperIO chip AND has CONFIG_SUPERIO enabled. |
* |
* This could be fixed by checking to see if function 1 exists, and |
* if it is SuperIO Legacy IO; but really now, is this combination |
* going to EVER happen? |
*/ |
|
#define SUPERIO_IDE_FN 0 /* Function number of IDE controller */ |
#define SUPERIO_LIO_FN 1 /* Function number of Legacy IO controller */ |
#define SUPERIO_USB_FN 2 /* Function number of USB controller */ |
|
#define is_superio_device(x) \ |
(((x)->vendor == PCI_VENDOR_ID_NS) && \ |
( ((x)->device == PCI_DEVICE_ID_NS_87415) \ |
|| ((x)->device == PCI_DEVICE_ID_NS_87560_LIO) \ |
|| ((x)->device == PCI_DEVICE_ID_NS_87560_USB) ) ) |
|
extern void superio_inform_irq(int irq); |
extern void superio_serial_init(void); /* called by rs_init() */ |
extern int superio_fixup_irq(struct pci_dev *pcidev); /* called by iosapic */ |
extern int superio_get_ide_irq(void); |
|
#endif /* _PARISC_SUPERIO_H */ |
/timex.h
0,0 → 1,24
/* |
* linux/include/asm-parisc/timex.h |
* |
* PARISC architecture timex specifications |
*/ |
#ifndef _ASMPARISC_TIMEX_H |
#define _ASMPARISC_TIMEX_H |
|
#include <asm/system.h> |
#include <linux/time.h> |
|
typedef unsigned long cycles_t; |
|
extern cycles_t cacheflush_time; |
|
static inline cycles_t get_cycles (void) |
{ |
return mfctl(16); |
} |
|
#define vxtime_lock() do {} while (0) |
#define vxtime_unlock() do {} while (0) |
|
#endif |
/posix_types.h
0,0 → 1,151
#ifndef __ARCH_PARISC_POSIX_TYPES_H |
#define __ARCH_PARISC_POSIX_TYPES_H |
|
/* |
* This file is generally used by user-level software, so you need to |
* be a little careful about namespace pollution etc. Also, we cannot |
* assume GCC is being used. |
*/ |
typedef unsigned int __kernel_dev_t; |
typedef unsigned long __kernel_ino_t; |
typedef unsigned short __kernel_mode_t; |
typedef unsigned short __kernel_nlink_t; |
typedef long __kernel_off_t; |
typedef int __kernel_pid_t; |
typedef unsigned short __kernel_ipc_pid_t; |
typedef unsigned int __kernel_uid_t; |
typedef unsigned int __kernel_gid_t; |
typedef int __kernel_suseconds_t; |
typedef int __kernel_clock_t; |
typedef int __kernel_daddr_t; |
/* Note these change from narrow to wide kernels */ |
#ifdef __LP64__ |
typedef unsigned long __kernel_size_t; |
typedef long __kernel_ssize_t; |
typedef long __kernel_ptrdiff_t; |
typedef long __kernel_time_t; |
#else |
typedef unsigned int __kernel_size_t; |
typedef int __kernel_ssize_t; |
typedef int __kernel_ptrdiff_t; |
typedef int __kernel_time_t; |
#endif |
typedef char * __kernel_caddr_t; |
|
typedef unsigned short __kernel_uid16_t; |
typedef unsigned short __kernel_gid16_t; |
typedef unsigned int __kernel_uid32_t; |
typedef unsigned int __kernel_gid32_t; |
|
#ifdef __GNUC__ |
typedef long long __kernel_loff_t; |
typedef long long __kernel_off64_t; |
typedef unsigned long long __kernel_ino64_t; |
#endif |
|
typedef struct { |
#if defined(__KERNEL__) || defined(__USE_ALL) |
int val[2]; |
#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */ |
int __val[2]; |
#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */ |
} __kernel_fsid_t; |
|
/* compatibility stuff */ |
typedef __kernel_uid_t __kernel_old_uid_t; |
typedef __kernel_gid_t __kernel_old_gid_t; |
|
#if defined(__KERNEL__) && defined(__LP64__) |
/* Now 32bit compatibility types */ |
typedef unsigned int __kernel_dev_t32; |
typedef unsigned int __kernel_ino_t32; |
typedef unsigned short __kernel_mode_t32; |
typedef unsigned short __kernel_nlink_t32; |
typedef int __kernel_off_t32; |
typedef int __kernel_pid_t32; |
typedef unsigned short __kernel_ipc_pid_t32; |
typedef unsigned int __kernel_uid_t32; |
typedef unsigned int __kernel_gid_t32; |
typedef unsigned int __kernel_size_t32; |
typedef int __kernel_ssize_t32; |
typedef int __kernel_ptrdiff_t32; |
typedef int __kernel_time_t32; |
typedef int __kernel_suseconds_t32; |
typedef int __kernel_clock_t32; |
typedef int __kernel_daddr_t32; |
typedef unsigned int __kernel_caddr_t32; |
#endif |
|
#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) |
|
#undef __FD_SET |
static __inline__ void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp) |
{ |
unsigned long __tmp = __fd / __NFDBITS; |
unsigned long __rem = __fd % __NFDBITS; |
__fdsetp->fds_bits[__tmp] |= (1UL<<__rem); |
} |
|
#undef __FD_CLR |
static __inline__ void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp) |
{ |
unsigned long __tmp = __fd / __NFDBITS; |
unsigned long __rem = __fd % __NFDBITS; |
__fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem); |
} |
|
#undef __FD_ISSET |
static __inline__ int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p) |
{ |
unsigned long __tmp = __fd / __NFDBITS; |
unsigned long __rem = __fd % __NFDBITS; |
return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0; |
} |
|
/* |
* This will unroll the loop for the normal constant case (8 ints, |
* for a 256-bit fd_set) |
*/ |
#undef __FD_ZERO |
static __inline__ void __FD_ZERO(__kernel_fd_set *__p) |
{ |
unsigned long *__tmp = __p->fds_bits; |
int __i; |
|
if (__builtin_constant_p(__FDSET_LONGS)) { |
switch (__FDSET_LONGS) { |
case 16: |
__tmp[ 0] = 0; __tmp[ 1] = 0; |
__tmp[ 2] = 0; __tmp[ 3] = 0; |
__tmp[ 4] = 0; __tmp[ 5] = 0; |
__tmp[ 6] = 0; __tmp[ 7] = 0; |
__tmp[ 8] = 0; __tmp[ 9] = 0; |
__tmp[10] = 0; __tmp[11] = 0; |
__tmp[12] = 0; __tmp[13] = 0; |
__tmp[14] = 0; __tmp[15] = 0; |
return; |
|
case 8: |
__tmp[ 0] = 0; __tmp[ 1] = 0; |
__tmp[ 2] = 0; __tmp[ 3] = 0; |
__tmp[ 4] = 0; __tmp[ 5] = 0; |
__tmp[ 6] = 0; __tmp[ 7] = 0; |
return; |
|
case 4: |
__tmp[ 0] = 0; __tmp[ 1] = 0; |
__tmp[ 2] = 0; __tmp[ 3] = 0; |
return; |
} |
} |
__i = __FDSET_LONGS; |
while (__i) { |
__i--; |
*__tmp = 0; |
__tmp++; |
} |
} |
|
#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */ |
|
#endif |
/softirq.h
0,0 → 1,16
#ifndef __ASM_SOFTIRQ_H |
#define __ASM_SOFTIRQ_H |
|
#include <asm/atomic.h> |
#include <asm/hardirq.h> |
|
#define cpu_bh_disable(cpu) do { local_bh_count(cpu)++; barrier(); } while (0) |
#define cpu_bh_enable(cpu) do { barrier(); local_bh_count(cpu)--; } while (0) |
|
#define local_bh_disable() cpu_bh_disable(smp_processor_id()) |
#define __local_bh_enable() local_bh_enable() |
#define local_bh_enable() cpu_bh_enable(smp_processor_id()) |
|
#define in_softirq() (local_bh_count(smp_processor_id()) != 0) |
|
#endif /* __ASM_SOFTIRQ_H */ |
/sigcontext.h
0,0 → 1,20
#ifndef _ASMPARISC_SIGCONTEXT_H |
#define _ASMPARISC_SIGCONTEXT_H |
|
#define PARISC_SC_FLAG_ONSTACK 1<<0 |
#define PARISC_SC_FLAG_IN_SYSCALL 1<<1 |
|
/* We will add more stuff here as it becomes necessary, until we know |
it works. */ |
struct sigcontext { |
unsigned long sc_flags; |
|
unsigned long sc_gr[32]; /* PSW in sc_gr[0] */ |
unsigned long long sc_fr[32]; /* FIXME, do we need other state info? */ |
unsigned long sc_iasq[2]; |
unsigned long sc_iaoq[2]; |
unsigned long sc_sar; /* cr11 */ |
}; |
|
|
#endif |
/parport.h
0,0 → 1,18
/* |
* |
* parport.h: ia32-compatible parport initialisation |
* |
* This file should only be included by drivers/parport/parport_pc.c. |
*/ |
#ifndef _ASM_PARPORT_H |
#define _ASM_PARPORT_H 1 |
|
|
static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) |
{ |
/* nothing ! */ |
return 0; |
} |
|
|
#endif /* !(_ASM_PARPORT_H) */ |
/mman.h
0,0 → 1,52
#ifndef __PARISC_MMAN_H__ |
#define __PARISC_MMAN_H__ |
|
#define PROT_READ 0x1 /* page can be read */ |
#define PROT_WRITE 0x2 /* page can be written */ |
#define PROT_EXEC 0x4 /* page can be executed */ |
#define PROT_NONE 0x0 /* page can not be accessed */ |
|
#define MAP_SHARED 0x01 /* Share changes */ |
#define MAP_PRIVATE 0x02 /* Changes are private */ |
#define MAP_TYPE 0x03 /* Mask for type of mapping */ |
#define MAP_FIXED 0x04 /* Interpret addr exactly */ |
#define MAP_ANONYMOUS 0x10 /* don't use a file */ |
|
#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ |
#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ |
#define MAP_LOCKED 0x2000 /* pages are locked */ |
#define MAP_NORESERVE 0x4000 /* don't check for reservations */ |
#define MAP_GROWSDOWN 0x8000 /* stack-like segment */ |
|
#define MS_SYNC 1 /* synchronous memory sync */ |
#define MS_ASYNC 2 /* sync memory asynchronously */ |
#define MS_INVALIDATE 4 /* invalidate the caches */ |
|
#define MCL_CURRENT 1 /* lock all current mappings */ |
#define MCL_FUTURE 2 /* lock all future mappings */ |
|
#define MADV_NORMAL 0 /* no further special treatment */ |
#define MADV_RANDOM 1 /* expect random page references */ |
#define MADV_SEQUENTIAL 2 /* expect sequential page references */ |
#define MADV_WILLNEED 3 /* will need these pages */ |
#define MADV_DONTNEED 4 /* dont need these pages */ |
#define MADV_SPACEAVAIL 5 /* insure that resources are reserved */ |
#define MADV_VPS_PURGE 6 /* Purge pages from VM page cache */ |
#define MADV_VPS_INHERIT 7 /* Inherit parents page size */ |
|
/* The range 12-64 is reserved for page size specification. */ |
#define MADV_4K_PAGES 12 /* Use 4K pages */ |
#define MADV_16K_PAGES 14 /* Use 16K pages */ |
#define MADV_64K_PAGES 16 /* Use 64K pages */ |
#define MADV_256K_PAGES 18 /* Use 256K pages */ |
#define MADV_1M_PAGES 20 /* Use 1 Megabyte pages */ |
#define MADV_4M_PAGES 22 /* Use 4 Megabyte pages */ |
#define MADV_16M_PAGES 24 /* Use 16 Megabyte pages */ |
#define MADV_64M_PAGES 26 /* Use 64 Megabyte pages */ |
|
/* compatibility flags */ |
#define MAP_ANON MAP_ANONYMOUS |
#define MAP_FILE 0 |
#define MAP_VARIABLE 0 |
|
#endif /* __PARISC_MMAN_H__ */ |
/socket.h
0,0 → 1,62
#ifndef _ASM_SOCKET_H |
#define _ASM_SOCKET_H |
|
#include <asm/sockios.h> |
|
/* For setsockopt(2) */ |
#define SOL_SOCKET 0xffff |
|
#define SO_DEBUG 0x0001 |
#define SO_REUSEADDR 0x0004 |
#define SO_KEEPALIVE 0x0008 |
#define SO_DONTROUTE 0x0010 |
#define SO_BROADCAST 0x0020 |
#define SO_LINGER 0x0080 |
#define SO_OOBINLINE 0x0100 |
/* To add :#define SO_REUSEPORT 0x0200 */ |
#define SO_SNDBUF 0x1001 |
#define SO_RCVBUF 0x1002 |
#define SO_SNDLOWAT 0x1003 |
#define SO_RCVLOWAT 0x1004 |
#define SO_SNDTIMEO 0x1005 |
#define SO_RCVTIMEO 0x1006 |
#define SO_ERROR 0x1007 |
#define SO_TYPE 0x1008 |
#define SO_PEERNAME 0x2000 |
|
#define SO_NO_CHECK 0x400b |
#define SO_PRIORITY 0x400c |
#define SO_BSDCOMPAT 0x400e |
#define SO_PASSCRED 0x4010 |
#define SO_PEERCRED 0x4011 |
#define SO_TIMESTAMP 0x4012 |
#define SCM_TIMESTAMP SO_TIMESTAMP |
|
/* Security levels - as per NRL IPv6 - don't actually do anything */ |
#define SO_SECURITY_AUTHENTICATION 0x4016 |
#define SO_SECURITY_ENCRYPTION_TRANSPORT 0x4017 |
#define SO_SECURITY_ENCRYPTION_NETWORK 0x4018 |
|
#define SO_BINDTODEVICE 0x4019 |
|
/* Socket filtering */ |
#define SO_ATTACH_FILTER 0x401a |
#define SO_DETACH_FILTER 0x401b |
|
#define SO_ACCEPTCONN 0x401c |
|
#if defined(__KERNEL__) |
#define SOCK_STREAM 1 /* stream (connection) socket */ |
#define SOCK_DGRAM 2 /* datagram (conn.less) socket */ |
#define SOCK_RAW 3 /* raw socket */ |
#define SOCK_RDM 4 /* reliably-delivered message */ |
#define SOCK_SEQPACKET 5 /* sequential packet socket */ |
#define SOCK_PACKET 10 /* linux specific way of */ |
/* getting packets at the dev */ |
/* level. For writing rarp and */ |
/* other similar things on the */ |
/* user level. */ |
#define SOCK_MAX (SOCK_PACKET+1) |
#endif |
|
#endif /* _ASM_SOCKET_H */ |