Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <asm-parisc/*> -> <asm/*>
parisc: parisc-agp - fix <asm-parisc/*> -> <asm/*>

Resolve remove/rename conflict: include/asm-parisc/a.out.h is no longer
relevant.

+457 -318
+2
arch/parisc/Kconfig
··· 9 9 def_bool y 10 10 select HAVE_IDE 11 11 select HAVE_OPROFILE 12 + select RTC_CLASS 13 + select RTC_DRV_PARISC 12 14 help 13 15 The PA-RISC microprocessor is designed by Hewlett-Packard and used 14 16 in many of their workstations & servers (HP9000 700 and 800 series,
+1
arch/parisc/kernel/.gitignore
··· 1 + vmlinux.lds
+3
arch/parisc/kernel/asm-offsets.c
··· 290 290 DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); 291 291 DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); 292 292 DEFINE(EXCDATA_ADDR, offsetof(struct exception_data, fault_addr)); 293 + BLANK(); 294 + DEFINE(ASM_PDC_RESULT_SIZE, NUM_PDC_RESULT * sizeof(unsigned long)); 295 + BLANK(); 293 296 return 0; 294 297 }
+47 -24
arch/parisc/kernel/firmware.c
··· 71 71 #include <asm/processor.h> /* for boot_cpu_data */ 72 72 73 73 static DEFINE_SPINLOCK(pdc_lock); 74 - static unsigned long pdc_result[32] __attribute__ ((aligned (8))); 75 - static unsigned long pdc_result2[32] __attribute__ ((aligned (8))); 74 + extern unsigned long pdc_result[NUM_PDC_RESULT]; 75 + extern unsigned long pdc_result2[NUM_PDC_RESULT]; 76 76 77 77 #ifdef CONFIG_64BIT 78 78 #define WIDE_FIRMWARE 0x1 ··· 150 150 #endif 151 151 } 152 152 153 + #ifdef CONFIG_64BIT 154 + void __init set_firmware_width_unlocked(void) 155 + { 156 + int ret; 157 + 158 + ret = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, 159 + __pa(pdc_result), 0); 160 + convert_to_wide(pdc_result); 161 + if (pdc_result[0] != NARROW_FIRMWARE) 162 + parisc_narrow_firmware = 0; 163 + } 164 + 153 165 /** 154 166 * set_firmware_width - Determine if the firmware is wide or narrow. 155 167 * 156 - * This function must be called before any pdc_* function that uses the convert_to_wide 157 - * function. 168 + * This function must be called before any pdc_* function that uses the 169 + * convert_to_wide function. 158 170 */ 159 171 void __init set_firmware_width(void) 160 172 { 161 - #ifdef CONFIG_64BIT 162 - int retval; 163 173 unsigned long flags; 164 - 165 - spin_lock_irqsave(&pdc_lock, flags); 166 - retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); 167 - convert_to_wide(pdc_result); 168 - if(pdc_result[0] != NARROW_FIRMWARE) 169 - parisc_narrow_firmware = 0; 170 - spin_unlock_irqrestore(&pdc_lock, flags); 171 - #endif 174 + spin_lock_irqsave(&pdc_lock, flags); 175 + set_firmware_width_unlocked(); 176 + spin_unlock_irqrestore(&pdc_lock, flags); 172 177 } 178 + #else 179 + void __init set_firmware_width_unlocked(void) { 180 + return; 181 + } 182 + 183 + void __init set_firmware_width(void) { 184 + return; 185 + } 186 + #endif /*CONFIG_64BIT*/ 173 187 174 188 /** 175 189 * pdc_emergency_unlock - Unlock the linux pdc lock ··· 302 288 return retval; 303 289 } 304 290 291 + int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info) 292 + { 293 + int ret; 294 + 295 + ret = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); 296 + convert_to_wide(pdc_result); 297 + pdc_coproc_info->ccr_functional = pdc_result[0]; 298 + pdc_coproc_info->ccr_present = pdc_result[1]; 299 + pdc_coproc_info->revision = pdc_result[17]; 300 + pdc_coproc_info->model = pdc_result[18]; 301 + 302 + return ret; 303 + } 304 + 305 305 /** 306 306 * pdc_coproc_cfg - To identify coprocessors attached to the processor. 307 307 * @pdc_coproc_info: Return buffer address. ··· 325 297 */ 326 298 int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) 327 299 { 328 - int retval; 300 + int ret; 329 301 unsigned long flags; 330 302 331 - spin_lock_irqsave(&pdc_lock, flags); 332 - retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); 333 - convert_to_wide(pdc_result); 334 - pdc_coproc_info->ccr_functional = pdc_result[0]; 335 - pdc_coproc_info->ccr_present = pdc_result[1]; 336 - pdc_coproc_info->revision = pdc_result[17]; 337 - pdc_coproc_info->model = pdc_result[18]; 338 - spin_unlock_irqrestore(&pdc_lock, flags); 303 + spin_lock_irqsave(&pdc_lock, flags); 304 + ret = pdc_coproc_cfg_unlocked(pdc_coproc_info); 305 + spin_unlock_irqrestore(&pdc_lock, flags); 339 306 340 - return retval; 307 + return ret; 341 308 } 342 309 343 310 /**
+1 -1
arch/parisc/kernel/head.S
··· 121 121 copy %r0,%r2 122 122 123 123 /* And the RFI Target address too */ 124 - load32 start_kernel,%r11 124 + load32 start_parisc,%r11 125 125 126 126 /* And the initial task pointer */ 127 127 load32 init_thread_union,%r6
+172 -257
arch/parisc/kernel/ptrace.c
··· 4 4 * Copyright (C) 2000 Hewlett-Packard Co, Linuxcare Inc. 5 5 * Copyright (C) 2000 Matthew Wilcox <matthew@wil.cx> 6 6 * Copyright (C) 2000 David Huggins-Daines <dhd@debian.org> 7 + * Copyright (C) 2008 Helge Deller <deller@gmx.de> 7 8 */ 8 9 9 10 #include <linux/kernel.h> ··· 28 27 /* PSW bits we allow the debugger to modify */ 29 28 #define USER_PSW_BITS (PSW_N | PSW_V | PSW_CB) 30 29 31 - #undef DEBUG_PTRACE 30 + /* 31 + * Called by kernel/ptrace.c when detaching.. 32 + * 33 + * Make sure single step bits etc are not set. 34 + */ 35 + void ptrace_disable(struct task_struct *task) 36 + { 37 + task->ptrace &= ~(PT_SINGLESTEP|PT_BLOCKSTEP); 32 38 33 - #ifdef DEBUG_PTRACE 34 - #define DBG(x...) printk(x) 35 - #else 36 - #define DBG(x...) 37 - #endif 39 + /* make sure the trap bits are not set */ 40 + pa_psw(task)->r = 0; 41 + pa_psw(task)->t = 0; 42 + pa_psw(task)->h = 0; 43 + pa_psw(task)->l = 0; 44 + } 38 45 39 - #ifdef CONFIG_64BIT 46 + /* 47 + * The following functions are called by ptrace_resume() when 48 + * enabling or disabling single/block tracing. 49 + */ 50 + void user_disable_single_step(struct task_struct *task) 51 + { 52 + ptrace_disable(task); 53 + } 54 + 55 + void user_enable_single_step(struct task_struct *task) 56 + { 57 + task->ptrace &= ~PT_BLOCKSTEP; 58 + task->ptrace |= PT_SINGLESTEP; 59 + 60 + if (pa_psw(task)->n) { 61 + struct siginfo si; 62 + 63 + /* Nullified, just crank over the queue. */ 64 + task_regs(task)->iaoq[0] = task_regs(task)->iaoq[1]; 65 + task_regs(task)->iasq[0] = task_regs(task)->iasq[1]; 66 + task_regs(task)->iaoq[1] = task_regs(task)->iaoq[0] + 4; 67 + pa_psw(task)->n = 0; 68 + pa_psw(task)->x = 0; 69 + pa_psw(task)->y = 0; 70 + pa_psw(task)->z = 0; 71 + pa_psw(task)->b = 0; 72 + ptrace_disable(task); 73 + /* Don't wake up the task, but let the 74 + parent know something happened. */ 75 + si.si_code = TRAP_TRACE; 76 + si.si_addr = (void __user *) (task_regs(task)->iaoq[0] & ~3); 77 + si.si_signo = SIGTRAP; 78 + si.si_errno = 0; 79 + force_sig_info(SIGTRAP, &si, task); 80 + /* notify_parent(task, SIGCHLD); */ 81 + return; 82 + } 83 + 84 + /* Enable recovery counter traps. The recovery counter 85 + * itself will be set to zero on a task switch. If the 86 + * task is suspended on a syscall then the syscall return 87 + * path will overwrite the recovery counter with a suitable 88 + * value such that it traps once back in user space. We 89 + * disable interrupts in the tasks PSW here also, to avoid 90 + * interrupts while the recovery counter is decrementing. 91 + */ 92 + pa_psw(task)->r = 1; 93 + pa_psw(task)->t = 0; 94 + pa_psw(task)->h = 0; 95 + pa_psw(task)->l = 0; 96 + } 97 + 98 + void user_enable_block_step(struct task_struct *task) 99 + { 100 + task->ptrace &= ~PT_SINGLESTEP; 101 + task->ptrace |= PT_BLOCKSTEP; 102 + 103 + /* Enable taken branch trap. */ 104 + pa_psw(task)->r = 0; 105 + pa_psw(task)->t = 1; 106 + pa_psw(task)->h = 0; 107 + pa_psw(task)->l = 0; 108 + } 109 + 110 + long arch_ptrace(struct task_struct *child, long request, long addr, long data) 111 + { 112 + unsigned long tmp; 113 + long ret = -EIO; 114 + 115 + switch (request) { 116 + 117 + /* Read the word at location addr in the USER area. For ptraced 118 + processes, the kernel saves all regs on a syscall. */ 119 + case PTRACE_PEEKUSR: 120 + if ((addr & (sizeof(long)-1)) || 121 + (unsigned long) addr >= sizeof(struct pt_regs)) 122 + break; 123 + tmp = *(unsigned long *) ((char *) task_regs(child) + addr); 124 + ret = put_user(tmp, (unsigned long *) data); 125 + break; 126 + 127 + /* Write the word at location addr in the USER area. This will need 128 + to change when the kernel no longer saves all regs on a syscall. 129 + FIXME. There is a problem at the moment in that r3-r18 are only 130 + saved if the process is ptraced on syscall entry, and even then 131 + those values are overwritten by actual register values on syscall 132 + exit. */ 133 + case PTRACE_POKEUSR: 134 + /* Some register values written here may be ignored in 135 + * entry.S:syscall_restore_rfi; e.g. iaoq is written with 136 + * r31/r31+4, and not with the values in pt_regs. 137 + */ 138 + if (addr == PT_PSW) { 139 + /* Allow writing to Nullify, Divide-step-correction, 140 + * and carry/borrow bits. 141 + * BEWARE, if you set N, and then single step, it won't 142 + * stop on the nullified instruction. 143 + */ 144 + data &= USER_PSW_BITS; 145 + task_regs(child)->gr[0] &= ~USER_PSW_BITS; 146 + task_regs(child)->gr[0] |= data; 147 + ret = 0; 148 + break; 149 + } 150 + 151 + if ((addr & (sizeof(long)-1)) || 152 + (unsigned long) addr >= sizeof(struct pt_regs)) 153 + break; 154 + if ((addr >= PT_GR1 && addr <= PT_GR31) || 155 + addr == PT_IAOQ0 || addr == PT_IAOQ1 || 156 + (addr >= PT_FR0 && addr <= PT_FR31 + 4) || 157 + addr == PT_SAR) { 158 + *(unsigned long *) ((char *) task_regs(child) + addr) = data; 159 + ret = 0; 160 + } 161 + break; 162 + 163 + default: 164 + ret = ptrace_request(child, request, addr, data); 165 + break; 166 + } 167 + 168 + return ret; 169 + } 170 + 171 + 172 + #ifdef CONFIG_COMPAT 40 173 41 174 /* This function is needed to translate 32 bit pt_regs offsets in to 42 175 * 64 bit pt_regs offsets. For example, a 32 bit gdb under a 64 bit kernel ··· 196 61 else 197 62 return -1; 198 63 } 199 - #endif 200 64 201 - /* 202 - * Called by kernel/ptrace.c when detaching.. 203 - * 204 - * Make sure single step bits etc are not set. 205 - */ 206 - void ptrace_disable(struct task_struct *child) 65 + long compat_arch_ptrace(struct task_struct *child, compat_long_t request, 66 + compat_ulong_t addr, compat_ulong_t data) 207 67 { 208 - /* make sure the trap bits are not set */ 209 - pa_psw(child)->r = 0; 210 - pa_psw(child)->t = 0; 211 - pa_psw(child)->h = 0; 212 - pa_psw(child)->l = 0; 213 - } 214 - 215 - long arch_ptrace(struct task_struct *child, long request, long addr, long data) 216 - { 217 - long ret; 218 - #ifdef DEBUG_PTRACE 219 - long oaddr=addr, odata=data; 220 - #endif 68 + compat_uint_t tmp; 69 + long ret = -EIO; 221 70 222 71 switch (request) { 223 - case PTRACE_PEEKTEXT: /* read word at location addr. */ 224 - case PTRACE_PEEKDATA: { 225 - #ifdef CONFIG_64BIT 226 - if (__is_compat_task(child)) { 227 - int copied; 228 - unsigned int tmp; 229 72 230 - addr &= 0xffffffffL; 231 - copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0); 232 - ret = -EIO; 233 - if (copied != sizeof(tmp)) 234 - goto out_tsk; 235 - ret = put_user(tmp,(unsigned int *) data); 236 - DBG("sys_ptrace(PEEK%s, %d, %lx, %lx) returning %ld, data %x\n", 237 - request == PTRACE_PEEKTEXT ? "TEXT" : "DATA", 238 - pid, oaddr, odata, ret, tmp); 239 - } 240 - else 241 - #endif 242 - ret = generic_ptrace_peekdata(child, addr, data); 243 - goto out_tsk; 244 - } 73 + case PTRACE_PEEKUSR: 74 + if (addr & (sizeof(compat_uint_t)-1)) 75 + break; 76 + addr = translate_usr_offset(addr); 77 + if (addr < 0) 78 + break; 245 79 246 - /* when I and D space are separate, this will have to be fixed. */ 247 - case PTRACE_POKETEXT: /* write the word at location addr. */ 248 - case PTRACE_POKEDATA: 249 - ret = 0; 250 - #ifdef CONFIG_64BIT 251 - if (__is_compat_task(child)) { 252 - unsigned int tmp = (unsigned int)data; 253 - DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n", 254 - request == PTRACE_POKETEXT ? "TEXT" : "DATA", 255 - pid, oaddr, odata); 256 - addr &= 0xffffffffL; 257 - if (access_process_vm(child, addr, &tmp, sizeof(tmp), 1) == sizeof(tmp)) 258 - goto out_tsk; 259 - } 260 - else 261 - #endif 262 - { 263 - if (access_process_vm(child, addr, &data, sizeof(data), 1) == sizeof(data)) 264 - goto out_tsk; 265 - } 266 - ret = -EIO; 267 - goto out_tsk; 268 - 269 - /* Read the word at location addr in the USER area. For ptraced 270 - processes, the kernel saves all regs on a syscall. */ 271 - case PTRACE_PEEKUSR: { 272 - ret = -EIO; 273 - #ifdef CONFIG_64BIT 274 - if (__is_compat_task(child)) { 275 - unsigned int tmp; 276 - 277 - if (addr & (sizeof(int)-1)) 278 - goto out_tsk; 279 - if ((addr = translate_usr_offset(addr)) < 0) 280 - goto out_tsk; 281 - 282 - tmp = *(unsigned int *) ((char *) task_regs(child) + addr); 283 - ret = put_user(tmp, (unsigned int *) data); 284 - DBG("sys_ptrace(PEEKUSR, %d, %lx, %lx) returning %ld, addr %lx, data %x\n", 285 - pid, oaddr, odata, ret, addr, tmp); 286 - } 287 - else 288 - #endif 289 - { 290 - unsigned long tmp; 291 - 292 - if ((addr & (sizeof(long)-1)) || (unsigned long) addr >= sizeof(struct pt_regs)) 293 - goto out_tsk; 294 - tmp = *(unsigned long *) ((char *) task_regs(child) + addr); 295 - ret = put_user(tmp, (unsigned long *) data); 296 - } 297 - goto out_tsk; 298 - } 80 + tmp = *(compat_uint_t *) ((char *) task_regs(child) + addr); 81 + ret = put_user(tmp, (compat_uint_t *) (unsigned long) data); 82 + break; 299 83 300 84 /* Write the word at location addr in the USER area. This will need 301 85 to change when the kernel no longer saves all regs on a syscall. ··· 223 169 those values are overwritten by actual register values on syscall 224 170 exit. */ 225 171 case PTRACE_POKEUSR: 226 - ret = -EIO; 227 172 /* Some register values written here may be ignored in 228 173 * entry.S:syscall_restore_rfi; e.g. iaoq is written with 229 174 * r31/r31+4, and not with the values in pt_regs. 230 175 */ 231 - /* PT_PSW=0, so this is valid for 32 bit processes under 64 232 - * bit kernels. 233 - */ 234 176 if (addr == PT_PSW) { 235 - /* PT_PSW=0, so this is valid for 32 bit processes 236 - * under 64 bit kernels. 237 - * 238 - * Allow writing to Nullify, Divide-step-correction, 239 - * and carry/borrow bits. 240 - * BEWARE, if you set N, and then single step, it won't 241 - * stop on the nullified instruction. 177 + /* Since PT_PSW==0, it is valid for 32 bit processes 178 + * under 64 bit kernels as well. 242 179 */ 243 - DBG("sys_ptrace(POKEUSR, %d, %lx, %lx)\n", 244 - pid, oaddr, odata); 245 - data &= USER_PSW_BITS; 246 - task_regs(child)->gr[0] &= ~USER_PSW_BITS; 247 - task_regs(child)->gr[0] |= data; 248 - ret = 0; 249 - goto out_tsk; 250 - } 251 - #ifdef CONFIG_64BIT 252 - if (__is_compat_task(child)) { 253 - if (addr & (sizeof(int)-1)) 254 - goto out_tsk; 255 - if ((addr = translate_usr_offset(addr)) < 0) 256 - goto out_tsk; 257 - DBG("sys_ptrace(POKEUSR, %d, %lx, %lx) addr %lx\n", 258 - pid, oaddr, odata, addr); 180 + ret = arch_ptrace(child, request, addr, data); 181 + } else { 182 + if (addr & (sizeof(compat_uint_t)-1)) 183 + break; 184 + addr = translate_usr_offset(addr); 185 + if (addr < 0) 186 + break; 259 187 if (addr >= PT_FR0 && addr <= PT_FR31 + 4) { 260 188 /* Special case, fp regs are 64 bits anyway */ 261 - *(unsigned int *) ((char *) task_regs(child) + addr) = data; 189 + *(__u64 *) ((char *) task_regs(child) + addr) = data; 262 190 ret = 0; 263 191 } 264 192 else if ((addr >= PT_GR1+4 && addr <= PT_GR31+4) || 265 193 addr == PT_IAOQ0+4 || addr == PT_IAOQ1+4 || 266 194 addr == PT_SAR+4) { 267 195 /* Zero the top 32 bits */ 268 - *(unsigned int *) ((char *) task_regs(child) + addr - 4) = 0; 269 - *(unsigned int *) ((char *) task_regs(child) + addr) = data; 196 + *(__u32 *) ((char *) task_regs(child) + addr - 4) = 0; 197 + *(__u32 *) ((char *) task_regs(child) + addr) = data; 270 198 ret = 0; 271 199 } 272 - goto out_tsk; 273 200 } 274 - else 275 - #endif 276 - { 277 - if ((addr & (sizeof(long)-1)) || (unsigned long) addr >= sizeof(struct pt_regs)) 278 - goto out_tsk; 279 - if ((addr >= PT_GR1 && addr <= PT_GR31) || 280 - addr == PT_IAOQ0 || addr == PT_IAOQ1 || 281 - (addr >= PT_FR0 && addr <= PT_FR31 + 4) || 282 - addr == PT_SAR) { 283 - *(unsigned long *) ((char *) task_regs(child) + addr) = data; 284 - ret = 0; 285 - } 286 - goto out_tsk; 287 - } 288 - 289 - case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ 290 - case PTRACE_CONT: 291 - ret = -EIO; 292 - DBG("sys_ptrace(%s)\n", 293 - request == PTRACE_SYSCALL ? "SYSCALL" : "CONT"); 294 - if (!valid_signal(data)) 295 - goto out_tsk; 296 - child->ptrace &= ~(PT_SINGLESTEP|PT_BLOCKSTEP); 297 - if (request == PTRACE_SYSCALL) { 298 - set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); 299 - } else { 300 - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); 301 - } 302 - child->exit_code = data; 303 - goto out_wake_notrap; 304 - 305 - case PTRACE_KILL: 306 - /* 307 - * make the child exit. Best I can do is send it a 308 - * sigkill. perhaps it should be put in the status 309 - * that it wants to exit. 310 - */ 311 - ret = 0; 312 - DBG("sys_ptrace(KILL)\n"); 313 - if (child->exit_state == EXIT_ZOMBIE) /* already dead */ 314 - goto out_tsk; 315 - child->exit_code = SIGKILL; 316 - goto out_wake_notrap; 317 - 318 - case PTRACE_SINGLEBLOCK: 319 - DBG("sys_ptrace(SINGLEBLOCK)\n"); 320 - ret = -EIO; 321 - if (!valid_signal(data)) 322 - goto out_tsk; 323 - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); 324 - child->ptrace &= ~PT_SINGLESTEP; 325 - child->ptrace |= PT_BLOCKSTEP; 326 - child->exit_code = data; 327 - 328 - /* Enable taken branch trap. */ 329 - pa_psw(child)->r = 0; 330 - pa_psw(child)->t = 1; 331 - pa_psw(child)->h = 0; 332 - pa_psw(child)->l = 0; 333 - goto out_wake; 334 - 335 - case PTRACE_SINGLESTEP: 336 - DBG("sys_ptrace(SINGLESTEP)\n"); 337 - ret = -EIO; 338 - if (!valid_signal(data)) 339 - goto out_tsk; 340 - 341 - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); 342 - child->ptrace &= ~PT_BLOCKSTEP; 343 - child->ptrace |= PT_SINGLESTEP; 344 - child->exit_code = data; 345 - 346 - if (pa_psw(child)->n) { 347 - struct siginfo si; 348 - 349 - /* Nullified, just crank over the queue. */ 350 - task_regs(child)->iaoq[0] = task_regs(child)->iaoq[1]; 351 - task_regs(child)->iasq[0] = task_regs(child)->iasq[1]; 352 - task_regs(child)->iaoq[1] = task_regs(child)->iaoq[0] + 4; 353 - pa_psw(child)->n = 0; 354 - pa_psw(child)->x = 0; 355 - pa_psw(child)->y = 0; 356 - pa_psw(child)->z = 0; 357 - pa_psw(child)->b = 0; 358 - ptrace_disable(child); 359 - /* Don't wake up the child, but let the 360 - parent know something happened. */ 361 - si.si_code = TRAP_TRACE; 362 - si.si_addr = (void __user *) (task_regs(child)->iaoq[0] & ~3); 363 - si.si_signo = SIGTRAP; 364 - si.si_errno = 0; 365 - force_sig_info(SIGTRAP, &si, child); 366 - //notify_parent(child, SIGCHLD); 367 - //ret = 0; 368 - goto out_wake; 369 - } 370 - 371 - /* Enable recovery counter traps. The recovery counter 372 - * itself will be set to zero on a task switch. If the 373 - * task is suspended on a syscall then the syscall return 374 - * path will overwrite the recovery counter with a suitable 375 - * value such that it traps once back in user space. We 376 - * disable interrupts in the childs PSW here also, to avoid 377 - * interrupts while the recovery counter is decrementing. 378 - */ 379 - pa_psw(child)->r = 1; 380 - pa_psw(child)->t = 0; 381 - pa_psw(child)->h = 0; 382 - pa_psw(child)->l = 0; 383 - /* give it a chance to run. */ 384 - goto out_wake; 385 - 386 - case PTRACE_GETEVENTMSG: 387 - ret = put_user(child->ptrace_message, (unsigned int __user *) data); 388 - goto out_tsk; 201 + break; 389 202 390 203 default: 391 - ret = ptrace_request(child, request, addr, data); 392 - goto out_tsk; 204 + ret = compat_ptrace_request(child, request, addr, data); 205 + break; 393 206 } 394 207 395 - out_wake_notrap: 396 - ptrace_disable(child); 397 - out_wake: 398 - wake_up_process(child); 399 - ret = 0; 400 - out_tsk: 401 - DBG("arch_ptrace(%ld, %d, %lx, %lx) returning %ld\n", 402 - request, pid, oaddr, odata, ret); 403 208 return ret; 404 209 } 210 + #endif 211 + 405 212 406 213 void syscall_trace(void) 407 214 {
+12
arch/parisc/kernel/real2.S
··· 8 8 * 9 9 */ 10 10 11 + #include <asm/pdc.h> 11 12 #include <asm/psw.h> 12 13 #include <asm/assembly.h> 14 + #include <asm/asm-offsets.h> 13 15 14 16 #include <linux/linkage.h> 15 17 18 + 16 19 .section .bss 20 + 21 + .export pdc_result 22 + .export pdc_result2 23 + .align 8 24 + pdc_result: 25 + .block ASM_PDC_RESULT_SIZE 26 + pdc_result2: 27 + .block ASM_PDC_RESULT_SIZE 28 + 17 29 .export real_stack 18 30 .export real32_stack 19 31 .export real64_stack
+28 -1
arch/parisc/kernel/setup.c
··· 44 44 #include <asm/pdc_chassis.h> 45 45 #include <asm/io.h> 46 46 #include <asm/setup.h> 47 + #include <asm/unwind.h> 47 48 48 49 static char __initdata command_line[COMMAND_LINE_SIZE]; 49 50 ··· 124 123 #ifdef CONFIG_64BIT 125 124 extern int parisc_narrow_firmware; 126 125 #endif 126 + unwind_init(); 127 127 128 128 init_per_cpu(smp_processor_id()); /* Set Modes & Enable FP */ 129 129 ··· 370 368 371 369 return 0; 372 370 } 373 - 374 371 arch_initcall(parisc_init); 375 372 373 + void start_parisc(void) 374 + { 375 + extern void start_kernel(void); 376 + 377 + int ret, cpunum; 378 + struct pdc_coproc_cfg coproc_cfg; 379 + 380 + cpunum = smp_processor_id(); 381 + 382 + set_firmware_width_unlocked(); 383 + 384 + ret = pdc_coproc_cfg_unlocked(&coproc_cfg); 385 + if (ret >= 0 && coproc_cfg.ccr_functional) { 386 + mtctl(coproc_cfg.ccr_functional, 10); 387 + 388 + cpu_data[cpunum].fp_rev = coproc_cfg.revision; 389 + cpu_data[cpunum].fp_model = coproc_cfg.model; 390 + 391 + asm volatile ("fstd %fr0,8(%sp)"); 392 + } else { 393 + panic("must have an fpu to boot linux"); 394 + } 395 + 396 + start_kernel(); 397 + // not reached 398 + }
+7 -1
arch/parisc/kernel/syscall_table.S
··· 87 87 ENTRY_SAME(setuid) 88 88 ENTRY_SAME(getuid) 89 89 ENTRY_COMP(stime) /* 25 */ 90 - ENTRY_SAME(ptrace) 90 + ENTRY_COMP(ptrace) 91 91 ENTRY_SAME(alarm) 92 92 /* see stat comment */ 93 93 ENTRY_COMP(newfstat) ··· 407 407 ENTRY_SAME(timerfd_create) 408 408 ENTRY_COMP(timerfd_settime) 409 409 ENTRY_COMP(timerfd_gettime) 410 + ENTRY_COMP(signalfd4) 411 + ENTRY_SAME(eventfd2) /* 310 */ 412 + ENTRY_SAME(epoll_create1) 413 + ENTRY_SAME(dup3) 414 + ENTRY_SAME(pipe2) 415 + ENTRY_SAME(inotify_init1) 410 416 411 417 /* Nothing yet */ 412 418
+19 -1
arch/parisc/kernel/time.c
··· 23 23 #include <linux/smp.h> 24 24 #include <linux/profile.h> 25 25 #include <linux/clocksource.h> 26 + #include <linux/platform_device.h> 26 27 27 28 #include <asm/uaccess.h> 28 29 #include <asm/io.h> ··· 216 215 cpu_data[cpu].it_value = next_tick; 217 216 } 218 217 218 + struct platform_device rtc_parisc_dev = { 219 + .name = "rtc-parisc", 220 + .id = -1, 221 + }; 222 + 223 + static int __init rtc_init(void) 224 + { 225 + int ret; 226 + 227 + ret = platform_device_register(&rtc_parisc_dev); 228 + if (ret < 0) 229 + printk(KERN_ERR "unable to register rtc device...\n"); 230 + 231 + /* not necessarily an error */ 232 + return 0; 233 + } 234 + module_init(rtc_init); 235 + 219 236 void __init time_init(void) 220 237 { 221 238 static struct pdc_tod tod_data; ··· 264 245 xtime.tv_nsec = 0; 265 246 } 266 247 } 267 -
+1 -3
arch/parisc/kernel/unwind.c
··· 170 170 } 171 171 172 172 /* Called from setup_arch to import the kernel unwind info */ 173 - static int unwind_init(void) 173 + int unwind_init(void) 174 174 { 175 175 long start, stop; 176 176 register unsigned long gp __asm__ ("r27"); ··· 417 417 418 418 return ret; 419 419 } 420 - 421 - module_init(unwind_init);
+2 -2
drivers/char/agp/parisc-agp.c
··· 20 20 #include <linux/agp_backend.h> 21 21 #include <linux/log2.h> 22 22 23 - #include <asm-parisc/parisc-device.h> 24 - #include <asm-parisc/ropes.h> 23 + #include <asm/parisc-device.h> 24 + #include <asm/ropes.h> 25 25 26 26 #include "agp.h" 27 27
+17 -26
drivers/parisc/ccio-dma.c
··· 66 66 #undef DEBUG_CCIO_RUN_SG 67 67 68 68 #ifdef CONFIG_PROC_FS 69 - /* 70 - * CCIO_SEARCH_TIME can help measure how fast the bitmap search is. 71 - * impacts performance though - ditch it if you don't use it. 72 - */ 73 - #define CCIO_SEARCH_TIME 74 - #undef CCIO_MAP_STATS 75 - #else 76 - #undef CCIO_SEARCH_TIME 77 - #undef CCIO_MAP_STATS 69 + /* depends on proc fs support. But costs CPU performance. */ 70 + #undef CCIO_COLLECT_STATS 78 71 #endif 79 72 80 73 #include <linux/proc_fs.h> ··· 232 239 u32 res_size; /* size of resource map in bytes */ 233 240 spinlock_t res_lock; 234 241 235 - #ifdef CCIO_SEARCH_TIME 242 + #ifdef CCIO_COLLECT_STATS 236 243 #define CCIO_SEARCH_SAMPLE 0x100 237 244 unsigned long avg_search[CCIO_SEARCH_SAMPLE]; 238 245 unsigned long avg_idx; /* current index into avg_search */ 239 - #endif 240 - #ifdef CCIO_MAP_STATS 241 246 unsigned long used_pages; 242 247 unsigned long msingle_calls; 243 248 unsigned long msingle_pages; ··· 342 351 unsigned int pages_needed = size >> IOVP_SHIFT; 343 352 unsigned int res_idx; 344 353 unsigned long boundary_size; 345 - #ifdef CCIO_SEARCH_TIME 354 + #ifdef CCIO_COLLECT_STATS 346 355 unsigned long cr_start = mfctl(16); 347 356 #endif 348 357 ··· 397 406 DBG_RES("%s() res_idx %d res_hint: %d\n", 398 407 __func__, res_idx, ioc->res_hint); 399 408 400 - #ifdef CCIO_SEARCH_TIME 409 + #ifdef CCIO_COLLECT_STATS 401 410 { 402 411 unsigned long cr_end = mfctl(16); 403 412 unsigned long tmp = cr_end - cr_start; ··· 407 416 ioc->avg_search[ioc->avg_idx++] = cr_start; 408 417 ioc->avg_idx &= CCIO_SEARCH_SAMPLE - 1; 409 418 #endif 410 - #ifdef CCIO_MAP_STATS 419 + #ifdef CCIO_COLLECT_STATS 411 420 ioc->used_pages += pages_needed; 412 421 #endif 413 422 /* ··· 443 452 DBG_RES("%s(): res_idx: %d pages_mapped %d\n", 444 453 __func__, res_idx, pages_mapped); 445 454 446 - #ifdef CCIO_MAP_STATS 455 + #ifdef CCIO_COLLECT_STATS 447 456 ioc->used_pages -= pages_mapped; 448 457 #endif 449 458 ··· 755 764 size = ALIGN(size + offset, IOVP_SIZE); 756 765 spin_lock_irqsave(&ioc->res_lock, flags); 757 766 758 - #ifdef CCIO_MAP_STATS 767 + #ifdef CCIO_COLLECT_STATS 759 768 ioc->msingle_calls++; 760 769 ioc->msingle_pages += size >> IOVP_SHIFT; 761 770 #endif ··· 819 828 820 829 spin_lock_irqsave(&ioc->res_lock, flags); 821 830 822 - #ifdef CCIO_MAP_STATS 831 + #ifdef CCIO_COLLECT_STATS 823 832 ioc->usingle_calls++; 824 833 ioc->usingle_pages += size >> IOVP_SHIFT; 825 834 #endif ··· 885 894 */ 886 895 #define PIDE_FLAG 0x80000000UL 887 896 888 - #ifdef CCIO_MAP_STATS 897 + #ifdef CCIO_COLLECT_STATS 889 898 #define IOMMU_MAP_STATS 890 899 #endif 891 900 #include "iommu-helpers.h" ··· 929 938 930 939 spin_lock_irqsave(&ioc->res_lock, flags); 931 940 932 - #ifdef CCIO_MAP_STATS 941 + #ifdef CCIO_COLLECT_STATS 933 942 ioc->msg_calls++; 934 943 #endif 935 944 ··· 988 997 DBG_RUN_SG("%s() START %d entries, %08lx,%x\n", 989 998 __func__, nents, sg_virt_addr(sglist), sglist->length); 990 999 991 - #ifdef CCIO_MAP_STATS 1000 + #ifdef CCIO_COLLECT_STATS 992 1001 ioc->usg_calls++; 993 1002 #endif 994 1003 995 1004 while(sg_dma_len(sglist) && nents--) { 996 1005 997 - #ifdef CCIO_MAP_STATS 1006 + #ifdef CCIO_COLLECT_STATS 998 1007 ioc->usg_pages += sg_dma_len(sglist) >> PAGE_SHIFT; 999 1008 #endif 1000 1009 ccio_unmap_single(dev, sg_dma_address(sglist), ··· 1039 1048 len += seq_printf(m, "IO PDIR size : %d bytes (%d entries)\n", 1040 1049 total_pages * 8, total_pages); 1041 1050 1042 - #ifdef CCIO_MAP_STATS 1051 + #ifdef CCIO_COLLECT_STATS 1043 1052 len += seq_printf(m, "IO PDIR entries : %ld free %ld used (%d%%)\n", 1044 1053 total_pages - ioc->used_pages, ioc->used_pages, 1045 1054 (int)(ioc->used_pages * 100 / total_pages)); ··· 1048 1057 len += seq_printf(m, "Resource bitmap : %d bytes (%d pages)\n", 1049 1058 ioc->res_size, total_pages); 1050 1059 1051 - #ifdef CCIO_SEARCH_TIME 1060 + #ifdef CCIO_COLLECT_STATS 1052 1061 min = max = ioc->avg_search[0]; 1053 1062 for(j = 0; j < CCIO_SEARCH_SAMPLE; ++j) { 1054 1063 avg += ioc->avg_search[j]; ··· 1061 1070 len += seq_printf(m, " Bitmap search : %ld/%ld/%ld (min/avg/max CPU Cycles)\n", 1062 1071 min, avg, max); 1063 1072 #endif 1064 - #ifdef CCIO_MAP_STATS 1073 + #ifdef CCIO_COLLECT_STATS 1065 1074 len += seq_printf(m, "pci_map_single(): %8ld calls %8ld pages (avg %d/1000)\n", 1066 1075 ioc->msingle_calls, ioc->msingle_pages, 1067 1076 (int)((ioc->msingle_pages * 1000)/ioc->msingle_calls)); ··· 1079 1088 len += seq_printf(m, "pci_unmap_sg() : %8ld calls %8ld pages (avg %d/1000)\n\n\n", 1080 1089 ioc->usg_calls, ioc->usg_pages, 1081 1090 (int)((ioc->usg_pages * 1000)/ioc->usg_calls)); 1082 - #endif /* CCIO_MAP_STATS */ 1091 + #endif /* CCIO_COLLECT_STATS */ 1083 1092 1084 1093 ioc = ioc->next; 1085 1094 }
+8
drivers/rtc/Kconfig
··· 610 610 help 611 611 If you say yes here you get support for the Ricoh RS5C313 RTC chips. 612 612 613 + config RTC_DRV_PARISC 614 + tristate "PA-RISC firmware RTC support" 615 + depends on PARISC 616 + help 617 + Say Y or M here to enable RTC support on PA-RISC systems using 618 + firmware calls. If you do not know what you are doing, you should 619 + just say Y. 620 + 613 621 config RTC_DRV_PPC 614 622 tristate "PowerPC machine dependent RTC support" 615 623 depends on PPC
+1
drivers/rtc/Makefile
··· 51 51 obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o 52 52 obj-$(CONFIG_RTC_DRV_PL030) += rtc-pl030.o 53 53 obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o 54 + obj-$(CONFIG_RTC_DRV_PARISC) += rtc-parisc.o 54 55 obj-$(CONFIG_RTC_DRV_PPC) += rtc-ppc.o 55 56 obj-$(CONFIG_RTC_DRV_R9701) += rtc-r9701.o 56 57 obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o
+111
drivers/rtc/rtc-parisc.c
··· 1 + /* rtc-parisc: RTC for HP PA-RISC firmware 2 + * 3 + * Copyright (C) 2008 Kyle McMartin <kyle@mcmartin.ca> 4 + */ 5 + 6 + #include <linux/kernel.h> 7 + #include <linux/module.h> 8 + #include <linux/time.h> 9 + #include <linux/platform_device.h> 10 + 11 + #include <asm/rtc.h> 12 + 13 + /* as simple as can be, and no simpler. */ 14 + struct parisc_rtc { 15 + struct rtc_device *rtc; 16 + spinlock_t lock; 17 + }; 18 + 19 + static int parisc_get_time(struct device *dev, struct rtc_time *tm) 20 + { 21 + struct parisc_rtc *p = dev_get_drvdata(dev); 22 + unsigned long flags, ret; 23 + 24 + spin_lock_irqsave(&p->lock, flags); 25 + ret = get_rtc_time(tm); 26 + spin_unlock_irqrestore(&p->lock, flags); 27 + 28 + if (ret & RTC_BATT_BAD) 29 + return -EOPNOTSUPP; 30 + 31 + return 0; 32 + } 33 + 34 + static int parisc_set_time(struct device *dev, struct rtc_time *tm) 35 + { 36 + struct parisc_rtc *p = dev_get_drvdata(dev); 37 + unsigned long flags, ret; 38 + 39 + spin_lock_irqsave(&p->lock, flags); 40 + ret = set_rtc_time(tm); 41 + spin_unlock_irqrestore(&p->lock, flags); 42 + 43 + if (ret < 0) 44 + return -EOPNOTSUPP; 45 + 46 + return 0; 47 + } 48 + 49 + static const struct rtc_class_ops parisc_rtc_ops = { 50 + .read_time = parisc_get_time, 51 + .set_time = parisc_set_time, 52 + }; 53 + 54 + static int __devinit parisc_rtc_probe(struct platform_device *dev) 55 + { 56 + struct parisc_rtc *p; 57 + 58 + p = kzalloc(sizeof (*p), GFP_KERNEL); 59 + if (!p) 60 + return -ENOMEM; 61 + 62 + spin_lock_init(&p->lock); 63 + 64 + p->rtc = rtc_device_register("rtc-parisc", &dev->dev, &parisc_rtc_ops, 65 + THIS_MODULE); 66 + if (IS_ERR(p->rtc)) { 67 + int err = PTR_ERR(p->rtc); 68 + kfree(p); 69 + return err; 70 + } 71 + 72 + platform_set_drvdata(dev, p); 73 + 74 + return 0; 75 + } 76 + 77 + static int __devexit parisc_rtc_remove(struct platform_device *dev) 78 + { 79 + struct parisc_rtc *p = platform_get_drvdata(dev); 80 + 81 + rtc_device_unregister(p->rtc); 82 + kfree(p); 83 + 84 + return 0; 85 + } 86 + 87 + static struct platform_driver parisc_rtc_driver = { 88 + .driver = { 89 + .name = "rtc-parisc", 90 + .owner = THIS_MODULE, 91 + }, 92 + .probe = parisc_rtc_probe, 93 + .remove = __devexit_p(parisc_rtc_remove), 94 + }; 95 + 96 + static int __init parisc_rtc_init(void) 97 + { 98 + return platform_driver_register(&parisc_rtc_driver); 99 + } 100 + 101 + static void __exit parisc_rtc_fini(void) 102 + { 103 + platform_driver_unregister(&parisc_rtc_driver); 104 + } 105 + 106 + module_init(parisc_rtc_init); 107 + module_exit(parisc_rtc_fini); 108 + 109 + MODULE_AUTHOR("Kyle McMartin <kyle@mcmartin.ca>"); 110 + MODULE_LICENSE("GPL"); 111 + MODULE_DESCRIPTION("HP PA-RISC RTC driver");
include/asm-parisc/Kbuild arch/parisc/include/asm/Kbuild
include/asm-parisc/agp.h arch/parisc/include/asm/agp.h
include/asm-parisc/asmregs.h arch/parisc/include/asm/asmregs.h
include/asm-parisc/assembly.h arch/parisc/include/asm/assembly.h
include/asm-parisc/atomic.h arch/parisc/include/asm/atomic.h
include/asm-parisc/auxvec.h arch/parisc/include/asm/auxvec.h
include/asm-parisc/bitops.h arch/parisc/include/asm/bitops.h
include/asm-parisc/bug.h arch/parisc/include/asm/bug.h
include/asm-parisc/bugs.h arch/parisc/include/asm/bugs.h
include/asm-parisc/byteorder.h arch/parisc/include/asm/byteorder.h
include/asm-parisc/cache.h arch/parisc/include/asm/cache.h
include/asm-parisc/cacheflush.h arch/parisc/include/asm/cacheflush.h
include/asm-parisc/checksum.h arch/parisc/include/asm/checksum.h
include/asm-parisc/compat.h arch/parisc/include/asm/compat.h
include/asm-parisc/compat_rt_sigframe.h arch/parisc/include/asm/compat_rt_sigframe.h
include/asm-parisc/compat_signal.h arch/parisc/include/asm/compat_signal.h
include/asm-parisc/compat_ucontext.h arch/parisc/include/asm/compat_ucontext.h
include/asm-parisc/cputime.h arch/parisc/include/asm/cputime.h
include/asm-parisc/current.h arch/parisc/include/asm/current.h
include/asm-parisc/delay.h arch/parisc/include/asm/delay.h
include/asm-parisc/device.h arch/parisc/include/asm/device.h
include/asm-parisc/div64.h arch/parisc/include/asm/div64.h
include/asm-parisc/dma-mapping.h arch/parisc/include/asm/dma-mapping.h
include/asm-parisc/dma.h arch/parisc/include/asm/dma.h
include/asm-parisc/eisa_bus.h arch/parisc/include/asm/eisa_bus.h
include/asm-parisc/eisa_eeprom.h arch/parisc/include/asm/eisa_eeprom.h
include/asm-parisc/elf.h arch/parisc/include/asm/elf.h
include/asm-parisc/emergency-restart.h arch/parisc/include/asm/emergency-restart.h
include/asm-parisc/errno.h arch/parisc/include/asm/errno.h
include/asm-parisc/fb.h arch/parisc/include/asm/fb.h
include/asm-parisc/fcntl.h arch/parisc/include/asm/fcntl.h
include/asm-parisc/fixmap.h arch/parisc/include/asm/fixmap.h
include/asm-parisc/floppy.h arch/parisc/include/asm/floppy.h
include/asm-parisc/futex.h arch/parisc/include/asm/futex.h
include/asm-parisc/grfioctl.h arch/parisc/include/asm/grfioctl.h
include/asm-parisc/hardirq.h arch/parisc/include/asm/hardirq.h
include/asm-parisc/hardware.h arch/parisc/include/asm/hardware.h
include/asm-parisc/hw_irq.h arch/parisc/include/asm/hw_irq.h
include/asm-parisc/ide.h arch/parisc/include/asm/ide.h
include/asm-parisc/io.h arch/parisc/include/asm/io.h
include/asm-parisc/ioctl.h arch/parisc/include/asm/ioctl.h
include/asm-parisc/ioctls.h arch/parisc/include/asm/ioctls.h
include/asm-parisc/ipcbuf.h arch/parisc/include/asm/ipcbuf.h
include/asm-parisc/irq.h arch/parisc/include/asm/irq.h
include/asm-parisc/irq_regs.h arch/parisc/include/asm/irq_regs.h
include/asm-parisc/kdebug.h arch/parisc/include/asm/kdebug.h
include/asm-parisc/kmap_types.h arch/parisc/include/asm/kmap_types.h
include/asm-parisc/led.h arch/parisc/include/asm/led.h
include/asm-parisc/linkage.h arch/parisc/include/asm/linkage.h
include/asm-parisc/local.h arch/parisc/include/asm/local.h
include/asm-parisc/machdep.h arch/parisc/include/asm/machdep.h
include/asm-parisc/mc146818rtc.h arch/parisc/include/asm/mc146818rtc.h
include/asm-parisc/mckinley.h arch/parisc/include/asm/mckinley.h
include/asm-parisc/mman.h arch/parisc/include/asm/mman.h
include/asm-parisc/mmu.h arch/parisc/include/asm/mmu.h
include/asm-parisc/mmu_context.h arch/parisc/include/asm/mmu_context.h
include/asm-parisc/mmzone.h arch/parisc/include/asm/mmzone.h
include/asm-parisc/module.h arch/parisc/include/asm/module.h
include/asm-parisc/msgbuf.h arch/parisc/include/asm/msgbuf.h
include/asm-parisc/mutex.h arch/parisc/include/asm/mutex.h
include/asm-parisc/page.h arch/parisc/include/asm/page.h
include/asm-parisc/param.h arch/parisc/include/asm/param.h
include/asm-parisc/parisc-device.h arch/parisc/include/asm/parisc-device.h
include/asm-parisc/parport.h arch/parisc/include/asm/parport.h
include/asm-parisc/pci.h arch/parisc/include/asm/pci.h
+5
include/asm-parisc/pdc.h arch/parisc/include/asm/pdc.h
··· 332 332 #define BOOT_CONSOLE_SPA_OFFSET 0x3c4 333 333 #define BOOT_CONSOLE_PATH_OFFSET 0x3a8 334 334 335 + /* size of the pdc_result buffer for firmware.c */ 336 + #define NUM_PDC_RESULT 32 337 + 335 338 #if !defined(__ASSEMBLY__) 336 339 #ifdef __KERNEL__ 337 340 ··· 603 600 int pdc_chassis_disp(unsigned long disp); 604 601 int pdc_chassis_warn(unsigned long *warn); 605 602 int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info); 603 + int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info); 606 604 int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index, 607 605 void *iodc_data, unsigned int iodc_data_size); 608 606 int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info, ··· 642 638 #endif 643 639 644 640 void set_firmware_width(void); 641 + void set_firmware_width_unlocked(void); 645 642 int pdc_do_firm_test_reset(unsigned long ftc_bitmap); 646 643 int pdc_do_reset(void); 647 644 int pdc_soft_power_info(unsigned long *power_reg);
include/asm-parisc/pdc_chassis.h arch/parisc/include/asm/pdc_chassis.h
include/asm-parisc/pdcpat.h arch/parisc/include/asm/pdcpat.h
include/asm-parisc/percpu.h arch/parisc/include/asm/percpu.h
include/asm-parisc/perf.h arch/parisc/include/asm/perf.h
include/asm-parisc/pgalloc.h arch/parisc/include/asm/pgalloc.h
include/asm-parisc/pgtable.h arch/parisc/include/asm/pgtable.h
include/asm-parisc/poll.h arch/parisc/include/asm/poll.h
include/asm-parisc/posix_types.h arch/parisc/include/asm/posix_types.h
include/asm-parisc/prefetch.h arch/parisc/include/asm/prefetch.h
include/asm-parisc/processor.h arch/parisc/include/asm/processor.h
include/asm-parisc/psw.h arch/parisc/include/asm/psw.h
+10
include/asm-parisc/ptrace.h arch/parisc/include/asm/ptrace.h
··· 47 47 48 48 #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) 49 49 50 + #define __ARCH_WANT_COMPAT_SYS_PTRACE 51 + 52 + struct task_struct; 53 + #define arch_has_single_step() 1 54 + void user_disable_single_step(struct task_struct *task); 55 + void user_enable_single_step(struct task_struct *task); 56 + 57 + #define arch_has_block_step() 1 58 + void user_enable_block_step(struct task_struct *task); 59 + 50 60 /* XXX should we use iaoq[1] or iaoq[0] ? */ 51 61 #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) 52 62 #define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0)
include/asm-parisc/real.h arch/parisc/include/asm/real.h
include/asm-parisc/resource.h arch/parisc/include/asm/resource.h
+1 -1
include/asm-parisc/ropes.h arch/parisc/include/asm/ropes.h
··· 1 1 #ifndef _ASM_PARISC_ROPES_H_ 2 2 #define _ASM_PARISC_ROPES_H_ 3 3 4 - #include <asm-parisc/parisc-device.h> 4 + #include <asm/parisc-device.h> 5 5 6 6 #ifdef CONFIG_64BIT 7 7 /* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */
include/asm-parisc/rt_sigframe.h arch/parisc/include/asm/rt_sigframe.h
include/asm-parisc/rtc.h arch/parisc/include/asm/rtc.h
include/asm-parisc/runway.h arch/parisc/include/asm/runway.h
include/asm-parisc/scatterlist.h arch/parisc/include/asm/scatterlist.h
include/asm-parisc/sections.h arch/parisc/include/asm/sections.h
include/asm-parisc/segment.h arch/parisc/include/asm/segment.h
include/asm-parisc/sembuf.h arch/parisc/include/asm/sembuf.h
include/asm-parisc/serial.h arch/parisc/include/asm/serial.h
include/asm-parisc/setup.h arch/parisc/include/asm/setup.h
include/asm-parisc/shmbuf.h arch/parisc/include/asm/shmbuf.h
include/asm-parisc/shmparam.h arch/parisc/include/asm/shmparam.h
include/asm-parisc/sigcontext.h arch/parisc/include/asm/sigcontext.h
include/asm-parisc/siginfo.h arch/parisc/include/asm/siginfo.h
include/asm-parisc/signal.h arch/parisc/include/asm/signal.h
include/asm-parisc/smp.h arch/parisc/include/asm/smp.h
include/asm-parisc/socket.h arch/parisc/include/asm/socket.h
include/asm-parisc/sockios.h arch/parisc/include/asm/sockios.h
include/asm-parisc/spinlock.h arch/parisc/include/asm/spinlock.h
include/asm-parisc/spinlock_types.h arch/parisc/include/asm/spinlock_types.h
include/asm-parisc/stat.h arch/parisc/include/asm/stat.h
include/asm-parisc/statfs.h arch/parisc/include/asm/statfs.h
include/asm-parisc/string.h arch/parisc/include/asm/string.h
include/asm-parisc/superio.h arch/parisc/include/asm/superio.h
include/asm-parisc/system.h arch/parisc/include/asm/system.h
include/asm-parisc/termbits.h arch/parisc/include/asm/termbits.h
include/asm-parisc/termios.h arch/parisc/include/asm/termios.h
include/asm-parisc/thread_info.h arch/parisc/include/asm/thread_info.h
include/asm-parisc/timex.h arch/parisc/include/asm/timex.h
include/asm-parisc/tlb.h arch/parisc/include/asm/tlb.h
include/asm-parisc/tlbflush.h arch/parisc/include/asm/tlbflush.h
include/asm-parisc/topology.h arch/parisc/include/asm/topology.h
include/asm-parisc/traps.h arch/parisc/include/asm/traps.h
include/asm-parisc/types.h arch/parisc/include/asm/types.h
include/asm-parisc/uaccess.h arch/parisc/include/asm/uaccess.h
include/asm-parisc/ucontext.h arch/parisc/include/asm/ucontext.h
include/asm-parisc/unaligned.h arch/parisc/include/asm/unaligned.h
+7 -1
include/asm-parisc/unistd.h arch/parisc/include/asm/unistd.h
··· 801 801 #define __NR_timerfd_create (__NR_Linux + 306) 802 802 #define __NR_timerfd_settime (__NR_Linux + 307) 803 803 #define __NR_timerfd_gettime (__NR_Linux + 308) 804 + #define __NR_signalfd4 (__NR_Linux + 309) 805 + #define __NR_eventfd2 (__NR_Linux + 310) 806 + #define __NR_epoll_create1 (__NR_Linux + 311) 807 + #define __NR_dup3 (__NR_Linux + 312) 808 + #define __NR_pipe2 (__NR_Linux + 313) 809 + #define __NR_inotify_init1 (__NR_Linux + 314) 804 810 805 - #define __NR_Linux_syscalls (__NR_timerfd_gettime + 1) 811 + #define __NR_Linux_syscalls (__NR_inotify_init1 + 1) 806 812 807 813 808 814 #define __IGNORE_select /* newselect */
+2
include/asm-parisc/unwind.h arch/parisc/include/asm/unwind.h
··· 74 74 int unwind_once(struct unwind_frame_info *info); 75 75 int unwind_to_user(struct unwind_frame_info *info); 76 76 77 + int unwind_init(void); 78 + 77 79 #endif
include/asm-parisc/user.h arch/parisc/include/asm/user.h
include/asm-parisc/vga.h arch/parisc/include/asm/vga.h
include/asm-parisc/xor.h arch/parisc/include/asm/xor.h