提交 ab534857 编写于 作者: L Linus Torvalds

Merge branch 'exotic-arch-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k

Pull "exotic" arch fixes from Geert Uytterhoeven:
 "This is a collection of several exotic architecture fixes, and a few
  other fixes for issues that were detected while doing the former"

* 'exotic-arch-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k: (35 commits)
  lib: Move fonts from drivers/video/console/ to lib/fonts/
  console/font: Refactor font support code selection logic
  Revert "staging/solo6x10: depend on CONFIG_FONTS"
  input: cros_ec_keyb_clear_keyboard() depends on CONFIG_PM_SLEEP
  score: Wire up asm-generic/xor.h
  score: Remove unneeded <asm/dma-mapping.h>
  openrisc: Wire up asm-generic/xor.h
  h8300/boot: Use POSIX "$((..))" instead of bashism "$[...]"
  h8300: Mark H83002 and H83048 CPU support broken
  h8300: Switch h8300 to drivers/Kconfig
  h8300: Limit timer channel ranges in Kconfig
  h8300: Wire up asm-generic/xor.h
  h8300: Fill the system call table using a CALL() macro
  h8300: Fix <asm/tlb.h>
  h8300: Hardcode symbol prefixes in asm sources
  h8300: add missing definition for read_barries_depends()
  frv: head.S - Remove commented-out initialization code
  cris: Wire up asm-generic/vga.h
  parport: disable PC-style parallel port support on cris
  console: Disable VGA text console support on cris
  ...
......@@ -297,10 +297,10 @@ KAO -->
</sect1>
<sect1><title>Frame Buffer Fonts</title>
<para>
Refer to the file drivers/video/console/fonts.c for more information.
Refer to the file lib/fonts/fonts.c for more information.
</para>
<!-- FIXME: Removed for now since no structured comments in source
X!Idrivers/video/console/fonts.c
X!Ilib/fonts/fonts.c
-->
</sect1>
</chapter>
......
......@@ -27,7 +27,7 @@ OBJS += misc.o decompress.o
ifeq ($(CONFIG_DEBUG_UNCOMPRESS),y)
OBJS += debug.o
endif
FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c
FONTC = $(srctree)/lib/fonts/font_acorn_8x8.c
# string library code (-Os is enforced to keep it much smaller)
OBJS += string.o
......
......@@ -1060,7 +1060,9 @@ struct platform_device *__init at32_add_device_usart(unsigned int id)
void __init at32_setup_serial_console(unsigned int usart_id)
{
#ifdef CONFIG_SERIAL_ATMEL
atmel_default_console_device = at32_usarts[usart_id];
#endif
}
/* --------------------------------------------------------------------
......
......@@ -55,3 +55,4 @@ generic-y += types.h
generic-y += ucontext.h
generic-y += user.h
generic-y += vga.h
generic-y += xor.h
......@@ -637,40 +637,10 @@ endchoice
endmenu
source "drivers/base/Kconfig"
# standard linux drivers
source "drivers/mtd/Kconfig"
source "drivers/parport/Kconfig"
source "drivers/pnp/Kconfig"
source "drivers/block/Kconfig"
source "drivers/ide/Kconfig"
source "drivers/net/Kconfig"
source "drivers/i2c/Kconfig"
source "drivers/rtc/Kconfig"
#
# input before char - char/joystick depends on it. As does USB.
#
source "drivers/input/Kconfig"
source "drivers/char/Kconfig"
source "drivers/Kconfig"
source "fs/Kconfig"
source "drivers/usb/Kconfig"
source "drivers/uwb/Kconfig"
source "drivers/staging/Kconfig"
source "arch/cris/Kconfig.debug"
source "security/Kconfig"
......
......@@ -230,46 +230,6 @@ struct register_image
unsigned int usp; /* 0x66 User mode stack pointer */
} registers;
/************** Prototypes for local library functions ***********************/
/* Copy of strcpy from libc. */
static char *gdb_cris_strcpy (char *s1, const char *s2);
/* Copy of strlen from libc. */
static int gdb_cris_strlen (const char *s);
/* Copy of memchr from libc. */
static void *gdb_cris_memchr (const void *s, int c, int n);
/* Copy of strtol from libc. Does only support base 16. */
static int gdb_cris_strtol (const char *s, char **endptr, int base);
/********************** Prototypes for local functions. **********************/
/* Copy the content of a register image into another. The size n is
the size of the register image. Due to struct assignment generation of
memcpy in libc. */
static void copy_registers (registers *dptr, registers *sptr, int n);
/* Copy the stored registers from the stack. Put the register contents
of thread thread_id in the struct reg. */
static void copy_registers_from_stack (int thread_id, registers *reg);
/* Copy the registers to the stack. Put the register contents of thread
thread_id from struct reg to the stack. */
static void copy_registers_to_stack (int thread_id, registers *reg);
/* Write a value to a specified register regno in the register image
of the current thread. */
static int write_register (int regno, char *val);
/* Write a value to a specified register in the stack of a thread other
than the current thread. */
static int write_stack_register(int thread_id, int regno, char *valptr);
/* Read a value from a specified register in the register image. Returns the
status of the read operation. The register value is returned in valptr. */
static int read_register (char regno, unsigned int *valptr);
/* Serial port, reads one character. ETRAX 100 specific. from debugport.c */
int getDebugChar (void);
......@@ -278,42 +238,6 @@ void putDebugChar (int val);
void enableDebugIRQ (void);
/* Returns the integer equivalent of a hexadecimal character. */
static int hex (char ch);
/* Convert the memory, pointed to by mem into hexadecimal representation.
Put the result in buf, and return a pointer to the last character
in buf (null). */
static char *mem2hex (char *buf, unsigned char *mem, int count);
/* Convert the array, in hexadecimal representation, pointed to by buf into
binary representation. Put the result in mem, and return a pointer to
the character after the last byte written. */
static unsigned char *hex2mem (unsigned char *mem, char *buf, int count);
/* Put the content of the array, in binary representation, pointed to by buf
into memory pointed to by mem, and return a pointer to
the character after the last byte written. */
static unsigned char *bin2mem (unsigned char *mem, unsigned char *buf, int count);
/* Await the sequence $<data>#<checksum> and store <data> in the array buffer
returned. */
static void getpacket (char *buffer);
/* Send $<data>#<checksum> from the <data> in the array buffer. */
static void putpacket (char *buffer);
/* Build and send a response packet in order to inform the host the
stub is stopped. */
static void stub_is_stopped (int sigval);
/* All expected commands are sent from remote.c. Send a response according
to the description in remote.c. */
static void handle_exception (int sigval);
/* Performs a complete re-start from scratch. ETRAX specific. */
static void kill_restart (void);
/******************** Prototypes for global functions. ***********************/
/* The string str is prepended with the GDB printout token and sent. */
......@@ -336,10 +260,6 @@ extern unsigned char executing_task;
/* The number of characters used for a 64 bit thread identifier. */
#define HEXCHARS_IN_THREAD_ID 16
/* Avoid warning as the internal_stack is not used in the C-code. */
#define USEDVAR(name) { if (name) { ; } }
#define USEDFUN(name) { void (*pf)(void) = (void *)name; USEDVAR(pf) }
/********************************** Packet I/O ******************************/
/* BUFMAX defines the maximum number of characters in
inbound/outbound buffers */
......@@ -405,7 +325,7 @@ static int register_size[] =
/* Contains the register image of the executing thread in the assembler
part of the code in order to avoid horrible addressing modes. */
static registers reg;
registers cris_reg;
/* FIXME: Should this be used? Delete otherwise. */
/* Contains the assumed consistency state of the register image. Uses the
......@@ -413,7 +333,7 @@ static registers reg;
static int consistency_status = SUCCESS;
/********************************** Handle exceptions ************************/
/* The variable reg contains the register image associated with the
/* The variable cris_reg contains the register image associated with the
current_thread_c variable. It is a complete register image created at
entry. The reg_g contains a register image of a task where the general
registers are taken from the stack and all special registers are taken
......@@ -421,18 +341,10 @@ static int consistency_status = SUCCESS;
in order to provide access mainly for 'g', 'G' and 'P'.
*/
/* Need two task id pointers in order to handle Hct and Hgt commands. */
static int current_thread_c = 0;
static int current_thread_g = 0;
/* Need two register images in order to handle Hct and Hgt commands. The
variable reg_g is in addition to reg above. */
static registers reg_g;
/********************************** Breakpoint *******************************/
/* Use an internal stack in the breakpoint and interrupt response routines */
#define INTERNAL_STACK_SIZE 1024
static char internal_stack[INTERNAL_STACK_SIZE];
char internal_stack[INTERNAL_STACK_SIZE];
/* Due to the breakpoint return pointer, a state variable is needed to keep
track of whether it is a static (compiled) or dynamic (gdb-invoked)
......@@ -500,164 +412,6 @@ gdb_cris_strtol (const char *s, char **endptr, int base)
return x;
}
/********************************* Register image ****************************/
/* Copy the content of a register image into another. The size n is
the size of the register image. Due to struct assignment generation of
memcpy in libc. */
static void
copy_registers (registers *dptr, registers *sptr, int n)
{
unsigned char *dreg;
unsigned char *sreg;
for (dreg = (unsigned char*)dptr, sreg = (unsigned char*)sptr; n > 0; n--)
*dreg++ = *sreg++;
}
#ifdef PROCESS_SUPPORT
/* Copy the stored registers from the stack. Put the register contents
of thread thread_id in the struct reg. */
static void
copy_registers_from_stack (int thread_id, registers *regptr)
{
int j;
stack_registers *s = (stack_registers *)stack_list[thread_id];
unsigned int *d = (unsigned int *)regptr;
for (j = 13; j >= 0; j--)
*d++ = s->r[j];
regptr->sp = (unsigned int)stack_list[thread_id];
regptr->pc = s->pc;
regptr->dccr = s->dccr;
regptr->srp = s->srp;
}
/* Copy the registers to the stack. Put the register contents of thread
thread_id from struct reg to the stack. */
static void
copy_registers_to_stack (int thread_id, registers *regptr)
{
int i;
stack_registers *d = (stack_registers *)stack_list[thread_id];
unsigned int *s = (unsigned int *)regptr;
for (i = 0; i < 14; i++) {
d->r[i] = *s++;
}
d->pc = regptr->pc;
d->dccr = regptr->dccr;
d->srp = regptr->srp;
}
#endif
/* Write a value to a specified register in the register image of the current
thread. Returns status code SUCCESS, E02 or E05. */
static int
write_register (int regno, char *val)
{
int status = SUCCESS;
registers *current_reg = &reg;
if (regno >= R0 && regno <= PC) {
/* 32-bit register with simple offset. */
hex2mem ((unsigned char *)current_reg + regno * sizeof(unsigned int),
val, sizeof(unsigned int));
}
else if (regno == P0 || regno == VR || regno == P4 || regno == P8) {
/* Do not support read-only registers. */
status = E02;
}
else if (regno == CCR) {
/* 16 bit register with complex offset. (P4 is read-only, P6 is not implemented,
and P7 (MOF) is 32 bits in ETRAX 100LX. */
hex2mem ((unsigned char *)&(current_reg->ccr) + (regno-CCR) * sizeof(unsigned short),
val, sizeof(unsigned short));
}
else if (regno >= MOF && regno <= USP) {
/* 32 bit register with complex offset. (P8 has been taken care of.) */
hex2mem ((unsigned char *)&(current_reg->ibr) + (regno-IBR) * sizeof(unsigned int),
val, sizeof(unsigned int));
}
else {
/* Do not support nonexisting or unimplemented registers (P2, P3, and P6). */
status = E05;
}
return status;
}
#ifdef PROCESS_SUPPORT
/* Write a value to a specified register in the stack of a thread other
than the current thread. Returns status code SUCCESS or E07. */
static int
write_stack_register (int thread_id, int regno, char *valptr)
{
int status = SUCCESS;
stack_registers *d = (stack_registers *)stack_list[thread_id];
unsigned int val;
hex2mem ((unsigned char *)&val, valptr, sizeof(unsigned int));
if (regno >= R0 && regno < SP) {
d->r[regno] = val;
}
else if (regno == SP) {
stack_list[thread_id] = val;
}
else if (regno == PC) {
d->pc = val;
}
else if (regno == SRP) {
d->srp = val;
}
else if (regno == DCCR) {
d->dccr = val;
}
else {
/* Do not support registers in the current thread. */
status = E07;
}
return status;
}
#endif
/* Read a value from a specified register in the register image. Returns the
value in the register or -1 for non-implemented registers.
Should check consistency_status after a call which may be E05 after changes
in the implementation. */
static int
read_register (char regno, unsigned int *valptr)
{
registers *current_reg = &reg;
if (regno >= R0 && regno <= PC) {
/* 32-bit register with simple offset. */
*valptr = *(unsigned int *)((char *)current_reg + regno * sizeof(unsigned int));
return SUCCESS;
}
else if (regno == P0 || regno == VR) {
/* 8 bit register with complex offset. */
*valptr = (unsigned int)(*(unsigned char *)
((char *)&(current_reg->p0) + (regno-P0) * sizeof(char)));
return SUCCESS;
}
else if (regno == P4 || regno == CCR) {
/* 16 bit register with complex offset. */
*valptr = (unsigned int)(*(unsigned short *)
((char *)&(current_reg->p4) + (regno-P4) * sizeof(unsigned short)));
return SUCCESS;
}
else if (regno >= MOF && regno <= USP) {
/* 32 bit register with complex offset. */
*valptr = *(unsigned int *)((char *)&(current_reg->p8)
+ (regno-P8) * sizeof(unsigned int));
return SUCCESS;
}
else {
/* Do not support nonexisting or unimplemented registers (P2, P3, and P6). */
consistency_status = E05;
return E05;
}
}
/********************************** Packet I/O ******************************/
/* Returns the integer equivalent of a hexadecimal character. */
static int
......@@ -676,8 +430,6 @@ hex (char ch)
Put the result in buf, and return a pointer to the last character
in buf (null). */
static int do_printk = 0;
static char *
mem2hex(char *buf, unsigned char *mem, int count)
{
......@@ -761,7 +513,7 @@ getpacket (char *buffer)
xmitcsum = -1;
count = 0;
/* Read until a # or the end of the buffer is reached */
while (count < BUFMAX) {
while (count < BUFMAX - 1) {
ch = getDebugChar ();
if (ch == '#')
break;
......@@ -845,6 +597,81 @@ putDebugString (const unsigned char *str, int length)
putpacket(remcomOutBuffer);
}
/********************************* Register image ****************************/
/* Write a value to a specified register in the register image of the current
thread. Returns status code SUCCESS, E02 or E05. */
static int
write_register (int regno, char *val)
{
int status = SUCCESS;
registers *current_reg = &cris_reg;
if (regno >= R0 && regno <= PC) {
/* 32-bit register with simple offset. */
hex2mem ((unsigned char *)current_reg + regno * sizeof(unsigned int),
val, sizeof(unsigned int));
}
else if (regno == P0 || regno == VR || regno == P4 || regno == P8) {
/* Do not support read-only registers. */
status = E02;
}
else if (regno == CCR) {
/* 16 bit register with complex offset. (P4 is read-only, P6 is not implemented,
and P7 (MOF) is 32 bits in ETRAX 100LX. */
hex2mem ((unsigned char *)&(current_reg->ccr) + (regno-CCR) * sizeof(unsigned short),
val, sizeof(unsigned short));
}
else if (regno >= MOF && regno <= USP) {
/* 32 bit register with complex offset. (P8 has been taken care of.) */
hex2mem ((unsigned char *)&(current_reg->ibr) + (regno-IBR) * sizeof(unsigned int),
val, sizeof(unsigned int));
}
else {
/* Do not support nonexisting or unimplemented registers (P2, P3, and P6). */
status = E05;
}
return status;
}
/* Read a value from a specified register in the register image. Returns the
value in the register or -1 for non-implemented registers.
Should check consistency_status after a call which may be E05 after changes
in the implementation. */
static int
read_register (char regno, unsigned int *valptr)
{
registers *current_reg = &cris_reg;
if (regno >= R0 && regno <= PC) {
/* 32-bit register with simple offset. */
*valptr = *(unsigned int *)((char *)current_reg + regno * sizeof(unsigned int));
return SUCCESS;
}
else if (regno == P0 || regno == VR) {
/* 8 bit register with complex offset. */
*valptr = (unsigned int)(*(unsigned char *)
((char *)&(current_reg->p0) + (regno-P0) * sizeof(char)));
return SUCCESS;
}
else if (regno == P4 || regno == CCR) {
/* 16 bit register with complex offset. */
*valptr = (unsigned int)(*(unsigned short *)
((char *)&(current_reg->p4) + (regno-P4) * sizeof(unsigned short)));
return SUCCESS;
}
else if (regno >= MOF && regno <= USP) {
/* 32 bit register with complex offset. */
*valptr = *(unsigned int *)((char *)&(current_reg->p8)
+ (regno-P8) * sizeof(unsigned int));
return SUCCESS;
}
else {
/* Do not support nonexisting or unimplemented registers (P2, P3, and P6). */
consistency_status = E05;
return E05;
}
}
/********************************** Handle exceptions ************************/
/* Build and send a response packet in order to inform the host the
stub is stopped. TAAn...:r...;n...:r...;n...:r...;
......@@ -891,26 +718,6 @@ stub_is_stopped(int sigval)
}
#ifdef PROCESS_SUPPORT
/* Store the registers of the executing thread. Assume that both step,
continue, and register content requests are with respect to this
thread. The executing task is from the operating system scheduler. */
current_thread_c = executing_task;
current_thread_g = executing_task;
/* A struct assignment translates into a libc memcpy call. Avoid
all libc functions in order to prevent recursive break points. */
copy_registers (&reg_g, &reg, sizeof(registers));
/* Store thread:r...; with the executing task TID. */
gdb_cris_strcpy (&remcomOutBuffer[pos], "thread:");
pos += gdb_cris_strlen ("thread:");
remcomOutBuffer[pos++] = hex_asc_hi(executing_task);
remcomOutBuffer[pos++] = hex_asc_lo(executing_task);
gdb_cris_strcpy (&remcomOutBuffer[pos], ";");
#endif
/* null-terminate and send it off */
*ptr = 0;
......@@ -918,16 +725,18 @@ stub_is_stopped(int sigval)
putpacket (remcomOutBuffer);
}
/* Performs a complete re-start from scratch. */
static void
kill_restart (void)
{
machine_restart("");
}
/* All expected commands are sent from remote.c. Send a response according
to the description in remote.c. */
static void
void
handle_exception (int sigval)
{
/* Avoid warning of not used. */
USEDFUN(handle_exception);
USEDVAR(internal_stack[0]);
/* Send response. */
stub_is_stopped (sigval);
......@@ -943,19 +752,7 @@ handle_exception (int sigval)
in a register are in the same order the machine uses.
Failure: void. */
{
#ifdef PROCESS_SUPPORT
/* Use the special register content in the executing thread. */
copy_registers (&reg_g, &reg, sizeof(registers));
/* Replace the content available on the stack. */
if (current_thread_g != executing_task) {
copy_registers_from_stack (current_thread_g, &reg_g);
}
mem2hex ((unsigned char *)remcomOutBuffer, (unsigned char *)&reg_g, sizeof(registers));
#else
mem2hex(remcomOutBuffer, (char *)&reg, sizeof(registers));
#endif
}
mem2hex(remcomOutBuffer, (char *)&cris_reg, sizeof(registers));
break;
case 'G':
......@@ -963,17 +760,7 @@ handle_exception (int sigval)
Each byte of register data is described by two hex digits.
Success: OK
Failure: void. */
#ifdef PROCESS_SUPPORT
hex2mem ((unsigned char *)&reg_g, &remcomInBuffer[1], sizeof(registers));
if (current_thread_g == executing_task) {
copy_registers (&reg, &reg_g, sizeof(registers));
}
else {
copy_registers_to_stack(current_thread_g, &reg_g);
}
#else
hex2mem((char *)&reg, &remcomInBuffer[1], sizeof(registers));
#endif
hex2mem((char *)&cris_reg, &remcomInBuffer[1], sizeof(registers));
gdb_cris_strcpy (remcomOutBuffer, "OK");
break;
......@@ -989,12 +776,7 @@ handle_exception (int sigval)
char *suffix;
int regno = gdb_cris_strtol (&remcomInBuffer[1], &suffix, 16);
int status;
#ifdef PROCESS_SUPPORT
if (current_thread_g != executing_task)
status = write_stack_register (current_thread_g, regno, suffix+1);
else
#endif
status = write_register (regno, suffix+1);
status = write_register (regno, suffix+1);
switch (status) {
case E02:
......@@ -1073,7 +855,7 @@ handle_exception (int sigval)
Success: return to the executing thread.
Failure: will never know. */
if (remcomInBuffer[1] != '\0') {
reg.pc = gdb_cris_strtol (&remcomInBuffer[1], 0, 16);
cris_reg.pc = gdb_cris_strtol (&remcomInBuffer[1], 0, 16);
}
enableDebugIRQ();
return;
......@@ -1129,119 +911,6 @@ handle_exception (int sigval)
Not supported: E04 */
gdb_cris_strcpy (remcomOutBuffer, error_message[E04]);
break;
#ifdef PROCESS_SUPPORT
case 'T':
/* Thread alive. TXX
Is thread XX alive?
Success: OK, thread XX is alive.
Failure: E03, thread XX is dead. */
{
int thread_id = (int)gdb_cris_strtol (&remcomInBuffer[1], 0, 16);
/* Cannot tell whether it is alive or not. */
if (thread_id >= 0 && thread_id < number_of_tasks)
gdb_cris_strcpy (remcomOutBuffer, "OK");
}
break;
case 'H':
/* Set thread for subsequent operations: Hct
c = 'c' for thread used in step and continue;
t can be -1 for all threads.
c = 'g' for thread used in other operations.
t = 0 means pick any thread.
Success: OK
Failure: E01 */
{
int thread_id = gdb_cris_strtol (&remcomInBuffer[2], 0, 16);
if (remcomInBuffer[1] == 'c') {
/* c = 'c' for thread used in step and continue */
/* Do not change current_thread_c here. It would create a mess in
the scheduler. */
gdb_cris_strcpy (remcomOutBuffer, "OK");
}
else if (remcomInBuffer[1] == 'g') {
/* c = 'g' for thread used in other operations.
t = 0 means pick any thread. Impossible since the scheduler does
not allow that. */
if (thread_id >= 0 && thread_id < number_of_tasks) {
current_thread_g = thread_id;
gdb_cris_strcpy (remcomOutBuffer, "OK");
}
else {
/* Not expected - send an error message. */
gdb_cris_strcpy (remcomOutBuffer, error_message[E01]);
}
}
else {
/* Not expected - send an error message. */
gdb_cris_strcpy (remcomOutBuffer, error_message[E01]);
}
}
break;
case 'q':
case 'Q':
/* Query of general interest. qXXXX
Set general value XXXX. QXXXX=yyyy */
{
int pos;
int nextpos;
int thread_id;
switch (remcomInBuffer[1]) {
case 'C':
/* Identify the remote current thread. */
gdb_cris_strcpy (&remcomOutBuffer[0], "QC");
remcomOutBuffer[2] = hex_asc_hi(current_thread_c);
remcomOutBuffer[3] = hex_asc_lo(current_thread_c);
remcomOutBuffer[4] = '\0';
break;
case 'L':
gdb_cris_strcpy (&remcomOutBuffer[0], "QM");
/* Reply with number of threads. */
if (os_is_started()) {
remcomOutBuffer[2] = hex_asc_hi(number_of_tasks);
remcomOutBuffer[3] = hex_asc_lo(number_of_tasks);
}
else {
remcomOutBuffer[2] = hex_asc_hi(0);
remcomOutBuffer[3] = hex_asc_lo(1);
}
/* Done with the reply. */
remcomOutBuffer[4] = hex_asc_lo(1);
pos = 5;
/* Expects the argument thread id. */
for (; pos < (5 + HEXCHARS_IN_THREAD_ID); pos++)
remcomOutBuffer[pos] = remcomInBuffer[pos];
/* Reply with the thread identifiers. */
if (os_is_started()) {
/* Store the thread identifiers of all tasks. */
for (thread_id = 0; thread_id < number_of_tasks; thread_id++) {
nextpos = pos + HEXCHARS_IN_THREAD_ID - 1;
for (; pos < nextpos; pos ++)
remcomOutBuffer[pos] = hex_asc_lo(0);
remcomOutBuffer[pos++] = hex_asc_lo(thread_id);
}
}
else {
/* Store the thread identifier of the boot task. */
nextpos = pos + HEXCHARS_IN_THREAD_ID - 1;
for (; pos < nextpos; pos ++)
remcomOutBuffer[pos] = hex_asc_lo(0);
remcomOutBuffer[pos++] = hex_asc_lo(current_thread_c);
}
remcomOutBuffer[pos] = '\0';
break;
default:
/* Not supported: "" */
/* Request information about section offsets: qOffsets. */
remcomOutBuffer[0] = 0;
break;
}
}
break;
#endif /* PROCESS_SUPPORT */
default:
/* The stub should ignore other request and send an empty
......@@ -1254,13 +923,6 @@ handle_exception (int sigval)
}
}
/* Performs a complete re-start from scratch. */
static void
kill_restart ()
{
machine_restart("");
}
/********************************** Breakpoint *******************************/
/* The hook for both a static (compiled) and a dynamic breakpoint set by GDB.
An internal stack is used by the stub. The register image of the caller is
......@@ -1270,93 +932,93 @@ kill_restart ()
void kgdb_handle_breakpoint(void);
asm ("
.global kgdb_handle_breakpoint
kgdb_handle_breakpoint:
;;
;; Response to the break-instruction
;;
;; Create a register image of the caller
;;
move $dccr,[reg+0x5E] ; Save the flags in DCCR before disable interrupts
di ; Disable interrupts
move.d $r0,[reg] ; Save R0
move.d $r1,[reg+0x04] ; Save R1
move.d $r2,[reg+0x08] ; Save R2
move.d $r3,[reg+0x0C] ; Save R3
move.d $r4,[reg+0x10] ; Save R4
move.d $r5,[reg+0x14] ; Save R5
move.d $r6,[reg+0x18] ; Save R6
move.d $r7,[reg+0x1C] ; Save R7
move.d $r8,[reg+0x20] ; Save R8
move.d $r9,[reg+0x24] ; Save R9
move.d $r10,[reg+0x28] ; Save R10
move.d $r11,[reg+0x2C] ; Save R11
move.d $r12,[reg+0x30] ; Save R12
move.d $r13,[reg+0x34] ; Save R13
move.d $sp,[reg+0x38] ; Save SP (R14)
;; Due to the old assembler-versions BRP might not be recognized
.word 0xE670 ; move brp,$r0
subq 2,$r0 ; Set to address of previous instruction.
move.d $r0,[reg+0x3c] ; Save the address in PC (R15)
clear.b [reg+0x40] ; Clear P0
move $vr,[reg+0x41] ; Save special register P1
clear.w [reg+0x42] ; Clear P4
move $ccr,[reg+0x44] ; Save special register CCR
move $mof,[reg+0x46] ; P7
clear.d [reg+0x4A] ; Clear P8
move $ibr,[reg+0x4E] ; P9,
move $irp,[reg+0x52] ; P10,
move $srp,[reg+0x56] ; P11,
move $dtp0,[reg+0x5A] ; P12, register BAR, assembler might not know BAR
; P13, register DCCR already saved
;; Due to the old assembler-versions BRP might not be recognized
.word 0xE670 ; move brp,r0
;; Static (compiled) breakpoints must return to the next instruction in order
;; to avoid infinite loops. Dynamic (gdb-invoked) must restore the instruction
;; in order to execute it when execution is continued.
test.b [is_dyn_brkp] ; Is this a dynamic breakpoint?
beq is_static ; No, a static breakpoint
nop
subq 2,$r0 ; rerun the instruction the break replaced
is_static:
moveq 1,$r1
move.b $r1,[is_dyn_brkp] ; Set the state variable to dynamic breakpoint
move.d $r0,[reg+0x62] ; Save the return address in BRP
move $usp,[reg+0x66] ; USP
;;
;; Handle the communication
;;
move.d internal_stack+1020,$sp ; Use the internal stack which grows upward
moveq 5,$r10 ; SIGTRAP
jsr handle_exception ; Interactive routine
;;
;; Return to the caller
;;
move.d [reg],$r0 ; Restore R0
move.d [reg+0x04],$r1 ; Restore R1
move.d [reg+0x08],$r2 ; Restore R2
move.d [reg+0x0C],$r3 ; Restore R3
move.d [reg+0x10],$r4 ; Restore R4
move.d [reg+0x14],$r5 ; Restore R5
move.d [reg+0x18],$r6 ; Restore R6
move.d [reg+0x1C],$r7 ; Restore R7
move.d [reg+0x20],$r8 ; Restore R8
move.d [reg+0x24],$r9 ; Restore R9
move.d [reg+0x28],$r10 ; Restore R10
move.d [reg+0x2C],$r11 ; Restore R11
move.d [reg+0x30],$r12 ; Restore R12
move.d [reg+0x34],$r13 ; Restore R13
;;
;; FIXME: Which registers should be restored?
;;
move.d [reg+0x38],$sp ; Restore SP (R14)
move [reg+0x56],$srp ; Restore the subroutine return pointer.
move [reg+0x5E],$dccr ; Restore DCCR
move [reg+0x66],$usp ; Restore USP
jump [reg+0x62] ; A jump to the content in register BRP works.
nop ;
");
asm ("\n"
" .global kgdb_handle_breakpoint\n"
"kgdb_handle_breakpoint:\n"
";;\n"
";; Response to the break-instruction\n"
";;\n"
";; Create a register image of the caller\n"
";;\n"
" move $dccr,[cris_reg+0x5E] ; Save the flags in DCCR before disable interrupts\n"
" di ; Disable interrupts\n"
" move.d $r0,[cris_reg] ; Save R0\n"
" move.d $r1,[cris_reg+0x04] ; Save R1\n"
" move.d $r2,[cris_reg+0x08] ; Save R2\n"
" move.d $r3,[cris_reg+0x0C] ; Save R3\n"
" move.d $r4,[cris_reg+0x10] ; Save R4\n"
" move.d $r5,[cris_reg+0x14] ; Save R5\n"
" move.d $r6,[cris_reg+0x18] ; Save R6\n"
" move.d $r7,[cris_reg+0x1C] ; Save R7\n"
" move.d $r8,[cris_reg+0x20] ; Save R8\n"
" move.d $r9,[cris_reg+0x24] ; Save R9\n"
" move.d $r10,[cris_reg+0x28] ; Save R10\n"
" move.d $r11,[cris_reg+0x2C] ; Save R11\n"
" move.d $r12,[cris_reg+0x30] ; Save R12\n"
" move.d $r13,[cris_reg+0x34] ; Save R13\n"
" move.d $sp,[cris_reg+0x38] ; Save SP (R14)\n"
";; Due to the old assembler-versions BRP might not be recognized\n"
" .word 0xE670 ; move brp,$r0\n"
" subq 2,$r0 ; Set to address of previous instruction.\n"
" move.d $r0,[cris_reg+0x3c] ; Save the address in PC (R15)\n"
" clear.b [cris_reg+0x40] ; Clear P0\n"
" move $vr,[cris_reg+0x41] ; Save special register P1\n"
" clear.w [cris_reg+0x42] ; Clear P4\n"
" move $ccr,[cris_reg+0x44] ; Save special register CCR\n"
" move $mof,[cris_reg+0x46] ; P7\n"
" clear.d [cris_reg+0x4A] ; Clear P8\n"
" move $ibr,[cris_reg+0x4E] ; P9,\n"
" move $irp,[cris_reg+0x52] ; P10,\n"
" move $srp,[cris_reg+0x56] ; P11,\n"
" move $dtp0,[cris_reg+0x5A] ; P12, register BAR, assembler might not know BAR\n"
" ; P13, register DCCR already saved\n"
";; Due to the old assembler-versions BRP might not be recognized\n"
" .word 0xE670 ; move brp,r0\n"
";; Static (compiled) breakpoints must return to the next instruction in order\n"
";; to avoid infinite loops. Dynamic (gdb-invoked) must restore the instruction\n"
";; in order to execute it when execution is continued.\n"
" test.b [is_dyn_brkp] ; Is this a dynamic breakpoint?\n"
" beq is_static ; No, a static breakpoint\n"
" nop\n"
" subq 2,$r0 ; rerun the instruction the break replaced\n"
"is_static:\n"
" moveq 1,$r1\n"
" move.b $r1,[is_dyn_brkp] ; Set the state variable to dynamic breakpoint\n"
" move.d $r0,[cris_reg+0x62] ; Save the return address in BRP\n"
" move $usp,[cris_reg+0x66] ; USP\n"
";;\n"
";; Handle the communication\n"
";;\n"
" move.d internal_stack+1020,$sp ; Use the internal stack which grows upward\n"
" moveq 5,$r10 ; SIGTRAP\n"
" jsr handle_exception ; Interactive routine\n"
";;\n"
";; Return to the caller\n"
";;\n"
" move.d [cris_reg],$r0 ; Restore R0\n"
" move.d [cris_reg+0x04],$r1 ; Restore R1\n"
" move.d [cris_reg+0x08],$r2 ; Restore R2\n"
" move.d [cris_reg+0x0C],$r3 ; Restore R3\n"
" move.d [cris_reg+0x10],$r4 ; Restore R4\n"
" move.d [cris_reg+0x14],$r5 ; Restore R5\n"
" move.d [cris_reg+0x18],$r6 ; Restore R6\n"
" move.d [cris_reg+0x1C],$r7 ; Restore R7\n"
" move.d [cris_reg+0x20],$r8 ; Restore R8\n"
" move.d [cris_reg+0x24],$r9 ; Restore R9\n"
" move.d [cris_reg+0x28],$r10 ; Restore R10\n"
" move.d [cris_reg+0x2C],$r11 ; Restore R11\n"
" move.d [cris_reg+0x30],$r12 ; Restore R12\n"
" move.d [cris_reg+0x34],$r13 ; Restore R13\n"
";;\n"
";; FIXME: Which registers should be restored?\n"
";;\n"
" move.d [cris_reg+0x38],$sp ; Restore SP (R14)\n"
" move [cris_reg+0x56],$srp ; Restore the subroutine return pointer.\n"
" move [cris_reg+0x5E],$dccr ; Restore DCCR\n"
" move [cris_reg+0x66],$usp ; Restore USP\n"
" jump [cris_reg+0x62] ; A jump to the content in register BRP works.\n"
" nop ;\n"
"\n");
/* The hook for an interrupt generated by GDB. An internal stack is used
by the stub. The register image of the caller is stored in the structure
......@@ -1367,94 +1029,94 @@ asm ("
void kgdb_handle_serial(void);
asm ("
.global kgdb_handle_serial
kgdb_handle_serial:
;;
;; Response to a serial interrupt
;;
move $dccr,[reg+0x5E] ; Save the flags in DCCR
di ; Disable interrupts
move.d $r0,[reg] ; Save R0
move.d $r1,[reg+0x04] ; Save R1
move.d $r2,[reg+0x08] ; Save R2
move.d $r3,[reg+0x0C] ; Save R3
move.d $r4,[reg+0x10] ; Save R4
move.d $r5,[reg+0x14] ; Save R5
move.d $r6,[reg+0x18] ; Save R6
move.d $r7,[reg+0x1C] ; Save R7
move.d $r8,[reg+0x20] ; Save R8
move.d $r9,[reg+0x24] ; Save R9
move.d $r10,[reg+0x28] ; Save R10
move.d $r11,[reg+0x2C] ; Save R11
move.d $r12,[reg+0x30] ; Save R12
move.d $r13,[reg+0x34] ; Save R13
move.d $sp,[reg+0x38] ; Save SP (R14)
move $irp,[reg+0x3c] ; Save the address in PC (R15)
clear.b [reg+0x40] ; Clear P0
move $vr,[reg+0x41] ; Save special register P1,
clear.w [reg+0x42] ; Clear P4
move $ccr,[reg+0x44] ; Save special register CCR
move $mof,[reg+0x46] ; P7
clear.d [reg+0x4A] ; Clear P8
move $ibr,[reg+0x4E] ; P9,
move $irp,[reg+0x52] ; P10,
move $srp,[reg+0x56] ; P11,
move $dtp0,[reg+0x5A] ; P12, register BAR, assembler might not know BAR
; P13, register DCCR already saved
;; Due to the old assembler-versions BRP might not be recognized
.word 0xE670 ; move brp,r0
move.d $r0,[reg+0x62] ; Save the return address in BRP
move $usp,[reg+0x66] ; USP
;; get the serial character (from debugport.c) and check if it is a ctrl-c
jsr getDebugChar
cmp.b 3, $r10
bne goback
nop
move.d [reg+0x5E], $r10 ; Get DCCR
btstq 8, $r10 ; Test the U-flag.
bmi goback
nop
;;
;; Handle the communication
;;
move.d internal_stack+1020,$sp ; Use the internal stack
moveq 2,$r10 ; SIGINT
jsr handle_exception ; Interactive routine
goback:
;;
;; Return to the caller
;;
move.d [reg],$r0 ; Restore R0
move.d [reg+0x04],$r1 ; Restore R1
move.d [reg+0x08],$r2 ; Restore R2
move.d [reg+0x0C],$r3 ; Restore R3
move.d [reg+0x10],$r4 ; Restore R4
move.d [reg+0x14],$r5 ; Restore R5
move.d [reg+0x18],$r6 ; Restore R6
move.d [reg+0x1C],$r7 ; Restore R7
move.d [reg+0x20],$r8 ; Restore R8
move.d [reg+0x24],$r9 ; Restore R9
move.d [reg+0x28],$r10 ; Restore R10
move.d [reg+0x2C],$r11 ; Restore R11
move.d [reg+0x30],$r12 ; Restore R12
move.d [reg+0x34],$r13 ; Restore R13
;;
;; FIXME: Which registers should be restored?
;;
move.d [reg+0x38],$sp ; Restore SP (R14)
move [reg+0x56],$srp ; Restore the subroutine return pointer.
move [reg+0x5E],$dccr ; Restore DCCR
move [reg+0x66],$usp ; Restore USP
reti ; Return from the interrupt routine
nop
");
asm ("\n"
" .global kgdb_handle_serial\n"
"kgdb_handle_serial:\n"
";;\n"
";; Response to a serial interrupt\n"
";;\n"
"\n"
" move $dccr,[cris_reg+0x5E] ; Save the flags in DCCR\n"
" di ; Disable interrupts\n"
" move.d $r0,[cris_reg] ; Save R0\n"
" move.d $r1,[cris_reg+0x04] ; Save R1\n"
" move.d $r2,[cris_reg+0x08] ; Save R2\n"
" move.d $r3,[cris_reg+0x0C] ; Save R3\n"
" move.d $r4,[cris_reg+0x10] ; Save R4\n"
" move.d $r5,[cris_reg+0x14] ; Save R5\n"
" move.d $r6,[cris_reg+0x18] ; Save R6\n"
" move.d $r7,[cris_reg+0x1C] ; Save R7\n"
" move.d $r8,[cris_reg+0x20] ; Save R8\n"
" move.d $r9,[cris_reg+0x24] ; Save R9\n"
" move.d $r10,[cris_reg+0x28] ; Save R10\n"
" move.d $r11,[cris_reg+0x2C] ; Save R11\n"
" move.d $r12,[cris_reg+0x30] ; Save R12\n"
" move.d $r13,[cris_reg+0x34] ; Save R13\n"
" move.d $sp,[cris_reg+0x38] ; Save SP (R14)\n"
" move $irp,[cris_reg+0x3c] ; Save the address in PC (R15)\n"
" clear.b [cris_reg+0x40] ; Clear P0\n"
" move $vr,[cris_reg+0x41] ; Save special register P1,\n"
" clear.w [cris_reg+0x42] ; Clear P4\n"
" move $ccr,[cris_reg+0x44] ; Save special register CCR\n"
" move $mof,[cris_reg+0x46] ; P7\n"
" clear.d [cris_reg+0x4A] ; Clear P8\n"
" move $ibr,[cris_reg+0x4E] ; P9,\n"
" move $irp,[cris_reg+0x52] ; P10,\n"
" move $srp,[cris_reg+0x56] ; P11,\n"
" move $dtp0,[cris_reg+0x5A] ; P12, register BAR, assembler might not know BAR\n"
" ; P13, register DCCR already saved\n"
";; Due to the old assembler-versions BRP might not be recognized\n"
" .word 0xE670 ; move brp,r0\n"
" move.d $r0,[cris_reg+0x62] ; Save the return address in BRP\n"
" move $usp,[cris_reg+0x66] ; USP\n"
"\n"
";; get the serial character (from debugport.c) and check if it is a ctrl-c\n"
"\n"
" jsr getDebugChar\n"
" cmp.b 3, $r10\n"
" bne goback\n"
" nop\n"
"\n"
" move.d [cris_reg+0x5E], $r10 ; Get DCCR\n"
" btstq 8, $r10 ; Test the U-flag.\n"
" bmi goback\n"
" nop\n"
"\n"
";;\n"
";; Handle the communication\n"
";;\n"
" move.d internal_stack+1020,$sp ; Use the internal stack\n"
" moveq 2,$r10 ; SIGINT\n"
" jsr handle_exception ; Interactive routine\n"
"\n"
"goback:\n"
";;\n"
";; Return to the caller\n"
";;\n"
" move.d [cris_reg],$r0 ; Restore R0\n"
" move.d [cris_reg+0x04],$r1 ; Restore R1\n"
" move.d [cris_reg+0x08],$r2 ; Restore R2\n"
" move.d [cris_reg+0x0C],$r3 ; Restore R3\n"
" move.d [cris_reg+0x10],$r4 ; Restore R4\n"
" move.d [cris_reg+0x14],$r5 ; Restore R5\n"
" move.d [cris_reg+0x18],$r6 ; Restore R6\n"
" move.d [cris_reg+0x1C],$r7 ; Restore R7\n"
" move.d [cris_reg+0x20],$r8 ; Restore R8\n"
" move.d [cris_reg+0x24],$r9 ; Restore R9\n"
" move.d [cris_reg+0x28],$r10 ; Restore R10\n"
" move.d [cris_reg+0x2C],$r11 ; Restore R11\n"
" move.d [cris_reg+0x30],$r12 ; Restore R12\n"
" move.d [cris_reg+0x34],$r13 ; Restore R13\n"
";;\n"
";; FIXME: Which registers should be restored?\n"
";;\n"
" move.d [cris_reg+0x38],$sp ; Restore SP (R14)\n"
" move [cris_reg+0x56],$srp ; Restore the subroutine return pointer.\n"
" move [cris_reg+0x5E],$dccr ; Restore DCCR\n"
" move [cris_reg+0x66],$usp ; Restore USP\n"
" reti ; Return from the interrupt routine\n"
" nop\n"
"\n");
/* Use this static breakpoint in the start-up only. */
......
......@@ -640,8 +640,6 @@ config ETRAX_STREAMCOPROC
This option enables a driver for the stream co-processor
for cryptographic operations.
source drivers/mmc/Kconfig
config ETRAX_MMC_IOP
tristate "MMC/SD host driver using IO-processor"
depends on ETRAX_ARCH_V32 && MMC
......@@ -833,9 +831,4 @@ config ETRAX_SPI_MMC_WP_GPIO_PIN
The pin to use for the SD/MMC write-protect signal for a memory
card. If defined as " " (space), the card is considered writable.
# Avoid choices causing non-working configs by conditionalizing the inclusion.
if ETRAX_SPI_MMC
source drivers/spi/Kconfig
endif
endif
......@@ -5,5 +5,9 @@ header-y += arch-v32/
generic-y += clkdev.h
generic-y += exec.h
generic-y += kvm_para.h
generic-y += linkage.h
generic-y += module.h
generic-y += trace_clock.h
generic-y += vga.h
generic-y += xor.h
......@@ -167,6 +167,9 @@ static inline void outsl(unsigned int port, const void *addr,
cris_iops->write_io(port, (void *)addr, 4, count);
}
#define inb_p(port) inb(port)
#define outb_p(val, port) outb((val), (port))
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
......
#ifndef __ASM_LINKAGE_H
#define __ASM_LINKAGE_H
/* Nothing to see here... */
#endif
......@@ -479,11 +479,6 @@ __head_mmu_enabled:
LEDS 0x000c
# initialise the processor and the peripherals
#call SYMBOL_NAME(processor_init)
#call SYMBOL_NAME(unit_init)
#LEDS 0x0aff
sethi.p #0xe5e5,gr3
setlo #0xe5e5,gr3
or.p gr3,gr0,gr4
......
......@@ -94,126 +94,10 @@ endmenu
source "net/Kconfig"
source "drivers/base/Kconfig"
source "drivers/mtd/Kconfig"
source "drivers/block/Kconfig"
source "drivers/ide/Kconfig"
source "drivers/Kconfig"
source "arch/h8300/Kconfig.ide"
source "drivers/net/Kconfig"
#
# input - input/joystick depends on it. As does USB.
#
source "drivers/input/Kconfig"
menu "Character devices"
config VT
bool "Virtual terminal"
---help---
If you say Y here, you will get support for terminal devices with
display and keyboard devices. These are called "virtual" because you
can run several virtual terminals (also called virtual consoles) on
one physical terminal. This is rather useful, for example one
virtual terminal can collect system messages and warnings, another
one can be used for a text-mode user session, and a third could run
an X session, all in parallel. Switching between virtual terminals
is done with certain key combinations, usually Alt-<function key>.
The setterm command ("man setterm") can be used to change the
properties (such as colors or beeping) of a virtual terminal. The
man page console_codes(4) ("man console_codes") contains the special
character sequences that can be used to change those properties
directly. The fonts used on virtual terminals can be changed with
the setfont ("man setfont") command and the key bindings are defined
with the loadkeys ("man loadkeys") command.
You need at least one virtual terminal device in order to make use
of your keyboard and monitor. Therefore, only people configuring an
embedded system would want to say N here in order to save some
memory; the only way to log into such a system is then via a serial
or network connection.
If unsure, say Y, or else you won't be able to do much with your new
shiny Linux system :-)
config VT_CONSOLE
bool "Support for console on virtual terminal"
depends on VT
---help---
The system console is the device which receives all kernel messages
and warnings and which allows logins in single user mode. If you
answer Y here, a virtual terminal (the device used to interact with
a physical terminal) can be used as system console. This is the most
common mode of operations, so you should say Y here unless you want
the kernel messages be output only to a serial port (in which case
you should say Y to "Console on serial port", below).
If you do say Y here, by default the currently visible virtual
terminal (/dev/tty0) will be used as system console. You can change
that with a kernel command line option such as "console=tty3" which
would use the third virtual terminal as system console. (Try "man
bootparam" or see the documentation of your boot loader (lilo or
loadlin) about how to pass options to the kernel at boot time.)
If unsure, say Y.
config HW_CONSOLE
bool
depends on VT
default y
comment "Unix98 PTY support"
config UNIX98_PTYS
bool "Unix98 PTY support"
---help---
A pseudo terminal (PTY) is a software device consisting of two
halves: a master and a slave. The slave device behaves identical to
a physical terminal; the master device is used by a process to
read data from and write data to the slave, thereby emulating a
terminal. Typical programs for the master side are telnet servers
and xterms.
Linux has traditionally used the BSD-like names /dev/ptyxx for
masters and /dev/ttyxx for slaves of pseudo terminals. This scheme
has a number of problems. The GNU C library glibc 2.1 and later,
however, supports the Unix98 naming standard: in order to acquire a
pseudo terminal, a process opens /dev/ptmx; the number of the pseudo
terminal is then made available to the process and the pseudo
terminal slave can be accessed as /dev/pts/<number>. What was
traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
The entries in /dev/pts/ are created on the fly by a virtual
file system; therefore, if you say Y here you should say Y to
"/dev/pts file system for Unix98 PTYs" as well.
If you want to say Y here, you need to have the C library glibc 2.1
or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*").
Read the instructions in <file:Documentation/Changes> pertaining to
pseudo terminals. It's safe to say N.
source "drivers/char/pcmcia/Kconfig"
source "drivers/tty/serial/Kconfig"
source "drivers/i2c/Kconfig"
source "drivers/hwmon/Kconfig"
source "drivers/usb/Kconfig"
source "drivers/uwb/Kconfig"
endmenu
source "drivers/staging/Kconfig"
source "fs/Kconfig"
source "arch/h8300/Kconfig.debug"
......
......@@ -64,6 +64,7 @@ choice
config H83002
bool "H8/3001,3002,3003"
depends on BROKEN
select CPU_H8300H
config H83007
......@@ -72,6 +73,7 @@ config H83007
config H83048
bool "H8/3044,3045,3046,3047,3048,3052"
depends on BROKEN
select CPU_H8300H
config H83068
......@@ -155,10 +157,12 @@ config H8300_TIMER16_CH
config H8300_ITU_CH
int "ITU channel"
depends on H8300_ITU
range 0 4
config H8300_TPU_CH
int "TPU channel"
depends on H8300_TPU
range 0 4
source "kernel/Kconfig.preempt"
......
......@@ -16,7 +16,7 @@ OBJECTS = $(obj)/head.o $(obj)/misc.o
#
CONFIG_MEMORY_START ?= 0x00400000
CONFIG_BOOT_LINK_OFFSET ?= 0x00140000
IMAGE_OFFSET := $(shell printf "0x%08x" $$[$(CONFIG_MEMORY_START)+$(CONFIG_BOOT_LINK_OFFSET)])
IMAGE_OFFSET := $(shell printf "0x%08x" $$(($(CONFIG_MEMORY_START)+$(CONFIG_BOOT_LINK_OFFSET))))
LDFLAGS_vmlinux := -Ttext $(IMAGE_OFFSET) -estartup $(obj)/vmlinux.lds
......
generic-y += clkdev.h
generic-y += exec.h
generic-y += linkage.h
generic-y += mmu.h
generic-y += module.h
generic-y += trace_clock.h
generic-y += xor.h
......@@ -12,6 +12,8 @@
#define wmb() asm volatile ("" : : :"memory")
#define set_mb(var, value) do { xchg(&var, value); } while (0)
#define read_barrier_depends() do { } while (0)
#ifdef CONFIG_SMP
#define smp_mb() mb()
#define smp_rmb() rmb()
......
#ifndef _H8300_LINKAGE_H
#define _H8300_LINKAGE_H
#undef SYMBOL_NAME_LABEL
#define SYMBOL_NAME_LABEL(_name_) _##_name_##:
#endif
/*
include/asm-h8300/tlb.h
*/
#ifndef __H8300_TLB_H__
#define __H8300_TLB_H__
#define tlb_flush(tlb) do { } while(0)
/*
include/asm-h8300/tlb.h
*/
#ifndef __H8300_TLB_H__
#define __H8300_TLB_H__
......@@ -19,5 +6,3 @@
#include <asm-generic/tlb.h>
#endif
#endif
......@@ -87,13 +87,13 @@ INTERRUPTS = 128
bne 5f
/* user mode */
mov.l sp,@SYMBOL_NAME(sw_usp)
mov.l sp,@_sw_usp
mov.l @sp,er0 /* restore saved er0 */
orc #0x10,ccr /* switch kernel stack */
mov.l @SYMBOL_NAME(sw_ksp),sp
mov.l @_sw_ksp,sp
sub.l #(LRET-LORIG),sp /* allocate LORIG - LRET */
SAVEREGS
mov.l @SYMBOL_NAME(sw_usp),er0
mov.l @_sw_usp,er0
mov.l @(USERRET:16,er0),er1 /* copy the RET addr */
mov.l er1,@(LRET-LER3:16,sp)
SAVEEXR
......@@ -128,7 +128,7 @@ INTERRUPTS = 128
bne 7f
orc #0x80,ccr
mov.l @SYMBOL_NAME(sw_usp),er0
mov.l @_sw_usp,er0
mov.l @(LER0-LER1:16,sp),er1 /* restore ER0 */
mov.l er1,@er0
RESTOREEXR
......@@ -141,7 +141,7 @@ INTERRUPTS = 128
mov.l @sp+,er1
add.l #(LRET-LER1),sp /* remove LORIG - LRET */
mov.l sp,@SYMBOL_NAME(sw_ksp)
mov.l sp,@_sw_ksp
andc #0xef,ccr /* switch to user mode */
mov.l er0,sp
bra 8f
......@@ -155,20 +155,20 @@ INTERRUPTS = 128
rte
.endm
.globl SYMBOL_NAME(system_call)
.globl SYMBOL_NAME(ret_from_exception)
.globl SYMBOL_NAME(ret_from_fork)
.globl SYMBOL_NAME(ret_from_kernel_thread)
.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)
.globl _system_call
.globl _ret_from_exception
.globl _ret_from_fork
.globl _ret_from_kernel_thread
.globl _ret_from_interrupt
.globl _interrupt_redirect_table
.globl _sw_ksp,_sw_usp
.globl _resume
.globl _interrupt_entry
.globl _trace_break
#if defined(CONFIG_ROMKERNEL)
.section .int_redirect,"ax"
SYMBOL_NAME_LABEL(interrupt_redirect_table)
_interrupt_redirect_table:
#if defined(CONFIG_CPU_H8300H)
.rept 7
.long 0
......@@ -178,54 +178,54 @@ SYMBOL_NAME_LABEL(interrupt_redirect_table)
.rept 5
.long 0
.endr
jmp @SYMBOL_NAME(trace_break)
jmp @_trace_break
.long 0
#endif
jsr @SYMBOL_NAME(interrupt_entry) /* NMI */
jmp @SYMBOL_NAME(system_call) /* TRAPA #0 (System call) */
jsr @_interrupt_entry /* NMI */
jmp @_system_call /* TRAPA #0 (System call) */
.long 0
.long 0
jmp @SYMBOL_NAME(trace_break) /* TRAPA #3 (breakpoint) */
jmp @_trace_break /* TRAPA #3 (breakpoint) */
.rept INTERRUPTS-12
jsr @SYMBOL_NAME(interrupt_entry)
jsr @_interrupt_entry
.endr
#endif
#if defined(CONFIG_RAMKERNEL)
.globl SYMBOL_NAME(interrupt_redirect_table)
.globl _interrupt_redirect_table
.section .bss
SYMBOL_NAME_LABEL(interrupt_redirect_table)
_interrupt_redirect_table:
.space 4
#endif
.section .text
.align 2
SYMBOL_NAME_LABEL(interrupt_entry)
_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
mov.l @_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
sub.l #_interrupt_redirect_table,er0
#endif
#if defined(CONFIG_RAMKERNEL)
mov.l @SYMBOL_NAME(interrupt_redirect_table),er1
mov.l @_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)
jsr @_do_IRQ
jmp @_ret_from_interrupt
SYMBOL_NAME_LABEL(system_call)
_system_call:
subs #4,sp /* dummy LVEC */
SAVE_ALL
andc #0x7f,ccr
......@@ -233,21 +233,21 @@ SYMBOL_NAME_LABEL(system_call)
/* save top of frame */
mov.l sp,er0
jsr @SYMBOL_NAME(set_esp0)
jsr @_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)
jsr @_do_syscall_trace
1:
cmp.l #NR_syscalls,er4
bcc badsys
SHLL2 er4
mov.l #SYMBOL_NAME(sys_call_table),er0
mov.l #_sys_call_table,er0
add.l er4,er0
mov.l @er0,er4
beq SYMBOL_NAME(ret_from_exception):16
beq _ret_from_exception:16
mov.l @(LER1:16,sp),er0
mov.l @(LER2:16,sp),er1
mov.l @(LER3:16,sp),er2
......@@ -258,10 +258,10 @@ SYMBOL_NAME_LABEL(system_call)
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)
jsr @_do_syscall_trace
2:
#if defined(CONFIG_SYSCALL_PRINT)
jsr @SYMBOL_NAME(syscall_print)
jsr @_syscall_print
#endif
orc #0x80,ccr
bra resume_userspace
......@@ -275,11 +275,11 @@ badsys:
#define resume_kernel restore_all
#endif
SYMBOL_NAME_LABEL(ret_from_exception)
_ret_from_exception:
#if defined(CONFIG_PREEMPT)
orc #0x80,ccr
#endif
SYMBOL_NAME_LABEL(ret_from_interrupt)
_ret_from_interrupt:
mov.b @(LCCR+1:16,sp),r0l
btst #4,r0l
bne resume_kernel:8 /* return from kernel */
......@@ -296,12 +296,12 @@ work_pending:
/* work notifysig */
mov.l sp,er0
subs #4,er0 /* er0: pt_regs */
jsr @SYMBOL_NAME(do_notify_resume)
jsr @_do_notify_resume
bra restore_all:8
work_resched:
mov.l sp,er0
jsr @SYMBOL_NAME(set_esp0)
jsr @SYMBOL_NAME(schedule)
jsr @_set_esp0
jsr @_schedule
bra resume_userspace:8
restore_all:
RESTORE_ALL /* Does RTE */
......@@ -320,26 +320,26 @@ need_resched:
mov.l er0,@(TI_PRE_COUNT:16,er4)
andc #0x7f,ccr
mov.l sp,er0
jsr @SYMBOL_NAME(set_esp0)
jsr @SYMBOL_NAME(schedule)
jsr @_set_esp0
jsr @_schedule
orc #0x80,ccr
bra need_resched:8
#endif
SYMBOL_NAME_LABEL(ret_from_fork)
_ret_from_fork:
mov.l er2,er0
jsr @SYMBOL_NAME(schedule_tail)
jmp @SYMBOL_NAME(ret_from_exception)
jsr @_schedule_tail
jmp @_ret_from_exception
SYMBOL_NAME_LABEL(ret_from_kernel_thread)
_ret_from_kernel_thread:
mov.l er2,er0
jsr @SYMBOL_NAME(schedule_tail)
jsr @_schedule_tail
mov.l @(LER4:16,sp),er0
mov.l @(LER5:16,sp),er1
jsr @er1
jmp @SYMBOL_NAME(ret_from_exception)
jmp @_ret_from_exception
SYMBOL_NAME_LABEL(resume)
_resume:
/*
* Beware - when entering resume, offset of tss is in d1,
* prev (the current task) is in a0, next (the new task)
......@@ -355,7 +355,7 @@ SYMBOL_NAME_LABEL(resume)
/* disable interrupts */
orc #0x80,ccr
mov.l @SYMBOL_NAME(sw_usp),er3
mov.l @_sw_usp,er3
mov.l er3,@(THREAD_USP:16,er0)
mov.l sp,@(THREAD_KSP:16,er0)
......@@ -363,7 +363,7 @@ SYMBOL_NAME_LABEL(resume)
/* 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 er0,@_sw_usp
mov.l @(THREAD_KSP:16,er1),sp
/* restore status register */
......@@ -372,15 +372,15 @@ SYMBOL_NAME_LABEL(resume)
ldc r3l,ccr
rts
SYMBOL_NAME_LABEL(trace_break)
_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
jsr @_set_esp0
mov.l @_sw_usp,er0
mov.l @er0,er1
mov.w @(-2:16,er1),r2
cmp.w #0x5730,r2
......@@ -390,13 +390,13 @@ SYMBOL_NAME_LABEL(trace_break)
1:
and.w #0xff,e1
mov.l er1,er0
jsr @SYMBOL_NAME(trace_trap)
jmp @SYMBOL_NAME(ret_from_exception)
jsr @_trace_trap
jmp @_ret_from_exception
.section .bss
SYMBOL_NAME_LABEL(sw_ksp)
_sw_ksp:
.space 4
SYMBOL_NAME_LABEL(sw_usp)
_sw_usp:
.space 4
.end
......@@ -2,8 +2,10 @@
#include <linux/sys.h>
#include <asm/linkage.h>
#include <asm/unistd.h>
.globl SYMBOL_NAME(sys_call_table)
#define CALL(x) .long _ ## x
.globl _sys_call_table
#if defined(CONFIG_CPU_H8300H)
.h8300h
......@@ -13,324 +15,324 @@
#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_ni_syscall) /* old 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 */
.long SYMBOL_NAME(sys_setns) /* 320 */
_sys_call_table:
CALL(sys_ni_syscall) /* 0 - old "setup()" system call*/
CALL(sys_exit)
CALL(sys_fork)
CALL(sys_read)
CALL(sys_write)
CALL(sys_open) /* 5 */
CALL(sys_close)
CALL(sys_waitpid)
CALL(sys_creat)
CALL(sys_link)
CALL(sys_unlink) /* 10 */
CALL(sys_execve)
CALL(sys_chdir)
CALL(sys_time)
CALL(sys_mknod)
CALL(sys_chmod) /* 15 */
CALL(sys_chown16)
CALL(sys_ni_syscall) /* old break syscall holder */
CALL(sys_stat)
CALL(sys_lseek)
CALL(sys_getpid) /* 20 */
CALL(sys_mount)
CALL(sys_oldumount)
CALL(sys_setuid16)
CALL(sys_getuid16)
CALL(sys_stime) /* 25 */
CALL(sys_ptrace)
CALL(sys_alarm)
CALL(sys_fstat)
CALL(sys_pause)
CALL(sys_utime) /* 30 */
CALL(sys_ni_syscall) /* old stty syscall holder */
CALL(sys_ni_syscall) /* old gtty syscall holder */
CALL(sys_access)
CALL(sys_nice)
CALL(sys_ni_syscall) /* 35 old ftime syscall holder */
CALL(sys_sync)
CALL(sys_kill)
CALL(sys_rename)
CALL(sys_mkdir)
CALL(sys_rmdir) /* 40 */
CALL(sys_dup)
CALL(sys_pipe)
CALL(sys_times)
CALL(sys_ni_syscall) /* old prof syscall holder */
CALL(sys_brk) /* 45 */
CALL(sys_setgid16)
CALL(sys_getgid16)
CALL(sys_signal)
CALL(sys_geteuid16)
CALL(sys_getegid16) /* 50 */
CALL(sys_acct)
CALL(sys_umount) /* recycled never used phys() */
CALL(sys_ni_syscall) /* old lock syscall holder */
CALL(sys_ioctl)
CALL(sys_fcntl) /* 55 */
CALL(sys_ni_syscall) /* old mpx syscall holder */
CALL(sys_setpgid)
CALL(sys_ni_syscall) /* old ulimit syscall holder */
CALL(sys_ni_syscall)
CALL(sys_umask) /* 60 */
CALL(sys_chroot)
CALL(sys_ustat)
CALL(sys_dup2)
CALL(sys_getppid)
CALL(sys_getpgrp) /* 65 */
CALL(sys_setsid)
CALL(sys_sigaction)
CALL(sys_sgetmask)
CALL(sys_ssetmask)
CALL(sys_setreuid16) /* 70 */
CALL(sys_setregid16)
CALL(sys_sigsuspend)
CALL(sys_sigpending)
CALL(sys_sethostname)
CALL(sys_setrlimit) /* 75 */
CALL(sys_old_getrlimit)
CALL(sys_getrusage)
CALL(sys_gettimeofday)
CALL(sys_settimeofday)
CALL(sys_getgroups16) /* 80 */
CALL(sys_setgroups16)
CALL(sys_old_select)
CALL(sys_symlink)
CALL(sys_lstat)
CALL(sys_readlink) /* 85 */
CALL(sys_uselib)
CALL(sys_swapon)
CALL(sys_reboot)
CALL(sys_old_readdir)
CALL(sys_old_mmap) /* 90 */
CALL(sys_munmap)
CALL(sys_truncate)
CALL(sys_ftruncate)
CALL(sys_fchmod)
CALL(sys_fchown16) /* 95 */
CALL(sys_getpriority)
CALL(sys_setpriority)
CALL(sys_ni_syscall) /* old profil syscall holder */
CALL(sys_statfs)
CALL(sys_fstatfs) /* 100 */
CALL(sys_ni_syscall) /* ioperm for i386 */
CALL(sys_socketcall)
CALL(sys_syslog)
CALL(sys_setitimer)
CALL(sys_getitimer) /* 105 */
CALL(sys_newstat)
CALL(sys_newlstat)
CALL(sys_newfstat)
CALL(sys_ni_syscall)
CALL(sys_ni_syscall) /* iopl for i386 */ /* 110 */
CALL(sys_vhangup)
CALL(sys_ni_syscall) /* obsolete idle() syscall */
CALL(sys_ni_syscall) /* vm86old for i386 */
CALL(sys_wait4)
CALL(sys_swapoff) /* 115 */
CALL(sys_sysinfo)
CALL(sys_ipc)
CALL(sys_fsync)
CALL(sys_sigreturn)
CALL(sys_clone) /* 120 */
CALL(sys_setdomainname)
CALL(sys_newuname)
CALL(sys_cacheflush) /* modify_ldt for i386 */
CALL(sys_adjtimex)
CALL(sys_ni_syscall) /* 125 sys_mprotect */
CALL(sys_sigprocmask)
CALL(sys_ni_syscall) /* sys_create_module */
CALL(sys_init_module)
CALL(sys_delete_module)
CALL(sys_ni_syscall) /* 130 sys_get_kernel_syms */
CALL(sys_quotactl)
CALL(sys_getpgid)
CALL(sys_fchdir)
CALL(sys_bdflush)
CALL(sys_sysfs) /* 135 */
CALL(sys_personality)
CALL(sys_ni_syscall) /* for afs_syscall */
CALL(sys_setfsuid16)
CALL(sys_setfsgid16)
CALL(sys_llseek) /* 140 */
CALL(sys_getdents)
CALL(sys_select)
CALL(sys_flock)
CALL(sys_ni_syscall) /* sys_msync */
CALL(sys_readv) /* 145 */
CALL(sys_writev)
CALL(sys_getsid)
CALL(sys_fdatasync)
CALL(sys_sysctl)
CALL(sys_ni_syscall) /* 150 sys_mlock */
CALL(sys_ni_syscall) /* sys_munlock */
CALL(sys_ni_syscall) /* sys_mlockall */
CALL(sys_ni_syscall) /* sys_munlockall */
CALL(sys_sched_setparam)
CALL(sys_sched_getparam) /* 155 */
CALL(sys_sched_setscheduler)
CALL(sys_sched_getscheduler)
CALL(sys_sched_yield)
CALL(sys_sched_get_priority_max)
CALL(sys_sched_get_priority_min) /* 160 */
CALL(sys_sched_rr_get_interval)
CALL(sys_nanosleep)
CALL(sys_ni_syscall) /* sys_mremap */
CALL(sys_setresuid16)
CALL(sys_getresuid16) /* 165 */
CALL(sys_ni_syscall) /* for vm86 */
CALL(sys_ni_syscall) /* sys_query_module */
CALL(sys_poll)
CALL(sys_ni_syscall) /* old nfsservctl */
CALL(sys_setresgid16) /* 170 */
CALL(sys_getresgid16)
CALL(sys_prctl)
CALL(sys_rt_sigreturn)
CALL(sys_rt_sigaction)
CALL(sys_rt_sigprocmask) /* 175 */
CALL(sys_rt_sigpending)
CALL(sys_rt_sigtimedwait)
CALL(sys_rt_sigqueueinfo)
CALL(sys_rt_sigsuspend)
CALL(sys_pread64) /* 180 */
CALL(sys_pwrite64)
CALL(sys_lchown16);
CALL(sys_getcwd)
CALL(sys_capget)
CALL(sys_capset) /* 185 */
CALL(sys_sigaltstack)
CALL(sys_sendfile)
CALL(sys_ni_syscall) /* streams1 */
CALL(sys_ni_syscall) /* streams2 */
CALL(sys_vfork) /* 190 */
CALL(sys_getrlimit)
CALL(sys_mmap_pgoff)
CALL(sys_truncate64)
CALL(sys_ftruncate64)
CALL(sys_stat64) /* 195 */
CALL(sys_lstat64)
CALL(sys_fstat64)
CALL(sys_chown)
CALL(sys_getuid)
CALL(sys_getgid) /* 200 */
CALL(sys_geteuid)
CALL(sys_getegid)
CALL(sys_setreuid)
CALL(sys_setregid)
CALL(sys_getgroups) /* 205 */
CALL(sys_setgroups)
CALL(sys_fchown)
CALL(sys_setresuid)
CALL(sys_getresuid)
CALL(sys_setresgid) /* 210 */
CALL(sys_getresgid)
CALL(sys_lchown)
CALL(sys_setuid)
CALL(sys_setgid)
CALL(sys_setfsuid) /* 215 */
CALL(sys_setfsgid)
CALL(sys_pivot_root)
CALL(sys_ni_syscall)
CALL(sys_ni_syscall)
CALL(sys_getdents64) /* 220 */
CALL(sys_fcntl64)
CALL(sys_ni_syscall) /* reserved TUX */
CALL(sys_ni_syscall) /* reserved Security */
CALL(sys_gettid)
CALL(sys_readahead) /* 225 */
CALL(sys_setxattr)
CALL(sys_lsetxattr)
CALL(sys_fsetxattr)
CALL(sys_getxattr)
CALL(sys_lgetxattr) /* 230 */
CALL(sys_fgetxattr)
CALL(sys_listxattr)
CALL(sys_llistxattr)
CALL(sys_flistxattr)
CALL(sys_removexattr) /* 235 */
CALL(sys_lremovexattr)
CALL(sys_fremovexattr)
CALL(sys_tkill)
CALL(sys_sendfile64)
CALL(sys_futex) /* 240 */
CALL(sys_sched_setaffinity)
CALL(sys_sched_getaffinity)
CALL(sys_ni_syscall)
CALL(sys_ni_syscall)
CALL(sys_io_setup) /* 245 */
CALL(sys_io_destroy)
CALL(sys_io_getevents)
CALL(sys_io_submit)
CALL(sys_io_cancel)
CALL(sys_fadvise64) /* 250 */
CALL(sys_ni_syscall)
CALL(sys_exit_group)
CALL(sys_lookup_dcookie)
CALL(sys_epoll_create)
CALL(sys_epoll_ctl) /* 255 */
CALL(sys_epoll_wait)
CALL(sys_ni_syscall) /* sys_remap_file_pages */
CALL(sys_set_tid_address)
CALL(sys_timer_create)
CALL(sys_timer_settime) /* 260 */
CALL(sys_timer_gettime)
CALL(sys_timer_getoverrun)
CALL(sys_timer_delete)
CALL(sys_clock_settime)
CALL(sys_clock_gettime) /* 265 */
CALL(sys_clock_getres)
CALL(sys_clock_nanosleep)
CALL(sys_statfs64)
CALL(sys_fstatfs64)
CALL(sys_tgkill) /* 270 */
CALL(sys_utimes)
CALL(sys_fadvise64_64)
CALL(sys_ni_syscall) /* sys_vserver */
CALL(sys_ni_syscall)
CALL(sys_get_mempolicy) /* 275 */
CALL(sys_set_mempolicy)
CALL(sys_mq_open)
CALL(sys_mq_unlink)
CALL(sys_mq_timedsend)
CALL(sys_mq_timedreceive) /* 280 */
CALL(sys_mq_notify)
CALL(sys_mq_getsetattr)
CALL(sys_waitid)
CALL(sys_ni_syscall) /* sys_kexec_load */
CALL(sys_add_key) /* 285 */
CALL(sys_request_key)
CALL(sys_keyctl)
CALL(sys_ioprio_set)
CALL(sys_ioprio_get) /* 290 */
CALL(sys_inotify_init)
CALL(sys_inotify_add_watch)
CALL(sys_inotify_rm_watch)
CALL(sys_migrate_pages)
CALL(sys_openat) /* 295 */
CALL(sys_mkdirat)
CALL(sys_mknodat)
CALL(sys_fchownat)
CALL(sys_futimesat)
CALL(sys_fstatat64) /* 300 */
CALL(sys_unlinkat)
CALL(sys_renameat)
CALL(sys_linkat)
CALL(sys_symlinkat)
CALL(sys_readlinkat) /* 305 */
CALL(sys_fchmodat)
CALL(sys_faccessat)
CALL(sys_ni_syscall) /* sys_pselect6 */
CALL(sys_ni_syscall) /* sys_ppoll */
CALL(sys_unshare) /* 310 */
CALL(sys_set_robust_list)
CALL(sys_get_robust_list)
CALL(sys_splice)
CALL(sys_sync_file_range)
CALL(sys_tee) /* 315 */
CALL(sys_vmsplice)
CALL(sys_ni_syscall) /* sys_move_pages */
CALL(sys_getcpu)
CALL(sys_ni_syscall) /* sys_epoll_pwait */
CALL(sys_setns) /* 320 */
......@@ -9,10 +9,10 @@
.h8300s
#endif
.text
.global SYMBOL_NAME(abs)
.global _abs
;;; int abs(int n)
SYMBOL_NAME_LABEL(abs)
_abs:
mov.l er0,er0
bpl 1f
neg.l er0
......
......@@ -10,10 +10,10 @@
#endif
.text
.global SYMBOL_NAME(memcpy)
.global _memcpy
;;; void *memcpy(void *to, void *from, size_t n)
SYMBOL_NAME_LABEL(memcpy)
_memcpy:
mov.l er2,er2
bne 1f
rts
......
......@@ -10,13 +10,13 @@
#endif
.text
.global SYMBOL_NAME(memset)
.global _memset
;;void *memset(*ptr, int c, size_t count)
;; ptr = er0
;; c = er1(r1l)
;; count = er2
SYMBOL_NAME_LABEL(memset)
_memset:
btst #0,r0l
beq 2f
......
......@@ -22,10 +22,10 @@
#define RAMEND CONFIG_BLKDEV_RESERVE_ADDRESS
#endif
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global _command_line
.global __platform_gpio_table
.global __target_name
.h8300h
......@@ -33,7 +33,7 @@
.file "crt0_ram.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #RAMEND,sp
ldc #0x80,ccr
......@@ -59,13 +59,13 @@ SYMBOL_NAME_LABEL(_start)
/* copy kernel commandline */
mov.l #COMMAND_START,er5
mov.l #SYMBOL_NAME(command_line),er6
mov.l #_command_line,er6
mov.w #512,r4
eepmov.w
/* uClinux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......@@ -107,4 +107,4 @@ __target_name:
.asciz "AE-3068"
.section .bootvec,"ax"
jmp @SYMBOL_NAME(_start)
jmp @__start
......@@ -22,10 +22,10 @@
#define RAMEND CONFIG_BLKDEV_RESERVE_ADDRESS
#endif
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global _command_line
.global __platform_gpio_table
.global __target_name
.h8300h
......@@ -33,7 +33,7 @@
.file "crt0_ram.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #RAMEND,sp
ldc #0x80,ccr
......@@ -59,13 +59,13 @@ SYMBOL_NAME_LABEL(_start)
/* copy kernel commandline */
mov.l #COMMAND_START,er5
mov.l #SYMBOL_NAME(command_line),er6
mov.l #_command_line,er6
mov.w #512,r4
eepmov.w
/* uClinux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......
......@@ -12,17 +12,17 @@
#include <asm/linkage.h>
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(_command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global __command_line
.global __platform_gpio_table
.global __target_name
.h8300h
.section .text
.file "crt0_rom.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #__ramend,sp
ldc #0x80,ccr
......@@ -60,13 +60,13 @@ SYMBOL_NAME_LABEL(_start)
/* copy kernel commandline */
mov.l #COMMAND_START,er5
mov.l #SYMBOL_NAME(_command_line),er6
mov.l #__command_line,er6
mov.w #512,r4
eepmov.w
/* linux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......
......@@ -22,10 +22,10 @@
#define RAMEND CONFIG_BLKDEV_RESERVE_ADDRESS
#endif
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global _command_line
.global __platform_gpio_table
.global __target_name
.h8300h
......@@ -33,7 +33,7 @@
.file "crt0_ram.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #RAMEND,sp
ldc #0x80,ccr
......@@ -59,13 +59,13 @@ SYMBOL_NAME_LABEL(_start)
/* copy kernel commandline */
mov.l #COMMAND_START,er5
mov.l #SYMBOL_NAME(command_line),er6
mov.l #_command_line,er6
mov.w #512,r4
eepmov.w
/* uClinux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......@@ -107,4 +107,4 @@ __target_name:
.asciz "H8MAX"
.section .bootvec,"ax"
jmp @SYMBOL_NAME(_start)
jmp @__start
......@@ -23,10 +23,10 @@
#define RAMEND CONFIG_BLKDEV_RESERVE_ADDRESS
#endif
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(_command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global __command_line
.global __platform_gpio_table
.global __target_name
.h8300s
......@@ -34,7 +34,7 @@
.file "crt0_ram.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #RAMEND,sp
ldc #0x80,ccr
ldc #0x00,exr
......@@ -66,13 +66,13 @@ SYMBOL_NAME_LABEL(_start)
/* copy kernel commandline */
mov.l #COMMAND_START,er5
mov.l #SYMBOL_NAME(command_line),er6
mov.l #_command_line,er6
mov.w #512,r4
eepmov.w
/* uClinux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......@@ -127,4 +127,4 @@ __target_name:
.asciz "EDOSK-2674"
.section .bootvec,"ax"
jmp @SYMBOL_NAME(_start)
jmp @__start
......@@ -13,17 +13,17 @@
#include <asm/linkage.h>
#include <asm/regs267x.h>
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(_command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global __command_line
.global __platform_gpio_table
.global __target_name
.h8300s
.section .text
.file "crt0_rom.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #__ramend,sp
ldc #0x80,ccr
ldc #0,exr
......@@ -82,13 +82,13 @@ SYMBOL_NAME_LABEL(_start)
/* copy kernel commandline */
mov.l #COMMAND_START,er5
mov.l #SYMBOL_NAME(_command_line),er6
mov.l #__command_line,er6
mov.w #512,r4
eepmov.w
/* linux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......
......@@ -23,10 +23,10 @@
#define RAMEND CONFIG_BLKDEV_RESERVE_ADDRESS
#endif
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(_command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global __command_line
.global __platform_gpio_table
.global __target_name
.h8300s
......@@ -34,7 +34,7 @@
.file "crt0_ram.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #RAMEND,sp
ldc #0x80,ccr
ldc #0x00,exr
......@@ -63,13 +63,13 @@ SYMBOL_NAME_LABEL(_start)
/* copy kernel commandline */
mov.l #COMMAND_START,er5
mov.l #SYMBOL_NAME(command_line),er6
mov.l #_command_line,er6
mov.w #512,r4
eepmov.w
/* uClinux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......@@ -124,4 +124,4 @@ __target_name:
.asciz "generic"
.section .bootvec,"ax"
jmp @SYMBOL_NAME(_start)
jmp @__start
......@@ -13,17 +13,17 @@
#include <asm/linkage.h>
#include <asm/regs267x.h>
.global SYMBOL_NAME(_start)
.global SYMBOL_NAME(_command_line)
.global SYMBOL_NAME(_platform_gpio_table)
.global SYMBOL_NAME(_target_name)
.global __start
.global __command_line
.global __platform_gpio_table
.global __target_name
.h8300s
.section .text
.file "crt0_rom.S"
/* CPU Reset entry */
SYMBOL_NAME_LABEL(_start)
__start:
mov.l #__ramend,sp
ldc #0x80,ccr
ldc #0,exr
......@@ -61,7 +61,7 @@ SYMBOL_NAME_LABEL(_start)
/* linux kernel start */
ldc #0x90,ccr /* running kernel */
mov.l #SYMBOL_NAME(init_thread_union),sp
mov.l #_init_thread_union,sp
add.l #0x2000,sp
jsr @_start_kernel
_exit:
......
......@@ -77,7 +77,7 @@ int main(void)
DEFINE(BIR_SIZE, offsetof(struct bi_record, size));
DEFINE(BIR_DATA, offsetof(struct bi_record, data));
/* offsets into font_desc (drivers/video/console/font.h) */
/* offsets into the font_desc struct */
DEFINE(FONT_DESC_IDX, offsetof(struct font_desc, idx));
DEFINE(FONT_DESC_NAME, offsetof(struct font_desc, name));
DEFINE(FONT_DESC_WIDTH, offsetof(struct font_desc, width));
......
......@@ -66,3 +66,4 @@ generic-y += types.h
generic-y += ucontext.h
generic-y += user.h
generic-y += word-at-a-time.h
generic-y += xor.h
......@@ -3,3 +3,4 @@ header-y +=
generic-y += clkdev.h
generic-y += trace_clock.h
generic-y += xor.h
#ifndef _ASM_SCORE_DMA_MAPPING_H
#define _ASM_SCORE_DMA_MAPPING_H
#include <asm-generic/dma-mapping-broken.h>
#endif /* _ASM_SCORE_DMA_MAPPING_H */
......@@ -17,7 +17,7 @@ OBJS := misc.o
# font.c and font.o
CFLAGS_font.o := -Dstatic=
$(obj)/font.c: $(srctree)/drivers/video/console/font_8x8.c
$(obj)/font.c: $(srctree)/lib/fonts/font_8x8.c
$(call cmd,shipped)
# piggy.S and piggy.o
......
......@@ -206,33 +206,6 @@ static int cros_ec_keyb_work(struct notifier_block *nb,
return NOTIFY_DONE;
}
/* Clear any keys in the buffer */
static void cros_ec_keyb_clear_keyboard(struct cros_ec_keyb *ckdev)
{
uint8_t old_state[ckdev->cols];
uint8_t new_state[ckdev->cols];
unsigned long duration;
int i, ret;
/*
* Keep reading until we see that the scan state does not change.
* That indicates that we are done.
*
* Assume that the EC keyscan buffer is at most 32 deep.
*/
duration = jiffies;
ret = cros_ec_keyb_get_state(ckdev, new_state);
for (i = 1; !ret && i < 32; i++) {
memcpy(old_state, new_state, sizeof(old_state));
ret = cros_ec_keyb_get_state(ckdev, new_state);
if (0 == memcmp(old_state, new_state, sizeof(old_state)))
break;
}
duration = jiffies - duration;
dev_info(ckdev->dev, "Discarded %d keyscan(s) in %dus\n", i,
jiffies_to_usecs(duration));
}
static int cros_ec_keyb_probe(struct platform_device *pdev)
{
struct cros_ec_device *ec = dev_get_drvdata(pdev->dev.parent);
......@@ -299,6 +272,33 @@ static int cros_ec_keyb_probe(struct platform_device *pdev)
}
#ifdef CONFIG_PM_SLEEP
/* Clear any keys in the buffer */
static void cros_ec_keyb_clear_keyboard(struct cros_ec_keyb *ckdev)
{
uint8_t old_state[ckdev->cols];
uint8_t new_state[ckdev->cols];
unsigned long duration;
int i, ret;
/*
* Keep reading until we see that the scan state does not change.
* That indicates that we are done.
*
* Assume that the EC keyscan buffer is at most 32 deep.
*/
duration = jiffies;
ret = cros_ec_keyb_get_state(ckdev, new_state);
for (i = 1; !ret && i < 32; i++) {
memcpy(old_state, new_state, sizeof(old_state));
ret = cros_ec_keyb_get_state(ckdev, new_state);
if (0 == memcmp(old_state, new_state, sizeof(old_state)))
break;
}
duration = jiffies - duration;
dev_info(ckdev->dev, "Discarded %d keyscan(s) in %dus\n", i,
jiffies_to_usecs(duration));
}
static int cros_ec_keyb_resume(struct device *dev)
{
struct cros_ec_keyb *ckdev = dev_get_drvdata(dev);
......
......@@ -220,7 +220,7 @@ if V4L_TEST_DRIVERS
config VIDEO_VIVI
tristate "Virtual Video Driver"
depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
select FONT_SUPPORT
select FONT_8x16
select VIDEOBUF2_VMALLOC
default n
......
......@@ -36,7 +36,9 @@ if PARPORT
config PARPORT_PC
tristate "PC-style hardware"
depends on (!SPARC64 || PCI) && !SPARC32 && !M32R && !FRV && !S390 && \
(!M68K || ISA) && !MN10300 && !AVR32 && !BLACKFIN && !XTENSA
(!M68K || ISA) && !MN10300 && !AVR32 && !BLACKFIN && \
!XTENSA && !CRIS
---help---
You should say Y here if you have a PC-style parallel port. All
IBM PC compatible computers and some Alphas have PC-style
......
config SOLO6X10
tristate "Softlogic 6x10 MPEG codec cards"
depends on PCI && VIDEO_DEV && SND && I2C
depends on FONTS
select FONT_SUPPORT
select FONT_8x16
select VIDEOBUF2_DMA_SG
select VIDEOBUF2_DMA_CONTIG
select SND_PCM
......
......@@ -2,6 +2,7 @@
config USB_SISUSBVGA
tristate "USB 2.0 SVGA dongle support (Net2280/SiS315)"
depends on (USB_MUSB_HDRC || USB_EHCI_HCD)
select FONT_SUPPORT if USB_SISUSBVGA_CON
---help---
Say Y here if you intend to attach a USB2VGA dongle based on a
Net2280 and a SiS315 chip.
......
......@@ -6,7 +6,9 @@ menu "Console display driver support"
config VGA_CONSOLE
bool "VGA text console" if EXPERT || !X86
depends on !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !SUPERH && !BLACKFIN && !AVR32 && !MN10300 && (!ARM || ARCH_FOOTBRIDGE || ARCH_INTEGRATOR || ARCH_NETWINDER)
depends on !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && \
!SUPERH && !BLACKFIN && !AVR32 && !MN10300 && !CRIS && \
(!ARM || ARCH_FOOTBRIDGE || ARCH_INTEGRATOR || ARCH_NETWINDER)
default y
help
Saying Y here will allow you to use Linux in text mode through a
......@@ -62,6 +64,7 @@ config MDA_CONSOLE
config SGI_NEWPORT_CONSOLE
tristate "SGI Newport Console support"
depends on SGI_IP22
select FONT_SUPPORT
help
Say Y here if you want the console on the Newport aka XL graphics
card of your Indy. Most people say Y here.
......@@ -91,6 +94,7 @@ config FRAMEBUFFER_CONSOLE
tristate "Framebuffer Console support"
depends on FB
select CRC32
select FONT_SUPPORT
help
Low-level framebuffer-based console driver.
......@@ -123,120 +127,12 @@ config FRAMEBUFFER_CONSOLE_ROTATION
config STI_CONSOLE
bool "STI text console"
depends on PARISC
select FONT_SUPPORT
default y
help
The STI console is the builtin display/keyboard on HP-PARISC
machines. Say Y here to build support for it into your kernel.
The alternative is to use your primary serial port as a console.
config FONTS
bool "Select compiled-in fonts"
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
help
Say Y here if you would like to use fonts other than the default
your frame buffer console usually use.
Note that the answer to this question won't directly affect the
kernel: saying N will just cause the configurator to skip all
the questions about foreign fonts.
If unsure, say N (the default choices are safe).
config FONT_8x8
bool "VGA 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
default y if !SPARC && !FONTS
help
This is the "high resolution" font for the VGA frame buffer (the one
provided by the text console 80x50 (and higher) modes).
Note that this is a poor quality font. The VGA 8x16 font is quite a
lot more readable.
Given the resolution provided by the frame buffer device, answer N
here is safe.
config FONT_8x16
bool "VGA 8x16 font" if FONTS
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE || STI_CONSOLE || USB_SISUSBVGA_CON
default y if !SPARC && !FONTS
help
This is the "high resolution" font for the VGA frame buffer (the one
provided by the VGA text console 80x25 mode.
If unsure, say Y.
config FONT_6x11
bool "Mac console 6x11 font (not supported by all drivers)" if FONTS
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
default y if !SPARC && !FONTS && MAC
help
Small console font with Macintosh-style high-half glyphs. Some Mac
framebuffer drivers don't support this one at all.
config FONT_7x14
bool "console 7x14 font (not supported by all drivers)" if FONTS
depends on FRAMEBUFFER_CONSOLE
help
Console font with characters just a bit smaller than the default.
If the standard 8x16 font is a little too big for you, say Y.
Otherwise, say N.
config FONT_PEARL_8x8
bool "Pearl (old m68k) console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE
default y if !SPARC && !FONTS && AMIGA
help
Small console font with PC-style control-character and high-half
glyphs.
config FONT_ACORN_8x8
bool "Acorn console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE
default y if !SPARC && !FONTS && ARM && ARCH_ACORN
help
Small console font with PC-style control characters and high-half
glyphs.
config FONT_MINI_4x6
bool "Mini 4x6 font"
depends on !SPARC && FONTS
config FONT_SUN8x16
bool "Sparc console 8x16 font"
depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC)
help
This is the high resolution console font for Sun machines. Say Y.
config FONT_SUN12x22
bool "Sparc console 12x22 font (not supported by all drivers)"
depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC)
help
This is the high resolution console font for Sun machines with very
big letters (like the letters used in the SPARC PROM). If the
standard font is unreadable for you, say Y, otherwise say N.
config FONT_10x18
bool "console 10x18 font (not supported by all drivers)" if FONTS
depends on FRAMEBUFFER_CONSOLE
help
This is a high resolution console font for machines with very
big letters. It fits between the sun 12x22 and the normal 8x16 font.
If other fonts are too big or too small for you, say Y, otherwise say N.
config FONT_AUTOSELECT
def_bool y
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE || STI_CONSOLE || USB_SISUSBVGA_CON
depends on !FONT_8x8
depends on !FONT_6x11
depends on !FONT_7x14
depends on !FONT_PEARL_8x8
depends on !FONT_ACORN_8x8
depends on !FONT_MINI_4x6
depends on !FONT_SUN8x16
depends on !FONT_SUN12x22
depends on !FONT_10x18
select FONT_8x16
endmenu
......@@ -2,32 +2,12 @@
# 5 Aug 1999, James Simmons, <mailto:jsimmons@users.sf.net>
# Rewritten to use lists instead of if-statements.
# Font handling
font-objs := fonts.o
font-objs-$(CONFIG_FONT_SUN8x16) += font_sun8x16.o
font-objs-$(CONFIG_FONT_SUN12x22) += font_sun12x22.o
font-objs-$(CONFIG_FONT_8x8) += font_8x8.o
font-objs-$(CONFIG_FONT_8x16) += font_8x16.o
font-objs-$(CONFIG_FONT_6x11) += font_6x11.o
font-objs-$(CONFIG_FONT_7x14) += font_7x14.o
font-objs-$(CONFIG_FONT_10x18) += font_10x18.o
font-objs-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
font-objs-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
font-objs-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o
font-objs += $(font-objs-y)
obj-$(CONFIG_FONTS) += font.o
# Each configuration option enables a list of files.
obj-$(CONFIG_DUMMY_CONSOLE) += dummycon.o
obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o font.o
obj-$(CONFIG_STI_CONSOLE) += sticon.o sticore.o font.o
obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o
obj-$(CONFIG_STI_CONSOLE) += sticon.o sticore.o
obj-$(CONFIG_VGA_CONSOLE) += vgacon.o
obj-$(CONFIG_MDA_CONSOLE) += mdacon.o
obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o softcursor.o
obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o softcursor.o
ifeq ($(CONFIG_FB_TILEBLITTING),y)
obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += tileblit.o
endif
......@@ -36,8 +16,4 @@ obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon_rotate.o fbcon_cw.o fbcon_ud.o \
fbcon_ccw.o
endif
obj-$(CONFIG_FB_STI) += sticore.o font.o
ifeq ($(CONFIG_USB_SISUSBVGA_CON),y)
obj-$(CONFIG_USB_SISUSBVGA) += font.o
endif
obj-$(CONFIG_FB_STI) += sticore.o
......@@ -410,4 +410,6 @@ config OID_REGISTRY
config UCS2_STRING
tristate
source "lib/fonts/Kconfig"
endmenu
......@@ -153,6 +153,8 @@ interval_tree_test-objs := interval_tree_test_main.o interval_tree.o
obj-$(CONFIG_ASN1) += asn1_decoder.o
obj-$(CONFIG_FONT_SUPPORT) += fonts/
hostprogs-y := gen_crc32table
clean-files := crc32table.h
......
#
# Font configuration
#
config FONT_SUPPORT
tristate
if FONT_SUPPORT
config FONTS
bool "Select compiled-in fonts"
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
help
Say Y here if you would like to use fonts other than the default
your frame buffer console usually use.
Note that the answer to this question won't directly affect the
kernel: saying N will just cause the configurator to skip all
the questions about foreign fonts.
If unsure, say N (the default choices are safe).
config FONT_8x8
bool "VGA 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
default y if !SPARC && !FONTS
help
This is the "high resolution" font for the VGA frame buffer (the one
provided by the text console 80x50 (and higher) modes).
Note that this is a poor quality font. The VGA 8x16 font is quite a
lot more readable.
Given the resolution provided by the frame buffer device, answer N
here is safe.
config FONT_8x16
bool "VGA 8x16 font" if FONTS
default y if !SPARC && !FONTS
help
This is the "high resolution" font for the VGA frame buffer (the one
provided by the VGA text console 80x25 mode.
If unsure, say Y.
config FONT_6x11
bool "Mac console 6x11 font (not supported by all drivers)" if FONTS
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
default y if !SPARC && !FONTS && MAC
help
Small console font with Macintosh-style high-half glyphs. Some Mac
framebuffer drivers don't support this one at all.
config FONT_7x14
bool "console 7x14 font (not supported by all drivers)" if FONTS
depends on FRAMEBUFFER_CONSOLE
help
Console font with characters just a bit smaller than the default.
If the standard 8x16 font is a little too big for you, say Y.
Otherwise, say N.
config FONT_PEARL_8x8
bool "Pearl (old m68k) console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE
default y if !SPARC && !FONTS && AMIGA
help
Small console font with PC-style control-character and high-half
glyphs.
config FONT_ACORN_8x8
bool "Acorn console 8x8 font" if FONTS
depends on FRAMEBUFFER_CONSOLE
default y if !SPARC && !FONTS && ARM && ARCH_ACORN
help
Small console font with PC-style control characters and high-half
glyphs.
config FONT_MINI_4x6
bool "Mini 4x6 font"
depends on !SPARC && FONTS
config FONT_SUN8x16
bool "Sparc console 8x16 font"
depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC)
help
This is the high resolution console font for Sun machines. Say Y.
config FONT_SUN12x22
bool "Sparc console 12x22 font (not supported by all drivers)"
depends on FRAMEBUFFER_CONSOLE && (!SPARC && FONTS || SPARC)
help
This is the high resolution console font for Sun machines with very
big letters (like the letters used in the SPARC PROM). If the
standard font is unreadable for you, say Y, otherwise say N.
config FONT_10x18
bool "console 10x18 font (not supported by all drivers)" if FONTS
depends on FRAMEBUFFER_CONSOLE
help
This is a high resolution console font for machines with very
big letters. It fits between the sun 12x22 and the normal 8x16 font.
If other fonts are too big or too small for you, say Y, otherwise say N.
config FONT_AUTOSELECT
def_bool y
depends on !FONT_8x8
depends on !FONT_6x11
depends on !FONT_7x14
depends on !FONT_PEARL_8x8
depends on !FONT_ACORN_8x8
depends on !FONT_MINI_4x6
depends on !FONT_SUN8x16
depends on !FONT_SUN12x22
depends on !FONT_10x18
select FONT_8x16
endif # FONT_SUPPORT
# Font handling
font-objs := fonts.o
font-objs-$(CONFIG_FONT_SUN8x16) += font_sun8x16.o
font-objs-$(CONFIG_FONT_SUN12x22) += font_sun12x22.o
font-objs-$(CONFIG_FONT_8x8) += font_8x8.o
font-objs-$(CONFIG_FONT_8x16) += font_8x16.o
font-objs-$(CONFIG_FONT_6x11) += font_6x11.o
font-objs-$(CONFIG_FONT_7x14) += font_7x14.o
font-objs-$(CONFIG_FONT_10x18) += font_10x18.o
font-objs-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
font-objs-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
font-objs-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o
font-objs += $(font-objs-y)
obj-$(CONFIG_FONT_SUPPORT) += font.o
/*
* linux/drivers/video/fonts.c -- `Soft' font definitions
* `Soft' font definitions
*
* Created 1995 by Geert Uytterhoeven
* Rewritten 1998 by Martin Mares <mj@ucw.cz>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册