diff options
Diffstat (limited to 'include/asm-frv')
| -rw-r--r-- | include/asm-frv/Kbuild | 1 | ||||
| -rw-r--r-- | include/asm-frv/bitops.h | 96 | ||||
| -rw-r--r-- | include/asm-frv/cpu-irqs.h | 54 | ||||
| -rw-r--r-- | include/asm-frv/elf.h | 6 | ||||
| -rw-r--r-- | include/asm-frv/gdb-stub.h | 22 | ||||
| -rw-r--r-- | include/asm-frv/hardirq.h | 5 | ||||
| -rw-r--r-- | include/asm-frv/irq-routing.h | 70 | ||||
| -rw-r--r-- | include/asm-frv/irq.h | 26 | ||||
| -rw-r--r-- | include/asm-frv/mb93091-fpga-irqs.h | 6 | ||||
| -rw-r--r-- | include/asm-frv/mb93093-fpga-irqs.h | 6 | ||||
| -rw-r--r-- | include/asm-frv/mb93493-irqs.h | 6 | ||||
| -rw-r--r-- | include/asm-frv/mb93493-regs.h | 2 | ||||
| -rw-r--r-- | include/asm-frv/pgtable.h | 8 | ||||
| -rw-r--r-- | include/asm-frv/processor.h | 3 | ||||
| -rw-r--r-- | include/asm-frv/ptrace.h | 12 | ||||
| -rw-r--r-- | include/asm-frv/registers.h | 97 | ||||
| -rw-r--r-- | include/asm-frv/signal.h | 2 | ||||
| -rw-r--r-- | include/asm-frv/socket.h | 1 | ||||
| -rw-r--r-- | include/asm-frv/system.h | 1 | ||||
| -rw-r--r-- | include/asm-frv/thread_info.h | 24 | ||||
| -rw-r--r-- | include/asm-frv/unistd.h | 3 |
21 files changed, 211 insertions, 240 deletions
diff --git a/include/asm-frv/Kbuild b/include/asm-frv/Kbuild new file mode 100644 index 000000000000..c68e1680da01 --- /dev/null +++ b/include/asm-frv/Kbuild | |||
| @@ -0,0 +1 @@ | |||
| include include/asm-generic/Kbuild.asm | |||
diff --git a/include/asm-frv/bitops.h b/include/asm-frv/bitops.h index 980ae1b0cd28..1f70d47148bd 100644 --- a/include/asm-frv/bitops.h +++ b/include/asm-frv/bitops.h | |||
| @@ -157,23 +157,105 @@ static inline int __test_bit(int nr, const volatile void * addr) | |||
| 157 | __constant_test_bit((nr),(addr)) : \ | 157 | __constant_test_bit((nr),(addr)) : \ |
| 158 | __test_bit((nr),(addr))) | 158 | __test_bit((nr),(addr))) |
| 159 | 159 | ||
| 160 | #include <asm-generic/bitops/ffs.h> | ||
| 161 | #include <asm-generic/bitops/__ffs.h> | ||
| 162 | #include <asm-generic/bitops/find.h> | 160 | #include <asm-generic/bitops/find.h> |
| 163 | 161 | ||
| 164 | /* | 162 | /** |
| 165 | * fls: find last bit set. | 163 | * fls - find last bit set |
| 164 | * @x: the word to search | ||
| 165 | * | ||
| 166 | * This is defined the same way as ffs: | ||
| 167 | * - return 32..1 to indicate bit 31..0 most significant bit set | ||
| 168 | * - return 0 to indicate no bits set | ||
| 166 | */ | 169 | */ |
| 167 | #define fls(x) \ | 170 | #define fls(x) \ |
| 168 | ({ \ | 171 | ({ \ |
| 169 | int bit; \ | 172 | int bit; \ |
| 170 | \ | 173 | \ |
| 171 | asm("scan %1,gr0,%0" : "=r"(bit) : "r"(x)); \ | 174 | asm(" subcc %1,gr0,gr0,icc0 \n" \ |
| 175 | " ckne icc0,cc4 \n" \ | ||
| 176 | " cscan.p %1,gr0,%0 ,cc4,#1 \n" \ | ||
| 177 | " csub %0,%0,%0 ,cc4,#0 \n" \ | ||
| 178 | " csub %2,%0,%0 ,cc4,#1 \n" \ | ||
| 179 | : "=&r"(bit) \ | ||
| 180 | : "r"(x), "r"(32) \ | ||
| 181 | : "icc0", "cc4" \ | ||
| 182 | ); \ | ||
| 172 | \ | 183 | \ |
| 173 | bit ? 33 - bit : bit; \ | 184 | bit; \ |
| 174 | }) | 185 | }) |
| 175 | 186 | ||
| 176 | #include <asm-generic/bitops/fls64.h> | 187 | /** |
| 188 | * fls64 - find last bit set in a 64-bit value | ||
| 189 | * @n: the value to search | ||
| 190 | * | ||
| 191 | * This is defined the same way as ffs: | ||
| 192 | * - return 64..1 to indicate bit 63..0 most significant bit set | ||
| 193 | * - return 0 to indicate no bits set | ||
| 194 | */ | ||
| 195 | static inline __attribute__((const)) | ||
| 196 | int fls64(u64 n) | ||
| 197 | { | ||
| 198 | union { | ||
| 199 | u64 ll; | ||
| 200 | struct { u32 h, l; }; | ||
| 201 | } _; | ||
| 202 | int bit, x, y; | ||
| 203 | |||
| 204 | _.ll = n; | ||
| 205 | |||
| 206 | asm(" subcc.p %3,gr0,gr0,icc0 \n" | ||
| 207 | " subcc %4,gr0,gr0,icc1 \n" | ||
| 208 | " ckne icc0,cc4 \n" | ||
| 209 | " ckne icc1,cc5 \n" | ||
| 210 | " norcr cc4,cc5,cc6 \n" | ||
| 211 | " csub.p %0,%0,%0 ,cc6,1 \n" | ||
| 212 | " orcr cc5,cc4,cc4 \n" | ||
| 213 | " andcr cc4,cc5,cc4 \n" | ||
| 214 | " cscan.p %3,gr0,%0 ,cc4,0 \n" | ||
| 215 | " setlos #64,%1 \n" | ||
| 216 | " cscan.p %4,gr0,%0 ,cc4,1 \n" | ||
| 217 | " setlos #32,%2 \n" | ||
| 218 | " csub.p %1,%0,%0 ,cc4,0 \n" | ||
| 219 | " csub %2,%0,%0 ,cc4,1 \n" | ||
| 220 | : "=&r"(bit), "=r"(x), "=r"(y) | ||
| 221 | : "0r"(_.h), "r"(_.l) | ||
| 222 | : "icc0", "icc1", "cc4", "cc5", "cc6" | ||
| 223 | ); | ||
| 224 | return bit; | ||
| 225 | |||
| 226 | } | ||
| 227 | |||
| 228 | /** | ||
| 229 | * ffs - find first bit set | ||
| 230 | * @x: the word to search | ||
| 231 | * | ||
| 232 | * - return 32..1 to indicate bit 31..0 most least significant bit set | ||
| 233 | * - return 0 to indicate no bits set | ||
| 234 | */ | ||
| 235 | static inline __attribute__((const)) | ||
| 236 | int ffs(int x) | ||
| 237 | { | ||
| 238 | /* Note: (x & -x) gives us a mask that is the least significant | ||
| 239 | * (rightmost) 1-bit of the value in x. | ||
| 240 | */ | ||
| 241 | return fls(x & -x); | ||
| 242 | } | ||
| 243 | |||
| 244 | /** | ||
| 245 | * __ffs - find first bit set | ||
| 246 | * @x: the word to search | ||
| 247 | * | ||
| 248 | * - return 31..0 to indicate bit 31..0 most least significant bit set | ||
| 249 | * - if no bits are set in x, the result is undefined | ||
| 250 | */ | ||
| 251 | static inline __attribute__((const)) | ||
| 252 | int __ffs(unsigned long x) | ||
| 253 | { | ||
| 254 | int bit; | ||
| 255 | asm("scan %1,gr0,%0" : "=r"(bit) : "r"(x & -x)); | ||
| 256 | return 31 - bit; | ||
| 257 | } | ||
| 258 | |||
| 177 | #include <asm-generic/bitops/sched.h> | 259 | #include <asm-generic/bitops/sched.h> |
| 178 | #include <asm-generic/bitops/hweight.h> | 260 | #include <asm-generic/bitops/hweight.h> |
| 179 | 261 | ||
diff --git a/include/asm-frv/cpu-irqs.h b/include/asm-frv/cpu-irqs.h index 5cd691e1f8c4..478f3498fcfe 100644 --- a/include/asm-frv/cpu-irqs.h +++ b/include/asm-frv/cpu-irqs.h | |||
| @@ -14,36 +14,6 @@ | |||
| 14 | 14 | ||
| 15 | #ifndef __ASSEMBLY__ | 15 | #ifndef __ASSEMBLY__ |
| 16 | 16 | ||
| 17 | #include <asm/irq-routing.h> | ||
| 18 | |||
| 19 | #define IRQ_BASE_CPU (NR_IRQ_ACTIONS_PER_GROUP * 0) | ||
| 20 | |||
| 21 | /* IRQ IDs presented to drivers */ | ||
| 22 | enum { | ||
| 23 | IRQ_CPU__UNUSED = IRQ_BASE_CPU, | ||
| 24 | IRQ_CPU_UART0, | ||
| 25 | IRQ_CPU_UART1, | ||
| 26 | IRQ_CPU_TIMER0, | ||
| 27 | IRQ_CPU_TIMER1, | ||
| 28 | IRQ_CPU_TIMER2, | ||
| 29 | IRQ_CPU_DMA0, | ||
| 30 | IRQ_CPU_DMA1, | ||
| 31 | IRQ_CPU_DMA2, | ||
| 32 | IRQ_CPU_DMA3, | ||
| 33 | IRQ_CPU_DMA4, | ||
| 34 | IRQ_CPU_DMA5, | ||
| 35 | IRQ_CPU_DMA6, | ||
| 36 | IRQ_CPU_DMA7, | ||
| 37 | IRQ_CPU_EXTERNAL0, | ||
| 38 | IRQ_CPU_EXTERNAL1, | ||
| 39 | IRQ_CPU_EXTERNAL2, | ||
| 40 | IRQ_CPU_EXTERNAL3, | ||
| 41 | IRQ_CPU_EXTERNAL4, | ||
| 42 | IRQ_CPU_EXTERNAL5, | ||
| 43 | IRQ_CPU_EXTERNAL6, | ||
| 44 | IRQ_CPU_EXTERNAL7, | ||
| 45 | }; | ||
| 46 | |||
| 47 | /* IRQ to level mappings */ | 17 | /* IRQ to level mappings */ |
| 48 | #define IRQ_GDBSTUB_LEVEL 15 | 18 | #define IRQ_GDBSTUB_LEVEL 15 |
| 49 | #define IRQ_UART_LEVEL 13 | 19 | #define IRQ_UART_LEVEL 13 |
| @@ -82,6 +52,30 @@ enum { | |||
| 82 | #define IRQ_XIRQ6_LEVEL 7 | 52 | #define IRQ_XIRQ6_LEVEL 7 |
| 83 | #define IRQ_XIRQ7_LEVEL 8 | 53 | #define IRQ_XIRQ7_LEVEL 8 |
| 84 | 54 | ||
| 55 | /* IRQ IDs presented to drivers */ | ||
| 56 | #define IRQ_CPU__UNUSED IRQ_BASE_CPU | ||
| 57 | #define IRQ_CPU_UART0 (IRQ_BASE_CPU + IRQ_UART0_LEVEL) | ||
| 58 | #define IRQ_CPU_UART1 (IRQ_BASE_CPU + IRQ_UART1_LEVEL) | ||
| 59 | #define IRQ_CPU_TIMER0 (IRQ_BASE_CPU + IRQ_TIMER0_LEVEL) | ||
| 60 | #define IRQ_CPU_TIMER1 (IRQ_BASE_CPU + IRQ_TIMER1_LEVEL) | ||
| 61 | #define IRQ_CPU_TIMER2 (IRQ_BASE_CPU + IRQ_TIMER2_LEVEL) | ||
| 62 | #define IRQ_CPU_DMA0 (IRQ_BASE_CPU + IRQ_DMA0_LEVEL) | ||
| 63 | #define IRQ_CPU_DMA1 (IRQ_BASE_CPU + IRQ_DMA1_LEVEL) | ||
| 64 | #define IRQ_CPU_DMA2 (IRQ_BASE_CPU + IRQ_DMA2_LEVEL) | ||
| 65 | #define IRQ_CPU_DMA3 (IRQ_BASE_CPU + IRQ_DMA3_LEVEL) | ||
| 66 | #define IRQ_CPU_DMA4 (IRQ_BASE_CPU + IRQ_DMA4_LEVEL) | ||
| 67 | #define IRQ_CPU_DMA5 (IRQ_BASE_CPU + IRQ_DMA5_LEVEL) | ||
| 68 | #define IRQ_CPU_DMA6 (IRQ_BASE_CPU + IRQ_DMA6_LEVEL) | ||
| 69 | #define IRQ_CPU_DMA7 (IRQ_BASE_CPU + IRQ_DMA7_LEVEL) | ||
| 70 | #define IRQ_CPU_EXTERNAL0 (IRQ_BASE_CPU + IRQ_XIRQ0_LEVEL) | ||
| 71 | #define IRQ_CPU_EXTERNAL1 (IRQ_BASE_CPU + IRQ_XIRQ1_LEVEL) | ||
| 72 | #define IRQ_CPU_EXTERNAL2 (IRQ_BASE_CPU + IRQ_XIRQ2_LEVEL) | ||
| 73 | #define IRQ_CPU_EXTERNAL3 (IRQ_BASE_CPU + IRQ_XIRQ3_LEVEL) | ||
| 74 | #define IRQ_CPU_EXTERNAL4 (IRQ_BASE_CPU + IRQ_XIRQ4_LEVEL) | ||
| 75 | #define IRQ_CPU_EXTERNAL5 (IRQ_BASE_CPU + IRQ_XIRQ5_LEVEL) | ||
| 76 | #define IRQ_CPU_EXTERNAL6 (IRQ_BASE_CPU + IRQ_XIRQ6_LEVEL) | ||
| 77 | #define IRQ_CPU_EXTERNAL7 (IRQ_BASE_CPU + IRQ_XIRQ7_LEVEL) | ||
| 78 | |||
| 85 | #endif /* !__ASSEMBLY__ */ | 79 | #endif /* !__ASSEMBLY__ */ |
| 86 | 80 | ||
| 87 | #endif /* _ASM_CPU_IRQS_H */ | 81 | #endif /* _ASM_CPU_IRQS_H */ |
diff --git a/include/asm-frv/elf.h b/include/asm-frv/elf.h index 38656da00e40..7df58a3e6e4a 100644 --- a/include/asm-frv/elf.h +++ b/include/asm-frv/elf.h | |||
| @@ -64,7 +64,7 @@ typedef unsigned long elf_greg_t; | |||
| 64 | #define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t)) | 64 | #define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t)) |
| 65 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | 65 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; |
| 66 | 66 | ||
| 67 | typedef struct fpmedia_struct elf_fpregset_t; | 67 | typedef struct user_fpmedia_regs elf_fpregset_t; |
| 68 | 68 | ||
| 69 | /* | 69 | /* |
| 70 | * This is used to ensure we don't load something for the wrong architecture. | 70 | * This is used to ensure we don't load something for the wrong architecture. |
| @@ -116,6 +116,7 @@ do { \ | |||
| 116 | } while(0) | 116 | } while(0) |
| 117 | 117 | ||
| 118 | #define USE_ELF_CORE_DUMP | 118 | #define USE_ELF_CORE_DUMP |
| 119 | #define ELF_FDPIC_CORE_EFLAGS EF_FRV_FDPIC | ||
| 119 | #define ELF_EXEC_PAGESIZE 16384 | 120 | #define ELF_EXEC_PAGESIZE 16384 |
| 120 | 121 | ||
| 121 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical | 122 | /* This is the location that an ET_DYN program is loaded if exec'ed. Typical |
| @@ -125,9 +126,6 @@ do { \ | |||
| 125 | 126 | ||
| 126 | #define ELF_ET_DYN_BASE 0x08000000UL | 127 | #define ELF_ET_DYN_BASE 0x08000000UL |
| 127 | 128 | ||
| 128 | #define ELF_CORE_COPY_REGS(pr_reg, regs) \ | ||
| 129 | memcpy(&pr_reg[0], ®s->sp, 31 * sizeof(uint32_t)); | ||
| 130 | |||
| 131 | /* This yields a mask that user programs can use to figure out what | 129 | /* This yields a mask that user programs can use to figure out what |
| 132 | instruction set this cpu supports. */ | 130 | instruction set this cpu supports. */ |
| 133 | 131 | ||
diff --git a/include/asm-frv/gdb-stub.h b/include/asm-frv/gdb-stub.h index c58479a4be99..24f9738670bd 100644 --- a/include/asm-frv/gdb-stub.h +++ b/include/asm-frv/gdb-stub.h | |||
| @@ -89,6 +89,7 @@ extern void gdbstub_do_rx(void); | |||
| 89 | 89 | ||
| 90 | extern asmlinkage void __debug_stub_init_break(void); | 90 | extern asmlinkage void __debug_stub_init_break(void); |
| 91 | extern asmlinkage void __break_hijack_kernel_event(void); | 91 | extern asmlinkage void __break_hijack_kernel_event(void); |
| 92 | extern asmlinkage void __break_hijack_kernel_event_breaks_here(void); | ||
| 92 | extern asmlinkage void start_kernel(void); | 93 | extern asmlinkage void start_kernel(void); |
| 93 | 94 | ||
| 94 | extern asmlinkage void gdbstub_rx_handler(void); | 95 | extern asmlinkage void gdbstub_rx_handler(void); |
| @@ -114,5 +115,26 @@ extern void console_set_baud(unsigned baud); | |||
| 114 | #define gdbstub_proto(FMT,...) ({ 0; }) | 115 | #define gdbstub_proto(FMT,...) ({ 0; }) |
| 115 | #endif | 116 | #endif |
| 116 | 117 | ||
| 118 | /* | ||
| 119 | * we dedicate GR31 to keeping a pointer to the gdbstub exception frame | ||
| 120 | * - gr31 is destroyed on entry to the gdbstub if !MMU | ||
| 121 | * - gr31 is saved in scr3 on entry to the gdbstub if in !MMU | ||
| 122 | */ | ||
| 123 | register struct frv_frame0 *__debug_frame0 asm("gr31"); | ||
| 124 | |||
| 125 | #define __debug_frame (&__debug_frame0->regs) | ||
| 126 | #define __debug_user_context (&__debug_frame0->uc) | ||
| 127 | #define __debug_regs (&__debug_frame0->debug) | ||
| 128 | #define __debug_reg(X) ((unsigned long *) ((unsigned long) &__debug_frame0 + (X))) | ||
| 129 | |||
| 130 | struct frv_debug_status { | ||
| 131 | unsigned long bpsr; | ||
| 132 | unsigned long dcr; | ||
| 133 | unsigned long brr; | ||
| 134 | unsigned long nmar; | ||
| 135 | }; | ||
| 136 | |||
| 137 | extern struct frv_debug_status __debug_status; | ||
| 138 | |||
| 117 | #endif /* _LANGUAGE_ASSEMBLY */ | 139 | #endif /* _LANGUAGE_ASSEMBLY */ |
| 118 | #endif /* __ASM_GDB_STUB_H */ | 140 | #endif /* __ASM_GDB_STUB_H */ |
diff --git a/include/asm-frv/hardirq.h b/include/asm-frv/hardirq.h index 7581b5a7559a..fc47515822a2 100644 --- a/include/asm-frv/hardirq.h +++ b/include/asm-frv/hardirq.h | |||
| @@ -26,5 +26,10 @@ typedef struct { | |||
| 26 | #error SMP not available on FR-V | 26 | #error SMP not available on FR-V |
| 27 | #endif /* CONFIG_SMP */ | 27 | #endif /* CONFIG_SMP */ |
| 28 | 28 | ||
| 29 | extern atomic_t irq_err_count; | ||
| 30 | static inline void ack_bad_irq(int irq) | ||
| 31 | { | ||
| 32 | atomic_inc(&irq_err_count); | ||
| 33 | } | ||
| 29 | 34 | ||
| 30 | #endif | 35 | #endif |
diff --git a/include/asm-frv/irq-routing.h b/include/asm-frv/irq-routing.h deleted file mode 100644 index 686fb2b39d6a..000000000000 --- a/include/asm-frv/irq-routing.h +++ /dev/null | |||
| @@ -1,70 +0,0 @@ | |||
| 1 | /* irq-routing.h: multiplexed IRQ routing | ||
| 2 | * | ||
| 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. | ||
| 4 | * Written by David Howells (dhowells@redhat.com) | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _ASM_IRQ_ROUTING_H | ||
| 13 | #define _ASM_IRQ_ROUTING_H | ||
| 14 | |||
| 15 | #ifndef __ASSEMBLY__ | ||
| 16 | |||
| 17 | #include <linux/spinlock.h> | ||
| 18 | #include <asm/irq.h> | ||
| 19 | |||
| 20 | struct irq_source; | ||
| 21 | struct irq_level; | ||
| 22 | |||
| 23 | /* | ||
| 24 | * IRQ action distribution sets | ||
| 25 | */ | ||
| 26 | struct irq_group { | ||
| 27 | int first_irq; /* first IRQ distributed here */ | ||
| 28 | void (*control)(struct irq_group *group, int index, int on); | ||
| 29 | |||
| 30 | struct irqaction *actions[NR_IRQ_ACTIONS_PER_GROUP]; /* IRQ action chains */ | ||
| 31 | struct irq_source *sources[NR_IRQ_ACTIONS_PER_GROUP]; /* IRQ sources */ | ||
| 32 | int disable_cnt[NR_IRQ_ACTIONS_PER_GROUP]; /* disable counts */ | ||
| 33 | }; | ||
| 34 | |||
| 35 | /* | ||
| 36 | * IRQ source manager | ||
| 37 | */ | ||
| 38 | struct irq_source { | ||
| 39 | struct irq_source *next; | ||
| 40 | struct irq_level *level; | ||
| 41 | const char *muxname; | ||
| 42 | volatile void __iomem *muxdata; | ||
| 43 | unsigned long irqmask; | ||
| 44 | |||
| 45 | void (*doirq)(struct irq_source *source); | ||
| 46 | }; | ||
| 47 | |||
| 48 | /* | ||
| 49 | * IRQ level management (per CPU IRQ priority / entry vector) | ||
| 50 | */ | ||
| 51 | struct irq_level { | ||
| 52 | int usage; | ||
| 53 | int disable_count; | ||
| 54 | unsigned long flags; /* current SA_INTERRUPT and SA_SHIRQ settings */ | ||
| 55 | spinlock_t lock; | ||
| 56 | struct irq_source *sources; | ||
| 57 | }; | ||
| 58 | |||
| 59 | extern struct irq_level frv_irq_levels[16]; | ||
| 60 | extern struct irq_group *irq_groups[NR_IRQ_GROUPS]; | ||
| 61 | |||
| 62 | extern void frv_irq_route(struct irq_source *source, int irqlevel); | ||
| 63 | extern void frv_irq_route_external(struct irq_source *source, int irq); | ||
| 64 | extern void frv_irq_set_group(struct irq_group *group); | ||
| 65 | extern void distribute_irqs(struct irq_group *group, unsigned long irqmask); | ||
| 66 | extern void route_cpu_irqs(void); | ||
| 67 | |||
| 68 | #endif /* !__ASSEMBLY__ */ | ||
| 69 | |||
| 70 | #endif /* _ASM_IRQ_ROUTING_H */ | ||
diff --git a/include/asm-frv/irq.h b/include/asm-frv/irq.h index 58b619215a50..8fefd6b827aa 100644 --- a/include/asm-frv/irq.h +++ b/include/asm-frv/irq.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* irq.h: FRV IRQ definitions | 1 | /* irq.h: FRV IRQ definitions |
| 2 | * | 2 | * |
| 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. |
| 4 | * Written by David Howells (dhowells@redhat.com) | 4 | * Written by David Howells (dhowells@redhat.com) |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| @@ -12,32 +12,22 @@ | |||
| 12 | #ifndef _ASM_IRQ_H_ | 12 | #ifndef _ASM_IRQ_H_ |
| 13 | #define _ASM_IRQ_H_ | 13 | #define _ASM_IRQ_H_ |
| 14 | 14 | ||
| 15 | |||
| 16 | /* | ||
| 17 | * the system has an on-CPU PIC and another PIC on the FPGA and other PICs on other peripherals, | ||
| 18 | * so we do some routing in irq-routing.[ch] to reduce the number of false-positives seen by | ||
| 19 | * drivers | ||
| 20 | */ | ||
| 21 | |||
| 22 | /* this number is used when no interrupt has been assigned */ | 15 | /* this number is used when no interrupt has been assigned */ |
| 23 | #define NO_IRQ (-1) | 16 | #define NO_IRQ (-1) |
| 24 | 17 | ||
| 25 | #define NR_IRQ_LOG2_ACTIONS_PER_GROUP 5 | 18 | #define NR_IRQS 48 |
| 26 | #define NR_IRQ_ACTIONS_PER_GROUP (1 << NR_IRQ_LOG2_ACTIONS_PER_GROUP) | 19 | #define IRQ_BASE_CPU (0 * 16) |
| 27 | #define NR_IRQ_GROUPS 4 | 20 | #define IRQ_BASE_FPGA (1 * 16) |
| 28 | #define NR_IRQS (NR_IRQ_ACTIONS_PER_GROUP * NR_IRQ_GROUPS) | 21 | #define IRQ_BASE_MB93493 (2 * 16) |
| 29 | 22 | ||
| 30 | /* probe returns a 32-bit IRQ mask:-/ */ | 23 | /* probe returns a 32-bit IRQ mask:-/ */ |
| 31 | #define MIN_PROBE_IRQ (NR_IRQS - 32) | 24 | #define MIN_PROBE_IRQ (NR_IRQS - 32) |
| 32 | 25 | ||
| 26 | #ifndef __ASSEMBLY__ | ||
| 33 | static inline int irq_canonicalize(int irq) | 27 | static inline int irq_canonicalize(int irq) |
| 34 | { | 28 | { |
| 35 | return irq; | 29 | return irq; |
| 36 | } | 30 | } |
| 37 | 31 | #endif | |
| 38 | extern void disable_irq_nosync(unsigned int irq); | ||
| 39 | extern void disable_irq(unsigned int irq); | ||
| 40 | extern void enable_irq(unsigned int irq); | ||
| 41 | |||
| 42 | 32 | ||
| 43 | #endif /* _ASM_IRQ_H_ */ | 33 | #endif /* _ASM_IRQ_H_ */ |
diff --git a/include/asm-frv/mb93091-fpga-irqs.h b/include/asm-frv/mb93091-fpga-irqs.h index 341bfc52a0eb..19778c5ba9d6 100644 --- a/include/asm-frv/mb93091-fpga-irqs.h +++ b/include/asm-frv/mb93091-fpga-irqs.h | |||
| @@ -12,11 +12,9 @@ | |||
| 12 | #ifndef _ASM_MB93091_FPGA_IRQS_H | 12 | #ifndef _ASM_MB93091_FPGA_IRQS_H |
| 13 | #define _ASM_MB93091_FPGA_IRQS_H | 13 | #define _ASM_MB93091_FPGA_IRQS_H |
| 14 | 14 | ||
| 15 | #ifndef __ASSEMBLY__ | 15 | #include <asm/irq.h> |
| 16 | |||
| 17 | #include <asm/irq-routing.h> | ||
| 18 | 16 | ||
| 19 | #define IRQ_BASE_FPGA (NR_IRQ_ACTIONS_PER_GROUP * 1) | 17 | #ifndef __ASSEMBLY__ |
| 20 | 18 | ||
| 21 | /* IRQ IDs presented to drivers */ | 19 | /* IRQ IDs presented to drivers */ |
| 22 | enum { | 20 | enum { |
diff --git a/include/asm-frv/mb93093-fpga-irqs.h b/include/asm-frv/mb93093-fpga-irqs.h index 1e0f11c2fcdb..590266b1a6d3 100644 --- a/include/asm-frv/mb93093-fpga-irqs.h +++ b/include/asm-frv/mb93093-fpga-irqs.h | |||
| @@ -12,11 +12,9 @@ | |||
| 12 | #ifndef _ASM_MB93093_FPGA_IRQS_H | 12 | #ifndef _ASM_MB93093_FPGA_IRQS_H |
| 13 | #define _ASM_MB93093_FPGA_IRQS_H | 13 | #define _ASM_MB93093_FPGA_IRQS_H |
| 14 | 14 | ||
| 15 | #ifndef __ASSEMBLY__ | 15 | #include <asm/irq.h> |
| 16 | |||
| 17 | #include <asm/irq-routing.h> | ||
| 18 | 16 | ||
| 19 | #define IRQ_BASE_FPGA (NR_IRQ_ACTIONS_PER_GROUP * 1) | 17 | #ifndef __ASSEMBLY__ |
| 20 | 18 | ||
| 21 | /* IRQ IDs presented to drivers */ | 19 | /* IRQ IDs presented to drivers */ |
| 22 | enum { | 20 | enum { |
diff --git a/include/asm-frv/mb93493-irqs.h b/include/asm-frv/mb93493-irqs.h index 15096e731325..82c7aeddd333 100644 --- a/include/asm-frv/mb93493-irqs.h +++ b/include/asm-frv/mb93493-irqs.h | |||
| @@ -12,11 +12,9 @@ | |||
| 12 | #ifndef _ASM_MB93493_IRQS_H | 12 | #ifndef _ASM_MB93493_IRQS_H |
| 13 | #define _ASM_MB93493_IRQS_H | 13 | #define _ASM_MB93493_IRQS_H |
| 14 | 14 | ||
| 15 | #ifndef __ASSEMBLY__ | 15 | #include <asm/irq.h> |
| 16 | |||
| 17 | #include <asm/irq-routing.h> | ||
| 18 | 16 | ||
| 19 | #define IRQ_BASE_MB93493 (NR_IRQ_ACTIONS_PER_GROUP * 2) | 17 | #ifndef __ASSEMBLY__ |
| 20 | 18 | ||
| 21 | /* IRQ IDs presented to drivers */ | 19 | /* IRQ IDs presented to drivers */ |
| 22 | enum { | 20 | enum { |
diff --git a/include/asm-frv/mb93493-regs.h b/include/asm-frv/mb93493-regs.h index c54aa9d14468..8a1f6aac8cf1 100644 --- a/include/asm-frv/mb93493-regs.h +++ b/include/asm-frv/mb93493-regs.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <asm/mb-regs.h> | 15 | #include <asm/mb-regs.h> |
| 16 | #include <asm/mb93493-irqs.h> | 16 | #include <asm/mb93493-irqs.h> |
| 17 | 17 | ||
| 18 | #define __addr_MB93493(X) ((volatile unsigned long *)(__region_CS3 + (X))) | ||
| 18 | #define __get_MB93493(X) ({ *(volatile unsigned long *)(__region_CS3 + (X)); }) | 19 | #define __get_MB93493(X) ({ *(volatile unsigned long *)(__region_CS3 + (X)); }) |
| 19 | 20 | ||
| 20 | #define __set_MB93493(X,V) \ | 21 | #define __set_MB93493(X,V) \ |
| @@ -26,6 +27,7 @@ do { \ | |||
| 26 | #define __set_MB93493_STSR(X,V) __set_MB93493(0x3c0 + (X) * 4, (V)) | 27 | #define __set_MB93493_STSR(X,V) __set_MB93493(0x3c0 + (X) * 4, (V)) |
| 27 | #define MB93493_STSR_EN | 28 | #define MB93493_STSR_EN |
| 28 | 29 | ||
| 30 | #define __addr_MB93493_IQSR(X) __addr_MB93493(0x3d0 + (X) * 4) | ||
| 29 | #define __get_MB93493_IQSR(X) __get_MB93493(0x3d0 + (X) * 4) | 31 | #define __get_MB93493_IQSR(X) __get_MB93493(0x3d0 + (X) * 4) |
| 30 | #define __set_MB93493_IQSR(X,V) __set_MB93493(0x3d0 + (X) * 4, (V)) | 32 | #define __set_MB93493_IQSR(X,V) __set_MB93493(0x3d0 + (X) * 4, (V)) |
| 31 | 33 | ||
diff --git a/include/asm-frv/pgtable.h b/include/asm-frv/pgtable.h index 7af7485e889e..2fb3c6f05e03 100644 --- a/include/asm-frv/pgtable.h +++ b/include/asm-frv/pgtable.h | |||
| @@ -217,7 +217,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) | |||
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | #define pgd_page(pgd) (pud_page((pud_t){ pgd })) | 219 | #define pgd_page(pgd) (pud_page((pud_t){ pgd })) |
| 220 | #define pgd_page_kernel(pgd) (pud_page_kernel((pud_t){ pgd })) | 220 | #define pgd_page_vaddr(pgd) (pud_page_vaddr((pud_t){ pgd })) |
| 221 | 221 | ||
| 222 | /* | 222 | /* |
| 223 | * allocating and freeing a pud is trivial: the 1-entry pud is | 223 | * allocating and freeing a pud is trivial: the 1-entry pud is |
| @@ -246,7 +246,7 @@ static inline void pud_clear(pud_t *pud) { } | |||
| 246 | #define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval }) | 246 | #define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval }) |
| 247 | 247 | ||
| 248 | #define pud_page(pud) (pmd_page((pmd_t){ pud })) | 248 | #define pud_page(pud) (pmd_page((pmd_t){ pud })) |
| 249 | #define pud_page_kernel(pud) (pmd_page_kernel((pmd_t){ pud })) | 249 | #define pud_page_vaddr(pud) (pmd_page_vaddr((pmd_t){ pud })) |
| 250 | 250 | ||
| 251 | /* | 251 | /* |
| 252 | * (pmds are folded into pgds so this doesn't get actually called, | 252 | * (pmds are folded into pgds so this doesn't get actually called, |
| @@ -362,7 +362,7 @@ static inline pmd_t *pmd_offset(pud_t *dir, unsigned long address) | |||
| 362 | #define pmd_bad(x) (pmd_val(x) & xAMPRx_SS) | 362 | #define pmd_bad(x) (pmd_val(x) & xAMPRx_SS) |
| 363 | #define pmd_clear(xp) do { __set_pmd(xp, 0); } while(0) | 363 | #define pmd_clear(xp) do { __set_pmd(xp, 0); } while(0) |
| 364 | 364 | ||
| 365 | #define pmd_page_kernel(pmd) \ | 365 | #define pmd_page_vaddr(pmd) \ |
| 366 | ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) | 366 | ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) |
| 367 | 367 | ||
| 368 | #ifndef CONFIG_DISCONTIGMEM | 368 | #ifndef CONFIG_DISCONTIGMEM |
| @@ -458,7 +458,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
| 458 | #define pte_index(address) \ | 458 | #define pte_index(address) \ |
| 459 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | 459 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
| 460 | #define pte_offset_kernel(dir, address) \ | 460 | #define pte_offset_kernel(dir, address) \ |
| 461 | ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(address)) | 461 | ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(address)) |
| 462 | 462 | ||
| 463 | #if defined(CONFIG_HIGHPTE) | 463 | #if defined(CONFIG_HIGHPTE) |
| 464 | #define pte_offset_map(dir, address) \ | 464 | #define pte_offset_map(dir, address) \ |
diff --git a/include/asm-frv/processor.h b/include/asm-frv/processor.h index 1c4dba1c5f57..3744f2e47f48 100644 --- a/include/asm-frv/processor.h +++ b/include/asm-frv/processor.h | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | */ | 21 | */ |
| 22 | #define current_text_addr() ({ __label__ _l; _l: &&_l;}) | 22 | #define current_text_addr() ({ __label__ _l; _l: &&_l;}) |
| 23 | 23 | ||
| 24 | #include <linux/compiler.h> | ||
| 24 | #include <linux/linkage.h> | 25 | #include <linux/linkage.h> |
| 25 | #include <asm/sections.h> | 26 | #include <asm/sections.h> |
| 26 | #include <asm/segment.h> | 27 | #include <asm/segment.h> |
| @@ -139,7 +140,7 @@ unsigned long get_wchan(struct task_struct *p); | |||
| 139 | extern struct task_struct *alloc_task_struct(void); | 140 | extern struct task_struct *alloc_task_struct(void); |
| 140 | extern void free_task_struct(struct task_struct *p); | 141 | extern void free_task_struct(struct task_struct *p); |
| 141 | 142 | ||
| 142 | #define cpu_relax() do { } while (0) | 143 | #define cpu_relax() barrier() |
| 143 | 144 | ||
| 144 | /* data cache prefetch */ | 145 | /* data cache prefetch */ |
| 145 | #define ARCH_HAS_PREFETCH | 146 | #define ARCH_HAS_PREFETCH |
diff --git a/include/asm-frv/ptrace.h b/include/asm-frv/ptrace.h index b2cce0718e57..7ff525162a72 100644 --- a/include/asm-frv/ptrace.h +++ b/include/asm-frv/ptrace.h | |||
| @@ -62,18 +62,10 @@ | |||
| 62 | #ifndef __ASSEMBLY__ | 62 | #ifndef __ASSEMBLY__ |
| 63 | 63 | ||
| 64 | /* | 64 | /* |
| 65 | * dedicate GR28; to keeping the a pointer to the current exception frame | 65 | * we dedicate GR28 to keeping a pointer to the current exception frame |
| 66 | * - gr28 is destroyed on entry to the kernel from userspace | ||
| 66 | */ | 67 | */ |
| 67 | register struct pt_regs *__frame asm("gr28"); | 68 | register struct pt_regs *__frame asm("gr28"); |
| 68 | register struct pt_regs *__debug_frame asm("gr31"); | ||
| 69 | |||
| 70 | #ifndef container_of | ||
| 71 | #define container_of(ptr, type, member) ({ \ | ||
| 72 | const typeof( ((type *)0)->member ) *__mptr = (ptr); \ | ||
| 73 | (type *)( (char *)__mptr - offsetof(type,member) );}) | ||
| 74 | #endif | ||
| 75 | |||
| 76 | #define __debug_regs container_of(__debug_frame, struct pt_debug_regs, normal_regs) | ||
| 77 | 69 | ||
| 78 | #define user_mode(regs) (!((regs)->psr & PSR_S)) | 70 | #define user_mode(regs) (!((regs)->psr & PSR_S)) |
| 79 | #define instruction_pointer(regs) ((regs)->pc) | 71 | #define instruction_pointer(regs) ((regs)->pc) |
diff --git a/include/asm-frv/registers.h b/include/asm-frv/registers.h index fccfd95cff68..9666119fcf6e 100644 --- a/include/asm-frv/registers.h +++ b/include/asm-frv/registers.h | |||
| @@ -23,7 +23,13 @@ | |||
| 23 | * | 23 | * |
| 24 | * +0x2000 +---------------------- | 24 | * +0x2000 +---------------------- |
| 25 | * | union { | 25 | * | union { |
| 26 | * | struct user_context | 26 | * | struct frv_frame0 { |
| 27 | * | struct user_context { | ||
| 28 | * | struct user_int_regs | ||
| 29 | * | struct user_fpmedia_regs | ||
| 30 | * | } | ||
| 31 | * | struct frv_debug_regs | ||
| 32 | * | } | ||
| 27 | * | struct pt_regs [user exception] | 33 | * | struct pt_regs [user exception] |
| 28 | * | } | 34 | * | } |
| 29 | * +---------------------- <-- __kernel_frame0_ptr (maybe GR28) | 35 | * +---------------------- <-- __kernel_frame0_ptr (maybe GR28) |
| @@ -51,11 +57,11 @@ | |||
| 51 | #define _ASM_REGISTERS_H | 57 | #define _ASM_REGISTERS_H |
| 52 | 58 | ||
| 53 | #ifndef __ASSEMBLY__ | 59 | #ifndef __ASSEMBLY__ |
| 54 | #define __OFFSET(X) (X) | 60 | #define __OFFSET(X,N) ((X)+(N)*4) |
| 55 | #define __OFFSETC(X,N) xxxxxxxxxxxxxxxxxxxxxxxx | 61 | #define __OFFSETC(X,N) xxxxxxxxxxxxxxxxxxxxxxxx |
| 56 | #else | 62 | #else |
| 57 | #define __OFFSET(X) ((X)*4) | 63 | #define __OFFSET(X,N) ((X)+(N)*4) |
| 58 | #define __OFFSETC(X,N) ((X)*4+(N)) | 64 | #define __OFFSETC(X,N) ((X)+(N)) |
| 59 | #endif | 65 | #endif |
| 60 | 66 | ||
| 61 | /*****************************************************************************/ | 67 | /*****************************************************************************/ |
| @@ -117,30 +123,13 @@ struct pt_regs { | |||
| 117 | 123 | ||
| 118 | #endif | 124 | #endif |
| 119 | 125 | ||
| 120 | #define REG_PSR __OFFSET( 0) /* Processor Status Register */ | ||
| 121 | #define REG_ISR __OFFSET( 1) /* Integer Status Register */ | ||
| 122 | #define REG_CCR __OFFSET( 2) /* Condition Code Register */ | ||
| 123 | #define REG_CCCR __OFFSET( 3) /* Condition Code for Conditional Insns Register */ | ||
| 124 | #define REG_LR __OFFSET( 4) /* Link Register */ | ||
| 125 | #define REG_LCR __OFFSET( 5) /* Loop Count Register */ | ||
| 126 | #define REG_PC __OFFSET( 6) /* Program Counter */ | ||
| 127 | |||
| 128 | #define REG__STATUS __OFFSET( 7) /* exception status */ | ||
| 129 | #define REG__STATUS_STEP 0x00000001 /* - reenable single stepping on return */ | 126 | #define REG__STATUS_STEP 0x00000001 /* - reenable single stepping on return */ |
| 130 | #define REG__STATUS_STEPPED 0x00000002 /* - single step caused exception */ | 127 | #define REG__STATUS_STEPPED 0x00000002 /* - single step caused exception */ |
| 131 | #define REG__STATUS_BROKE 0x00000004 /* - BREAK insn caused exception */ | 128 | #define REG__STATUS_BROKE 0x00000004 /* - BREAK insn caused exception */ |
| 132 | #define REG__STATUS_SYSC_ENTRY 0x40000000 /* - T on syscall entry (ptrace.c only) */ | 129 | #define REG__STATUS_SYSC_ENTRY 0x40000000 /* - T on syscall entry (ptrace.c only) */ |
| 133 | #define REG__STATUS_SYSC_EXIT 0x80000000 /* - T on syscall exit (ptrace.c only) */ | 130 | #define REG__STATUS_SYSC_EXIT 0x80000000 /* - T on syscall exit (ptrace.c only) */ |
| 134 | 131 | ||
| 135 | #define REG_SYSCALLNO __OFFSET( 8) /* syscall number or -1 */ | 132 | #define REG_GR(R) __OFFSET(REG_GR0, (R)) |
| 136 | #define REG_ORIG_GR8 __OFFSET( 9) /* saved GR8 for signal handling */ | ||
| 137 | #define REG_GNER0 __OFFSET(10) | ||
| 138 | #define REG_GNER1 __OFFSET(11) | ||
| 139 | #define REG_IACC0 __OFFSET(12) | ||
| 140 | |||
| 141 | #define REG_TBR __OFFSET(14) /* Trap Vector Register */ | ||
| 142 | #define REG_GR(R) __OFFSET((14+(R))) | ||
| 143 | #define REG__END REG_GR(32) | ||
| 144 | 133 | ||
| 145 | #define REG_SP REG_GR(1) | 134 | #define REG_SP REG_GR(1) |
| 146 | #define REG_FP REG_GR(2) | 135 | #define REG_FP REG_GR(2) |
| @@ -149,27 +138,21 @@ struct pt_regs { | |||
| 149 | 138 | ||
| 150 | /*****************************************************************************/ | 139 | /*****************************************************************************/ |
| 151 | /* | 140 | /* |
| 152 | * extension tacked in front of the exception frame in debug mode | 141 | * debugging registers |
| 153 | */ | 142 | */ |
| 154 | #ifndef __ASSEMBLY__ | 143 | #ifndef __ASSEMBLY__ |
| 155 | 144 | ||
| 156 | struct pt_debug_regs | 145 | struct frv_debug_regs |
| 157 | { | 146 | { |
| 158 | unsigned long bpsr; | ||
| 159 | unsigned long dcr; | 147 | unsigned long dcr; |
| 160 | unsigned long brr; | 148 | unsigned long ibar[4] __attribute__((aligned(8))); |
| 161 | unsigned long nmar; | 149 | unsigned long dbar[4] __attribute__((aligned(8))); |
| 162 | struct pt_regs normal_regs; | 150 | unsigned long dbdr[4][4] __attribute__((aligned(8))); |
| 151 | unsigned long dbmr[4][4] __attribute__((aligned(8))); | ||
| 163 | } __attribute__((aligned(8))); | 152 | } __attribute__((aligned(8))); |
| 164 | 153 | ||
| 165 | #endif | 154 | #endif |
| 166 | 155 | ||
| 167 | #define REG_NMAR __OFFSET(-1) | ||
| 168 | #define REG_BRR __OFFSET(-2) | ||
| 169 | #define REG_DCR __OFFSET(-3) | ||
| 170 | #define REG_BPSR __OFFSET(-4) | ||
| 171 | #define REG__DEBUG_XTRA __OFFSET(4) | ||
| 172 | |||
| 173 | /*****************************************************************************/ | 156 | /*****************************************************************************/ |
| 174 | /* | 157 | /* |
| 175 | * userspace registers | 158 | * userspace registers |
| @@ -223,33 +206,27 @@ struct user_context | |||
| 223 | void *extension; | 206 | void *extension; |
| 224 | } __attribute__((aligned(8))); | 207 | } __attribute__((aligned(8))); |
| 225 | 208 | ||
| 209 | struct frv_frame0 { | ||
| 210 | union { | ||
| 211 | struct pt_regs regs; | ||
| 212 | struct user_context uc; | ||
| 213 | }; | ||
| 214 | |||
| 215 | struct frv_debug_regs debug; | ||
| 216 | |||
| 217 | } __attribute__((aligned(32))); | ||
| 218 | |||
| 226 | #endif | 219 | #endif |
| 227 | 220 | ||
| 228 | #define NR_USER_INT_REGS (14 + 64) | 221 | #define __INT_GR(R) __OFFSET(__INT_GR0, (R)) |
| 229 | #define NR_USER_FPMEDIA_REGS (64 + 2 + 2 + 8 + 8/4 + 1) | 222 | |
| 230 | #define NR_USER_CONTEXT (NR_USER_INT_REGS + NR_USER_FPMEDIA_REGS + 1) | 223 | #define __FPMEDIA_FR(R) __OFFSET(__FPMEDIA_FR0, (R)) |
| 231 | 224 | #define __FPMEDIA_FNER(R) __OFFSET(__FPMEDIA_FNER0, (R)) | |
| 232 | #define USER_CONTEXT_SIZE (((NR_USER_CONTEXT + 1) & ~1) * 4) | 225 | #define __FPMEDIA_MSR(R) __OFFSET(__FPMEDIA_MSR0, (R)) |
| 233 | 226 | #define __FPMEDIA_ACC(R) __OFFSET(__FPMEDIA_ACC0, (R)) | |
| 234 | #define __THREAD_FRAME __OFFSET(0) | 227 | #define __FPMEDIA_ACCG(R) __OFFSETC(__FPMEDIA_ACCG0, (R)) |
| 235 | #define __THREAD_CURR __OFFSET(1) | 228 | #define __FPMEDIA_FSR(R) __OFFSET(__FPMEDIA_FSR0, (R)) |
| 236 | #define __THREAD_SP __OFFSET(2) | 229 | |
| 237 | #define __THREAD_FP __OFFSET(3) | 230 | #define __THREAD_GR(R) __OFFSET(__THREAD_GR16, (R) - 16) |
| 238 | #define __THREAD_LR __OFFSET(4) | ||
| 239 | #define __THREAD_PC __OFFSET(5) | ||
| 240 | #define __THREAD_GR(R) __OFFSET(6 + (R) - 16) | ||
| 241 | #define __THREAD_FRAME0 __OFFSET(19) | ||
| 242 | #define __THREAD_USER __OFFSET(19) | ||
| 243 | |||
| 244 | #define __USER_INT __OFFSET(0) | ||
| 245 | #define __INT_GR(R) __OFFSET(14 + (R)) | ||
| 246 | |||
| 247 | #define __USER_FPMEDIA __OFFSET(NR_USER_INT_REGS) | ||
| 248 | #define __FPMEDIA_FR(R) __OFFSET(NR_USER_INT_REGS + (R)) | ||
| 249 | #define __FPMEDIA_FNER(R) __OFFSET(NR_USER_INT_REGS + 64 + (R)) | ||
| 250 | #define __FPMEDIA_MSR(R) __OFFSET(NR_USER_INT_REGS + 66 + (R)) | ||
| 251 | #define __FPMEDIA_ACC(R) __OFFSET(NR_USER_INT_REGS + 68 + (R)) | ||
| 252 | #define __FPMEDIA_ACCG(R) __OFFSETC(NR_USER_INT_REGS + 76, (R)) | ||
| 253 | #define __FPMEDIA_FSR(R) __OFFSET(NR_USER_INT_REGS + 78 + (R)) | ||
| 254 | 231 | ||
| 255 | #endif /* _ASM_REGISTERS_H */ | 232 | #endif /* _ASM_REGISTERS_H */ |
diff --git a/include/asm-frv/signal.h b/include/asm-frv/signal.h index dcc1b3592918..2079197d483d 100644 --- a/include/asm-frv/signal.h +++ b/include/asm-frv/signal.h | |||
| @@ -74,7 +74,6 @@ typedef unsigned long sigset_t; | |||
| 74 | * SA_FLAGS values: | 74 | * SA_FLAGS values: |
| 75 | * | 75 | * |
| 76 | * SA_ONSTACK indicates that a registered stack_t will be used. | 76 | * SA_ONSTACK indicates that a registered stack_t will be used. |
| 77 | * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the | ||
| 78 | * SA_RESTART flag to get restarting signals (which were the default long ago) | 77 | * SA_RESTART flag to get restarting signals (which were the default long ago) |
| 79 | * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. | 78 | * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. |
| 80 | * SA_RESETHAND clears the handler when the signal is delivered. | 79 | * SA_RESETHAND clears the handler when the signal is delivered. |
| @@ -94,7 +93,6 @@ typedef unsigned long sigset_t; | |||
| 94 | 93 | ||
| 95 | #define SA_NOMASK SA_NODEFER | 94 | #define SA_NOMASK SA_NODEFER |
| 96 | #define SA_ONESHOT SA_RESETHAND | 95 | #define SA_ONESHOT SA_RESETHAND |
| 97 | #define SA_INTERRUPT 0x20000000 /* dummy -- ignored */ | ||
| 98 | 96 | ||
| 99 | #define SA_RESTORER 0x04000000 | 97 | #define SA_RESTORER 0x04000000 |
| 100 | 98 | ||
diff --git a/include/asm-frv/socket.h b/include/asm-frv/socket.h index 7177f8b9817c..31db18fc871f 100644 --- a/include/asm-frv/socket.h +++ b/include/asm-frv/socket.h | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | #define SO_ACCEPTCONN 30 | 48 | #define SO_ACCEPTCONN 30 |
| 49 | 49 | ||
| 50 | #define SO_PEERSEC 31 | 50 | #define SO_PEERSEC 31 |
| 51 | #define SO_PASSSEC 34 | ||
| 51 | 52 | ||
| 52 | #endif /* _ASM_SOCKET_H */ | 53 | #endif /* _ASM_SOCKET_H */ |
| 53 | 54 | ||
diff --git a/include/asm-frv/system.h b/include/asm-frv/system.h index 351863dfd06e..1166899317d7 100644 --- a/include/asm-frv/system.h +++ b/include/asm-frv/system.h | |||
| @@ -179,7 +179,6 @@ do { \ | |||
| 179 | #define rmb() asm volatile ("membar" : : :"memory") | 179 | #define rmb() asm volatile ("membar" : : :"memory") |
| 180 | #define wmb() asm volatile ("membar" : : :"memory") | 180 | #define wmb() asm volatile ("membar" : : :"memory") |
| 181 | #define set_mb(var, value) do { var = value; mb(); } while (0) | 181 | #define set_mb(var, value) do { var = value; mb(); } while (0) |
| 182 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
| 183 | 182 | ||
| 184 | #define smp_mb() mb() | 183 | #define smp_mb() mb() |
| 185 | #define smp_rmb() rmb() | 184 | #define smp_rmb() rmb() |
diff --git a/include/asm-frv/thread_info.h b/include/asm-frv/thread_info.h index ea426abf01d3..d66c48e6ef14 100644 --- a/include/asm-frv/thread_info.h +++ b/include/asm-frv/thread_info.h | |||
| @@ -19,6 +19,8 @@ | |||
| 19 | #include <asm/processor.h> | 19 | #include <asm/processor.h> |
| 20 | #endif | 20 | #endif |
| 21 | 21 | ||
| 22 | #define THREAD_SIZE 8192 | ||
| 23 | |||
| 22 | /* | 24 | /* |
| 23 | * low level task data that entry.S needs immediate access to | 25 | * low level task data that entry.S needs immediate access to |
| 24 | * - this struct should fit entirely inside of one cache line | 26 | * - this struct should fit entirely inside of one cache line |
| @@ -46,15 +48,7 @@ struct thread_info { | |||
| 46 | 48 | ||
| 47 | #else /* !__ASSEMBLY__ */ | 49 | #else /* !__ASSEMBLY__ */ |
| 48 | 50 | ||
| 49 | /* offsets into the thread_info struct for assembly code access */ | 51 | #include <asm/asm-offsets.h> |
| 50 | #define TI_TASK 0x00000000 | ||
| 51 | #define TI_EXEC_DOMAIN 0x00000004 | ||
| 52 | #define TI_FLAGS 0x00000008 | ||
| 53 | #define TI_STATUS 0x0000000C | ||
| 54 | #define TI_CPU 0x00000010 | ||
| 55 | #define TI_PRE_COUNT 0x00000014 | ||
| 56 | #define TI_ADDR_LIMIT 0x00000018 | ||
| 57 | #define TI_RESTART_BLOCK 0x0000001C | ||
| 58 | 52 | ||
| 59 | #endif | 53 | #endif |
| 60 | 54 | ||
| @@ -83,12 +77,6 @@ struct thread_info { | |||
| 83 | #define init_thread_info (init_thread_union.thread_info) | 77 | #define init_thread_info (init_thread_union.thread_info) |
| 84 | #define init_stack (init_thread_union.stack) | 78 | #define init_stack (init_thread_union.stack) |
| 85 | 79 | ||
| 86 | #ifdef CONFIG_SMALL_TASKS | ||
| 87 | #define THREAD_SIZE 4096 | ||
| 88 | #else | ||
| 89 | #define THREAD_SIZE 8192 | ||
| 90 | #endif | ||
| 91 | |||
| 92 | /* how to get the thread information struct from C */ | 80 | /* how to get the thread information struct from C */ |
| 93 | register struct thread_info *__current_thread_info asm("gr15"); | 81 | register struct thread_info *__current_thread_info asm("gr15"); |
| 94 | 82 | ||
| @@ -111,11 +99,7 @@ register struct thread_info *__current_thread_info asm("gr15"); | |||
| 111 | 99 | ||
| 112 | #define free_thread_info(info) kfree(info) | 100 | #define free_thread_info(info) kfree(info) |
| 113 | 101 | ||
| 114 | #else /* !__ASSEMBLY__ */ | 102 | #endif /* __ASSEMBLY__ */ |
| 115 | |||
| 116 | #define THREAD_SIZE 8192 | ||
| 117 | |||
| 118 | #endif | ||
| 119 | 103 | ||
| 120 | /* | 104 | /* |
| 121 | * thread information flags | 105 | * thread information flags |
diff --git a/include/asm-frv/unistd.h b/include/asm-frv/unistd.h index b80dbd839475..d104d1b91d39 100644 --- a/include/asm-frv/unistd.h +++ b/include/asm-frv/unistd.h | |||
| @@ -320,6 +320,7 @@ | |||
| 320 | #ifdef __KERNEL__ | 320 | #ifdef __KERNEL__ |
| 321 | 321 | ||
| 322 | #define NR_syscalls 310 | 322 | #define NR_syscalls 310 |
| 323 | #include <linux/err.h> | ||
| 323 | 324 | ||
| 324 | /* | 325 | /* |
| 325 | * process the return value of a syscall, consigning it to one of two possible fates | 326 | * process the return value of a syscall, consigning it to one of two possible fates |
| @@ -329,7 +330,7 @@ | |||
| 329 | #define __syscall_return(type, res) \ | 330 | #define __syscall_return(type, res) \ |
| 330 | do { \ | 331 | do { \ |
| 331 | unsigned long __sr2 = (res); \ | 332 | unsigned long __sr2 = (res); \ |
| 332 | if (__builtin_expect(__sr2 >= (unsigned long)(-4095), 0)) { \ | 333 | if (__builtin_expect(__sr2 >= (unsigned long)(-MAX_ERRNO), 0)) { \ |
| 333 | errno = (-__sr2); \ | 334 | errno = (-__sr2); \ |
| 334 | __sr2 = ~0UL; \ | 335 | __sr2 = ~0UL; \ |
| 335 | } \ | 336 | } \ |
