diff options
Diffstat (limited to 'arch/h8300/kernel')
| -rw-r--r-- | arch/h8300/kernel/Makefile | 12 | ||||
| -rw-r--r-- | arch/h8300/kernel/asm-offsets.c | 60 | ||||
| -rw-r--r-- | arch/h8300/kernel/entry.S | 393 | ||||
| -rw-r--r-- | arch/h8300/kernel/gpio.c | 173 | ||||
| -rw-r--r-- | arch/h8300/kernel/h8300_ksyms.c | 101 | ||||
| -rw-r--r-- | arch/h8300/kernel/init_task.c | 36 | ||||
| -rw-r--r-- | arch/h8300/kernel/irq.c | 207 | ||||
| -rw-r--r-- | arch/h8300/kernel/module.c | 120 | ||||
| -rw-r--r-- | arch/h8300/kernel/process.c | 258 | ||||
| -rw-r--r-- | arch/h8300/kernel/ptrace.c | 169 | ||||
| -rw-r--r-- | arch/h8300/kernel/setup.c | 245 | ||||
| -rw-r--r-- | arch/h8300/kernel/signal.c | 563 | ||||
| -rw-r--r-- | arch/h8300/kernel/sys_h8300.c | 73 | ||||
| -rw-r--r-- | arch/h8300/kernel/syscalls.S | 365 | ||||
| -rw-r--r-- | arch/h8300/kernel/time.c | 67 | ||||
| -rw-r--r-- | arch/h8300/kernel/timer/Makefile | 6 | ||||
| -rw-r--r-- | arch/h8300/kernel/timer/itu.c | 82 | ||||
| -rw-r--r-- | arch/h8300/kernel/timer/timer16.c | 77 | ||||
| -rw-r--r-- | arch/h8300/kernel/timer/timer8.c | 102 | ||||
| -rw-r--r-- | arch/h8300/kernel/timer/tpu.c | 100 | ||||
| -rw-r--r-- | arch/h8300/kernel/traps.c | 174 | ||||
| -rw-r--r-- | arch/h8300/kernel/vmlinux.lds.S | 155 | 
22 files changed, 0 insertions, 3538 deletions
diff --git a/arch/h8300/kernel/Makefile b/arch/h8300/kernel/Makefile deleted file mode 100644 index 8d4d2a54be9..00000000000 --- a/arch/h8300/kernel/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# -# Makefile for the linux kernel. -# - -extra-y := vmlinux.lds - -obj-y := process.o traps.o ptrace.o irq.o \ -	 sys_h8300.o time.o signal.o \ -         setup.o gpio.o init_task.o syscalls.o \ -	 entry.o timer/ - -obj-$(CONFIG_MODULES) += module.o h8300_ksyms.o  diff --git a/arch/h8300/kernel/asm-offsets.c b/arch/h8300/kernel/asm-offsets.c deleted file mode 100644 index fd961e0bd74..00000000000 --- a/arch/h8300/kernel/asm-offsets.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This program is used to generate definitions needed by - * assembly language modules. - * - * We use the technique used in the OSF Mach kernel code: - * generate asm statements containing #defines, - * compile this file to assembler, and then extract the - * #defines from the assembly-language output. - */ - -#include <linux/stddef.h> -#include <linux/sched.h> -#include <linux/kernel_stat.h> -#include <linux/ptrace.h> -#include <linux/hardirq.h> -#include <linux/kbuild.h> -#include <asm/bootinfo.h> -#include <asm/irq.h> -#include <asm/ptrace.h> - -int main(void) -{ -	/* offsets into the task struct */ -	DEFINE(TASK_STATE, offsetof(struct task_struct, state)); -	DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); -	DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); -	DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked)); -	DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); -	DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack)); -	DEFINE(TASK_MM, offsetof(struct task_struct, mm)); -	DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); - -	/* offsets into the irq_cpustat_t struct */ -	DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending)); - -	/* offsets into the thread struct */ -	DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp)); -	DEFINE(THREAD_USP, offsetof(struct thread_struct, usp)); -	DEFINE(THREAD_CCR, offsetof(struct thread_struct, ccr)); - -	/* offsets into the pt_regs struct */ -	DEFINE(LER0,  offsetof(struct pt_regs, er0)      - sizeof(long)); -	DEFINE(LER1,  offsetof(struct pt_regs, er1)      - sizeof(long)); -	DEFINE(LER2,  offsetof(struct pt_regs, er2)      - sizeof(long)); -	DEFINE(LER3,  offsetof(struct pt_regs, er3)      - sizeof(long)); -	DEFINE(LER4,  offsetof(struct pt_regs, er4)      - sizeof(long)); -	DEFINE(LER5,  offsetof(struct pt_regs, er5)      - sizeof(long)); -	DEFINE(LER6,  offsetof(struct pt_regs, er6)      - sizeof(long)); -	DEFINE(LORIG, offsetof(struct pt_regs, orig_er0) - sizeof(long)); -	DEFINE(LCCR,  offsetof(struct pt_regs, ccr)      - sizeof(long)); -	DEFINE(LVEC,  offsetof(struct pt_regs, vector)   - sizeof(long)); -#if defined(__H8300S__) -	DEFINE(LEXR,  offsetof(struct pt_regs, exr)      - sizeof(long)); -#endif -	DEFINE(LRET,  offsetof(struct pt_regs, pc)       - sizeof(long)); - -	DEFINE(PT_PTRACED, PT_PTRACED); - -	return 0; -} diff --git a/arch/h8300/kernel/entry.S b/arch/h8300/kernel/entry.S deleted file mode 100644 index ca743169030..00000000000 --- a/arch/h8300/kernel/entry.S +++ /dev/null @@ -1,393 +0,0 @@ -/* -*- mode: asm -*- - * - *  linux/arch/h8300/platform/h8300h/entry.S - * - *  Yoshinori Sato <ysato@users.sourceforge.jp> - *  David McCullough <davidm@snapgear.com> - * - */ - -/* - *  entry.S - *  include exception/interrupt gateway - *          system call entry - */ - -#include <linux/sys.h> -#include <asm/unistd.h> -#include <asm/setup.h> -#include <asm/segment.h> -#include <asm/linkage.h> -#include <asm/asm-offsets.h> -#include <asm/thread_info.h> -#include <asm/errno.h> - -#if defined(CONFIG_CPU_H8300H) -#define USERRET 8 -INTERRUPTS = 64 -	.h8300h -	.macro	SHLL2 reg -	shll.l	\reg -	shll.l	\reg -	.endm -	.macro	SHLR2 reg -	shlr.l	\reg -	shlr.l	\reg -	.endm -	.macro	SAVEREGS -	mov.l	er0,@-sp -	mov.l	er1,@-sp -	mov.l	er2,@-sp -	mov.l	er3,@-sp -	.endm -	.macro	RESTOREREGS -	mov.l	@sp+,er3 -	mov.l	@sp+,er2 -	.endm -	.macro	SAVEEXR -	.endm -	.macro	RESTOREEXR -	.endm -#endif -#if defined(CONFIG_CPU_H8S) -#define USERRET 10 -#define USEREXR 8 -INTERRUPTS = 128 -	.h8300s -	.macro	SHLL2 reg -	shll.l	#2,\reg -	.endm -	.macro	SHLR2 reg -	shlr.l	#2,\reg -	.endm -	.macro	SAVEREGS -	stm.l	er0-er3,@-sp -	.endm -	.macro	RESTOREREGS -	ldm.l	@sp+,er2-er3 -	.endm -	.macro	SAVEEXR -	mov.w	@(USEREXR:16,er0),r1 -	mov.w	r1,@(LEXR-LER3:16,sp)		/* copy EXR */ -	.endm -	.macro	RESTOREEXR -	mov.w	@(LEXR-LER1:16,sp),r1		/* restore EXR */ -	mov.b	r1l,r1h -	mov.w	r1,@(USEREXR:16,er0) -	.endm -#endif - - -/* CPU context save/restore macros. */ - -	.macro	SAVE_ALL -	mov.l	er0,@-sp -	stc	ccr,r0l				/* check kernel mode */ -	btst	#4,r0l -	bne	5f - -	/* user mode */ -	mov.l	sp,@SYMBOL_NAME(sw_usp) -	mov.l	@sp,er0				/* restore saved er0 */ -	orc	#0x10,ccr			/* switch kernel stack */ -	mov.l	@SYMBOL_NAME(sw_ksp),sp -	sub.l	#(LRET-LORIG),sp		/* allocate LORIG - LRET */ -	SAVEREGS -	mov.l   @SYMBOL_NAME(sw_usp),er0 -	mov.l   @(USERRET:16,er0),er1           /* copy the RET addr */ -	mov.l   er1,@(LRET-LER3:16,sp) -	SAVEEXR - -	mov.l	@(LORIG-LER3:16,sp),er0 -	mov.l	er0,@(LER0-LER3:16,sp)		/* copy ER0 */ -	mov.w	e1,r1				/* e1 highbyte = ccr */ -	and	#0xef,r1h			/* mask mode? flag */ -	bra	6f -5: -	/* kernel mode */ -	mov.l	@sp,er0				/* restore saved er0 */ -	subs	#2,sp				/* set dummy ccr */ -	SAVEREGS -	mov.w	@(LRET-LER3:16,sp),r1		/* copy old ccr */ -6: -	mov.b	r1h,r1l -	mov.b	#0,r1h -	mov.w	r1,@(LCCR-LER3:16,sp)		/* set ccr */ -	mov.l	er6,@-sp			/* syscall arg #6 */ -	mov.l	er5,@-sp			/* syscall arg #5 */ -	mov.l	er4,@-sp			/* syscall arg #4 */ -	.endm					/* r1 = ccr */ - -	.macro	RESTORE_ALL -	mov.l	@sp+,er4 -	mov.l	@sp+,er5 -	mov.l	@sp+,er6 -	RESTOREREGS -	mov.w	@(LCCR-LER1:16,sp),r0		/* check kernel mode */ -	btst	#4,r0l -	bne	7f - -	orc	#0x80,ccr -	mov.l	@SYMBOL_NAME(sw_usp),er0 -	mov.l	@(LER0-LER1:16,sp),er1		/* restore ER0 */ -	mov.l	er1,@er0 -	RESTOREEXR -	mov.w	@(LCCR-LER1:16,sp),r1		/* restore the RET addr */ -	mov.b	r1l,r1h -	mov.b	@(LRET+1-LER1:16,sp),r1l -	mov.w	r1,e1 -	mov.w	@(LRET+2-LER1:16,sp),r1 -	mov.l	er1,@(USERRET:16,er0) - -	mov.l	@sp+,er1 -	add.l	#(LRET-LER1),sp			/* remove LORIG - LRET */ -	mov.l	sp,@SYMBOL_NAME(sw_ksp) -	andc	#0xef,ccr			/* switch to user mode */ -	mov.l	er0,sp -	bra	8f -7: -	mov.l	@sp+,er1 -	adds	#4,sp -	adds	#2,sp -8: -	mov.l	@sp+,er0 -	adds	#4,sp				/* remove the sw created LVEC */ -	rte -	.endm - -.globl SYMBOL_NAME(system_call) -.globl SYMBOL_NAME(ret_from_exception) -.globl SYMBOL_NAME(ret_from_fork) -.globl SYMBOL_NAME(ret_from_interrupt) -.globl SYMBOL_NAME(interrupt_redirect_table) -.globl SYMBOL_NAME(sw_ksp),SYMBOL_NAME(sw_usp) -.globl SYMBOL_NAME(resume) -.globl SYMBOL_NAME(interrupt_entry) -.globl SYMBOL_NAME(trace_break) - -#if defined(CONFIG_ROMKERNEL) -	.section .int_redirect,"ax" -SYMBOL_NAME_LABEL(interrupt_redirect_table) -#if defined(CONFIG_CPU_H8300H) -	.rept	7 -	.long	0 -	.endr -#endif -#if defined(CONFIG_CPU_H8S) -	.rept	5 -	.long	0 -	.endr -	jmp	@SYMBOL_NAME(trace_break) -	.long	0 -#endif - -	jsr	@SYMBOL_NAME(interrupt_entry)	/* NMI */ -	jmp	@SYMBOL_NAME(system_call)	/* TRAPA #0 (System call) */ -	.long	0 -	.long	0 -	jmp	@SYMBOL_NAME(trace_break)	/* TRAPA #3 (breakpoint) */ -	.rept	INTERRUPTS-12 -	jsr	@SYMBOL_NAME(interrupt_entry) -	.endr -#endif -#if defined(CONFIG_RAMKERNEL) -.globl SYMBOL_NAME(interrupt_redirect_table) -	.section .bss -SYMBOL_NAME_LABEL(interrupt_redirect_table) -	.space	4 -#endif - -	.section .text -	.align	2 -SYMBOL_NAME_LABEL(interrupt_entry) -	SAVE_ALL -	mov.l	sp,er0 -	add.l	#LVEC,er0 -	btst	#4,r1l -	bne	1f -	/* user LVEC */ -	mov.l	@SYMBOL_NAME(sw_usp),er0 -	adds	#4,er0 -1: -	mov.l	@er0,er0			/* LVEC address */ -#if defined(CONFIG_ROMKERNEL) -	sub.l	#SYMBOL_NAME(interrupt_redirect_table),er0 -#endif -#if defined(CONFIG_RAMKERNEL) -	mov.l	@SYMBOL_NAME(interrupt_redirect_table),er1 -	sub.l	er1,er0 -#endif -	SHLR2	er0 -	dec.l	#1,er0 -	mov.l	sp,er1 -	subs	#4,er1				/* adjust ret_pc */ -	jsr	@SYMBOL_NAME(do_IRQ) -	jmp	@SYMBOL_NAME(ret_from_interrupt) - -SYMBOL_NAME_LABEL(system_call) -	subs	#4,sp				/* dummy LVEC */ -	SAVE_ALL -	andc	#0x7f,ccr -	mov.l	er0,er4 - -	/* save top of frame */ -	mov.l	sp,er0 -	jsr	@SYMBOL_NAME(set_esp0) -	mov.l	sp,er2 -	and.w	#0xe000,r2 -	mov.b	@((TI_FLAGS+3-(TIF_SYSCALL_TRACE >> 3)):16,er2),r2l -	btst	#(TIF_SYSCALL_TRACE & 7),r2l -	beq	1f -	jsr	@SYMBOL_NAME(do_syscall_trace) -1: -	cmp.l	#NR_syscalls,er4 -	bcc	badsys -	SHLL2	er4 -	mov.l	#SYMBOL_NAME(sys_call_table),er0 -	add.l	er4,er0 -	mov.l	@er0,er4 -	beq	SYMBOL_NAME(ret_from_exception):16 -	mov.l	@(LER1:16,sp),er0 -	mov.l	@(LER2:16,sp),er1 -	mov.l	@(LER3:16,sp),er2 -	jsr	@er4 -	mov.l	er0,@(LER0:16,sp)		/* save the return value */ -	mov.l	sp,er2 -	and.w	#0xe000,r2 -	mov.b	@((TI_FLAGS+3-(TIF_SYSCALL_TRACE >> 3)):16,er2),r2l -	btst	#(TIF_SYSCALL_TRACE & 7),r2l -	beq	2f -	jsr	@SYMBOL_NAME(do_syscall_trace) -2: -#if defined(CONFIG_SYSCALL_PRINT) -	jsr	@SYMBOL_NAME(syscall_print) -#endif -	orc	#0x80,ccr -	bra	resume_userspace - -badsys: -	mov.l	#-ENOSYS,er0 -	mov.l	er0,@(LER0:16,sp) -	bra	resume_userspace - -#if !defined(CONFIG_PREEMPT) -#define resume_kernel restore_all -#endif - -SYMBOL_NAME_LABEL(ret_from_exception) -#if defined(CONFIG_PREEMPT) -	orc	#0x80,ccr -#endif -SYMBOL_NAME_LABEL(ret_from_interrupt) -	mov.b	@(LCCR+1:16,sp),r0l -	btst	#4,r0l -	bne	resume_kernel:8		/* return from kernel */ -resume_userspace: -	andc	#0x7f,ccr -	mov.l	sp,er4 -	and.w	#0xe000,r4		/* er4 <- current thread info */ -	mov.l	@(TI_FLAGS:16,er4),er1 -	and.l	#_TIF_WORK_MASK,er1 -	beq	restore_all:8 -work_pending: -	btst	#TIF_NEED_RESCHED,r1l -	bne	work_resched:8 -	/* work notifysig */ -	mov.l	sp,er0 -	subs	#4,er0			/* er0: pt_regs */ -	jsr	@SYMBOL_NAME(do_notify_resume) -	bra	restore_all:8 -work_resched: -	mov.l	sp,er0 -	jsr	@SYMBOL_NAME(set_esp0) -	jsr	@SYMBOL_NAME(schedule) -	bra	resume_userspace:8 -restore_all: -	RESTORE_ALL			/* Does RTE */ - -#if defined(CONFIG_PREEMPT) -resume_kernel: -	mov.l	@(TI_PRE_COUNT:16,er4),er0 -	bne	restore_all:8 -need_resched: -	mov.l	@(TI_FLAGS:16,er4),er0 -	btst	#TIF_NEED_RESCHED,r0l -	beq	restore_all:8 -	mov.b	@(LCCR+1:16,sp),r0l	/* Interrupt Enabled? */ -	bmi	restore_all:8 -	mov.l	#PREEMPT_ACTIVE,er0 -	mov.l	er0,@(TI_PRE_COUNT:16,er4) -	andc	#0x7f,ccr -	mov.l	sp,er0 -	jsr	@SYMBOL_NAME(set_esp0) -	jsr	@SYMBOL_NAME(schedule) -	orc	#0x80,ccr -	bra	need_resched:8 -#endif - -SYMBOL_NAME_LABEL(ret_from_fork) -	mov.l	er2,er0 -	jsr	@SYMBOL_NAME(schedule_tail) -	jmp	@SYMBOL_NAME(ret_from_exception) - -SYMBOL_NAME_LABEL(resume) -	/* -	 * Beware - when entering resume, offset of tss is in d1, -	 * prev (the current task) is in a0, next (the new task) -	 * is in a1 and d2.b is non-zero if the mm structure is -	 * shared between the tasks, so don't change these -	 * registers until their contents are no longer needed. -	 */ - -	/* save sr */ -	sub.w	r3,r3 -	stc	ccr,r3l -	mov.w	r3,@(THREAD_CCR+2:16,er0) - -	/* disable interrupts */ -	orc	#0x80,ccr -	mov.l	@SYMBOL_NAME(sw_usp),er3 -	mov.l	er3,@(THREAD_USP:16,er0) -	mov.l	sp,@(THREAD_KSP:16,er0) - -	/* Skip address space switching if they are the same. */ -	/* FIXME: what did we hack out of here, this does nothing! */ - -	mov.l	@(THREAD_USP:16,er1),er0 -	mov.l	er0,@SYMBOL_NAME(sw_usp) -	mov.l	@(THREAD_KSP:16,er1),sp - -	/* restore status register */ -	mov.w	@(THREAD_CCR+2:16,er1),r3 - -	ldc	r3l,ccr -	rts - -SYMBOL_NAME_LABEL(trace_break) -	subs	#4,sp -	SAVE_ALL -	sub.l	er1,er1 -	dec.l	#1,er1 -	mov.l	er1,@(LORIG,sp) -	mov.l	sp,er0 -	jsr	@SYMBOL_NAME(set_esp0) -	mov.l	@SYMBOL_NAME(sw_usp),er0 -	mov.l	@er0,er1 -	mov.w	@(-2:16,er1),r2 -	cmp.w	#0x5730,r2 -	beq	1f -	subs	#2,er1 -	mov.l	er1,@er0 -1: -	and.w	#0xff,e1 -	mov.l	er1,er0 -	jsr	@SYMBOL_NAME(trace_trap) -	jmp	@SYMBOL_NAME(ret_from_exception) - -	.section	.bss -SYMBOL_NAME_LABEL(sw_ksp) -	.space	4 -SYMBOL_NAME_LABEL(sw_usp) -	.space	4 - -	.end diff --git a/arch/h8300/kernel/gpio.c b/arch/h8300/kernel/gpio.c deleted file mode 100644 index 6a25dd5530e..00000000000 --- a/arch/h8300/kernel/gpio.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - *  linux/arch/h8300/kernel/gpio.c - * - *  Yoshinori Sato <ysato@users.sourceforge.jp> - * - */ - -/* - * Internal I/O Port Management - */ - -#include <linux/stddef.h> -#include <linux/proc_fs.h> -#include <linux/kernel.h> -#include <linux/string.h> -#include <linux/fs.h> -#include <linux/init.h> - -#define _(addr) (volatile unsigned char *)(addr) -#if defined(CONFIG_H83007) || defined(CONFIG_H83068) -#include <asm/regs306x.h> -static volatile unsigned char *ddrs[] = { -	_(P1DDR),_(P2DDR),_(P3DDR),_(P4DDR),_(P5DDR),_(P6DDR), -	NULL,    _(P8DDR),_(P9DDR),_(PADDR),_(PBDDR), -}; -#define MAX_PORT 11 -#endif - - #if defined(CONFIG_H83002) || defined(CONFIG_H8048) -/* Fix me!! */ -#include <asm/regs306x.h> -static volatile unsigned char *ddrs[] = { -	_(P1DDR),_(P2DDR),_(P3DDR),_(P4DDR),_(P5DDR),_(P6DDR), -	NULL,    _(P8DDR),_(P9DDR),_(PADDR),_(PBDDR), -}; -#define MAX_PORT 11 -#endif - -#if defined(CONFIG_H8S2678) -#include <asm/regs267x.h> -static volatile unsigned char *ddrs[] = { -	_(P1DDR),_(P2DDR),_(P3DDR),NULL    ,_(P5DDR),_(P6DDR), -	_(P7DDR),_(P8DDR),NULL,    _(PADDR),_(PBDDR),_(PCDDR), -	_(PDDDR),_(PEDDR),_(PFDDR),_(PGDDR),_(PHDDR), -	_(PADDR),_(PBDDR),_(PCDDR),_(PDDDR),_(PEDDR),_(PFDDR), -	_(PGDDR),_(PHDDR) -}; -#define MAX_PORT 17 -#endif -#undef _ -  -#if !defined(P1DDR) -#error Unsuppoted CPU Selection -#endif - -static struct { -	unsigned char used; -	unsigned char ddr; -} gpio_regs[MAX_PORT]; - -extern char *_platform_gpio_table(int length); - -int h8300_reserved_gpio(int port, unsigned int bits) -{ -	unsigned char *used; - -	if (port < 0 || port >= MAX_PORT) -		return -1; -	used = &(gpio_regs[port].used); -	if ((*used & bits) != 0) -		return 0; -	*used |= bits; -	return 1; -} - -int h8300_free_gpio(int port, unsigned int bits) -{ -	unsigned char *used; - -	if (port < 0 || port >= MAX_PORT) -		return -1; -	used = &(gpio_regs[port].used); -	if ((*used & bits) != bits) -		return 0; -	*used &= (~bits); -	return 1; -} - -int h8300_set_gpio_dir(int port_bit,int dir) -{ -	int port = (port_bit >> 8) & 0xff; -	int bit  = port_bit & 0xff; - -	if (ddrs[port] == NULL) -		return 0; -	if (gpio_regs[port].used & bit) { -		if (dir) -			gpio_regs[port].ddr |= bit; -		else -			gpio_regs[port].ddr &= ~bit; -		*ddrs[port] = gpio_regs[port].ddr; -		return 1; -	} else -		return 0; -} - -int h8300_get_gpio_dir(int port_bit) -{ -	int port = (port_bit >> 8) & 0xff; -	int bit  = port_bit & 0xff; - -	if (ddrs[port] == NULL) -		return 0; -	if (gpio_regs[port].used & bit) { -		return (gpio_regs[port].ddr & bit) != 0; -	} else -		return -1; -} - -#if defined(CONFIG_PROC_FS) -static char *port_status(int portno) -{ -	static char result[10]; -	static const char io[2]={'I','O'}; -	char *rp; -	int c; -	unsigned char used,ddr; -	 -	used = gpio_regs[portno].used; -	ddr  = gpio_regs[portno].ddr; -	result[8]='\0'; -	rp = result + 7; -	for (c = 8; c > 0; c--,rp--,used >>= 1, ddr >>= 1) -		if (used & 0x01) -			*rp = io[ ddr & 0x01]; -		else	 -			*rp = '-'; -	return result; -} - -static int gpio_proc_read(char *buf, char **start, off_t offset,  -                          int len, int *unused_i, void *unused_v) -{ -	int c,outlen; -	static const char port_name[]="123456789ABCDEFGH"; -	outlen = 0; -	for (c = 0; c < MAX_PORT; c++) { -		if (ddrs[c] == NULL) -			continue ; -		len = sprintf(buf,"P%c: %s\n",port_name[c],port_status(c)); -		buf += len; -		outlen += len; -	} -	return outlen; -} - -static __init int register_proc(void) -{ -	struct proc_dir_entry *proc_gpio; - -	proc_gpio = create_proc_entry("gpio", S_IRUGO, NULL); -	if (proc_gpio)  -		proc_gpio->read_proc = gpio_proc_read; -	return proc_gpio != NULL; -} - -__initcall(register_proc); -#endif - -void __init h8300_gpio_init(void) -{ -	memcpy(gpio_regs,_platform_gpio_table(sizeof(gpio_regs)),sizeof(gpio_regs)); -} diff --git a/arch/h8300/kernel/h8300_ksyms.c b/arch/h8300/kernel/h8300_ksyms.c deleted file mode 100644 index 6866bd9c7fb..00000000000 --- a/arch/h8300/kernel/h8300_ksyms.c +++ /dev/null @@ -1,101 +0,0 @@ -#include <linux/module.h> -#include <linux/linkage.h> -#include <linux/sched.h> -#include <linux/string.h> -#include <linux/mm.h> -#include <linux/user.h> -#include <linux/elfcore.h> -#include <linux/in6.h> -#include <linux/interrupt.h> - -#include <asm/setup.h> -#include <asm/pgalloc.h> -#include <asm/irq.h> -#include <asm/io.h> -#include <asm/checksum.h> -#include <asm/current.h> -#include <asm/gpio.h> - -//asmlinkage long long __ashrdi3 (long long, int); -//asmlinkage long long __lshrdi3 (long long, int); -extern char h8300_debug_device[]; - -/* platform dependent support */ - -EXPORT_SYMBOL(strnlen); -EXPORT_SYMBOL(strrchr); -EXPORT_SYMBOL(strstr); -EXPORT_SYMBOL(strchr); -EXPORT_SYMBOL(strcat); -EXPORT_SYMBOL(strlen); -EXPORT_SYMBOL(strcmp); -EXPORT_SYMBOL(strncmp); - -EXPORT_SYMBOL(ip_fast_csum); - -EXPORT_SYMBOL(kernel_thread); -EXPORT_SYMBOL(enable_irq); -EXPORT_SYMBOL(disable_irq); - -/* Networking helper routines. */ -EXPORT_SYMBOL(csum_partial_copy_nocheck); - -/* The following are special because they're not called -   explicitly (the C compiler generates them).  Fortunately, -   their interface isn't gonna change any time soon now, so -   it's OK to leave it out of version control.  */ -//EXPORT_SYMBOL(__ashrdi3); -//EXPORT_SYMBOL(__lshrdi3); -EXPORT_SYMBOL(memcpy); -EXPORT_SYMBOL(memset); -EXPORT_SYMBOL(memcmp); -EXPORT_SYMBOL(memscan); -EXPORT_SYMBOL(memmove); - -/* - * libgcc functions - functions that are used internally by the - * compiler...  (prototypes are not correct though, but that - * doesn't really matter since they're not versioned). - */ -extern void __gcc_bcmp(void); -extern void __ashldi3(void); -extern void __ashrdi3(void); -extern void __cmpdi2(void); -extern void __divdi3(void); -extern void __divsi3(void); -extern void __lshrdi3(void); -extern void __moddi3(void); -extern void __modsi3(void); -extern void __muldi3(void); -extern void __mulsi3(void); -extern void __negdi2(void); -extern void __ucmpdi2(void); -extern void __udivdi3(void); -extern void __udivmoddi4(void); -extern void __udivsi3(void); -extern void __umoddi3(void); -extern void __umodsi3(void); - -        /* gcc lib functions */ -EXPORT_SYMBOL(__gcc_bcmp); -EXPORT_SYMBOL(__ashldi3); -EXPORT_SYMBOL(__ashrdi3); -EXPORT_SYMBOL(__cmpdi2); -EXPORT_SYMBOL(__divdi3); -EXPORT_SYMBOL(__divsi3); -EXPORT_SYMBOL(__lshrdi3); -EXPORT_SYMBOL(__moddi3); -EXPORT_SYMBOL(__modsi3); -EXPORT_SYMBOL(__muldi3); -EXPORT_SYMBOL(__mulsi3); -EXPORT_SYMBOL(__negdi2); -EXPORT_SYMBOL(__ucmpdi2); -EXPORT_SYMBOL(__udivdi3); -EXPORT_SYMBOL(__udivmoddi4); -EXPORT_SYMBOL(__udivsi3); -EXPORT_SYMBOL(__umoddi3); -EXPORT_SYMBOL(__umodsi3); - -EXPORT_SYMBOL(h8300_reserved_gpio); -EXPORT_SYMBOL(h8300_free_gpio); -EXPORT_SYMBOL(h8300_set_gpio_dir); diff --git a/arch/h8300/kernel/init_task.c b/arch/h8300/kernel/init_task.c deleted file mode 100644 index 54c1062ee80..00000000000 --- a/arch/h8300/kernel/init_task.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - *  linux/arch/h8300/kernel/init_task.c - */ -#include <linux/mm.h> -#include <linux/module.h> -#include <linux/sched.h> -#include <linux/init.h> -#include <linux/init_task.h> -#include <linux/fs.h> -#include <linux/mqueue.h> - -#include <asm/uaccess.h> -#include <asm/pgtable.h> - -static struct signal_struct init_signals = INIT_SIGNALS(init_signals); -static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); -/* - * Initial task structure. - * - * All other task structs will be allocated on slabs in fork.c - */ -__asm__(".align 4"); -struct task_struct init_task = INIT_TASK(init_task); - -EXPORT_SYMBOL(init_task); - -/* - * Initial thread structure. - * - * We need to make sure that this is 8192-byte aligned due to the - * way process stacks are handled. This is done by having a special - * "init_task" linker map entry.. - */ -union thread_union init_thread_union __init_task_data = -	{ INIT_THREAD_INFO(init_task) }; - diff --git a/arch/h8300/kernel/irq.c b/arch/h8300/kernel/irq.c deleted file mode 100644 index c25dc2c2b1d..00000000000 --- a/arch/h8300/kernel/irq.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * linux/arch/h8300/kernel/irq.c - * - * Copyright 2007 Yoshinori Sato <ysato@users.sourceforge.jp> - */ - -#include <linux/module.h> -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/kernel_stat.h> -#include <linux/seq_file.h> -#include <linux/init.h> -#include <linux/random.h> -#include <linux/bootmem.h> -#include <linux/irq.h> -#include <linux/interrupt.h> - -#include <asm/system.h> -#include <asm/traps.h> -#include <asm/io.h> -#include <asm/setup.h> -#include <asm/errno.h> - -/*#define DEBUG*/ - -extern unsigned long *interrupt_redirect_table; -extern const int h8300_saved_vectors[]; -extern const h8300_vector h8300_trap_table[]; -int h8300_enable_irq_pin(unsigned int irq); -void h8300_disable_irq_pin(unsigned int irq); - -#define CPU_VECTOR ((unsigned long *)0x000000) -#define ADDR_MASK (0xffffff) - -static inline int is_ext_irq(unsigned int irq) -{ -	return (irq >= EXT_IRQ0 && irq <= (EXT_IRQ0 + EXT_IRQS)); -} - -static void h8300_enable_irq(unsigned int irq) -{ -	if (is_ext_irq(irq)) -		IER_REGS |= 1 << (irq - EXT_IRQ0); -} - -static void h8300_disable_irq(unsigned int irq) -{ -	if (is_ext_irq(irq)) -		IER_REGS &= ~(1 << (irq - EXT_IRQ0)); -} - -static void h8300_end_irq(unsigned int irq) -{ -} - -static unsigned int h8300_startup_irq(unsigned int irq) -{ -	if (is_ext_irq(irq)) -		return h8300_enable_irq_pin(irq); -	else -		return 0; -} - -static void h8300_shutdown_irq(unsigned int irq) -{ -	if (is_ext_irq(irq)) -		h8300_disable_irq_pin(irq); -} - -/* - * h8300 interrupt controller implementation - */ -struct irq_chip h8300irq_chip = { -	.name		= "H8300-INTC", -	.startup	= h8300_startup_irq, -	.shutdown	= h8300_shutdown_irq, -	.enable		= h8300_enable_irq, -	.disable	= h8300_disable_irq, -	.ack		= NULL, -	.end		= h8300_end_irq, -}; - -#if defined(CONFIG_RAMKERNEL) -static unsigned long __init *get_vector_address(void) -{ -	unsigned long *rom_vector = CPU_VECTOR; -	unsigned long base,tmp; -	int vec_no; - -	base = rom_vector[EXT_IRQ0] & ADDR_MASK; - -	/* check romvector format */ -	for (vec_no = EXT_IRQ1; vec_no <= EXT_IRQ0+EXT_IRQS; vec_no++) { -		if ((base+(vec_no - EXT_IRQ0)*4) != (rom_vector[vec_no] & ADDR_MASK)) -			return NULL; -	} - -	/* ramvector base address */ -	base -= EXT_IRQ0*4; - -	/* writerble check */ -	tmp = ~(*(volatile unsigned long *)base); -	(*(volatile unsigned long *)base) = tmp; -	if ((*(volatile unsigned long *)base) != tmp) -		return NULL; -	return (unsigned long *)base; -} - -static void __init setup_vector(void) -{ -	int i; -	unsigned long *ramvec,*ramvec_p; -	const h8300_vector *trap_entry; -	const int *saved_vector; - -	ramvec = get_vector_address(); -	if (ramvec == NULL) -		panic("interrupt vector serup failed."); -	else -		printk(KERN_INFO "virtual vector at 0x%08lx\n",(unsigned long)ramvec); - -	/* create redirect table */ -	ramvec_p = ramvec; -	trap_entry = h8300_trap_table; -	saved_vector = h8300_saved_vectors; -	for ( i = 0; i < NR_IRQS; i++) { -		if (i == *saved_vector) { -			ramvec_p++; -			saved_vector++; -		} else { -			if ( i < NR_TRAPS ) { -				if (*trap_entry) -					*ramvec_p = VECTOR(*trap_entry); -				ramvec_p++; -				trap_entry++; -			} else -				*ramvec_p++ = REDIRECT(interrupt_entry); -		} -	} -	interrupt_redirect_table = ramvec; -#ifdef DEBUG -	ramvec_p = ramvec; -	for (i = 0; i < NR_IRQS; i++) { -		if ((i % 8) == 0) -			printk(KERN_DEBUG "\n%p: ",ramvec_p); -		printk(KERN_DEBUG "%p ",*ramvec_p); -		ramvec_p++; -	} -	printk(KERN_DEBUG "\n"); -#endif -} -#else -#define setup_vector() do { } while(0) -#endif - -void __init init_IRQ(void) -{ -	int c; - -	setup_vector(); - -	for (c = 0; c < NR_IRQS; c++) { -		irq_desc[c].status = IRQ_DISABLED; -		irq_desc[c].action = NULL; -		irq_desc[c].depth = 1; -		irq_desc[c].chip = &h8300irq_chip; -	} -} - -asmlinkage void do_IRQ(int irq) -{ -	irq_enter(); -	__do_IRQ(irq); -	irq_exit(); -} - -#if defined(CONFIG_PROC_FS) -int show_interrupts(struct seq_file *p, void *v) -{ -	int i = *(loff_t *) v; -	struct irqaction * action; -	unsigned long flags; - -	if (i == 0) -		seq_puts(p, "           CPU0"); - -	if (i < NR_IRQS) { -		raw_spin_lock_irqsave(&irq_desc[i].lock, flags); -		action = irq_desc[i].action; -		if (!action) -			goto unlock; -		seq_printf(p, "%3d: ",i); -		seq_printf(p, "%10u ", kstat_irqs(i)); -		seq_printf(p, " %14s", irq_desc[i].chip->name); -		seq_printf(p, "-%-8s", irq_desc[i].name); -		seq_printf(p, "  %s", action->name); - -		for (action=action->next; action; action = action->next) -			seq_printf(p, ", %s", action->name); -		seq_putc(p, '\n'); -unlock: -		raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); -	} -	return 0; -} -#endif diff --git a/arch/h8300/kernel/module.c b/arch/h8300/kernel/module.c deleted file mode 100644 index db4953dc4e1..00000000000 --- a/arch/h8300/kernel/module.c +++ /dev/null @@ -1,120 +0,0 @@ -#include <linux/moduleloader.h> -#include <linux/elf.h> -#include <linux/vmalloc.h> -#include <linux/fs.h> -#include <linux/string.h> -#include <linux/kernel.h> - -#if 0 -#define DEBUGP printk -#else -#define DEBUGP(fmt...) -#endif - -void *module_alloc(unsigned long size) -{ -	if (size == 0) -		return NULL; -	return vmalloc(size); -} - - -/* Free memory returned from module_alloc */ -void module_free(struct module *mod, void *module_region) -{ -	vfree(module_region); -} - -/* We don't need anything special. */ -int module_frob_arch_sections(Elf_Ehdr *hdr, -			      Elf_Shdr *sechdrs, -			      char *secstrings, -			      struct module *mod) -{ -	return 0; -} - -int apply_relocate(Elf32_Shdr *sechdrs, -		   const char *strtab, -		   unsigned int symindex, -		   unsigned int relsec, -		   struct module *me) -{ -	printk(KERN_ERR "module %s: RELOCATION unsupported\n", -	       me->name); -	return -ENOEXEC; -} - -int apply_relocate_add(Elf32_Shdr *sechdrs, -		       const char *strtab, -		       unsigned int symindex, -		       unsigned int relsec, -		       struct module *me) -{ -	unsigned int i; -	Elf32_Rela *rela = (void *)sechdrs[relsec].sh_addr; - -	DEBUGP("Applying relocate section %u to %u\n", relsec, -	       sechdrs[relsec].sh_info); -	for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rela); i++) { -		/* This is where to make the change */ -		uint32_t *loc = (uint32_t *)(sechdrs[sechdrs[relsec].sh_info].sh_addr -					     + rela[i].r_offset); -		/* This is the symbol it is referring to.  Note that all -		   undefined symbols have been resolved.  */ -		Elf32_Sym *sym = (Elf32_Sym *)sechdrs[symindex].sh_addr -			+ ELF32_R_SYM(rela[i].r_info); -		uint32_t v = sym->st_value + rela[i].r_addend; - -		switch (ELF32_R_TYPE(rela[i].r_info)) { -		case R_H8_DIR24R8: -			loc = (uint32_t *)((uint32_t)loc - 1); -			*loc = (*loc & 0xff000000) | ((*loc & 0xffffff) + v); -			break; -		case R_H8_DIR24A8: -			if (ELF32_R_SYM(rela[i].r_info)) -				*loc += v; -			break; -		case R_H8_DIR32: -		case R_H8_DIR32A16: -			*loc += v; -			break; -		case R_H8_PCREL16: -			v -= (unsigned long)loc + 2; -			if ((Elf32_Sword)v > 0x7fff ||  -			    (Elf32_Sword)v < -(Elf32_Sword)0x8000) -				goto overflow; -			else  -				*(unsigned short *)loc = v; -			break; -		case R_H8_PCREL8: -			v -= (unsigned long)loc + 1; -			if ((Elf32_Sword)v > 0x7f ||  -			    (Elf32_Sword)v < -(Elf32_Sword)0x80) -				goto overflow; -			else  -				*(unsigned char *)loc = v; -			break; -		default: -			printk(KERN_ERR "module %s: Unknown relocation: %u\n", -			       me->name, ELF32_R_TYPE(rela[i].r_info)); -			return -ENOEXEC; -		} -	} -	return 0; - overflow: -	printk(KERN_ERR "module %s: relocation offset overflow: %08x\n", -	       me->name, rela[i].r_offset); -	return -ENOEXEC; -} - -int module_finalize(const Elf_Ehdr *hdr, -		    const Elf_Shdr *sechdrs, -		    struct module *me) -{ -	return 0; -} - -void module_arch_cleanup(struct module *mod) -{ -} diff --git a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c deleted file mode 100644 index 97478138e36..00000000000 --- a/arch/h8300/kernel/process.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - *  linux/arch/h8300/kernel/process.c - * - * Yoshinori Sato <ysato@users.sourceforge.jp> - * - *  Based on: - * - *  linux/arch/m68knommu/kernel/process.c - * - *  Copyright (C) 1998  D. Jeff Dionne <jeff@ryeham.ee.ryerson.ca>, - *                      Kenneth Albanowski <kjahds@kjahds.com>, - *                      The Silver Hammer Group, Ltd. - * - *  linux/arch/m68k/kernel/process.c - * - *  Copyright (C) 1995  Hamish Macdonald - * - *  68060 fixes by Jesper Skov - */ - -/* - * This file handles the architecture-dependent parts of process handling.. - */ - -#include <linux/errno.h> -#include <linux/module.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/mm.h> -#include <linux/smp.h> -#include <linux/smp_lock.h> -#include <linux/stddef.h> -#include <linux/unistd.h> -#include <linux/ptrace.h> -#include <linux/user.h> -#include <linux/interrupt.h> -#include <linux/reboot.h> -#include <linux/fs.h> -#include <linux/slab.h> - -#include <asm/uaccess.h> -#include <asm/system.h> -#include <asm/traps.h> -#include <asm/setup.h> -#include <asm/pgtable.h> - -void (*pm_power_off)(void) = NULL; -EXPORT_SYMBOL(pm_power_off); - -asmlinkage void ret_from_fork(void); - -/* - * The idle loop on an H8/300.. - */ -#if !defined(CONFIG_H8300H_SIM) && !defined(CONFIG_H8S_SIM) -static void default_idle(void) -{ -	local_irq_disable(); -	if (!need_resched()) { -		local_irq_enable(); -		/* XXX: race here! What if need_resched() gets set now? */ -		__asm__("sleep"); -	} else -		local_irq_enable(); -} -#else -static void default_idle(void) -{ -	cpu_relax(); -} -#endif -void (*idle)(void) = default_idle; - -/* - * The idle thread. There's no useful work to be - * done, so just try to conserve power and have a - * low exit latency (ie sit in a loop waiting for - * somebody to say that they'd like to reschedule) - */ -void cpu_idle(void) -{ -	while (1) { -		while (!need_resched()) -			idle(); -		preempt_enable_no_resched(); -		schedule(); -		preempt_disable(); -	} -} - -void machine_restart(char * __unused) -{ -	local_irq_disable(); -	__asm__("jmp @@0");  -} - -void machine_halt(void) -{ -	local_irq_disable(); -	__asm__("sleep"); -	for (;;); -} - -void machine_power_off(void) -{ -	local_irq_disable(); -	__asm__("sleep"); -	for (;;); -} - -void show_regs(struct pt_regs * regs) -{ -	printk("\nPC: %08lx  Status: %02x", -	       regs->pc, regs->ccr); -	printk("\nORIG_ER0: %08lx ER0: %08lx ER1: %08lx", -	       regs->orig_er0, regs->er0, regs->er1); -	printk("\nER2: %08lx ER3: %08lx ER4: %08lx ER5: %08lx", -	       regs->er2, regs->er3, regs->er4, regs->er5); -	printk("\nER6' %08lx ",regs->er6); -	if (user_mode(regs)) -		printk("USP: %08lx\n", rdusp()); -	else -		printk("\n"); -} - -/* - * Create a kernel thread - */ -int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -{ -	long retval; -	long clone_arg; -	mm_segment_t fs; - -	fs = get_fs(); -	set_fs (KERNEL_DS); -	clone_arg = flags | CLONE_VM; -	__asm__("mov.l sp,er3\n\t" -		"sub.l er2,er2\n\t" -		"mov.l %2,er1\n\t" -		"mov.l %1,er0\n\t" -		"trapa #0\n\t" -		"cmp.l sp,er3\n\t" -		"beq 1f\n\t" -		"mov.l %4,er0\n\t" -		"mov.l %3,er1\n\t" -		"jsr @er1\n\t" -		"mov.l %5,er0\n\t" -		"trapa #0\n" -		"1:\n\t" -		"mov.l er0,%0" -		:"=r"(retval) -		:"i"(__NR_clone),"g"(clone_arg),"g"(fn),"g"(arg),"i"(__NR_exit) -		:"er0","er1","er2","er3"); -	set_fs (fs); -	return retval; -} - -void flush_thread(void) -{ -} - -/* - * "h8300_fork()".. By the time we get here, the - * non-volatile registers have also been saved on the - * stack. We do some ugly pointer stuff here.. (see - * also copy_thread) - */ - -asmlinkage int h8300_fork(struct pt_regs *regs) -{ -	return -EINVAL; -} - -asmlinkage int h8300_vfork(struct pt_regs *regs) -{ -	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), regs, 0, NULL, NULL); -} - -asmlinkage int h8300_clone(struct pt_regs *regs) -{ -	unsigned long clone_flags; -	unsigned long newsp; - -	/* syscall2 puts clone_flags in er1 and usp in er2 */ -	clone_flags = regs->er1; -	newsp = regs->er2; -	if (!newsp) -		newsp  = rdusp(); -	return do_fork(clone_flags, newsp, regs, 0, NULL, NULL); - -} - -int copy_thread(unsigned long clone_flags, -                unsigned long usp, unsigned long topstk, -		 struct task_struct * p, struct pt_regs * regs) -{ -	struct pt_regs * childregs; - -	childregs = (struct pt_regs *) (THREAD_SIZE + task_stack_page(p)) - 1; - -	*childregs = *regs; -	childregs->retpc = (unsigned long) ret_from_fork; -	childregs->er0 = 0; - -	p->thread.usp = usp; -	p->thread.ksp = (unsigned long)childregs; - -	return 0; -} - -/* - * sys_execve() executes a new program. - */ -asmlinkage int sys_execve(const char *name, -			  const char *const *argv, -			  const char *const *envp, -			  int dummy, ...) -{ -	int error; -	char * filename; -	struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy-4); - -	filename = getname(name); -	error = PTR_ERR(filename); -	if (IS_ERR(filename)) -		return error; -	error = do_execve(filename, argv, envp, regs); -	putname(filename); -	return error; -} - -unsigned long thread_saved_pc(struct task_struct *tsk) -{ -	return ((struct pt_regs *)tsk->thread.esp0)->pc; -} - -unsigned long get_wchan(struct task_struct *p) -{ -	unsigned long fp, pc; -	unsigned long stack_page; -	int count = 0; -	if (!p || p == current || p->state == TASK_RUNNING) -		return 0; - -	stack_page = (unsigned long)p; -	fp = ((struct pt_regs *)p->thread.ksp)->er6; -	do { -		if (fp < stack_page+sizeof(struct thread_info) || -		    fp >= 8184+stack_page) -			return 0; -		pc = ((unsigned long *)fp)[1]; -		if (!in_sched_functions(pc)) -			return pc; -		fp = *(unsigned long *) fp; -	} while (count++ < 16); -	return 0; -} diff --git a/arch/h8300/kernel/ptrace.c b/arch/h8300/kernel/ptrace.c deleted file mode 100644 index 497fa89b5df..00000000000 --- a/arch/h8300/kernel/ptrace.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - *  linux/arch/h8300/kernel/ptrace.c - * - *  Yoshinori Sato <ysato@users.sourceforge.jp> - * - *  Based on: - *  linux/arch/m68k/kernel/ptrace.c - * - *  Copyright (C) 1994 by Hamish Macdonald - *  Taken from linux/kernel/ptrace.c and modified for M680x0. - *  linux/kernel/ptrace.c is by Ross Biro 1/23/92, edited by Linus Torvalds - * - * This file is subject to the terms and conditions of the GNU General - * Public License.  See the file COPYING in the main directory of - * this archive for more details. - */ - -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/mm.h> -#include <linux/smp.h> -#include <linux/errno.h> -#include <linux/ptrace.h> -#include <linux/user.h> -#include <linux/signal.h> - -#include <asm/uaccess.h> -#include <asm/page.h> -#include <asm/pgtable.h> -#include <asm/system.h> -#include <asm/processor.h> -#include <asm/signal.h> - -/* cpu depend functions */ -extern long h8300_get_reg(struct task_struct *task, int regno); -extern int  h8300_put_reg(struct task_struct *task, int regno, unsigned long data); - - -void user_disable_single_step(struct task_struct *child) -{ -} - -/* - * does not yet catch signals sent when the child dies. - * in exit.c or in signal.c. - */ - -void ptrace_disable(struct task_struct *child) -{ -	user_disable_single_step(child); -} - -long arch_ptrace(struct task_struct *child, long request, -		 unsigned long addr, unsigned long data) -{ -	int ret; -	int regno = addr >> 2; -	unsigned long __user *datap = (unsigned long __user *) data; - -	switch (request) { -	/* read the word at location addr in the USER area. */ -		case PTRACE_PEEKUSR: { -			unsigned long tmp = 0; -			 -			if ((addr & 3) || addr >= sizeof(struct user)) { -				ret = -EIO; -				break ; -			} -			 -		        ret = 0;  /* Default return condition */ - -			if (regno < H8300_REGS_NO) -				tmp = h8300_get_reg(child, regno); -			else { -				switch (regno) { -				case 49: -					tmp = child->mm->start_code; -					break ; -				case 50: -					tmp = child->mm->start_data; -					break ; -				case 51: -					tmp = child->mm->end_code; -					break ; -				case 52: -					tmp = child->mm->end_data; -					break ; -				default: -					ret = -EIO; -				} -			} -			if (!ret) -				ret = put_user(tmp, datap); -			break ; -		} - -      /* when I and D space are separate, this will have to be fixed. */ -		case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ -			if ((addr & 3) || addr >= sizeof(struct user)) { -				ret = -EIO; -				break ; -			} -			     -			if (regno == PT_ORIG_ER0) { -				ret = -EIO; -				break ; -			} -			if (regno < H8300_REGS_NO) { -				ret = h8300_put_reg(child, regno, data); -				break ; -			} -			ret = -EIO; -			break ; - -		case PTRACE_GETREGS: { /* Get all gp regs from the child. */ -		  	int i; -			unsigned long tmp; -			for (i = 0; i < H8300_REGS_NO; i++) { -			    tmp = h8300_get_reg(child, i); -			    if (put_user(tmp, datap)) { -				ret = -EFAULT; -				break; -			    } -			    datap++; -			} -			ret = 0; -			break; -		} - -		case PTRACE_SETREGS: { /* Set all gp regs in the child. */ -			int i; -			unsigned long tmp; -			for (i = 0; i < H8300_REGS_NO; i++) { -			    if (get_user(tmp, datap)) { -				ret = -EFAULT; -				break; -			    } -			    h8300_put_reg(child, i, tmp); -			    datap++; -			} -			ret = 0; -			break; -		} - -		default: -			ret = ptrace_request(child, request, addr, data); -			break; -	} -	return ret; -} - -asmlinkage void do_syscall_trace(void) -{ -	if (!test_thread_flag(TIF_SYSCALL_TRACE)) -		return; -	if (!(current->ptrace & PT_PTRACED)) -		return; -	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) -				 ? 0x80 : 0)); -	/* -	 * this isn't the same as continuing with a signal, but it will do -	 * for normal use.  strace only continues with a signal if the -	 * stopping signal is not SIGTRAP.  -brl -	 */ -	if (current->exit_code) { -		send_sig(current->exit_code, current, 1); -		current->exit_code = 0; -	} -} diff --git a/arch/h8300/kernel/setup.c b/arch/h8300/kernel/setup.c deleted file mode 100644 index 7fda657110e..00000000000 --- a/arch/h8300/kernel/setup.c +++ /dev/null @@ -1,245 +0,0 @@ -/* - *  linux/arch/h8300/kernel/setup.c - * - *  Copyleft  ()) 2000       James D. Schettine {james@telos-systems.com} - *  Copyright (C) 1999,2000  Greg Ungerer (gerg@snapgear.com) - *  Copyright (C) 1998,1999  D. Jeff Dionne <jeff@lineo.ca> - *  Copyright (C) 1998       Kenneth Albanowski <kjahds@kjahds.com> - *  Copyright (C) 1995       Hamish Macdonald - *  Copyright (C) 2000       Lineo Inc. (www.lineo.com)  - *  Copyright (C) 2001 	     Lineo, Inc. <www.lineo.com> - * - *  H8/300 porting Yoshinori Sato <ysato@users.sourceforge.jp> - */ - -/* - * This file handles the architecture-dependent parts of system setup - */ - -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/delay.h> -#include <linux/interrupt.h> -#include <linux/mm.h> -#include <linux/fs.h> -#include <linux/fb.h> -#include <linux/console.h> -#include <linux/genhd.h> -#include <linux/errno.h> -#include <linux/string.h> -#include <linux/major.h> -#include <linux/bootmem.h> -#include <linux/seq_file.h> -#include <linux/init.h> - -#include <asm/setup.h> -#include <asm/irq.h> -#include <asm/pgtable.h> - -#if defined(__H8300H__) -#define CPU "H8/300H" -#include <asm/regs306x.h> -#endif - -#if defined(__H8300S__) -#define CPU "H8S" -#include <asm/regs267x.h> -#endif - -#define STUBSIZE 0xc000; - -unsigned long rom_length; -unsigned long memory_start; -unsigned long memory_end; - -char __initdata command_line[COMMAND_LINE_SIZE]; - -extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end; -extern int _ramstart, _ramend; -extern char _target_name[]; -extern void h8300_gpio_init(void); - -#if (defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)) \ -    && defined(CONFIG_GDB_MAGICPRINT) -/* printk with gdb service */ -static void gdb_console_output(struct console *c, const char *msg, unsigned len) -{ -	for (; len > 0; len--) { -		asm("mov.w %0,r2\n\t" -                    "jsr @0xc4"::"r"(*msg++):"er2"); -	} -} - -/* - *	Setup initial baud/bits/parity. We do two things here: - *	- construct a cflag setting for the first rs_open() - *	- initialize the serial port - *	Return non-zero if we didn't find a serial port. - */ -static int __init gdb_console_setup(struct console *co, char *options) -{ -	return 0; -} - -static const struct console gdb_console = { -	.name		= "gdb_con", -	.write		= gdb_console_output, -	.device		= NULL, -	.setup		= gdb_console_setup, -	.flags		= CON_PRINTBUFFER, -	.index		= -1, -}; -#endif - -void __init setup_arch(char **cmdline_p) -{ -	int bootmap_size; - -	memory_start = (unsigned long) &_ramstart; - -	/* allow for ROMFS on the end of the kernel */ -	if (memcmp((void *)memory_start, "-rom1fs-", 8) == 0) { -#if defined(CONFIG_BLK_DEV_INITRD) -		initrd_start = memory_start; -		initrd_end = memory_start += be32_to_cpu(((unsigned long *) (memory_start))[2]); -#else -		memory_start += be32_to_cpu(((unsigned long *) memory_start)[2]); -#endif -	} -	memory_start = PAGE_ALIGN(memory_start); -#if !defined(CONFIG_BLKDEV_RESERVE) -	memory_end = (unsigned long) &_ramend; /* by now the stack is part of the init task */ -#if defined(CONFIG_GDB_DEBUG) -	memory_end -= STUBSIZE; -#endif -#else -	if ((memory_end < CONFIG_BLKDEV_RESERVE_ADDRESS) &&  -	    (memory_end > CONFIG_BLKDEV_RESERVE_ADDRESS)) -	    /* overlap userarea */ -	    memory_end = CONFIG_BLKDEV_RESERVE_ADDRESS;  -#endif - -	init_mm.start_code = (unsigned long) &_stext; -	init_mm.end_code = (unsigned long) &_etext; -	init_mm.end_data = (unsigned long) &_edata; -	init_mm.brk = (unsigned long) 0;  - -#if (defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)) && defined(CONFIG_GDB_MAGICPRINT) -	register_console((struct console *)&gdb_console); -#endif - -	printk(KERN_INFO "\r\n\nuClinux " CPU "\n"); -	printk(KERN_INFO "Target Hardware: %s\n",_target_name); -	printk(KERN_INFO "Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne\n"); -	printk(KERN_INFO "H8/300 series support by Yoshinori Sato <ysato@users.sourceforge.jp>\n"); - -#ifdef DEBUG -	printk(KERN_DEBUG "KERNEL -> TEXT=0x%06x-0x%06x DATA=0x%06x-0x%06x " -		"BSS=0x%06x-0x%06x\n", (int) &_stext, (int) &_etext, -		(int) &_sdata, (int) &_edata, -		(int) &_sbss, (int) &_ebss); -	printk(KERN_DEBUG "KERNEL -> ROMFS=0x%06x-0x%06x MEM=0x%06x-0x%06x " -		"STACK=0x%06x-0x%06x\n", -	       (int) &_ebss, (int) memory_start, -		(int) memory_start, (int) memory_end, -		(int) memory_end, (int) &_ramend); -#endif - -#ifdef CONFIG_DEFAULT_CMDLINE -	/* set from default command line */ -	if (*command_line == '\0') -		strcpy(command_line,CONFIG_KERNEL_COMMAND); -#endif -	/* Keep a copy of command line */ -	*cmdline_p = &command_line[0]; -	memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE); -	boot_command_line[COMMAND_LINE_SIZE-1] = 0; - -#ifdef DEBUG -	if (strlen(*cmdline_p))  -		printk(KERN_DEBUG "Command line: '%s'\n", *cmdline_p); -#endif - -	/* -	 * give all the memory to the bootmap allocator,  tell it to put the -	 * boot mem_map at the start of memory -	 */ -	bootmap_size = init_bootmem_node( -			NODE_DATA(0), -			memory_start >> PAGE_SHIFT, /* map goes here */ -			PAGE_OFFSET >> PAGE_SHIFT,	/* 0 on coldfire */ -			memory_end >> PAGE_SHIFT); -	/* -	 * free the usable memory,  we have to make sure we do not free -	 * the bootmem bitmap so we then reserve it after freeing it :-) -	 */ -	free_bootmem(memory_start, memory_end - memory_start); -	reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT); -	/* -	 * get kmalloc into gear -	 */ -	paging_init(); -	h8300_gpio_init(); -#if defined(CONFIG_H8300_AKI3068NET) && defined(CONFIG_IDE) -	{ -#define AREABIT(addr) (1 << (((addr) >> 21) & 7)) -		/* setup BSC */ -		volatile unsigned char *abwcr = (volatile unsigned char *)ABWCR; -		volatile unsigned char *cscr = (volatile unsigned char *)CSCR; -		*abwcr &= ~(AREABIT(CONFIG_H8300_IDE_BASE) | AREABIT(CONFIG_H8300_IDE_ALT)); -		*cscr  |= (AREABIT(CONFIG_H8300_IDE_BASE) | AREABIT(CONFIG_H8300_IDE_ALT)) | 0x0f; -	} -#endif -#ifdef DEBUG -	printk(KERN_DEBUG "Done setup_arch\n"); -#endif -} - -/* - *	Get CPU information for use by the procfs. - */ - -static int show_cpuinfo(struct seq_file *m, void *v) -{ -    char *cpu; -    int mode; -    u_long clockfreq; - -    cpu = CPU; -    mode = *(volatile unsigned char *)MDCR & 0x07; - -    clockfreq = CONFIG_CPU_CLOCK; - -    seq_printf(m,  "CPU:\t\t%s (mode:%d)\n" -		   "Clock:\t\t%lu.%1luMHz\n" -		   "BogoMips:\t%lu.%02lu\n" -		   "Calibration:\t%lu loops\n", -	           cpu,mode, -		   clockfreq/1000,clockfreq%1000, -		   (loops_per_jiffy*HZ)/500000,((loops_per_jiffy*HZ)/5000)%100, -		   (loops_per_jiffy*HZ)); - -    return 0; -} - -static void *c_start(struct seq_file *m, loff_t *pos) -{ -	return *pos < NR_CPUS ? ((void *) 0x12345678) : NULL; -} - -static void *c_next(struct seq_file *m, void *v, loff_t *pos) -{ -	++*pos; -	return c_start(m, pos); -} - -static void c_stop(struct seq_file *m, void *v) -{ -} - -const struct seq_operations cpuinfo_op = { -	.start	= c_start, -	.next	= c_next, -	.stop	= c_stop, -	.show	= show_cpuinfo, -}; diff --git a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c deleted file mode 100644 index af842c369d2..00000000000 --- a/arch/h8300/kernel/signal.c +++ /dev/null @@ -1,563 +0,0 @@ -/* - *  linux/arch/h8300/kernel/signal.c - * - *  Copyright (C) 1991, 1992  Linus Torvalds - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file COPYING in the main directory of this archive - * for more details. - */ - -/* - * uClinux H8/300 support by Yoshinori Sato <ysato@users.sourceforge.jp> - *                and David McCullough <davidm@snapgear.com> - * - * Based on - * Linux/m68k by Hamish Macdonald - */ - -/* - * ++roman (07/09/96): implemented signal stacks (specially for tosemu on - * Atari :-) Current limitation: Only one sigstack can be active at one time. - * If a second signal with SA_ONSTACK set arrives while working on a sigstack, - * SA_ONSTACK is ignored. This behaviour avoids lots of trouble with nested - * signal handlers! - */ - -#include <linux/sched.h> -#include <linux/mm.h> -#include <linux/kernel.h> -#include <linux/signal.h> -#include <linux/syscalls.h> -#include <linux/errno.h> -#include <linux/wait.h> -#include <linux/ptrace.h> -#include <linux/unistd.h> -#include <linux/stddef.h> -#include <linux/highuid.h> -#include <linux/personality.h> -#include <linux/tty.h> -#include <linux/binfmts.h> -#include <linux/freezer.h> -#include <linux/tracehook.h> - -#include <asm/setup.h> -#include <asm/uaccess.h> -#include <asm/pgtable.h> -#include <asm/traps.h> -#include <asm/ucontext.h> - -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) - -asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset); - -/* - * Atomically swap in the new signal mask, and wait for a signal. - */ -asmlinkage int do_sigsuspend(struct pt_regs *regs) -{ -	old_sigset_t mask = regs->er3; -	sigset_t saveset; - -	mask &= _BLOCKABLE; -	spin_lock_irq(¤t->sighand->siglock); -	saveset = current->blocked; -	siginitset(¤t->blocked, mask); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); - -	regs->er0 = -EINTR; -	while (1) { -		current->state = TASK_INTERRUPTIBLE; -		schedule(); -		if (do_signal(regs, &saveset)) -			return -EINTR; -	} -} - -asmlinkage int -do_rt_sigsuspend(struct pt_regs *regs) -{ -	sigset_t *unewset = (sigset_t *)regs->er1; -	size_t sigsetsize = (size_t)regs->er2; -	sigset_t saveset, newset; - -	/* XXX: Don't preclude handling different sized sigset_t's.  */ -	if (sigsetsize != sizeof(sigset_t)) -		return -EINVAL; - -	if (copy_from_user(&newset, unewset, sizeof(newset))) -		return -EFAULT; -	sigdelsetmask(&newset, ~_BLOCKABLE); - -	spin_lock_irq(¤t->sighand->siglock); -	saveset = current->blocked; -	current->blocked = newset; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); - -	regs->er0 = -EINTR; -	while (1) { -		current->state = TASK_INTERRUPTIBLE; -		schedule(); -		if (do_signal(regs, &saveset)) -			return -EINTR; -	} -} - -asmlinkage int  -sys_sigaction(int sig, const struct old_sigaction *act, -	      struct old_sigaction *oact) -{ -	struct k_sigaction new_ka, old_ka; -	int ret; - -	if (act) { -		old_sigset_t mask; -		if (!access_ok(VERIFY_READ, act, sizeof(*act)) || -		    __get_user(new_ka.sa.sa_handler, &act->sa_handler) || -		    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) -			return -EFAULT; -		__get_user(new_ka.sa.sa_flags, &act->sa_flags); -		__get_user(mask, &act->sa_mask); -		siginitset(&new_ka.sa.sa_mask, mask); -	} - -	ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); - -	if (!ret && oact) { -		if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || -		    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || -		    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) -			return -EFAULT; -		__put_user(old_ka.sa.sa_flags, &oact->sa_flags); -		__put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); -	} - -	return ret; -} - -asmlinkage int -sys_sigaltstack(const stack_t *uss, stack_t *uoss) -{ -	return do_sigaltstack(uss, uoss, rdusp()); -} - - -/* - * Do a signal return; undo the signal stack. - * - * Keep the return code on the stack quadword aligned! - * That makes the cache flush below easier. - */ - -struct sigframe -{ -	long dummy_er0; -	long dummy_vector; -#if defined(CONFIG_CPU_H8S) -	short dummy_exr; -#endif -	long dummy_pc; -	char *pretcode; -	unsigned char retcode[8]; -	unsigned long extramask[_NSIG_WORDS-1]; -	struct sigcontext sc; -	int sig; -} __attribute__((aligned(2),packed)); - -struct rt_sigframe -{ -	long dummy_er0; -	long dummy_vector; -#if defined(CONFIG_CPU_H8S) -	short dummy_exr; -#endif -	long dummy_pc; -	char *pretcode; -	struct siginfo *pinfo; -	void *puc; -	unsigned char retcode[8]; -	struct siginfo info; -	struct ucontext uc; -	int sig; -} __attribute__((aligned(2),packed)); - -static inline int -restore_sigcontext(struct pt_regs *regs, struct sigcontext *usc, -		   int *pd0) -{ -	int err = 0; -	unsigned int ccr; -	unsigned int usp; -	unsigned int er0; - -	/* Always make any pending restarted system calls return -EINTR */ -	current_thread_info()->restart_block.fn = do_no_restart_syscall; - -#define COPY(r) err |= __get_user(regs->r, &usc->sc_##r)    /* restore passed registers */ -	COPY(er1); -	COPY(er2); -	COPY(er3); -	COPY(er5); -	COPY(pc); -	ccr = regs->ccr & 0x10; -	COPY(ccr); -#undef COPY -	regs->ccr &= 0xef; -	regs->ccr |= ccr; -	regs->orig_er0 = -1;		/* disable syscall checks */ -	err |= __get_user(usp, &usc->sc_usp); -	wrusp(usp); - -	err |= __get_user(er0, &usc->sc_er0); -	*pd0 = er0; -	return err; -} - -asmlinkage int do_sigreturn(unsigned long __unused,...) -{ -	struct pt_regs *regs = (struct pt_regs *) (&__unused - 1); -	unsigned long usp = rdusp(); -	struct sigframe *frame = (struct sigframe *)(usp - 4); -	sigset_t set; -	int er0; - -	if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) -		goto badframe; -	if (__get_user(set.sig[0], &frame->sc.sc_mask) || -	    (_NSIG_WORDS > 1 && -	     __copy_from_user(&set.sig[1], &frame->extramask, -			      sizeof(frame->extramask)))) -		goto badframe; - -	sigdelsetmask(&set, ~_BLOCKABLE); -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); -	 -	if (restore_sigcontext(regs, &frame->sc, &er0)) -		goto badframe; -	return er0; - -badframe: -	force_sig(SIGSEGV, current); -	return 0; -} - -asmlinkage int do_rt_sigreturn(unsigned long __unused,...) -{ -	struct pt_regs *regs = (struct pt_regs *) &__unused; -	unsigned long usp = rdusp(); -	struct rt_sigframe *frame = (struct rt_sigframe *)(usp - 4); -	sigset_t set; -	int er0; - -	if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) -		goto badframe; -	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) -		goto badframe; - -	sigdelsetmask(&set, ~_BLOCKABLE); -	spin_unlock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_lock_irq(¤t->sighand->siglock); -	 -	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &er0)) -		goto badframe; - -	if (do_sigaltstack(&frame->uc.uc_stack, NULL, usp) == -EFAULT) -		goto badframe; - -	return er0; - -badframe: -	force_sig(SIGSEGV, current); -	return 0; -} - -static int setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, -			     unsigned long mask) -{ -	int err = 0; - -	err |= __put_user(regs->er0, &sc->sc_er0); -	err |= __put_user(regs->er1, &sc->sc_er1); -	err |= __put_user(regs->er2, &sc->sc_er2); -	err |= __put_user(regs->er3, &sc->sc_er3); -	err |= __put_user(regs->er4, &sc->sc_er4); -	err |= __put_user(regs->er5, &sc->sc_er5); -	err |= __put_user(regs->er6, &sc->sc_er6); -	err |= __put_user(rdusp(),   &sc->sc_usp); -	err |= __put_user(regs->pc,  &sc->sc_pc); -	err |= __put_user(regs->ccr, &sc->sc_ccr); -	err |= __put_user(mask,      &sc->sc_mask); - -	return err; -} - -static inline void * -get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) -{ -	unsigned long usp; - -	/* Default to using normal stack.  */ -	usp = rdusp(); - -	/* This is the X/Open sanctioned signal stack switching.  */ -	if (ka->sa.sa_flags & SA_ONSTACK) { -		if (!sas_ss_flags(usp)) -			usp = current->sas_ss_sp + current->sas_ss_size; -	} -	return (void *)((usp - frame_size) & -8UL); -} - -static void setup_frame (int sig, struct k_sigaction *ka, -			 sigset_t *set, struct pt_regs *regs) -{ -	struct sigframe *frame; -	int err = 0; -	int usig; -	unsigned char *ret; - -	frame = get_sigframe(ka, regs, sizeof(*frame)); - -	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) -		goto give_sigsegv; - -	usig = current_thread_info()->exec_domain -		&& current_thread_info()->exec_domain->signal_invmap -		&& sig < 32 -		? current_thread_info()->exec_domain->signal_invmap[sig] -		: sig; - -	err |= __put_user(usig, &frame->sig); -	if (err) -		goto give_sigsegv; - -	err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); -	if (err) -		goto give_sigsegv; - -	if (_NSIG_WORDS > 1) { -		err |= copy_to_user(frame->extramask, &set->sig[1], -				    sizeof(frame->extramask)); -		if (err) -			goto give_sigsegv; -	} - -	ret = frame->retcode; -	if (ka->sa.sa_flags & SA_RESTORER) -		ret = (unsigned char *)(ka->sa.sa_restorer); -	else { -		/* sub.l er0,er0; mov.b #__NR_sigreturn,r0l; trapa #0 */ -		err |= __put_user(0x1a80f800 + (__NR_sigreturn & 0xff), -				  (unsigned long *)(frame->retcode + 0)); -		err |= __put_user(0x5700, (unsigned short *)(frame->retcode + 4)); -	} - -	/* Set up to return from userspace.  */ -	err |= __put_user(ret, &frame->pretcode); - -	if (err) -		goto give_sigsegv; - -	/* Set up registers for signal handler */ -	wrusp ((unsigned long) frame); -	regs->pc = (unsigned long) ka->sa.sa_handler; -	regs->er0 = (current_thread_info()->exec_domain -			   && current_thread_info()->exec_domain->signal_invmap -			   && sig < 32 -			   ? current_thread_info()->exec_domain->signal_invmap[sig] -		          : sig); -	regs->er1 = (unsigned long)&(frame->sc); -	regs->er5 = current->mm->start_data;	/* GOT base */ - -	return; - -give_sigsegv: -	force_sigsegv(sig, current); -} - -static void setup_rt_frame (int sig, struct k_sigaction *ka, siginfo_t *info, -			    sigset_t *set, struct pt_regs *regs) -{ -	struct rt_sigframe *frame; -	int err = 0; -	int usig; -	unsigned char *ret; - -	frame = get_sigframe(ka, regs, sizeof(*frame)); - -	if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) -		goto give_sigsegv; - -	usig = current_thread_info()->exec_domain -		&& current_thread_info()->exec_domain->signal_invmap -		&& sig < 32 -		? current_thread_info()->exec_domain->signal_invmap[sig] -		: sig; - -	err |= __put_user(usig, &frame->sig); -	if (err) -		goto give_sigsegv; - -	err |= __put_user(&frame->info, &frame->pinfo); -	err |= __put_user(&frame->uc, &frame->puc); -	err |= copy_siginfo_to_user(&frame->info, info); -	if (err) -		goto give_sigsegv; - -	/* Create the ucontext.  */ -	err |= __put_user(0, &frame->uc.uc_flags); -	err |= __put_user(0, &frame->uc.uc_link); -	err |= __put_user((void *)current->sas_ss_sp, -			  &frame->uc.uc_stack.ss_sp); -	err |= __put_user(sas_ss_flags(rdusp()), -			  &frame->uc.uc_stack.ss_flags); -	err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); -	err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]); -	err |= copy_to_user (&frame->uc.uc_sigmask, set, sizeof(*set)); -	if (err) -		goto give_sigsegv; - -	/* Set up to return from userspace.  */ -	ret = frame->retcode; -	if (ka->sa.sa_flags & SA_RESTORER) -		ret = (unsigned char *)(ka->sa.sa_restorer); -	else { -		/* sub.l er0,er0; mov.b #__NR_sigreturn,r0l; trapa #0 */ -		err |= __put_user(0x1a80f800 + (__NR_sigreturn & 0xff), -				  (unsigned long *)(frame->retcode + 0)); -		err |= __put_user(0x5700, (unsigned short *)(frame->retcode + 4)); -	} -	err |= __put_user(ret, &frame->pretcode); - -	if (err) -		goto give_sigsegv; - -	/* Set up registers for signal handler */ -	wrusp ((unsigned long) frame); -	regs->pc  = (unsigned long) ka->sa.sa_handler; -	regs->er0 = (current_thread_info()->exec_domain -		     && current_thread_info()->exec_domain->signal_invmap -		     && sig < 32 -		     ? current_thread_info()->exec_domain->signal_invmap[sig] -		     : sig); -	regs->er1 = (unsigned long)&(frame->info); -	regs->er2 = (unsigned long)&frame->uc; -	regs->er5 = current->mm->start_data;	/* GOT base */ - -	return; - -give_sigsegv: -	force_sigsegv(sig, current); -} - -/* - * OK, we're invoking a handler - */ -static void -handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, -	      sigset_t *oldset,	struct pt_regs * regs) -{ -	/* are we from a system call? */ -	if (regs->orig_er0 >= 0) { -		switch (regs->er0) { -		        case -ERESTART_RESTARTBLOCK: -			case -ERESTARTNOHAND: -				regs->er0 = -EINTR; -				break; - -			case -ERESTARTSYS: -				if (!(ka->sa.sa_flags & SA_RESTART)) { -					regs->er0 = -EINTR; -					break; -				} -			/* fallthrough */ -			case -ERESTARTNOINTR: -				regs->er0 = regs->orig_er0; -				regs->pc -= 2; -		} -	} - -	/* set up the stack frame */ -	if (ka->sa.sa_flags & SA_SIGINFO) -		setup_rt_frame(sig, ka, info, oldset, regs); -	else -		setup_frame(sig, ka, oldset, regs); - -	spin_lock_irq(¤t->sighand->siglock); -	sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); -	if (!(ka->sa.sa_flags & SA_NODEFER)) -		sigaddset(¤t->blocked,sig); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); -} - -/* - * Note that 'init' is a special process: it doesn't get signals it doesn't - * want to handle. Thus you cannot kill init even with a SIGKILL even by - * mistake. - */ -asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset) -{ -	siginfo_t info; -	int signr; -	struct k_sigaction ka; - -	/* -	 * We want the common case to go fast, which -	 * is why we may in certain cases get here from -	 * kernel mode. Just return without doing anything -	 * if so. -	 */ -	if ((regs->ccr & 0x10)) -		return 1; - -	if (try_to_freeze()) -		goto no_signal; - -	current->thread.esp0 = (unsigned long) regs; - -	if (!oldset) -		oldset = ¤t->blocked; - -	signr = get_signal_to_deliver(&info, &ka, regs, NULL); -	if (signr > 0) { -		/* Whee!  Actually deliver the signal.  */ -		handle_signal(signr, &info, &ka, oldset, regs); -		return 1; -	} - no_signal: -	/* Did we come from a system call? */ -	if (regs->orig_er0 >= 0) { -		/* Restart the system call - no handlers present */ -		if (regs->er0 == -ERESTARTNOHAND || -		    regs->er0 == -ERESTARTSYS || -		    regs->er0 == -ERESTARTNOINTR) { -			regs->er0 = regs->orig_er0; -			regs->pc -= 2; -		} -		if (regs->er0 == -ERESTART_RESTARTBLOCK){ -			regs->er0 = __NR_restart_syscall; -			regs->pc -= 2; -		} -	} -	return 0; -} - -asmlinkage void do_notify_resume(struct pt_regs *regs, u32 thread_info_flags) -{ -	if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) -		do_signal(regs, NULL); - -	if (thread_info_flags & _TIF_NOTIFY_RESUME) { -		clear_thread_flag(TIF_NOTIFY_RESUME); -		tracehook_notify_resume(regs); -		if (current->replacement_session_keyring) -			key_replace_session_keyring(); -	} -} diff --git a/arch/h8300/kernel/sys_h8300.c b/arch/h8300/kernel/sys_h8300.c deleted file mode 100644 index aaf5e5a48f9..00000000000 --- a/arch/h8300/kernel/sys_h8300.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * linux/arch/h8300/kernel/sys_h8300.c - * - * This file contains various random system calls that - * have a non-standard calling sequence on the H8/300 - * platform. - */ - -#include <linux/errno.h> -#include <linux/sched.h> -#include <linux/mm.h> -#include <linux/smp.h> -#include <linux/sem.h> -#include <linux/msg.h> -#include <linux/shm.h> -#include <linux/stat.h> -#include <linux/syscalls.h> -#include <linux/mman.h> -#include <linux/file.h> -#include <linux/fs.h> -#include <linux/ipc.h> - -#include <asm/setup.h> -#include <asm/uaccess.h> -#include <asm/cachectl.h> -#include <asm/traps.h> -#include <asm/unistd.h> - -/* sys_cacheflush -- no support.  */ -asmlinkage int -sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) -{ -	return -EINVAL; -} - -asmlinkage int sys_getpagesize(void) -{ -	return PAGE_SIZE; -} - -#if defined(CONFIG_SYSCALL_PRINT) -asmlinkage void syscall_print(void *dummy,...) -{ -	struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy-4); -	printk("call %06lx:%ld 1:%08lx,2:%08lx,3:%08lx,ret:%08lx\n", -               ((regs->pc)&0xffffff)-2,regs->orig_er0,regs->er1,regs->er2,regs->er3,regs->er0); -} -#endif - -/* - * Do a system call from kernel instead of calling sys_execve so we - * end up with proper pt_regs. - */ -int kernel_execve(const char *filename, -		  const char *const argv[], -		  const char *const envp[]) -{ -	register long res __asm__("er0"); -	register const char *const *_c __asm__("er3") = envp; -	register const char *const *_b __asm__("er2") = argv; -	register const char * _a __asm__("er1") = filename; -	__asm__ __volatile__ ("mov.l %1,er0\n\t" -			"trapa	#0\n\t" -			: "=r" (res) -			: "g" (__NR_execve), -			  "g" (_a), -			  "g" (_b), -			  "g" (_c) -			: "cc", "memory"); -	return res; -} - - diff --git a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S deleted file mode 100644 index faefaff7d43..00000000000 --- a/arch/h8300/kernel/syscalls.S +++ /dev/null @@ -1,365 +0,0 @@ -/* Systemcall Entry Table */ -#include <linux/sys.h> -#include <asm/linkage.h> -#include <asm/unistd.h> -	 -.globl SYMBOL_NAME(sys_call_table) - -#if defined(CONFIG_CPU_H8300H) -	.h8300h -#endif -#if defined(CONFIG_CPU_H8S) -	.h8300s -#endif -	.section .text -	.align	2 -SYMBOL_NAME_LABEL(sys_call_table)	 -	.long SYMBOL_NAME(sys_ni_syscall)	/* 0  -  old "setup()" system call*/ -	.long SYMBOL_NAME(sys_exit) -	.long SYMBOL_NAME(sys_fork) -	.long SYMBOL_NAME(sys_read) -	.long SYMBOL_NAME(sys_write) -	.long SYMBOL_NAME(sys_open)		/* 5 */ -	.long SYMBOL_NAME(sys_close) -	.long SYMBOL_NAME(sys_waitpid) -	.long SYMBOL_NAME(sys_creat) -	.long SYMBOL_NAME(sys_link) -	.long SYMBOL_NAME(sys_unlink)		/* 10 */ -	.long SYMBOL_NAME(sys_execve) -	.long SYMBOL_NAME(sys_chdir) -	.long SYMBOL_NAME(sys_time) -	.long SYMBOL_NAME(sys_mknod) -	.long SYMBOL_NAME(sys_chmod)		/* 15 */ -	.long SYMBOL_NAME(sys_chown16) -	.long SYMBOL_NAME(sys_ni_syscall)	/* old break syscall holder */ -	.long SYMBOL_NAME(sys_stat) -	.long SYMBOL_NAME(sys_lseek) -	.long SYMBOL_NAME(sys_getpid)		/* 20 */ -	.long SYMBOL_NAME(sys_mount) -	.long SYMBOL_NAME(sys_oldumount) -	.long SYMBOL_NAME(sys_setuid16) -	.long SYMBOL_NAME(sys_getuid16) -	.long SYMBOL_NAME(sys_stime)		/* 25 */ -	.long SYMBOL_NAME(sys_ptrace) -	.long SYMBOL_NAME(sys_alarm) -	.long SYMBOL_NAME(sys_fstat) -	.long SYMBOL_NAME(sys_pause) -	.long SYMBOL_NAME(sys_utime)		/* 30 */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* old stty syscall holder */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* old gtty syscall holder */ -	.long SYMBOL_NAME(sys_access) -	.long SYMBOL_NAME(sys_nice) -	.long SYMBOL_NAME(sys_ni_syscall)	/* 35 old ftime syscall holder */ -	.long SYMBOL_NAME(sys_sync) -	.long SYMBOL_NAME(sys_kill) -	.long SYMBOL_NAME(sys_rename) -	.long SYMBOL_NAME(sys_mkdir) -	.long SYMBOL_NAME(sys_rmdir)		/* 40 */ -	.long SYMBOL_NAME(sys_dup) -	.long SYMBOL_NAME(sys_pipe) -	.long SYMBOL_NAME(sys_times) -	.long SYMBOL_NAME(sys_ni_syscall)	/* old prof syscall holder */ -	.long SYMBOL_NAME(sys_brk)		/* 45 */ -	.long SYMBOL_NAME(sys_setgid16) -	.long SYMBOL_NAME(sys_getgid16) -	.long SYMBOL_NAME(sys_signal) -	.long SYMBOL_NAME(sys_geteuid16) -	.long SYMBOL_NAME(sys_getegid16)	/* 50 */ -	.long SYMBOL_NAME(sys_acct) -	.long SYMBOL_NAME(sys_umount)		/* recycled never used phys() */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* old lock syscall holder */ -	.long SYMBOL_NAME(sys_ioctl) -	.long SYMBOL_NAME(sys_fcntl)		/* 55 */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* old mpx syscall holder */ -	.long SYMBOL_NAME(sys_setpgid) -	.long SYMBOL_NAME(sys_ni_syscall)	/* old ulimit syscall holder */ -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_umask)		/* 60 */ -	.long SYMBOL_NAME(sys_chroot) -	.long SYMBOL_NAME(sys_ustat) -	.long SYMBOL_NAME(sys_dup2) -	.long SYMBOL_NAME(sys_getppid) -	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */ -	.long SYMBOL_NAME(sys_setsid) -	.long SYMBOL_NAME(sys_sigaction) -	.long SYMBOL_NAME(sys_sgetmask) -	.long SYMBOL_NAME(sys_ssetmask) -	.long SYMBOL_NAME(sys_setreuid16)	/* 70 */ -	.long SYMBOL_NAME(sys_setregid16) -	.long SYMBOL_NAME(sys_sigsuspend) -	.long SYMBOL_NAME(sys_sigpending) -	.long SYMBOL_NAME(sys_sethostname) -	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */ -	.long SYMBOL_NAME(sys_old_getrlimit) -	.long SYMBOL_NAME(sys_getrusage) -	.long SYMBOL_NAME(sys_gettimeofday) -	.long SYMBOL_NAME(sys_settimeofday) -	.long SYMBOL_NAME(sys_getgroups16)	/* 80 */ -	.long SYMBOL_NAME(sys_setgroups16) -	.long SYMBOL_NAME(sys_old_select) -	.long SYMBOL_NAME(sys_symlink) -	.long SYMBOL_NAME(sys_lstat) -	.long SYMBOL_NAME(sys_readlink)		/* 85 */ -	.long SYMBOL_NAME(sys_uselib) -	.long SYMBOL_NAME(sys_swapon) -	.long SYMBOL_NAME(sys_reboot) -	.long SYMBOL_NAME(sys_old_readdir) -	.long SYMBOL_NAME(sys_old_mmap)		/* 90 */ -	.long SYMBOL_NAME(sys_munmap) -	.long SYMBOL_NAME(sys_truncate) -	.long SYMBOL_NAME(sys_ftruncate) -	.long SYMBOL_NAME(sys_fchmod) -	.long SYMBOL_NAME(sys_fchown16)		/* 95 */ -	.long SYMBOL_NAME(sys_getpriority) -	.long SYMBOL_NAME(sys_setpriority) -	.long SYMBOL_NAME(sys_ni_syscall)	/* old profil syscall holder */ -	.long SYMBOL_NAME(sys_statfs) -	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* ioperm for i386 */ -	.long SYMBOL_NAME(sys_socketcall) -	.long SYMBOL_NAME(sys_syslog) -	.long SYMBOL_NAME(sys_setitimer) -	.long SYMBOL_NAME(sys_getitimer)	/* 105 */ -	.long SYMBOL_NAME(sys_newstat) -	.long SYMBOL_NAME(sys_newlstat) -	.long SYMBOL_NAME(sys_newfstat) -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_ni_syscall)	/* iopl for i386 */ /* 110 */ -	.long SYMBOL_NAME(sys_vhangup) -	.long SYMBOL_NAME(sys_ni_syscall)	/* obsolete idle() syscall */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* vm86old for i386 */ -	.long SYMBOL_NAME(sys_wait4) -	.long SYMBOL_NAME(sys_swapoff)		/* 115 */ -	.long SYMBOL_NAME(sys_sysinfo) -	.long SYMBOL_NAME(sys_ipc) -	.long SYMBOL_NAME(sys_fsync) -	.long SYMBOL_NAME(sys_sigreturn) -	.long SYMBOL_NAME(sys_clone)		/* 120 */ -	.long SYMBOL_NAME(sys_setdomainname) -	.long SYMBOL_NAME(sys_newuname) -	.long SYMBOL_NAME(sys_cacheflush)	/* modify_ldt for i386 */ -	.long SYMBOL_NAME(sys_adjtimex) -	.long SYMBOL_NAME(sys_ni_syscall)	/* 125 sys_mprotect */ -	.long SYMBOL_NAME(sys_sigprocmask) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_create_module */ -	.long SYMBOL_NAME(sys_init_module) -	.long SYMBOL_NAME(sys_delete_module) -	.long SYMBOL_NAME(sys_ni_syscall)	/* 130 sys_get_kernel_syms */ -	.long SYMBOL_NAME(sys_quotactl) -	.long SYMBOL_NAME(sys_getpgid) -	.long SYMBOL_NAME(sys_fchdir) -	.long SYMBOL_NAME(sys_bdflush) -	.long SYMBOL_NAME(sys_sysfs)		/* 135 */ -	.long SYMBOL_NAME(sys_personality) -	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */ -	.long SYMBOL_NAME(sys_setfsuid16) -	.long SYMBOL_NAME(sys_setfsgid16) -	.long SYMBOL_NAME(sys_llseek)		/* 140 */ -	.long SYMBOL_NAME(sys_getdents) -	.long SYMBOL_NAME(sys_select) -	.long SYMBOL_NAME(sys_flock) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_msync */ -	.long SYMBOL_NAME(sys_readv)		/* 145 */ -	.long SYMBOL_NAME(sys_writev) -	.long SYMBOL_NAME(sys_getsid) -	.long SYMBOL_NAME(sys_fdatasync) -	.long SYMBOL_NAME(sys_sysctl) -	.long SYMBOL_NAME(sys_ni_syscall)	/* 150 sys_mlock */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_munlock */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_mlockall */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_munlockall */ -	.long SYMBOL_NAME(sys_sched_setparam) -	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */ -	.long SYMBOL_NAME(sys_sched_setscheduler) -	.long SYMBOL_NAME(sys_sched_getscheduler) -	.long SYMBOL_NAME(sys_sched_yield) -	.long SYMBOL_NAME(sys_sched_get_priority_max) -	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */ -	.long SYMBOL_NAME(sys_sched_rr_get_interval) -	.long SYMBOL_NAME(sys_nanosleep) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_mremap */ -	.long SYMBOL_NAME(sys_setresuid16) -	.long SYMBOL_NAME(sys_getresuid16)	/* 165 */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* for vm86 */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_query_module */ -	.long SYMBOL_NAME(sys_poll) -	.long SYMBOL_NAME(sys_nfsservctl) -	.long SYMBOL_NAME(sys_setresgid16)	/* 170 */ -	.long SYMBOL_NAME(sys_getresgid16) -	.long SYMBOL_NAME(sys_prctl) -	.long SYMBOL_NAME(sys_rt_sigreturn) -	.long SYMBOL_NAME(sys_rt_sigaction) -	.long SYMBOL_NAME(sys_rt_sigprocmask)	/* 175 */ -	.long SYMBOL_NAME(sys_rt_sigpending) -	.long SYMBOL_NAME(sys_rt_sigtimedwait) -	.long SYMBOL_NAME(sys_rt_sigqueueinfo) -	.long SYMBOL_NAME(sys_rt_sigsuspend) -	.long SYMBOL_NAME(sys_pread64)		/* 180 */ -	.long SYMBOL_NAME(sys_pwrite64) -	.long SYMBOL_NAME(sys_lchown16); -	.long SYMBOL_NAME(sys_getcwd) -	.long SYMBOL_NAME(sys_capget) -	.long SYMBOL_NAME(sys_capset)           /* 185 */ -	.long SYMBOL_NAME(sys_sigaltstack) -	.long SYMBOL_NAME(sys_sendfile) -	.long SYMBOL_NAME(sys_ni_syscall)	/* streams1 */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* streams2 */ -	.long SYMBOL_NAME(sys_vfork)            /* 190 */ -	.long SYMBOL_NAME(sys_getrlimit) -	.long SYMBOL_NAME(sys_mmap_pgoff) -	.long SYMBOL_NAME(sys_truncate64) -	.long SYMBOL_NAME(sys_ftruncate64) -	.long SYMBOL_NAME(sys_stat64)		/* 195 */ -	.long SYMBOL_NAME(sys_lstat64) -	.long SYMBOL_NAME(sys_fstat64) -	.long SYMBOL_NAME(sys_chown) -	.long SYMBOL_NAME(sys_getuid) -	.long SYMBOL_NAME(sys_getgid)		/* 200 */ -	.long SYMBOL_NAME(sys_geteuid) -	.long SYMBOL_NAME(sys_getegid) -	.long SYMBOL_NAME(sys_setreuid) -	.long SYMBOL_NAME(sys_setregid) -	.long SYMBOL_NAME(sys_getgroups)	/* 205 */ -	.long SYMBOL_NAME(sys_setgroups) -	.long SYMBOL_NAME(sys_fchown) -	.long SYMBOL_NAME(sys_setresuid) -	.long SYMBOL_NAME(sys_getresuid) -	.long SYMBOL_NAME(sys_setresgid)	/* 210 */ -	.long SYMBOL_NAME(sys_getresgid) -	.long SYMBOL_NAME(sys_lchown) -	.long SYMBOL_NAME(sys_setuid) -	.long SYMBOL_NAME(sys_setgid) -	.long SYMBOL_NAME(sys_setfsuid)		/* 215 */ -	.long SYMBOL_NAME(sys_setfsgid) -	.long SYMBOL_NAME(sys_pivot_root) -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_getdents64)	/* 220 */ -	.long SYMBOL_NAME(sys_fcntl64) -	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved TUX */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved Security */ -	.long SYMBOL_NAME(sys_gettid) -	.long SYMBOL_NAME(sys_readahead)	/* 225 */ -	.long SYMBOL_NAME(sys_setxattr) -	.long SYMBOL_NAME(sys_lsetxattr) -	.long SYMBOL_NAME(sys_fsetxattr) -	.long SYMBOL_NAME(sys_getxattr) -	.long SYMBOL_NAME(sys_lgetxattr)	/* 230 */ -	.long SYMBOL_NAME(sys_fgetxattr) -	.long SYMBOL_NAME(sys_listxattr) -	.long SYMBOL_NAME(sys_llistxattr) -	.long SYMBOL_NAME(sys_flistxattr) -	.long SYMBOL_NAME(sys_removexattr)	/* 235 */ -	.long SYMBOL_NAME(sys_lremovexattr) -	.long SYMBOL_NAME(sys_fremovexattr) -	.long SYMBOL_NAME(sys_tkill) -	.long SYMBOL_NAME(sys_sendfile64) -	.long SYMBOL_NAME(sys_futex)		/* 240 */ -	.long SYMBOL_NAME(sys_sched_setaffinity) -	.long SYMBOL_NAME(sys_sched_getaffinity) -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_io_setup)		/* 245 */ -	.long SYMBOL_NAME(sys_io_destroy) -	.long SYMBOL_NAME(sys_io_getevents) -	.long SYMBOL_NAME(sys_io_submit) -	.long SYMBOL_NAME(sys_io_cancel) -	.long SYMBOL_NAME(sys_fadvise64)	/* 250 */ -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_exit_group) -	.long SYMBOL_NAME(sys_lookup_dcookie) -	.long SYMBOL_NAME(sys_epoll_create) -	.long SYMBOL_NAME(sys_epoll_ctl)	/* 255 */ -	.long SYMBOL_NAME(sys_epoll_wait) - 	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_remap_file_pages */ - 	.long SYMBOL_NAME(sys_set_tid_address) - 	.long SYMBOL_NAME(sys_timer_create) - 	.long SYMBOL_NAME(sys_timer_settime)	/* 260 */ - 	.long SYMBOL_NAME(sys_timer_gettime) - 	.long SYMBOL_NAME(sys_timer_getoverrun) - 	.long SYMBOL_NAME(sys_timer_delete) - 	.long SYMBOL_NAME(sys_clock_settime) - 	.long SYMBOL_NAME(sys_clock_gettime)	/* 265 */ - 	.long SYMBOL_NAME(sys_clock_getres) - 	.long SYMBOL_NAME(sys_clock_nanosleep) -	.long SYMBOL_NAME(sys_statfs64) -	.long SYMBOL_NAME(sys_fstatfs64)	 -	.long SYMBOL_NAME(sys_tgkill)		/* 270 */ -	.long SYMBOL_NAME(sys_utimes) - 	.long SYMBOL_NAME(sys_fadvise64_64) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_vserver */ -	.long SYMBOL_NAME(sys_ni_syscall) -	.long SYMBOL_NAME(sys_get_mempolicy)	/* 275 */ -	.long SYMBOL_NAME(sys_set_mempolicy) -	.long SYMBOL_NAME(sys_mq_open) -	.long SYMBOL_NAME(sys_mq_unlink) -	.long SYMBOL_NAME(sys_mq_timedsend) -	.long SYMBOL_NAME(sys_mq_timedreceive)	/* 280 */ -	.long SYMBOL_NAME(sys_mq_notify) -	.long SYMBOL_NAME(sys_mq_getsetattr) -	.long SYMBOL_NAME(sys_waitid) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_kexec_load */ -	.long SYMBOL_NAME(sys_add_key) 		/* 285 */ -	.long SYMBOL_NAME(sys_request_key) -	.long SYMBOL_NAME(sys_keyctl) -	.long SYMBOL_NAME(sys_ioprio_set) -	.long SYMBOL_NAME(sys_ioprio_get)	/* 290 */ -	.long SYMBOL_NAME(sys_inotify_init) -	.long SYMBOL_NAME(sys_inotify_add_watch) -	.long SYMBOL_NAME(sys_inotify_rm_watch) -	.long SYMBOL_NAME(sys_migrate_pages) -	.long SYMBOL_NAME(sys_openat)		/* 295 */ -	.long SYMBOL_NAME(sys_mkdirat) -	.long SYMBOL_NAME(sys_mknodat) -	.long SYMBOL_NAME(sys_fchownat) -	.long SYMBOL_NAME(sys_futimesat) -	.long SYMBOL_NAME(sys_fstatat64)	/* 300 */ -	.long SYMBOL_NAME(sys_unlinkat) -	.long SYMBOL_NAME(sys_renameat) -	.long SYMBOL_NAME(sys_linkat) -	.long SYMBOL_NAME(sys_symlinkat) -	.long SYMBOL_NAME(sys_readlinkat)	/* 305 */ -	.long SYMBOL_NAME(sys_fchmodat) -	.long SYMBOL_NAME(sys_faccessat) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_pselect6 */ -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_ppoll */ -	.long SYMBOL_NAME(sys_unshare)		/* 310 */ -	.long SYMBOL_NAME(sys_set_robust_list) -	.long SYMBOL_NAME(sys_get_robust_list) -	.long SYMBOL_NAME(sys_splice) -	.long SYMBOL_NAME(sys_sync_file_range) -	.long SYMBOL_NAME(sys_tee)		/* 315 */ -	.long SYMBOL_NAME(sys_vmsplice) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_move_pages */ -	.long SYMBOL_NAME(sys_getcpu) -	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_epoll_pwait */ - -	.macro	call_sp addr -	mov.l	#SYMBOL_NAME(\addr),er6 -	bra	SYMBOL_NAME(syscall_trampoline):8 -	.endm - -SYMBOL_NAME_LABEL(sys_clone)	 -	call_sp	h8300_clone -	 -SYMBOL_NAME_LABEL(sys_sigsuspend) -	call_sp	do_sigsuspend - -SYMBOL_NAME_LABEL(sys_rt_sigsuspend) -	call_sp	do_rt_sigsuspend - -SYMBOL_NAME_LABEL(sys_sigreturn) -	call_sp	do_sigreturn - -SYMBOL_NAME_LABEL(sys_rt_sigreturn) -	call_sp	do_rt_sigreturn - -SYMBOL_NAME_LABEL(sys_fork) -	call_sp	h8300_fork - -SYMBOL_NAME_LABEL(sys_vfork) -	call_sp	h8300_vfork - -SYMBOL_NAME_LABEL(syscall_trampoline) -	mov.l	sp,er0 -	jmp	@er6 diff --git a/arch/h8300/kernel/time.c b/arch/h8300/kernel/time.c deleted file mode 100644 index 165005aff9d..00000000000 --- a/arch/h8300/kernel/time.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - *  linux/arch/h8300/kernel/time.c - * - *  Yoshinori Sato <ysato@users.sourceforge.jp> - * - *  Copied/hacked from: - * - *  linux/arch/m68k/kernel/time.c - * - *  Copyright (C) 1991, 1992, 1995  Linus Torvalds - * - * This file contains the m68k-specific time handling details. - * Most of the stuff is located in the machine specific files. - * - * 1997-09-10	Updated NTP code according to technical memorandum Jan '96 - *		"A Kernel Model for Precision Timekeeping" by Dave Mills - */ - -#include <linux/errno.h> -#include <linux/module.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/param.h> -#include <linux/string.h> -#include <linux/mm.h> -#include <linux/timex.h> -#include <linux/profile.h> - -#include <asm/io.h> -#include <asm/timer.h> - -#define	TICK_SIZE (tick_nsec / 1000) - -void h8300_timer_tick(void) -{ -	if (current->pid) -		profile_tick(CPU_PROFILING); -	write_seqlock(&xtime_lock); -	do_timer(1); -	write_sequnlock(&xtime_lock); -	update_process_times(user_mode(get_irq_regs())); -} - -void read_persistent_clock(struct timespec *ts) -{ -	unsigned int year, mon, day, hour, min, sec; - -	/* FIX by dqg : Set to zero for platforms that don't have tod */ -	/* without this time is undefined and can overflow time_t, causing  */ -	/* very strange errors */ -	year = 1980; -	mon = day = 1; -	hour = min = sec = 0; -#ifdef CONFIG_H8300_GETTOD -	h8300_gettod (&year, &mon, &day, &hour, &min, &sec); -#endif -	if ((year += 1900) < 1970) -		year += 100; -	ts->tv_sec = mktime(year, mon, day, hour, min, sec); -	ts->tv_nsec = 0; -} - -void __init time_init(void) -{ - -	h8300_timer_setup(); -} diff --git a/arch/h8300/kernel/timer/Makefile b/arch/h8300/kernel/timer/Makefile deleted file mode 100644 index bef0510ea6a..00000000000 --- a/arch/h8300/kernel/timer/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# h8300 internal timer handler - -obj-$(CONFIG_H8300_TIMER8)  := timer8.o -obj-$(CONFIG_H8300_TIMER16) := timer16.o -obj-$(CONFIG_H8300_ITU)     := itu.o -obj-$(CONFIG_H8300_TPU)     := tpu.o diff --git a/arch/h8300/kernel/timer/itu.c b/arch/h8300/kernel/timer/itu.c deleted file mode 100644 index a2ae5e95213..00000000000 --- a/arch/h8300/kernel/timer/itu.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - *  linux/arch/h8300/kernel/timer/itu.c - * - *  Yoshinori Sato <ysato@users.sourcefoge.jp> - * - *  ITU Timer Handler - * - */ - -#include <linux/errno.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/param.h> -#include <linux/string.h> -#include <linux/mm.h> -#include <linux/interrupt.h> -#include <linux/init.h> -#include <linux/timex.h> - -#include <asm/segment.h> -#include <asm/io.h> -#include <asm/irq.h> -#include <asm/regs306x.h> - -#if CONFIG_H8300_ITU_CH == 0 -#define ITUBASE	0xffff64 -#define ITUIRQ	24 -#elif CONFIG_H8300_ITU_CH == 1 -#define ITUBASE	0xffff6e -#define ITUIRQ	28 -#elif CONFIG_H8300_ITU_CH == 2 -#define ITUBASE	0xffff78 -#define ITUIRQ	32 -#elif CONFIG_H8300_ITU_CH == 3 -#define ITUBASE	0xffff82 -#define ITUIRQ	36 -#elif CONFIG_H8300_ITU_CH == 4 -#define ITUBASE	0xffff92 -#define ITUIRQ	40 -#else -#error Unknown timer channel. -#endif - -#define TCR	0 -#define TIOR	1 -#define TIER	2 -#define TSR	3 -#define TCNT	4 -#define GRA	6 -#define GRB	8 - -static irqreturn_t timer_interrupt(int irq, void *dev_id) -{ -	h8300_timer_tick(); -	ctrl_bclr(IMFA, ITUBASE + TSR); -	return IRQ_HANDLED; -} - -static struct irqaction itu_irq = { -	.name		= "itu", -	.handler	= timer_interrupt, -	.flags		= IRQF_DISABLED | IRQF_TIMER, -}; - -static const int __initdata divide_rate[] = {1, 2, 4, 8}; - -void __init h8300_timer_setup(void) -{ -	unsigned int div; -	unsigned int cnt; - -	calc_param(cnt, div, divide_rate, 0x10000); - -	setup_irq(ITUIRQ, &itu_irq); - -	/* initialize timer */ -	ctrl_outb(0, TSTR); -	ctrl_outb(CCLR0 | div, ITUBASE + TCR); -	ctrl_outb(0x01, ITUBASE + TIER); -	ctrl_outw(cnt, ITUBASE + GRA); -	ctrl_bset(CONFIG_H8300_ITU_CH, TSTR); -} diff --git a/arch/h8300/kernel/timer/timer16.c b/arch/h8300/kernel/timer/timer16.c deleted file mode 100644 index ae0d3816113..00000000000 --- a/arch/h8300/kernel/timer/timer16.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - *  linux/arch/h8300/kernel/timer/timer16.c - * - *  Yoshinori Sato <ysato@users.sourcefoge.jp> - * - *  16bit Timer Handler - * - */ - -#include <linux/errno.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/param.h> -#include <linux/string.h> -#include <linux/mm.h> -#include <linux/interrupt.h> -#include <linux/init.h> -#include <linux/timex.h> - -#include <asm/segment.h> -#include <asm/io.h> -#include <asm/irq.h> -#include <asm/regs306x.h> - -/* 16bit timer */ -#if CONFIG_H8300_TIMER16_CH == 0 -#define _16BASE	0xffff78 -#define _16IRQ	24 -#elif CONFIG_H8300_TIMER16_CH == 1 -#define _16BASE	0xffff80 -#define _16IRQ	28 -#elif CONFIG_H8300_TIMER16_CH == 2 -#define _16BASE	0xffff88 -#define _16IRQ	32 -#else -#error Unknown timer channel. -#endif - -#define TCR	0 -#define TIOR	1 -#define TCNT	2 -#define GRA	4 -#define GRB	6 - -#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*10000 /* Timer input freq. */ - -static irqreturn_t timer_interrupt(int irq, void *dev_id) -{ -	h8300_timer_tick(); -	ctrl_bclr(CONFIG_H8300_TIMER16_CH, TISRA); -	return IRQ_HANDLED; -} - -static struct irqaction timer16_irq = { -	.name		= "timer-16", -	.handler	= timer_interrupt, -	.flags		= IRQF_DISABLED | IRQF_TIMER, -}; - -static const int __initdata divide_rate[] = {1, 2, 4, 8}; - -void __init h8300_timer_setup(void) -{ -	unsigned int div; -	unsigned int cnt; - -	calc_param(cnt, div, divide_rate, 0x10000); - -	setup_irq(_16IRQ, &timer16_irq); - -	/* initialize timer */ -	ctrl_outb(0, TSTR); -	ctrl_outb(CCLR0 | div, _16BASE + TCR); -	ctrl_outw(cnt, _16BASE + GRA); -	ctrl_bset(4 + CONFIG_H8300_TIMER16_CH, TISRA); -	ctrl_bset(CONFIG_H8300_TIMER16_CH, TSTR); -} diff --git a/arch/h8300/kernel/timer/timer8.c b/arch/h8300/kernel/timer/timer8.c deleted file mode 100644 index 3946c0fa837..00000000000 --- a/arch/h8300/kernel/timer/timer8.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - *  linux/arch/h8300/kernel/cpu/timer/timer8.c - * - *  Yoshinori Sato <ysato@users.sourcefoge.jp> - * - *  8bit Timer Handler - * - */ - -#include <linux/errno.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/param.h> -#include <linux/string.h> -#include <linux/mm.h> -#include <linux/interrupt.h> -#include <linux/init.h> -#include <linux/profile.h> - -#include <asm/io.h> -#include <asm/irq.h> -#include <asm/timer.h> -#if defined(CONFIG_CPU_H8300H) -#include <asm/regs306x.h> -#endif -#if defined(CONFIG_CPU_H8S) -#include <asm/regs267x.h> -#endif - -/* 8bit timer x2 */ -#define CMFA	6 - -#if defined(CONFIG_H8300_TIMER8_CH0) -#define _8BASE	_8TCR0 -#ifdef CONFIG_CPU_H8300H -#define _8IRQ	36 -#endif -#ifdef CONFIG_CPU_H8S -#define _8IRQ	72 -#endif -#elif defined(CONFIG_H8300_TIMER8_CH2) -#ifdef CONFIG_CPU_H8300H -#define _8BASE	_8TCR2 -#define _8IRQ	40 -#endif -#endif - -#ifndef _8BASE -#error Unknown timer channel. -#endif - -#define _8TCR	0 -#define _8TCSR	2 -#define TCORA	4 -#define TCORB	6 -#define _8TCNT	8 - -#define CMIEA	0x40 -#define CCLR_CMA 0x08 -#define CKS2	0x04 - -/* - * timer_interrupt() needs to keep up the real-time clock, - * as well as call the "do_timer()" routine every clocktick - */ - -static irqreturn_t timer_interrupt(int irq, void *dev_id) -{ -	h8300_timer_tick(); -	ctrl_bclr(CMFA, _8BASE + _8TCSR); -	return IRQ_HANDLED; -} - -static struct irqaction timer8_irq = { -	.name		= "timer-8", -	.handler	= timer_interrupt, -	.flags		= IRQF_DISABLED | IRQF_TIMER, -}; - -static const int __initdata divide_rate[] = {8, 64, 8192}; - -void __init h8300_timer_setup(void) -{ -	unsigned int div; -	unsigned int cnt; - -	calc_param(cnt, div, divide_rate, 0x10000); -	div++; - -	setup_irq(_8IRQ, &timer8_irq); - -#if defined(CONFIG_CPU_H8S) -	/* Timer module enable */ -	ctrl_bclr(0, MSTPCRL) -#endif - -	/* initialize timer */ -	ctrl_outw(cnt, _8BASE + TCORA); -	ctrl_outw(0x0000, _8BASE + _8TCSR); -	ctrl_outw((CMIEA|CCLR_CMA|CKS2) << 8 | div, -		  _8BASE + _8TCR); -} diff --git a/arch/h8300/kernel/timer/tpu.c b/arch/h8300/kernel/timer/tpu.c deleted file mode 100644 index 2193a2e2859..00000000000 --- a/arch/h8300/kernel/timer/tpu.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - *  linux/arch/h8300/kernel/timer/tpu.c - * - *  Yoshinori Sato <ysato@users.sourceforge.jp> - * - *  TPU Timer Handler - * - */ - -#include <linux/errno.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/param.h> -#include <linux/string.h> -#include <linux/mm.h> -#include <linux/interrupt.h> -#include <linux/init.h> -#include <linux/timex.h> - -#include <asm/segment.h> -#include <asm/io.h> -#include <asm/irq.h> -#include <asm/regs267x.h> - -/* TPU */ -#if CONFIG_H8300_TPU_CH == 0 -#define TPUBASE	0xffffd0 -#define TPUIRQ	40 -#elif CONFIG_H8300_TPU_CH == 1 -#define TPUBASE	0xffffe0 -#define TPUIRQ	48 -#elif CONFIG_H8300_TPU_CH == 2 -#define TPUBASE	0xfffff0 -#define TPUIRQ	52 -#elif CONFIG_H8300_TPU_CH == 3 -#define TPUBASE	0xfffe80 -#define TPUIRQ	56 -#elif CONFIG_H8300_TPU_CH == 4 -#define TPUBASE	0xfffe90 -#define TPUIRQ	64 -#else -#error Unknown timer channel. -#endif - -#define _TCR	0 -#define _TMDR	1 -#define _TIOR	2 -#define _TIER	4 -#define _TSR	5 -#define _TCNT	6 -#define _GRA	8 -#define _GRB	10 - -#define CCLR0	0x20 - -static irqreturn_t timer_interrupt(int irq, void *dev_id) -{ -	h8300_timer_tick(); -	ctrl_bclr(0, TPUBASE + _TSR); -	return IRQ_HANDLED; -} - -static struct irqaction tpu_irq = { -	.name		= "tpu", -	.handler	= timer_interrupt, -	.flags		= IRQF_DISABLED | IRQF_TIMER, -}; - -static const int __initdata divide_rate[] = { -#if CONFIG_H8300_TPU_CH == 0 -	1,4,16,64,0,0,0,0, -#elif (CONFIG_H8300_TPU_CH == 1) || (CONFIG_H8300_TPU_CH == 5) -	1,4,16,64,0,0,256,0, -#elif (CONFIG_H8300_TPU_CH == 2) || (CONFIG_H8300_TPU_CH == 4) -	1,4,16,64,0,0,0,1024, -#elif CONFIG_H8300_TPU_CH == 3 -	1,4,16,64,0,1024,256,4096, -#endif -}; - -void __init h8300_timer_setup(void) -{ -	unsigned int cnt; -	unsigned int div; - -	calc_param(cnt, div, divide_rate, 0x10000); - -	setup_irq(TPUIRQ, &tpu_irq); - -	/* TPU module enabled */ -	ctrl_bclr(3, MSTPCRH); - -	ctrl_outb(0, TSTR); -	ctrl_outb(CCLR0 | div, TPUBASE + _TCR); -	ctrl_outb(0, TPUBASE + _TMDR); -	ctrl_outw(0, TPUBASE + _TIOR); -	ctrl_outb(0x01, TPUBASE + _TIER); -	ctrl_outw(cnt, TPUBASE + _GRA); -	ctrl_bset(CONFIG_H8300_TPU_CH, TSTR); -} diff --git a/arch/h8300/kernel/traps.c b/arch/h8300/kernel/traps.c deleted file mode 100644 index dfa05bd908b..00000000000 --- a/arch/h8300/kernel/traps.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * linux/arch/h8300/boot/traps.c -- general exception handling code - * H8/300 support Yoshinori Sato <ysato@users.sourceforge.jp> - *  - * Cloned from Linux/m68k. - * - * No original Copyright holder listed, - * Probable original (C) Roman Zippel (assigned DJD, 1999) - * - * Copyright 1999-2000 D. Jeff Dionne, <jeff@rt-control.com> - * - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file COPYING in the main directory of this archive - * for more details. - */ - -#include <linux/types.h> -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/errno.h> -#include <linux/init.h> -#include <linux/module.h> -#include <linux/bug.h> - -#include <asm/system.h> -#include <asm/irq.h> -#include <asm/traps.h> -#include <asm/page.h> - -static DEFINE_SPINLOCK(die_lock); - -/* - * this must be called very early as the kernel might - * use some instruction that are emulated on the 060 - */ - -void __init base_trap_init(void) -{ -} - -void __init trap_init (void) -{ -} - -asmlinkage void set_esp0 (unsigned long ssp) -{ -	current->thread.esp0 = ssp; -} - -/* - *	Generic dumping code. Used for panic and debug. - */ - -static void dump(struct pt_regs *fp) -{ -	unsigned long	*sp; -	unsigned char	*tp; -	int		i; - -	printk("\nCURRENT PROCESS:\n\n"); -	printk("COMM=%s PID=%d\n", current->comm, current->pid); -	if (current->mm) { -		printk("TEXT=%08x-%08x DATA=%08x-%08x BSS=%08x-%08x\n", -			(int) current->mm->start_code, -			(int) current->mm->end_code, -			(int) current->mm->start_data, -			(int) current->mm->end_data, -			(int) current->mm->end_data, -			(int) current->mm->brk); -		printk("USER-STACK=%08x  KERNEL-STACK=%08lx\n\n", -			(int) current->mm->start_stack, -			(int) PAGE_SIZE+(unsigned long)current); -	} - -	show_regs(fp); -	printk("\nCODE:"); -	tp = ((unsigned char *) fp->pc) - 0x20; -	for (sp = (unsigned long *) tp, i = 0; (i < 0x40);  i += 4) { -		if ((i % 0x10) == 0) -			printk("\n%08x: ", (int) (tp + i)); -		printk("%08x ", (int) *sp++); -	} -	printk("\n"); - -	printk("\nKERNEL STACK:"); -	tp = ((unsigned char *) fp) - 0x40; -	for (sp = (unsigned long *) tp, i = 0; (i < 0xc0); i += 4) { -		if ((i % 0x10) == 0) -			printk("\n%08x: ", (int) (tp + i)); -		printk("%08x ", (int) *sp++); -	} -	printk("\n"); -	if (STACK_MAGIC != *(unsigned long *)((unsigned long)current+PAGE_SIZE)) -                printk("(Possibly corrupted stack page??)\n"); - -	printk("\n\n"); -} - -void die(const char *str, struct pt_regs *fp, unsigned long err) -{ -	static int diecount; - -	oops_enter(); - -	console_verbose(); -	spin_lock_irq(&die_lock); -	report_bug(fp->pc, fp); -	printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, ++diecount); -	dump(fp); - -	spin_unlock_irq(&die_lock); -	do_exit(SIGSEGV); -} - -extern char _start, _etext; -#define check_kernel_text(addr) \ -        ((addr >= (unsigned long)(&_start)) && \ -         (addr <  (unsigned long)(&_etext)))  - -static int kstack_depth_to_print = 24; - -void show_stack(struct task_struct *task, unsigned long *esp) -{ -	unsigned long *stack,  addr; -	int i; - -	if (esp == NULL) -		esp = (unsigned long *) &esp; - -	stack = esp; - -	printk("Stack from %08lx:", (unsigned long)stack); -	for (i = 0; i < kstack_depth_to_print; i++) { -		if (((unsigned long)stack & (THREAD_SIZE - 1)) == 0) -			break; -		if (i % 8 == 0) -			printk("\n       "); -		printk(" %08lx", *stack++); -	} - -	printk("\nCall Trace:"); -	i = 0; -	stack = esp; -	while (((unsigned long)stack & (THREAD_SIZE - 1)) != 0) { -		addr = *stack++; -		/* -		 * If the address is either in the text segment of the -		 * kernel, or in the region which contains vmalloc'ed -		 * memory, it *may* be the address of a calling -		 * routine; if so, print it so that someone tracing -		 * down the cause of the crash will be able to figure -		 * out the call path that was taken. -		 */ -		if (check_kernel_text(addr)) { -			if (i % 4 == 0) -				printk("\n       "); -			printk(" [<%08lx>]", addr); -			i++; -		} -	} -	printk("\n"); -} - -void show_trace_task(struct task_struct *tsk) -{ -	show_stack(tsk,(unsigned long *)tsk->thread.esp0); -} - -void dump_stack(void) -{ -	show_stack(NULL,NULL); -} - -EXPORT_SYMBOL(dump_stack); diff --git a/arch/h8300/kernel/vmlinux.lds.S b/arch/h8300/kernel/vmlinux.lds.S deleted file mode 100644 index 03d356d96e5..00000000000 --- a/arch/h8300/kernel/vmlinux.lds.S +++ /dev/null @@ -1,155 +0,0 @@ -#include <asm-generic/vmlinux.lds.h> -#include <asm/page.h> - -/* target memory map */ -#ifdef CONFIG_H8300H_GENERIC -#define ROMTOP  0x000000 -#define ROMSIZE 0x400000 -#define RAMTOP  0x400000 -#define RAMSIZE 0x400000 -#endif - -#ifdef CONFIG_H8300H_AKI3068NET -#define ROMTOP  0x000000 -#define ROMSIZE 0x080000 -#define RAMTOP  0x400000 -#define RAMSIZE 0x200000 -#endif - -#ifdef CONFIG_H8300H_H8MAX -#define ROMTOP  0x000000 -#define ROMSIZE 0x080000 -#define RAMTOP  0x400000 -#define RAMSIZE 0x200000 -#endif - -#ifdef CONFIG_H8300H_SIM -#define ROMTOP  0x000000 -#define ROMSIZE 0x400000 -#define RAMTOP  0x400000 -#define RAMSIZE 0x400000 -#endif - -#ifdef CONFIG_H8S_SIM -#define ROMTOP  0x000000 -#define ROMSIZE 0x400000 -#define RAMTOP  0x400000 -#define RAMSIZE 0x800000 -#endif - -#ifdef CONFIG_H8S_EDOSK2674 -#define ROMTOP  0x000000 -#define ROMSIZE 0x400000 -#define RAMTOP  0x400000 -#define RAMSIZE 0x800000 -#endif - -#if defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM) -INPUT(romfs.o) -#endif - -_jiffies = _jiffies_64 + 4; - -ENTRY(__start) - -SECTIONS -{ -#if defined(CONFIG_ROMKERNEL) -	. = ROMTOP;  -	.vectors : -	{ -	__vector = . ; -		*(.vectors*) -	} -#else -	. = RAMTOP;  -	.bootvec :	 -	{ -		*(.bootvec) -	} -#endif -        .text : -	{ -	_text = .; -#if defined(CONFIG_ROMKERNEL) -	*(.int_redirect) -#endif -	__stext = . ; -	TEXT_TEXT -	SCHED_TEXT -	LOCK_TEXT -	__etext = . ; -	} -	EXCEPTION_TABLE(16) - -	RODATA -#if defined(CONFIG_ROMKERNEL) -	SECURITY_INIT -#endif -	ROEND = .;  -#if defined(CONFIG_ROMKERNEL) -	. = RAMTOP; -	.data :	AT(ROEND) -#else -	.data :	 -#endif -	{ -	__sdata = . ; -	___data_start = . ; - -	INIT_TASK_DATA(0x2000) -	. = ALIGN(0x4) ; -		DATA_DATA -	. = ALIGN(0x4) ; -		*(.data.*)	 - -	. = ALIGN(0x4) ; -	___init_begin = .; -	__sinittext = .;  -		INIT_TEXT -	__einittext = .;  -		INIT_DATA -	. = ALIGN(0x4) ; -	INIT_SETUP(0x4) -	___setup_start = .; -		*(.init.setup) -	. = ALIGN(0x4) ; -	___setup_end = .; -	INIT_CALLS -	CON_INITCALL -		EXIT_TEXT -		EXIT_DATA -	INIT_RAM_FS -	. = ALIGN(0x4) ; -	___init_end = .; -	__edata = . ; -	} -#if defined(CONFIG_RAMKERNEL) -	SECURITY_INIT -#endif -	__begin_data = LOADADDR(.data); -        .bss :  -        { -	. = ALIGN(0x4) ; -	__sbss = . ; -		*(.bss*) -	. = ALIGN(0x4) ; -		*(COMMON) -	. = ALIGN(0x4) ; -	__ebss = . ; -	__end = . ; -	__ramstart = .; -	} -        .romfs :	 -	{ -		*(.romfs*) -	} -	. = RAMTOP+RAMSIZE; -        .dummy : -        { -	COMMAND_START = . - 0x200 ; -	__ramend = . ; -	} - -	DISCARDS -}  | 
