From: Linus Torvalds Date: Mon, 20 Oct 2008 21:38:14 +0000 (-0700) Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6 X-Git-Tag: v2.6.28-rc1~72 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=e3d2f927f788adcdabc42f8a1616f6cc56c53bbe;p=~emulex%2Finfiniband.git Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6 * git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: parisc: convert to generic compat_sys_ptrace parisc: add rtc platform driver parisc: initialize unwinder much earlier parisc: add new syscalls parisc: hijack jump to start_kernel parisc: add pdc_coproc_cfg_unlocked and set_firmware_width_unlocked parisc: move include/asm-parisc to arch/parisc/include/asm parisc: move pdc_result to real2.S parisc: unify CCIO_COLLECT_STATS implementation parisc: add arch/parisc/kernel/.gitignore parisc: ropes.h - fix -> parisc: parisc-agp - fix -> Resolve remove/rename conflict: include/asm-parisc/a.out.h is no longer relevant. --- e3d2f927f788adcdabc42f8a1616f6cc56c53bbe diff --cc arch/parisc/include/asm/elf.h index 00000000000,d0a4a826281..7fa675799e6 mode 000000,100644..100644 --- a/arch/parisc/include/asm/elf.h +++ b/arch/parisc/include/asm/elf.h @@@ -1,0 -1,342 +1,342 @@@ + #ifndef __ASMPARISC_ELF_H + #define __ASMPARISC_ELF_H + + /* + * ELF register definitions.. + */ + + #include + + #define EM_PARISC 15 + + /* HPPA specific definitions. */ + + /* Legal values for e_flags field of Elf32_Ehdr. */ + + #define EF_PARISC_TRAPNIL 0x00010000 /* Trap nil pointer dereference. */ + #define EF_PARISC_EXT 0x00020000 /* Program uses arch. extensions. */ + #define EF_PARISC_LSB 0x00040000 /* Program expects little endian. */ + #define EF_PARISC_WIDE 0x00080000 /* Program expects wide mode. */ + #define EF_PARISC_NO_KABP 0x00100000 /* No kernel assisted branch + prediction. */ + #define EF_PARISC_LAZYSWAP 0x00400000 /* Allow lazy swapping. */ + #define EF_PARISC_ARCH 0x0000ffff /* Architecture version. */ + + /* Defined values for `e_flags & EF_PARISC_ARCH' are: */ + + #define EFA_PARISC_1_0 0x020b /* PA-RISC 1.0 big-endian. */ + #define EFA_PARISC_1_1 0x0210 /* PA-RISC 1.1 big-endian. */ + #define EFA_PARISC_2_0 0x0214 /* PA-RISC 2.0 big-endian. */ + + /* Additional section indices. */ + + #define SHN_PARISC_ANSI_COMMON 0xff00 /* Section for tenatively declared + symbols in ANSI C. */ + #define SHN_PARISC_HUGE_COMMON 0xff01 /* Common blocks in huge model. */ + + /* Legal values for sh_type field of Elf32_Shdr. */ + + #define SHT_PARISC_EXT 0x70000000 /* Contains product specific ext. */ + #define SHT_PARISC_UNWIND 0x70000001 /* Unwind information. */ + #define SHT_PARISC_DOC 0x70000002 /* Debug info for optimized code. */ + + /* Legal values for sh_flags field of Elf32_Shdr. */ + + #define SHF_PARISC_SHORT 0x20000000 /* Section with short addressing. */ + #define SHF_PARISC_HUGE 0x40000000 /* Section far from gp. */ + #define SHF_PARISC_SBP 0x80000000 /* Static branch prediction code. */ + + /* Legal values for ST_TYPE subfield of st_info (symbol type). */ + + #define STT_PARISC_MILLICODE 13 /* Millicode function entry point. */ + + #define STT_HP_OPAQUE (STT_LOOS + 0x1) + #define STT_HP_STUB (STT_LOOS + 0x2) + + /* HPPA relocs. */ + + #define R_PARISC_NONE 0 /* No reloc. */ + #define R_PARISC_DIR32 1 /* Direct 32-bit reference. */ + #define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */ + #define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */ + #define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */ + #define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */ + #define R_PARISC_PCREL32 9 /* 32-bit rel. address. */ + #define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */ + #define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */ + #define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */ + #define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */ + #define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */ + #define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */ + #define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */ + #define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */ + #define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */ + #define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */ + #define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */ + #define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */ + #define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */ + #define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */ + #define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */ + #define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */ + #define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */ + #define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */ + #define R_PARISC_FPTR64 64 /* 64 bits function address. */ + #define R_PARISC_PLABEL32 65 /* 32 bits function address. */ + #define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */ + #define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */ + #define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */ + #define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */ + #define R_PARISC_PCREL16F 77 /* 16 bits PC-rel. address. */ + #define R_PARISC_PCREL16WF 78 /* 16 bits PC-rel. address. */ + #define R_PARISC_PCREL16DF 79 /* 16 bits PC-rel. address. */ + #define R_PARISC_DIR64 80 /* 64 bits of eff. address. */ + #define R_PARISC_DIR14WR 83 /* 14 bits of eff. address. */ + #define R_PARISC_DIR14DR 84 /* 14 bits of eff. address. */ + #define R_PARISC_DIR16F 85 /* 16 bits of eff. address. */ + #define R_PARISC_DIR16WF 86 /* 16 bits of eff. address. */ + #define R_PARISC_DIR16DF 87 /* 16 bits of eff. address. */ + #define R_PARISC_GPREL64 88 /* 64 bits of GP-rel. address. */ + #define R_PARISC_GPREL14WR 91 /* GP-rel. address, right 14 bits. */ + #define R_PARISC_GPREL14DR 92 /* GP-rel. address, right 14 bits. */ + #define R_PARISC_GPREL16F 93 /* 16 bits GP-rel. address. */ + #define R_PARISC_GPREL16WF 94 /* 16 bits GP-rel. address. */ + #define R_PARISC_GPREL16DF 95 /* 16 bits GP-rel. address. */ + #define R_PARISC_LTOFF64 96 /* 64 bits LT-rel. address. */ + #define R_PARISC_LTOFF14WR 99 /* LT-rel. address, right 14 bits. */ + #define R_PARISC_LTOFF14DR 100 /* LT-rel. address, right 14 bits. */ + #define R_PARISC_LTOFF16F 101 /* 16 bits LT-rel. address. */ + #define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */ + #define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */ + #define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */ + #define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */ + #define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */ + #define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */ + #define R_PARISC_PLTOFF16F 117 /* 16 bits LT-rel. address. */ + #define R_PARISC_PLTOFF16WF 118 /* 16 bits PLT-rel. address. */ + #define R_PARISC_PLTOFF16DF 119 /* 16 bits PLT-rel. address. */ + #define R_PARISC_LTOFF_FPTR64 120 /* 64 bits LT-rel. function ptr. */ + #define R_PARISC_LTOFF_FPTR14WR 123 /* LT-rel. fct. ptr., right 14 bits. */ + #define R_PARISC_LTOFF_FPTR14DR 124 /* LT-rel. fct. ptr., right 14 bits. */ + #define R_PARISC_LTOFF_FPTR16F 125 /* 16 bits LT-rel. function ptr. */ + #define R_PARISC_LTOFF_FPTR16WF 126 /* 16 bits LT-rel. function ptr. */ + #define R_PARISC_LTOFF_FPTR16DF 127 /* 16 bits LT-rel. function ptr. */ + #define R_PARISC_LORESERVE 128 + #define R_PARISC_COPY 128 /* Copy relocation. */ + #define R_PARISC_IPLT 129 /* Dynamic reloc, imported PLT */ + #define R_PARISC_EPLT 130 /* Dynamic reloc, exported PLT */ + #define R_PARISC_TPREL32 153 /* 32 bits TP-rel. address. */ + #define R_PARISC_TPREL21L 154 /* TP-rel. address, left 21 bits. */ + #define R_PARISC_TPREL14R 158 /* TP-rel. address, right 14 bits. */ + #define R_PARISC_LTOFF_TP21L 162 /* LT-TP-rel. address, left 21 bits. */ + #define R_PARISC_LTOFF_TP14R 166 /* LT-TP-rel. address, right 14 bits.*/ + #define R_PARISC_LTOFF_TP14F 167 /* 14 bits LT-TP-rel. address. */ + #define R_PARISC_TPREL64 216 /* 64 bits TP-rel. address. */ + #define R_PARISC_TPREL14WR 219 /* TP-rel. address, right 14 bits. */ + #define R_PARISC_TPREL14DR 220 /* TP-rel. address, right 14 bits. */ + #define R_PARISC_TPREL16F 221 /* 16 bits TP-rel. address. */ + #define R_PARISC_TPREL16WF 222 /* 16 bits TP-rel. address. */ + #define R_PARISC_TPREL16DF 223 /* 16 bits TP-rel. address. */ + #define R_PARISC_LTOFF_TP64 224 /* 64 bits LT-TP-rel. address. */ + #define R_PARISC_LTOFF_TP14WR 227 /* LT-TP-rel. address, right 14 bits.*/ + #define R_PARISC_LTOFF_TP14DR 228 /* LT-TP-rel. address, right 14 bits.*/ + #define R_PARISC_LTOFF_TP16F 229 /* 16 bits LT-TP-rel. address. */ + #define R_PARISC_LTOFF_TP16WF 230 /* 16 bits LT-TP-rel. address. */ + #define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */ + #define R_PARISC_HIRESERVE 255 + + #define PA_PLABEL_FDESC 0x02 /* bit set if PLABEL points to + * a function descriptor, not + * an address */ + + /* The following are PA function descriptors + * + * addr: the absolute address of the function + * gp: either the data pointer (r27) for non-PIC code or the + * the PLT pointer (r19) for PIC code */ + + /* Format for the Elf32 Function descriptor */ + typedef struct elf32_fdesc { + __u32 addr; + __u32 gp; + } Elf32_Fdesc; + + /* Format for the Elf64 Function descriptor */ + typedef struct elf64_fdesc { + __u64 dummy[2]; /* FIXME: nothing uses these, why waste + * the space */ + __u64 addr; + __u64 gp; + } Elf64_Fdesc; + + /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */ + + #define PT_HP_TLS (PT_LOOS + 0x0) + #define PT_HP_CORE_NONE (PT_LOOS + 0x1) + #define PT_HP_CORE_VERSION (PT_LOOS + 0x2) + #define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) + #define PT_HP_CORE_COMM (PT_LOOS + 0x4) + #define PT_HP_CORE_PROC (PT_LOOS + 0x5) + #define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) + #define PT_HP_CORE_STACK (PT_LOOS + 0x7) + #define PT_HP_CORE_SHM (PT_LOOS + 0x8) + #define PT_HP_CORE_MMF (PT_LOOS + 0x9) + #define PT_HP_PARALLEL (PT_LOOS + 0x10) + #define PT_HP_FASTBIND (PT_LOOS + 0x11) + #define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) + #define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) + #define PT_HP_STACK (PT_LOOS + 0x14) + + #define PT_PARISC_ARCHEXT 0x70000000 + #define PT_PARISC_UNWIND 0x70000001 + + /* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr. */ + + #define PF_PARISC_SBP 0x08000000 + + #define PF_HP_PAGE_SIZE 0x00100000 + #define PF_HP_FAR_SHARED 0x00200000 + #define PF_HP_NEAR_SHARED 0x00400000 + #define PF_HP_CODE 0x01000000 + #define PF_HP_MODIFY 0x02000000 + #define PF_HP_LAZYSWAP 0x04000000 + #define PF_HP_SBP 0x08000000 + + /* + * 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/parisc/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/parisc/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 CONFIG_64BIT + #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. + */ + + #define ELF_PLATFORM ("PARISC\0") + -#define SET_PERSONALITY(ex, ibcs2) \ ++#define SET_PERSONALITY(ex) \ + current->personality = PER_LINUX; \ + current->thread.map_base = DEFAULT_MAP_BASE; \ + current->thread.task_size = DEFAULT_TASK_SIZE \ + + /* + * 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 task_struct; + + extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *); + #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs) + + 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 + #define ELF_OSABI ELFOSABI_LINUX + + /* %r23 is set by ld.so to a pointer to a function which might be + registered using atexit. This provides a means 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 + + #endif diff --cc arch/parisc/include/asm/ide.h index 00000000000,c246ef75017..81700a2321c mode 000000,100644..100644 --- a/arch/parisc/include/asm/ide.h +++ b/arch/parisc/include/asm/ide.h @@@ -1,0 -1,61 +1,57 @@@ + /* + * 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__ + -#define ide_request_irq(irq,hand,flg,dev,id) request_irq((irq),(hand),(flg),(dev),(id)) -#define ide_free_irq(irq,dev_id) free_irq((irq), (dev_id)) -#define ide_request_region(from,extent,name) request_region((from), (extent), (name)) -#define ide_release_region(from,extent) release_region((from), (extent)) + /* Generic I/O and MEMIO string operations. */ + + #define __ide_insw insw + #define __ide_insl insl + #define __ide_outsw outsw + #define __ide_outsl outsl + + static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count) + { + while (count--) { + *(u16 *)addr = __raw_readw(port); + addr += 2; + } + } + + static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count) + { + while (count--) { + *(u32 *)addr = __raw_readl(port); + addr += 4; + } + } + + static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count) + { + while (count--) { + __raw_writew(*(u16 *)addr, port); + addr += 2; + } + } + + static __inline__ void __ide_mm_outsl(void __iomem *port, void *addr, u32 count) + { + while (count--) { + __raw_writel(*(u32 *)addr, port); + addr += 4; + } + } + + #endif /* __KERNEL__ */ + + #endif /* __ASM_PARISC_IDE_H */ diff --cc arch/parisc/include/asm/siginfo.h index 00000000000,d4909f55fe3..d7034728f37 mode 000000,100644..100644 --- a/arch/parisc/include/asm/siginfo.h +++ b/arch/parisc/include/asm/siginfo.h @@@ -1,0 -1,14 +1,9 @@@ + #ifndef _PARISC_SIGINFO_H + #define _PARISC_SIGINFO_H + + #include + -/* - * SIGTRAP si_codes - */ -#define TRAP_BRANCH (__SI_FAULT|3) /* process taken branch trap */ -#define TRAP_HWBKPT (__SI_FAULT|4) /* hardware breakpoint or watchpoint */ + #undef NSIGTRAP + #define NSIGTRAP 4 + + #endif diff --cc arch/parisc/include/asm/statfs.h index 00000000000,1d2b8130b23..324bea905dc mode 000000,100644..100644 --- a/arch/parisc/include/asm/statfs.h +++ b/arch/parisc/include/asm/statfs.h @@@ -1,0 -1,58 +1,7 @@@ + #ifndef _PARISC_STATFS_H + #define _PARISC_STATFS_H + -#ifndef __KERNEL_STRICT_NAMES - -#include - -typedef __kernel_fsid_t fsid_t; - -#endif - -/* - * It appears that PARISC could be 64 _or_ 32 bit. - * 64-bit fields must be explicitly 64-bit in statfs64. - */ -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_frsize; - long f_spare[5]; -}; - -struct statfs64 { - long f_type; - long f_bsize; - __u64 f_blocks; - __u64 f_bfree; - __u64 f_bavail; - __u64 f_files; - __u64 f_ffree; - __kernel_fsid_t f_fsid; - long f_namelen; - long f_frsize; - long f_spare[5]; -}; - -struct compat_statfs64 { - __u32 f_type; - __u32 f_bsize; - __u64 f_blocks; - __u64 f_bfree; - __u64 f_bavail; - __u64 f_files; - __u64 f_ffree; - __kernel_fsid_t f_fsid; - __u32 f_namelen; - __u32 f_frsize; - __u32 f_spare[5]; -}; ++#define __statfs_word long ++#include + + #endif diff --cc arch/parisc/include/asm/thread_info.h index 00000000000,9f812741c35..0407959da48 mode 000000,100644..100644 --- a/arch/parisc/include/asm/thread_info.h +++ b/arch/parisc/include/asm/thread_info.h @@@ -1,0 -1,74 +1,76 @@@ + #ifndef _ASM_PARISC_THREAD_INFO_H + #define _ASM_PARISC_THREAD_INFO_H + + #ifdef __KERNEL__ + + #ifndef __ASSEMBLY__ + #include + + struct thread_info { + struct task_struct *task; /* main task structure */ + struct exec_domain *exec_domain;/* execution domain */ + unsigned long flags; /* thread_info flags (see TIF_*) */ + mm_segment_t addr_limit; /* user-level address space limit */ + __u32 cpu; /* current CPU */ + int preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */ + struct restart_block restart_block; + }; + + #define INIT_THREAD_INFO(tsk) \ + { \ + .task = &tsk, \ + .exec_domain = &default_exec_domain, \ + .flags = 0, \ + .cpu = 0, \ + .addr_limit = KERNEL_DS, \ + .preempt_count = 1, \ + .restart_block = { \ + .fn = do_no_restart_syscall \ + } \ + } + + #define init_thread_info (init_thread_union.thread_info) + #define init_stack (init_thread_union.stack) + + /* thread information allocation */ + + #define THREAD_SIZE_ORDER 2 + /* Be sure to hunt all references to this down when you change the size of + * the kernel stack */ + #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER) + #define THREAD_SHIFT (PAGE_SHIFT + THREAD_SIZE_ORDER) + + /* how to get the thread information struct from C */ + #define current_thread_info() ((struct thread_info *)mfctl(30)) + + #endif /* !__ASSEMBLY */ + + #define PREEMPT_ACTIVE_BIT 28 + #define PREEMPT_ACTIVE (1 << PREEMPT_ACTIVE_BIT) + + /* + * thread information flags + */ + #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ + #define TIF_SIGPENDING 1 /* signal pending */ + #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ + #define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling TIF_NEED_RESCHED */ + #define TIF_32BIT 4 /* 32 bit binary */ + #define TIF_MEMDIE 5 + #define TIF_RESTORE_SIGMASK 6 /* restore saved signal mask */ ++#define TIF_FREEZE 7 /* is freezing for suspend */ + + #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) + #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) + #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) + #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) + #define _TIF_32BIT (1 << TIF_32BIT) + #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) ++#define _TIF_FREEZE (1 << TIF_FREEZE) + + #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | \ + _TIF_NEED_RESCHED | _TIF_RESTORE_SIGMASK) + + #endif /* __KERNEL__ */ + + #endif /* _ASM_PARISC_THREAD_INFO_H */ diff --cc drivers/rtc/Kconfig index f660ef3e5b2,30d40fe194a..814f49fde53 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@@ -610,9 -575,17 +610,17 @@@ config RTC_DRV_RS5C31 help If you say yes here you get support for the Ricoh RS5C313 RTC chips. + config RTC_DRV_PARISC + tristate "PA-RISC firmware RTC support" + depends on PARISC + help + Say Y or M here to enable RTC support on PA-RISC systems using + firmware calls. If you do not know what you are doing, you should + just say Y. + config RTC_DRV_PPC tristate "PowerPC machine dependent RTC support" - depends on PPC_MERGE + depends on PPC help The PowerPC kernel has machine-specific functions for accessing the RTC. This exposes that functionality through the generic RTC