Commit bd824b9f authored by Ian Molton's avatar Ian Molton Committed by Steve French

[PATCH] ARM26 architecture update

parent d62f5562
......@@ -245,6 +245,21 @@ M: jschlst@samba.org
L: linux-atalk@lists.netspace.org
S: Maintained
ARM26 ARCHITECTURE
P: Ian Molton
M: spyro@f2s.com
S: Maintained
ARM26/ARCHIMEDES
P: Ian Molton
M: spyro@f2s.com
S: Maintained
ARM26/A5000
P: John Appleby
M: john@dnsworld.co.uk
S: Maintained
ARM MFM AND FLOPPY DRIVERS
P: Dave Gilbert
M: linux@treblig.org
......
This diff is collapsed.
......@@ -8,15 +8,8 @@ mainmenu "Linux Kernel Configuration"
config ARM
bool
default y
help
The ARM series is a line of low-power-consumption RISC chip designs
licensed by ARM ltd and targeted at embedded applications and
handhelds such as the Compaq IPAQ. ARM-based PCs are no longer
manufactured, but legacy ARM-based PC hardware remains popular in
Europe. There is an ARM Linux project with a web page at
<http://www.arm.linux.org.uk/>.
config ARCH_ARCA5K
config ARM26
bool
default y
......@@ -67,25 +60,25 @@ comment "Archimedes/A5000 Implementations (select only ONE)"
config ARCH_ARC
bool "Archimedes"
depends on ARCH_ARCA5K
help
The Acorn Archimedes was an personal computer based on an 8K ARM2
processor, released in 1987. It supported 512K of RAM and 2 800K
floppy disks. Picture and more detailed specifications at
<http://www.computingmuseum.com/museum/archi.htm>.
Say Y to support the Acorn Archimedes.
The Acorn Archimedes was an personal computer based on an 8MHz ARM2
processor, released in 1987. It supported up to 16MB of RAM in
later models and floppy, harddisc, ethernet etc.
config ARCH_A5K
bool "A5000"
depends on ARCH_ARCA5K
help
Say Y here to to support the Acorn A5000. Linux can support the
Say Y here to to support the Acorn A5000.
Linux can support the
internal IDE disk and CD-ROM interface, serial and parallel port,
and the floppy drive. Note that on some A5000s the floppy is
plugged into the wrong socket on the motherboard.
config PAGESIZE_16
bool "2MB physical memory"
depends on ARCH_ARCA5K
bool "2MB physical memory (broken)"
help
Say Y here if your Archimedes or A5000 system has only 2MB of
memory, otherwise say N. The resulting kernel will not run on a
......@@ -186,81 +179,7 @@ config KCORE_AOUT
endchoice
config BINFMT_AOUT
tristate "Kernel support for a.out binaries"
---help---
A.out (Assembler.OUTput) is a set of formats for libraries and
executables used in the earliest versions of UNIX. Linux used the
a.out formats QMAGIC and ZMAGIC until they were replaced with the
ELF format.
As more and more programs are converted to ELF, the use for a.out
will gradually diminish. If you disable this option it will reduce
your kernel by one page. This is not much and by itself does not
warrant removing support. However its removal is a good idea if you
wish to ensure that absolutely none of your programs will use this
older executable format. If you don't know what to answer at this
point then answer Y. If someone told you "You need a kernel with
QMAGIC support" then you'll have to say Y here. You may answer M to
compile a.out support as a module and later load the module when you
want to use a program or library in a.out format. The module will be
called binfmt_aout. Saying M or N here is dangerous though,
because some crucial programs on your system might still be in A.OUT
format.
config BINFMT_ELF
tristate "Kernel support for ELF binaries"
---help---
ELF (Executable and Linkable Format) is a format for libraries and
executables used across different architectures and operating
systems. Saying Y here will enable your kernel to run ELF binaries
and enlarge it by about 13 KB. ELF support under Linux has now all
but replaced the traditional Linux a.out formats (QMAGIC and ZMAGIC)
because it is portable (this does *not* mean that you will be able
to run executables from different architectures or operating systems
however) and makes building run-time libraries very easy. Many new
executables are distributed solely in ELF format. You definitely
want to say Y here.
Information about ELF is contained in the ELF HOWTO available from
<http://www.linuxdoc.org/docs.html#howto>.
If you find that after upgrading from Linux kernel 1.2 and saying Y
here, you still can't run any ELF binaries (they just crash), then
you'll have to install the newest ELF runtime libraries, including
ld.so (check the file <file:Documentation/Changes> for location and
latest version).
If you want to compile this as a module ( = code which can be
inserted in and removed from the running kernel whenever you want),
say M here and read <file:Documentation/modules.txt>. The module
will be called binfmt_elf. Saying M or N here is dangerous because
some crucial programs on your system might be in ELF format.
config BINFMT_MISC
tristate "Kernel support for MISC binaries"
---help---
If you say Y here, it will be possible to plug wrapper-driven binary
formats into the kernel. You will like this especially when you use
programs that need an interpreter to run like Java, Python or
Emacs-Lisp. It's also useful if you often run DOS executables under
the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available from
<http://www.linuxdoc.org/docs.html#howto>). Once you have
registered such a binary class with the kernel, you can start one of
those programs simply by typing in its name at a shell prompt; Linux
will automatically feed it to the correct interpreter.
You can do other nice things, too. Read the file
<file:Documentation/binfmt_misc.txt> to learn how to use this
feature, and <file:Documentation/java.txt> for information about how
to include Java support.
You must say Y to "/proc file system support" (CONFIG_PROC_FS) to
use this part of the kernel.
You may say M here for module support and later load the module when
you have use for it; the module is called binfmt_misc. If you
don't know what to answer at this point, say Y.
source "fs/Kconfig.binfmt"
config PREEMPT
bool "Preemptible Kernel (EXPERIMENTAL)"
......@@ -311,59 +230,8 @@ source "net/Kconfig"
source "net/irda/Kconfig"
menu "ATA/ATAPI/MFM/RLL support"
config IDE
tristate "ATA/ATAPI/MFM/RLL support"
---help---
If you say Y here, your kernel will be able to manage low cost mass
storage units such as ATA/(E)IDE and ATAPI units. The most common
cases are IDE hard drives and ATAPI CD-ROM drives.
If your system is pure SCSI and doesn't use these interfaces, you
can say N here.
Integrated Disk Electronics (IDE aka ATA-1) is a connecting standard
for mass storage units such as hard disks. It was designed by
Western Digital and Compaq Computer in 1984. It was then named
ST506. Quite a number of disks use the IDE interface.
AT Attachment (ATA) is the superset of the IDE specifications.
ST506 was also called ATA-1.
Fast-IDE is ATA-2 (also named Fast ATA), Enhanced IDE (EIDE) is
ATA-3. It provides support for larger disks (up to 8.4GB by means of
the LBA standard), more disks (4 instead of 2) and for other mass
storage units such as tapes and cdrom. UDMA/33 (aka UltraDMA/33) is
ATA-4 and provides faster (and more CPU friendly) transfer modes
than previous PIO (Programmed processor Input/Output) from previous
ATA/IDE standards by means of fast DMA controllers.
ATA Packet Interface (ATAPI) is a protocol used by EIDE tape and
CD-ROM drives, similar in many respects to the SCSI protocol.
SMART IDE (Self Monitoring, Analysis and Reporting Technology) was
designed in order to prevent data corruption and disk crash by
detecting pre hardware failure conditions (heat, access time, and
the like...). Disks built since June 1995 may follow this standard.
The kernel itself don't manage this; however there are quite a
number of user programs such as smart that can query the status of
SMART parameters disk.
If you want to compile this driver as a module ( = code which can be
inserted in and removed from the running kernel whenever you want),
say M here and read <file:Documentation/modules.txt>. The module
will be called ide.
For further information, please read <file:Documentation/ide.txt>.
If unsure, say Y.
source "drivers/ide/Kconfig"
endmenu
source "drivers/scsi/Kconfig"
source "drivers/isdn/Kconfig"
......
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/config-language.txt.
#
mainmenu_name "Linux Kernel Configuration"
define_bool CONFIG_ARM y
define_bool CONFIG_EISA n
define_bool CONFIG_SBUS n
define_bool CONFIG_MCA n
define_bool CONFIG_UID16 y
define_bool CONFIG_RWSEM_GENERIC_SPINLOCK y
define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM n
define_bool CONFIG_GENERIC_BUST_SPINLOCK n
define_bool CONFIG_GENERIC_ISA_DMA n
source init/Config.in
mainmenu_option next_comment
comment 'System Type'
define_bool CONFIG_ARCH_ARCA5K
bool ' Archimedes' CONFIG_ARCH_ARC
bool ' A5000' CONFIG_ARCH_A5K
# Definitions to make life easier
define_bool CONFIG_ARCH_ACORN y
define_bool CONFIG_CPU_32 n
define_bool CONFIG_CPU_26 y
bool '2MB physical memory' CONFIG_PAGESIZE_16
endmenu
mainmenu_option next_comment
comment 'General setup'
define_bool CONFIG_FIQ y
# Compressed boot loader in ROM. Yes, we really want to ask about
# TEXT and BSS so we preserve their values in the config files.
bool 'Compressed boot loader in ROM/flash' CONFIG_ZBOOT_ROM
hex 'Compressed ROM boot loader base address' CONFIG_ZBOOT_ROM_TEXT 0
hex 'Compressed ROM boot loader BSS address' CONFIG_ZBOOT_ROM_BSS 0
comment 'At least one math emulation must be selected'
define_bool CONFIG_FPE_NWFPE y
choice 'Kernel core (/proc/kcore) format' \
"ELF CONFIG_KCORE_ELF \
A.OUT CONFIG_KCORE_AOUT" ELF
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
string 'Default kernel command string' CONFIG_CMDLINE ""
define_bool CONFIG_ALIGNMENT_TRAP n
endmenu
source drivers/parport/Config.in
source drivers/pnp/Config.in
source drivers/block/Config.in
source drivers/md/Config.in
source drivers/acorn/block/Config.in
if [ "$CONFIG_NET" = "y" ]; then
source net/Config.in
mainmenu_option next_comment
comment 'Network device support'
bool 'Network device support' CONFIG_NETDEVICES
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
fi
endmenu
fi
mainmenu_option next_comment
comment 'ATA/ATAPI/MFM/RLL support'
tristate 'ATA/ATAPI/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in
else
define_bool CONFIG_BLK_DEV_HD n
fi
endmenu
mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
endmenu
source drivers/isdn/Config.in
#
# input before char - char/joystick depends on it. As does USB.
#
source drivers/input/Config.in
source drivers/char/Config.in
if [ "$CONFIG_BUSMOUSE" = "y" ]; then
define_bool CONFIG_KBDMOUSE y
fi
source drivers/media/Config.in
source fs/Config.in
if [ "$CONFIG_VT" = "y" ]; then
mainmenu_option next_comment
comment 'Console drivers'
source drivers/video/Config.in
endmenu
fi
mainmenu_option next_comment
comment 'Sound'
tristate 'Sound card support' CONFIG_SOUND
if [ "$CONFIG_SOUND" != "n" ]; then
source sound/Config.in
fi
endmenu
source drivers/misc/Config.in
source drivers/usb/Config.in
mainmenu_option next_comment
comment 'Kernel hacking'
# Always compile kernel with framepointer (until 2.4 real comes out)
# Bug reports aren't much use without this.
bool 'Compile kernel without frame pointer' CONFIG_NO_FRAME_POINTER
bool 'Verbose user fault messages' CONFIG_DEBUG_USER
bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO
bool 'Kernel debugging' CONFIG_DEBUG_KERNEL
dep_bool ' Debug memory allocations' CONFIG_DEBUG_SLAB $CONFIG_DEBUG_KERNEL
dep_bool ' Magic SysRq key' CONFIG_MAGIC_SYSRQ $CONFIG_DEBUG_KERNEL
dep_bool ' Spinlock debugging' CONFIG_DEBUG_SPINLOCK $CONFIG_DEBUG_KERNEL
dep_bool ' Wait queue debugging' CONFIG_DEBUG_WAITQ $CONFIG_DEBUG_KERNEL
dep_bool ' Verbose BUG() reporting (adds 70K)' CONFIG_DEBUG_BUGVERBOSE $CONFIG_DEBUG_KERNEL
dep_bool ' Verbose kernel error messages' CONFIG_DEBUG_ERRORS $CONFIG_DEBUG_KERNEL
# These options are only for real kernel hackers who want to get their hands dirty.
dep_bool ' Kernel low-level debugging functions' CONFIG_DEBUG_LL $CONFIG_DEBUG_KERNEL
endmenu
source security/Config.in
source lib/Config.in
......@@ -6,7 +6,7 @@ ENTRY_OBJ = entry.o
# Object file lists.
obj-y := arch.o compat.o dma.o entry.o irq.o \
obj-y := compat.o dma.o entry.o irq.o \
process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \
time.o traps.o ecard.o time-acorn.o dma.o \
ecard.o fiq.o time.o
......
/*
* linux/arch/arm/kernel/arch.c
*
* Architecture specific fixups.
*/
#include <linux/config.h>
#include <linux/init.h>
#include <linux/types.h>
#include <asm/elf.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/arch.h>
#include <asm/page.h>
unsigned int vram_size;
unsigned int memc_ctrl_reg;
unsigned int number_mfm_drives;
static int __init parse_tag_acorn(const struct tag *tag)
{
memc_ctrl_reg = tag->u.acorn.memc_control_reg;
number_mfm_drives = tag->u.acorn.adfsdrives;
return 0;
}
__tagtable(ATAG_ACORN, parse_tag_acorn);
/*
* Copyright (C) 1995-2001 Russell King
* 2001-2002 Keith Owens
* 2003-? Ian Molton
* 2003 Ian Molton
*
* Generate definitions needed by assembly language modules.
* This code generates raw asm output which is post-processed to extract
......
......@@ -26,7 +26,7 @@
#include <asm/mach-types.h>
#include <asm/page.h>
#include <asm/arch.h>
//#include <asm/arch.h>
//#include <asm/mach/irq.h>
/*
......
......@@ -2,7 +2,7 @@
* linux/arch/arm/kernel/dma.c
*
* Copyright (C) 1995-2000 Russell King
* 2003-? Ian Molton
* 2003 Ian Molton
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
......
......@@ -11,9 +11,8 @@
* Find all installed expansion cards, and handle interrupts from them.
*
* Created from information from Acorns RiscOS3 PRMs
*
* 08-Dec-1996 RMK Added code for the 9'th expansion card - the ether
* podule slot.
* 15-Jun-2003 IM Modified from ARM32 (RiscPC capable) version
* 10-Jan-1999 RMK Run loaders in a simulated RISC OS environment.
* 06-May-1997 RMK Added blacklist for cards whose loader doesn't work.
* 12-Sep-1997 RMK Created new handling of interrupt enables/disables
* - cards can now register their own routine to control
......@@ -21,10 +20,7 @@
* 29-Sep-1997 RMK Expansion card interrupt hardware not being re-enabled
* on reset from Linux. (Caused cards not to respond
* under RiscOS without hard reset).
* 15-Feb-1998 RMK Added DMA support
* 12-Sep-1998 RMK Added EASI support
* 10-Jan-1999 RMK Run loaders in a simulated RISC OS environment.
* 17-Apr-1999 RMK Support for EASI Type C cycles.
*
*/
#define ECARD_C
......@@ -527,8 +523,7 @@ static int ecard_prints(char *buffer, ecard_t *ec)
{
char *start = buffer;
buffer += sprintf(buffer, " %d: %s ", ec->slot_no,
ec->type == ECARD_EASI ? "EASI" : " ");
buffer += sprintf(buffer, " %d: ", ec->slot_no);
if (ec->cid.id == 0) {
struct in_chunk_dir incd;
......@@ -674,7 +669,7 @@ ecard_probe(int slot, card_type_t type)
memset(ec, 0, sizeof(ecard_t));
ec->slot_no = slot;
ec->type = type;
ec->type = type;
ec->irq = NO_IRQ;
ec->fiq = NO_IRQ;
ec->dma = NO_DMA;
......@@ -770,9 +765,8 @@ static int __init ecard_init(void)
printk("Probing expansion cards\n");
for (slot = 0; slot < 8; slot ++) {
if (ecard_probe(slot, ECARD_EASI) == -ENODEV)
ecard_probe(slot, ECARD_IOC);
for (slot = 0; slot < 4; slot ++) {
ecard_probe(slot, ECARD_IOC);
}
irqhw = ecard_probeirqhw();
......
......@@ -41,7 +41,7 @@
* not be set too low to prevent false triggering. Conversely, if it
* is set too high, then you could miss a stuck IRQ.
*
* Maybe we ought to set a timer and re-enable the IRQ at a later time?
* FIXME Maybe we ought to set a timer and re-enable the IRQ at a later time?
*/
#define MAX_IRQ_CNT 100000
......@@ -49,7 +49,6 @@ static volatile unsigned long irq_err_count;
static spinlock_t irq_controller_lock = SPIN_LOCK_UNLOCKED;
struct irqdesc irq_desc[NR_IRQS];
void (*init_arch_irq)(void) __initdata = NULL;
/*
* Dummy mask/unmask handler
......@@ -88,7 +87,6 @@ void disable_irq(unsigned int irq)
{
struct irqdesc *desc = irq_desc + irq;
unsigned long flags;
spin_lock_irqsave(&irq_controller_lock, flags);
if (!desc->depth++)
desc->enabled = 0;
......@@ -114,7 +112,7 @@ void enable_irq(unsigned int irq)
spin_lock_irqsave(&irq_controller_lock, flags);
if (unlikely(!desc->depth)) {
printk("enable_irq(%u) unbalanced from %p\n", irq,
__builtin_return_address(0));
__builtin_return_address(0)); //FIXME bum addresses reported - why?
} else if (!--desc->depth) {
desc->probing = 0;
desc->enabled = 1;
......@@ -187,7 +185,6 @@ __do_irq(unsigned int irq, struct irqaction *action, struct pt_regs *regs)
unsigned int status;
spin_unlock(&irq_controller_lock);
if (!(action->flags & SA_INTERRUPT))
local_irq_enable();
......@@ -700,6 +697,6 @@ void __init init_IRQ(void)
for (irq = 0, desc = irq_desc; irq < NR_IRQS; irq++, desc++)
*desc = bad_irq_desc;
init_arch_irq();
arc_init_irq();
init_dma();
}
......@@ -227,7 +227,9 @@ extern void free_page_8k(unsigned long page);
#define ll_alloc_task_struct() ((struct thread_info *)get_page_8k(GFP_KERNEL))
#define ll_free_task_struct(p) free_page_8k((unsigned long)(p))
struct thread_info *alloc_thread_info(void)
//FIXME - do we use *task param below looks like we dont, which is ok?
//FIXME - if EXTRA_TASK_STRUCT is zero we can optimise the below away permanently. *IF* its supposed to be zero.
struct thread_info *alloc_thread_info(struct task_struct *task)
{
struct thread_info *thread = NULL;
......
......@@ -30,7 +30,6 @@
#include <asm/mach-types.h>
#include <asm/tlbflush.h>
#include <asm/arch.h>
#include <asm/irqchip.h>
#ifndef MEM_SIZE
......@@ -66,6 +65,8 @@ unsigned int system_rev;
unsigned int system_serial_low;
unsigned int system_serial_high;
unsigned int elf_hwcap;
unsigned int memc_ctrl_reg;
unsigned int number_mfm_drives;
struct processor processor;
......@@ -147,33 +148,6 @@ static void __init setup_processor(void)
cpu_proc_init();
}
static struct machine_desc * __init setup_machine(unsigned int nr)
{
extern struct machine_desc __arch_info_begin, __arch_info_end;
struct machine_desc *list;
/*
* locate architecture in the list of supported architectures.
*/
for (list = &__arch_info_begin; list < &__arch_info_end; list++)
if (list->nr == nr)
break;
/*
* If the architecture type is not recognised, then we
* can co nothing...
*/
if (list >= &__arch_info_end) {
printk("Architecture configuration botched (nr %d), unable "
"to continue.\n", nr);
while (1);
}
printk("Machine: %s\n", list->name);
return list;
}
/*
* Initial parsing of the command line. We need to pick out the
* memory size. We look for mem=size@start, where start and size
......@@ -239,7 +213,7 @@ setup_ramdisk(int doload, int prompt, int image_start, unsigned int rd_sz)
}
static void __init
request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc)
request_standard_resources(struct meminfo *mi)
{
struct resource *res;
int i;
......@@ -274,22 +248,18 @@ request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc)
request_resource(res, &kernel_data);
}
if (mdesc->video_start) {
/* FIXME - needed? if (mdesc->video_start) {
video_ram.start = mdesc->video_start;
video_ram.end = mdesc->video_end;
request_resource(&iomem_resource, &video_ram);
}
}*/
/*
* Some machines don't have the possibility of ever
* possessing lp0, lp1 or lp2
* possessing lp1 or lp2
*/
if (mdesc->reserve_lp0)
if (0) /* FIXME - need to do this for A5k at least */
request_resource(&ioport_resource, &lp0);
if (mdesc->reserve_lp1)
request_resource(&ioport_resource, &lp1);
if (mdesc->reserve_lp2)
request_resource(&ioport_resource, &lp2);
}
/*
......@@ -359,6 +329,15 @@ static int __init parse_tag_videotext(const struct tag *tag)
__tagtable(ATAG_VIDEOTEXT, parse_tag_videotext);
#endif
static int __init parse_tag_acorn(const struct tag *tag)
{
memc_ctrl_reg = tag->u.acorn.memc_control_reg;
number_mfm_drives = tag->u.acorn.adfsdrives;
return 0;
}
__tagtable(ATAG_ACORN, parse_tag_acorn);
static int __init parse_tag_ramdisk(const struct tag *tag)
{
setup_ramdisk((tag->u.ramdisk.flags & 1) == 0,
......@@ -467,15 +446,18 @@ static struct init_tags {
void __init setup_arch(char **cmdline_p)
{
struct tag *tags = (struct tag *)&init_tags;
struct machine_desc *mdesc;
char *from = default_command_line;
setup_processor();
mdesc = setup_machine(machine_arch_type);
machine_name = mdesc->name;
if(machine_arch_type == MACH_TYPE_A5K)
machine_name = "A5000";
else if(machine_arch_type == MACH_TYPE_ARCHIMEDES)
machine_name = "Archimedes";
else
machine_name = "UNKNOWN";
if (mdesc->param_offset)
tags = (struct tag *)mdesc->param_offset; //FIXME - ugly?
//FIXME - this may need altering when we get ROM images working
tags = (struct tag *)0x0207c000;
/*
* If we have the old style parameters, convert them to
......@@ -501,12 +483,7 @@ void __init setup_arch(char **cmdline_p)
parse_cmdline(&meminfo, cmdline_p, from);
bootmem_init(&meminfo);
paging_init(&meminfo);
request_standard_resources(&meminfo, mdesc);
/*
* Set up various architecture-specific pointers
*/
init_arch_irq = mdesc->init_irq;
request_standard_resources(&meminfo);
#ifdef CONFIG_VT
#if defined(CONFIG_DUMMY_CONSOLE)
......
......@@ -175,6 +175,11 @@ void show_trace_task(struct task_struct *tsk)
}
}
/* FIXME - this is probably wrong.. */
void show_stack(struct task_struct *task, unsigned long *sp) {
dump_mem("Stack: ", (unsigned long)sp, 8192+(unsigned long)task->thread_info);
}
spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
/*
......@@ -497,7 +502,7 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
die_if_kernel("unknown data abort code", regs, instr);
}
void __bug(const char *file, int line, void *data)
volatile void __bug(const char *file, int line, void *data)
{
printk(KERN_CRIT"kernel BUG at %s:%d!", file, line);
if (data)
......
......@@ -4,9 +4,7 @@
# Copyright (C) 1995-2000 Russell King
#
L_TARGET := lib.a
obj-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
copy_page.o delay.o findbit.o memchr.o memcpy.o \
memset.o memzero.o setbit.o \
......@@ -16,15 +14,12 @@ obj-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
ucmpdi2.o udivdi3.o lib1funcs.o ecard.o io-acorn.o \
floppydma.o io-readsb.o io-writesb.o io-writesl.o \
uaccess-kernel.o uaccess-user.o io-readsw-armv3.o \
io-writesw-armv3.o io-readsl-armv3.o
obj-m :=
obj-n :=
obj-$(CONFIG_VT)+= kbd.o
io-writesw-armv3.o io-readsl-armv3.o ecard.o \
io-acorn.o floppydma.o
obj-y += ecard.o io-acorn.o floppydma.o
lib-n :=
lib-$(CONFIG_VT)+= kbd.o
csumpartialcopy.o: csumpartialcopygeneric.S
csumpartialcopyuser.o: csumpartialcopygeneric.S
......
......@@ -4,7 +4,7 @@
# Object file lists.
obj-y := arch.o dma.o irq.o oldlatches.o \
obj-y := dma.o irq.o oldlatches.o \
small_page.o
extra-y := head.o
......
/*
* linux/arch/arm26/mach-arc/arch.c
*
* Copyright (C) 1998-2001 Russell King
* Copyright (C) 2003 Ian Molton
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Architecture specific fixups.
*/
#include <linux/config.h>
#include <linux/tty.h>
#include <linux/init.h>
#include <asm/mach-types.h>
#include <asm/hardware.h>
#include <asm/page.h>
#include <asm/setup.h>
#include <asm/map.h>
#include <asm/arch.h>
extern void arc_init_irq(void);
#ifdef CONFIG_ARCH_ARC
MACHINE_START(ARCHIMEDES, "Acorn-Archimedes")
#elif defined(CONFIG_ARCH_A5K)
MACHINE_START(A5K, "Acorn-A5000")
#endif
MAINTAINER("Ian Molton")
BOOT_PARAMS(0x0207c000)
INITIRQ(arc_init_irq)
MACHINE_END
......@@ -73,7 +73,6 @@ static struct irqchip arc_a_chip = {
static void arc_mask_irq_b(unsigned int irq)
{
unsigned int val, mask;
mask = 1 << (irq & 7);
val = ioc_readb(IOC_IRQMASKB);
ioc_writeb(val & ~mask, IOC_IRQMASKB);
......@@ -94,7 +93,7 @@ static struct irqchip arc_b_chip = {
.unmask = arc_unmask_irq_b,
};
/* FIXME - JMA none of these functions are used in arm26
/* FIXME - JMA none of these functions are used in arm26 currently
static void arc_mask_irq_fiq(unsigned int irq)
{
unsigned int val, mask;
......@@ -124,6 +123,7 @@ void __init arc_init_irq(void)
{
unsigned int irq, flags;
/* Disable all IOC interrupt sources */
ioc_writeb(0, IOC_IRQMASKA);
ioc_writeb(0, IOC_IRQMASKB);
ioc_writeb(0, IOC_FIQMASK);
......
......@@ -32,7 +32,7 @@
#include <asm/setup.h>
#include <asm/tlb.h>
#include <asm/arch.h>
//#include <asm/arch.h>
#include <asm/map.h>
#define TABLE_SIZE PTRS_PER_PTE * sizeof(pte_t))
......
......@@ -70,11 +70,9 @@ void free_pgd_slow(pgd_t *pgd)
pgd_t *get_pgd_slow(struct mm_struct *mm)
{
void *pg2k;
pgd_t *new_pgd, *init_pgd;
pmd_t *new_pmd, *init_pmd;
pte_t *new_pte, *init_pte;
struct mm_struct bob;
new_pgd = alloc_pgd_table();
if (!new_pgd)
......
/*
* linux/include/asm-arm/mach/arch.h
*
* Copyright (C) 2000 Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/*
* The size of struct machine_desc
* (for assembler code)
* FIXME - I count 45... or is this padding?
*/
#define SIZEOF_MACHINE_DESC 48
#ifndef __ASSEMBLY__
struct tag;
struct machine_desc {
int nr; /* arch no FIXME - get rid */
const char *name; /* architecture name */
unsigned int param_offset; /* parameter page */
unsigned int video_start; /* start of video RAM */
unsigned int video_end; /* end of video RAM */
unsigned int reserve_lp0 :1; /* never has lp0 */
unsigned int reserve_lp1 :1; /* never has lp1 */
unsigned int reserve_lp2 :1; /* never has lp2 */
unsigned int soft_reboot :1; /* soft reboot */
void (*fixup)(struct machine_desc *,
struct tag *, char **,
struct meminfo *);
void (*map_io)(void);/* IO mapping function */
void (*init_irq)(void);
};
/*
* Set of macros to define architecture features. This is built into
* a table by the linker.
*/
#define MACHINE_START(_type,_name) \
const struct machine_desc __mach_desc_##_type \
__attribute__((__section__(".arch.info"))) = { \
nr: MACH_TYPE_##_type, \
name: _name,
#define MAINTAINER(n)
#define BOOT_PARAMS(_params) \
param_offset: _params,
#define INITIRQ(_func) \
init_irq: _func,
#define MACHINE_END \
};
#endif
......@@ -4,7 +4,7 @@
#include <linux/config.h>
#ifdef CONFIG_DEBUG_BUGVERBOSE
extern void __bug(const char *file, int line, void *data);
extern volatile void __bug(const char *file, int line, void *data);
/* give file/line information */
#define BUG() __bug(__FILE__, __LINE__, NULL)
......@@ -18,4 +18,13 @@ extern void __bug(const char *file, int line, void *data);
#endif
#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
#define WARN_ON(condition) do { \
if (unlikely((condition)!=0)) { \
printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
dump_stack(); \
} \
} while (0)
#endif
/*
* linux/include/asm-arm/bugs.h
* linux/include/asm-arm26/bugs.h
*
* Copyright (C) 1995 Russell King
*
......
......@@ -26,6 +26,9 @@
#define PROD_ACORN_ETHER1 0x0003
#define PROD_ACORN_MFM 0x000b
#define MANU_CCONCEPTS 0x0009
#define PROD_CCONCEPTS_COLOURCARD 0x0050
#define MANU_ANT2 0x0011
#define PROD_ANT_ETHER3 0x00a4
......
/*
* Unlike ARM32 this is NOT automatically generated. DONT delete it
* Instead, consider FIXME-ing it so its auto-detected.
*/
#ifndef __ASM_ARM_MACH_TYPE_H
......
......@@ -55,9 +55,9 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep)
* is thrown away. It just cant be zero. -IM
*/
#define pmd_alloc_one(mm,addr) ((pmd_t *)2); BUG()
#define pmd_alloc_one(mm,addr) ({ BUG(); ((pmd_t *)2); })
#define pmd_free(pmd) do { } while (0)
#define pgd_populate(mm,pmd,pte) (0)
#define pgd_populate(mm,pmd,pte) BUG()
extern pgd_t *get_pgd_slow(struct mm_struct *mm);
extern void free_pgd_slow(pgd_t *pgd);
......
......@@ -179,7 +179,7 @@ extern struct page *empty_zero_page;
/* Is pmd_page supposed to return a pointer to a page in some arches? ours seems to
* return a pointer to memory (no special alignment)
*/
#define pmd_page(pmd) ((unsigned long)(pmd_val((pmd)) & ~_PMD_PRESENT))
#define pmd_page(pmd) ((struct page *)(pmd_val((pmd)) & ~_PMD_PRESENT))
#define pmd_page_kernel(pmd) ((pte_t *)(pmd_val((pmd)) & ~_PMD_PRESENT))
#define pte_offset_kernel(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr))
......
#ifndef _ASMARM_STATFS_H
#define _ASMARM_STATFS_H
#ifndef __KERNEL_STRICT_NAMES
//FIXME - this may not be appropriate for arm26. check it out.
#include <linux/types.h>
typedef __kernel_fsid_t fsid_t;
#endif
struct statfs {
long f_type;
long f_bsize;
long f_blocks;
long f_bfree;
long f_bavail;
long f_files;
long f_ffree;
__kernel_fsid_t f_fsid;
long f_namelen;
long f_spare[6];
};
#include <asm-generic/statfs.h>
#endif
......@@ -85,7 +85,7 @@ static inline struct thread_info *current_thread_info(void)
//#define INIT_THREAD_SIZE (65536)
#define __get_user_regs(x) (((struct pt_regs *)((unsigned long)(x) + THREAD_SIZE - 8)) - 1)
extern struct thread_info *alloc_thread_info(void);
extern struct thread_info *alloc_thread_info(struct task_struct *task);
extern void free_thread_info(struct thread_info *);
#define get_thread_info(ti) get_task_struct((ti)->task)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment