-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 162630 b: refs/heads/master c: 633ea5d h: refs/heads/master v: v3
- Loading branch information
Greg Ungerer
committed
Sep 15, 2009
1 parent
6d937ee
commit 54bbd58
Showing
4 changed files
with
169 additions
and
277 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: d668bf0a0d73daea4eaaf748435752f52cc077aa | ||
refs/heads/master: 633ea5d78b8b01ba903aeaae10297033830a52dd |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,170 @@ | ||
#ifdef __uClinux__ | ||
#include "processor_no.h" | ||
/* | ||
* include/asm-m68k/processor.h | ||
* | ||
* Copyright (C) 1995 Hamish Macdonald | ||
*/ | ||
|
||
#ifndef __ASM_M68K_PROCESSOR_H | ||
#define __ASM_M68K_PROCESSOR_H | ||
|
||
/* | ||
* Default implementation of macro that returns current | ||
* instruction pointer ("program counter"). | ||
*/ | ||
#define current_text_addr() ({ __label__ _l; _l: &&_l;}) | ||
|
||
#include <linux/thread_info.h> | ||
#include <asm/segment.h> | ||
#include <asm/fpu.h> | ||
#include <asm/ptrace.h> | ||
|
||
static inline unsigned long rdusp(void) | ||
{ | ||
#ifdef CONFIG_COLDFIRE | ||
extern unsigned int sw_usp; | ||
return sw_usp; | ||
#else | ||
#include "processor_mm.h" | ||
unsigned long usp; | ||
__asm__ __volatile__("move %/usp,%0" : "=a" (usp)); | ||
return usp; | ||
#endif | ||
} | ||
|
||
static inline void wrusp(unsigned long usp) | ||
{ | ||
#ifdef CONFIG_COLDFIRE | ||
extern unsigned int sw_usp; | ||
sw_usp = usp; | ||
#else | ||
__asm__ __volatile__("move %0,%/usp" : : "a" (usp)); | ||
#endif | ||
} | ||
|
||
/* | ||
* User space process size: 3.75GB. This is hardcoded into a few places, | ||
* so don't change it unless you know what you are doing. | ||
*/ | ||
#ifndef CONFIG_SUN3 | ||
#define TASK_SIZE (0xF0000000UL) | ||
#else | ||
#define TASK_SIZE (0x0E000000UL) | ||
#endif | ||
|
||
#ifdef __KERNEL__ | ||
#define STACK_TOP TASK_SIZE | ||
#define STACK_TOP_MAX STACK_TOP | ||
#endif | ||
|
||
/* This decides where the kernel will search for a free chunk of vm | ||
* space during mmap's. | ||
*/ | ||
#ifdef CONFIG_MMU | ||
#ifndef CONFIG_SUN3 | ||
#define TASK_UNMAPPED_BASE 0xC0000000UL | ||
#else | ||
#define TASK_UNMAPPED_BASE 0x0A000000UL | ||
#endif | ||
#define TASK_UNMAPPED_ALIGN(addr, off) PAGE_ALIGN(addr) | ||
#else | ||
#define TASK_UNMAPPED_BASE 0 | ||
#endif | ||
|
||
struct thread_struct { | ||
unsigned long ksp; /* kernel stack pointer */ | ||
unsigned long usp; /* user stack pointer */ | ||
unsigned short sr; /* saved status register */ | ||
unsigned short fs; /* saved fs (sfc, dfc) */ | ||
unsigned long crp[2]; /* cpu root pointer */ | ||
unsigned long esp0; /* points to SR of stack frame */ | ||
unsigned long faddr; /* info about last fault */ | ||
int signo, code; | ||
unsigned long fp[8*3]; | ||
unsigned long fpcntl[3]; /* fp control regs */ | ||
unsigned char fpstate[FPSTATESIZE]; /* floating point state */ | ||
struct thread_info info; | ||
}; | ||
|
||
#define INIT_THREAD { \ | ||
.ksp = sizeof(init_stack) + (unsigned long) init_stack, \ | ||
.sr = PS_S, \ | ||
.fs = __KERNEL_DS, \ | ||
.info = INIT_THREAD_INFO(init_task), \ | ||
} | ||
|
||
#ifdef CONFIG_MMU | ||
/* | ||
* Do necessary setup to start up a newly executed thread. | ||
*/ | ||
static inline void start_thread(struct pt_regs * regs, unsigned long pc, | ||
unsigned long usp) | ||
{ | ||
/* reads from user space */ | ||
set_fs(USER_DS); | ||
|
||
regs->pc = pc; | ||
regs->sr &= ~0x2000; | ||
wrusp(usp); | ||
} | ||
|
||
#else | ||
|
||
/* | ||
* Coldfire stacks need to be re-aligned on trap exit, conventional | ||
* 68k can handle this case cleanly. | ||
*/ | ||
#ifdef CONFIG_COLDFIRE | ||
#define reformat(_regs) do { (_regs)->format = 0x4; } while(0) | ||
#else | ||
#define reformat(_regs) do { } while (0) | ||
#endif | ||
|
||
#define start_thread(_regs, _pc, _usp) \ | ||
do { \ | ||
set_fs(USER_DS); /* reads from user space */ \ | ||
(_regs)->pc = (_pc); \ | ||
((struct switch_stack *)(_regs))[-1].a6 = 0; \ | ||
reformat(_regs); \ | ||
if (current->mm) \ | ||
(_regs)->d5 = current->mm->start_data; \ | ||
(_regs)->sr &= ~0x2000; \ | ||
wrusp(_usp); \ | ||
} while(0) | ||
|
||
#endif | ||
|
||
/* Forward declaration, a strange C thing */ | ||
struct task_struct; | ||
|
||
/* Free all resources held by a thread. */ | ||
static inline void release_thread(struct task_struct *dead_task) | ||
{ | ||
} | ||
|
||
/* Prepare to copy thread state - unlazy all lazy status */ | ||
#define prepare_to_copy(tsk) do { } while (0) | ||
|
||
extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); | ||
|
||
/* | ||
* Free current thread data structures etc.. | ||
*/ | ||
static inline void exit_thread(void) | ||
{ | ||
} | ||
|
||
extern unsigned long thread_saved_pc(struct task_struct *tsk); | ||
|
||
unsigned long get_wchan(struct task_struct *p); | ||
|
||
#define KSTK_EIP(tsk) \ | ||
({ \ | ||
unsigned long eip = 0; \ | ||
if ((tsk)->thread.esp0 > PAGE_SIZE && \ | ||
(virt_addr_valid((tsk)->thread.esp0))) \ | ||
eip = ((struct pt_regs *) (tsk)->thread.esp0)->pc; \ | ||
eip; }) | ||
#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp) | ||
|
||
#define cpu_relax() barrier() | ||
|
||
#endif |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.