Commit 95cf11e7 authored by James Simmons's avatar James Simmons

Merge maxwell.earthlink.net:/usr/src/linus-2.5

into maxwell.earthlink.net:/usr/src/fbdev-2.5
parents cfe1d063 9552d6bc
...@@ -2185,9 +2185,15 @@ S: Germany ...@@ -2185,9 +2185,15 @@ S: Germany
N: Corey Minyard N: Corey Minyard
E: minyard@wf-rch.cirr.com E: minyard@wf-rch.cirr.com
E: minyard@mvista.com
W: http://home.attbi.com/~minyard
D: Sony CDU31A CDROM Driver D: Sony CDU31A CDROM Driver
S: 1805 Marquette D: IPMI driver
S: Richardson, Texas 75081 D: Various networking fixes long ago
D: Original ppc_md work
D: Shared zlib
S: 7406 Wheat Field Rd
S: Garland, Texas 75044
S: USA S: USA
N: Patrick Mochel N: Patrick Mochel
......
...@@ -22,7 +22,7 @@ To get the dma_ API, you must #include <linux/dma-mapping.h> ...@@ -22,7 +22,7 @@ To get the dma_ API, you must #include <linux/dma-mapping.h>
void * void *
dma_alloc_coherent(struct device *dev, size_t size, dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle, int flag)
void * void *
pci_alloc_consistent(struct pci_dev *dev, size_t size, pci_alloc_consistent(struct pci_dev *dev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle)
...@@ -43,6 +43,12 @@ Note: consistent memory can be expensive on some platforms, and the ...@@ -43,6 +43,12 @@ Note: consistent memory can be expensive on some platforms, and the
minimum allocation length may be as big as a page, so you should minimum allocation length may be as big as a page, so you should
consolidate your requests for consistent memory as much as possible. consolidate your requests for consistent memory as much as possible.
The flag parameter (dma_alloc_coherent only) allows the caller to
specify the GFP_ flags (see kmalloc) for the allocation (the
implementation may chose to ignore flags that affect the location of
the returned memory, like GFP_DMA). For pci_alloc_consistent, you
must assume GFP_ATOMIC behaviour.
void void
dma_free_coherent(struct device *dev, size_t size, void *cpu_addr dma_free_coherent(struct device *dev, size_t size, void *cpu_addr
dma_addr_t dma_handle) dma_addr_t dma_handle)
...@@ -261,7 +267,7 @@ API at all. ...@@ -261,7 +267,7 @@ API at all.
void * void *
dma_alloc_noncoherent(struct device *dev, size_t size, dma_alloc_noncoherent(struct device *dev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle, int flag)
Identical to dma_alloc_coherent() except that the platform will Identical to dma_alloc_coherent() except that the platform will
choose to return either consistent or non-consistent memory as it sees choose to return either consistent or non-consistent memory as it sees
......
This diff is collapsed.
...@@ -23,7 +23,7 @@ and /proc/bus/usb/devices, as well as /proc/bus/usb/BBB/DDD files. ...@@ -23,7 +23,7 @@ and /proc/bus/usb/devices, as well as /proc/bus/usb/BBB/DDD files.
to interact with USB devices. to interact with USB devices.
There are a number of mount options supported by usbfs. There are a number of mount options supported by usbfs.
Consult the source code (linux/drivers/usb/inode.c) for Consult the source code (linux/drivers/usb/core/inode.c) for
information about those options. information about those options.
**NOTE**: The filesystem has been renamed from "usbdevfs" to **NOTE**: The filesystem has been renamed from "usbdevfs" to
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 5 PATCHLEVEL = 5
SUBLEVEL = 57 SUBLEVEL = 58
EXTRAVERSION = EXTRAVERSION =
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -166,6 +166,7 @@ static struct cpufreq_driver integrator_driver = { ...@@ -166,6 +166,7 @@ static struct cpufreq_driver integrator_driver = {
.verify = integrator_verify_speed, .verify = integrator_verify_speed,
.setpolicy = integrator_set_policy, .setpolicy = integrator_set_policy,
.policy = &integrator_policy, .policy = &integrator_policy,
.name = "integrator",
}; };
#endif #endif
......
...@@ -214,6 +214,7 @@ static struct cpufreq_driver sa1100_driver = { ...@@ -214,6 +214,7 @@ static struct cpufreq_driver sa1100_driver = {
.verify = sa11x0_verify_speed, .verify = sa11x0_verify_speed,
.setpolicy = sa1100_setspeed, .setpolicy = sa1100_setspeed,
.policy = &sa1100_policy, .policy = &sa1100_policy,
.name = "sa1100",
}; };
static int __init sa1100_dram_init(void) static int __init sa1100_dram_init(void)
......
...@@ -309,6 +309,7 @@ static struct cpufreq_driver sa1110_driver = { ...@@ -309,6 +309,7 @@ static struct cpufreq_driver sa1110_driver = {
.verify = sa11x0_verify_speed, .verify = sa11x0_verify_speed,
.setpolicy = sa1110_setspeed, .setpolicy = sa1110_setspeed,
.policy = &sa1110_policy, .policy = &sa1110_policy,
.name = "sa1110",
}; };
static int __init sa1110_clk_init(void) static int __init sa1110_clk_init(void)
......
...@@ -75,6 +75,14 @@ config X86_SUMMIT ...@@ -75,6 +75,14 @@ config X86_SUMMIT
If you don't have one of these computers, you should say N here. If you don't have one of these computers, you should say N here.
config X86_BIGSMP
bool "Support for other sub-arch SMP systems with more than 8 CPUs"
help
This option is needed for the systems that have more than 8 CPUs
and if the system is not of any sub-arch type above.
If you don't have such a system, you should say N here.
# Visual Workstation support is utterly broken. # Visual Workstation support is utterly broken.
# If you want to see it working mail an VW540 to hch@infradead.org 8) # If you want to see it working mail an VW540 to hch@infradead.org 8)
#config X86_VISWS #config X86_VISWS
...@@ -949,15 +957,27 @@ config CPU_FREQ ...@@ -949,15 +957,27 @@ config CPU_FREQ
If in doubt, say N. If in doubt, say N.
config CPU_FREQ_PROC_INTF
bool "/proc/cpufreq interface (DEPRECATED)"
depends on CPU_FREQ && PROC_FS
help
This enables the /proc/cpufreq interface for controlling
CPUFreq. Please note that it is recommended to use the sysfs
interface instead (which is built automatically).
For details, take a look at linux/Documentation/cpufreq.
If in doubt, say N.
config CPU_FREQ_24_API config CPU_FREQ_24_API
bool "/proc/sys/cpu/ interface (2.4. / OLD)" bool "/proc/sys/cpu/ interface (2.4. / OLD)"
depends on CPU_FREQ depends on CPU_FREQ
help help
This enables the /proc/sys/cpu/ sysctl interface for controlling This enables the /proc/sys/cpu/ sysctl interface for controlling
CPUFreq, as known from the 2.4.-kernel patches for CPUFreq. 2.5 CPUFreq, as known from the 2.4.-kernel patches for CPUFreq. 2.5
uses /proc/cpufreq instead. Please note that some drivers do not uses a sysfs interface instead. Please note that some drivers do
work well with the 2.4. /proc/sys/cpu sysctl interface, so if in not work well with the 2.4. /proc/sys/cpu sysctl interface,
doubt, say N here. so if in doubt, say N here.
For details, take a look at linux/Documentation/cpufreq. For details, take a look at linux/Documentation/cpufreq.
...@@ -1035,6 +1055,18 @@ config X86_LONGRUN ...@@ -1035,6 +1055,18 @@ config X86_LONGRUN
If in doubt, say N. If in doubt, say N.
config X86_GX_SUSPMOD
tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation"
depends on CPU_FREQ
help
This add the CPUFreq driver for NatSemi Geode processors which
support suspend modulation.
For details, take a look at linux/Documentation/cpufreq.
If in doubt, say N.
endmenu endmenu
......
...@@ -65,6 +65,10 @@ mcore-$(CONFIG_X86_VISWS) := mach-visws ...@@ -65,6 +65,10 @@ mcore-$(CONFIG_X86_VISWS) := mach-visws
mflags-$(CONFIG_X86_NUMAQ) := -Iinclude/asm-i386/mach-numaq mflags-$(CONFIG_X86_NUMAQ) := -Iinclude/asm-i386/mach-numaq
mcore-$(CONFIG_X86_NUMAQ) := mach-default mcore-$(CONFIG_X86_NUMAQ) := mach-default
# BIGSMP subarch support
mflags-$(CONFIG_X86_BIGSMP) := -Iinclude/asm-i386/mach-bigsmp
mcore-$(CONFIG_X86_BIGSMP) := mach-default
# default subarch .h files # default subarch .h files
mflags-y += -Iinclude/asm-i386/mach-default mflags-y += -Iinclude/asm-i386/mach-default
......
...@@ -4,3 +4,4 @@ obj-$(CONFIG_X86_SPEEDSTEP) += speedstep.o ...@@ -4,3 +4,4 @@ obj-$(CONFIG_X86_SPEEDSTEP) += speedstep.o
obj-$(CONFIG_X86_P4_CLOCKMOD) += p4-clockmod.o obj-$(CONFIG_X86_P4_CLOCKMOD) += p4-clockmod.o
obj-$(CONFIG_ELAN_CPUFREQ) += elanfreq.o obj-$(CONFIG_ELAN_CPUFREQ) += elanfreq.o
obj-$(CONFIG_X86_LONGRUN) += longrun.o obj-$(CONFIG_X86_LONGRUN) += longrun.o
obj-$(CONFIG_X86_GX_SUSPMOD) += gx-suspmod.o
...@@ -260,6 +260,9 @@ static int __init elanfreq_init(void) ...@@ -260,6 +260,9 @@ static int __init elanfreq_init(void)
driver->verify = &elanfreq_verify; driver->verify = &elanfreq_verify;
driver->setpolicy = &elanfreq_setpolicy; driver->setpolicy = &elanfreq_setpolicy;
driver->init = NULL;
driver->exit = NULL;
strncpy(driver->name, "elanfreq", CPUFREQ_NAME_LEN);
driver->policy[0].cpu = 0; driver->policy[0].cpu = 0;
ret = cpufreq_frequency_table_cpuinfo(&driver->policy[0], &elanfreq_table[0]); ret = cpufreq_frequency_table_cpuinfo(&driver->policy[0], &elanfreq_table[0]);
......
This diff is collapsed.
...@@ -771,6 +771,9 @@ static int __init longhaul_init (void) ...@@ -771,6 +771,9 @@ static int __init longhaul_init (void)
driver->verify = &longhaul_verify; driver->verify = &longhaul_verify;
driver->setpolicy = &longhaul_setpolicy; driver->setpolicy = &longhaul_setpolicy;
driver->init = NULL;
driver->exit = NULL;
strncpy(driver->name, "longhaul", CPUFREQ_NAME_LEN);
driver->policy[0].cpu = 0; driver->policy[0].cpu = 0;
driver->policy[0].min = (unsigned int) lowest_speed; driver->policy[0].min = (unsigned int) lowest_speed;
......
...@@ -251,6 +251,9 @@ static int __init longrun_init(void) ...@@ -251,6 +251,9 @@ static int __init longrun_init(void)
driver->policy[0].cpuinfo.min_freq = longrun_low_freq; driver->policy[0].cpuinfo.min_freq = longrun_low_freq;
driver->policy[0].cpuinfo.max_freq = longrun_high_freq; driver->policy[0].cpuinfo.max_freq = longrun_high_freq;
driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL; driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL;
driver->init = NULL;
driver->exit = NULL;
strncpy(driver->name, "longrun", CPUFREQ_NAME_LEN);
longrun_get_policy(&driver->policy[0]); longrun_get_policy(&driver->policy[0]);
......
...@@ -240,6 +240,9 @@ static int __init cpufreq_p4_init(void) ...@@ -240,6 +240,9 @@ static int __init cpufreq_p4_init(void)
driver->verify = &cpufreq_p4_verify; driver->verify = &cpufreq_p4_verify;
driver->setpolicy = &cpufreq_p4_setpolicy; driver->setpolicy = &cpufreq_p4_setpolicy;
driver->init = NULL;
driver->exit = NULL;
strncpy(driver->name, "p4-clockmod", CPUFREQ_NAME_LEN);
for (i=0;i<NR_CPUS;i++) { for (i=0;i<NR_CPUS;i++) {
driver->policy[i].cpu = i; driver->policy[i].cpu = i;
......
...@@ -184,6 +184,9 @@ static int __init powernow_k6_init(void) ...@@ -184,6 +184,9 @@ static int __init powernow_k6_init(void)
driver->verify = &powernow_k6_verify; driver->verify = &powernow_k6_verify;
driver->setpolicy = &powernow_k6_setpolicy; driver->setpolicy = &powernow_k6_setpolicy;
driver->init = NULL;
driver->exit = NULL;
strncpy(driver->name, "powernow-k6", CPUFREQ_NAME_LEN);
/* cpuinfo and default policy values */ /* cpuinfo and default policy values */
driver->policy[0].cpu = 0; driver->policy[0].cpu = 0;
......
...@@ -690,6 +690,9 @@ static int __init speedstep_init(void) ...@@ -690,6 +690,9 @@ static int __init speedstep_init(void)
driver->verify = &speedstep_verify; driver->verify = &speedstep_verify;
driver->setpolicy = &speedstep_setpolicy; driver->setpolicy = &speedstep_setpolicy;
driver->init = NULL;
driver->exit = NULL;
strncpy(driver->name, "speedstep", CPUFREQ_NAME_LEN);
driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL; driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL;
......
...@@ -14,10 +14,11 @@ ...@@ -14,10 +14,11 @@
#include <asm/io.h> #include <asm/io.h>
void *dma_alloc_coherent(struct device *dev, size_t size, void *dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle, int gfp)
{ {
void *ret; void *ret;
int gfp = GFP_ATOMIC; /* ignore region specifiers */
gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
if (dev == NULL || (*dev->dma_mask < 0xffffffff)) if (dev == NULL || (*dev->dma_mask < 0xffffffff))
gfp |= GFP_DMA; gfp |= GFP_DMA;
......
...@@ -78,7 +78,8 @@ spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED; ...@@ -78,7 +78,8 @@ spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
spinlock_t i8253_lock = SPIN_LOCK_UNLOCKED; spinlock_t i8253_lock = SPIN_LOCK_UNLOCKED;
EXPORT_SYMBOL(i8253_lock); EXPORT_SYMBOL(i8253_lock);
struct timer_opts* timer; extern struct timer_opts timer_none;
struct timer_opts* timer = &timer_none;
/* /*
* This version of gettimeofday has microsecond resolution * This version of gettimeofday has microsecond resolution
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
# Makefile for x86 timers # Makefile for x86 timers
# #
obj-y := timer.o timer_tsc.o timer_pit.o obj-y := timer.o timer_none.o timer_tsc.o timer_pit.o
obj-$(CONFIG_X86_CYCLONE) += timer_cyclone.o obj-$(CONFIG_X86_CYCLONE) += timer_cyclone.o
...@@ -150,7 +150,6 @@ static int init_cyclone(void) ...@@ -150,7 +150,6 @@ static int init_cyclone(void)
} }
#if 0 /* XXX future work */
static void delay_cyclone(unsigned long loops) static void delay_cyclone(unsigned long loops)
{ {
unsigned long bclock, now; unsigned long bclock, now;
...@@ -162,12 +161,12 @@ static void delay_cyclone(unsigned long loops) ...@@ -162,12 +161,12 @@ static void delay_cyclone(unsigned long loops)
now = cyclone_timer[0]; now = cyclone_timer[0];
} while ((now-bclock) < loops); } while ((now-bclock) < loops);
} }
#endif
/************************************************************/ /************************************************************/
/* cyclone timer_opts struct */ /* cyclone timer_opts struct */
struct timer_opts timer_cyclone = { struct timer_opts timer_cyclone = {
.init = init_cyclone, .init = init_cyclone,
.mark_offset = mark_offset_cyclone, .mark_offset = mark_offset_cyclone,
.get_offset = get_offset_cyclone .get_offset = get_offset_cyclone,
.delay = delay_cyclone,
}; };
#include <asm/timer.h>
static int init_none(void)
{
return 0;
}
static void mark_offset_none(void)
{
/* nothing needed */
}
static unsigned long get_offset_none(void)
{
return 0;
}
static void delay_none(unsigned long loops)
{
int d0;
__asm__ __volatile__(
"\tjmp 1f\n"
".align 16\n"
"1:\tjmp 2f\n"
".align 16\n"
"2:\tdecl %0\n\tjns 2b"
:"=&a" (d0)
:"0" (loops));
}
/* tsc timer_opts struct */
struct timer_opts timer_none = {
.init = init_none,
.mark_offset = mark_offset_none,
.get_offset = get_offset_none,
.delay = delay_none,
};
...@@ -27,6 +27,19 @@ static void mark_offset_pit(void) ...@@ -27,6 +27,19 @@ static void mark_offset_pit(void)
/* nothing needed */ /* nothing needed */
} }
static void delay_pit(unsigned long loops)
{
int d0;
__asm__ __volatile__(
"\tjmp 1f\n"
".align 16\n"
"1:\tjmp 2f\n"
".align 16\n"
"2:\tdecl %0\n\tjns 2b"
:"=&a" (d0)
:"0" (loops));
}
/* This function must be called with interrupts disabled /* This function must be called with interrupts disabled
* It was inspired by Steve McCanne's microtime-i386 for BSD. -- jrs * It was inspired by Steve McCanne's microtime-i386 for BSD. -- jrs
...@@ -129,4 +142,5 @@ struct timer_opts timer_pit = { ...@@ -129,4 +142,5 @@ struct timer_opts timer_pit = {
.init = init_pit, .init = init_pit,
.mark_offset = mark_offset_pit, .mark_offset = mark_offset_pit,
.get_offset = get_offset_pit, .get_offset = get_offset_pit,
.delay = delay_pit,
}; };
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
int tsc_disable __initdata = 0; int tsc_disable __initdata = 0;
extern int x86_udelay_tsc;
extern spinlock_t i8253_lock; extern spinlock_t i8253_lock;
static int use_tsc; static int use_tsc;
...@@ -107,6 +106,17 @@ static void mark_offset_tsc(void) ...@@ -107,6 +106,17 @@ static void mark_offset_tsc(void)
delay_at_last_interrupt = (count + LATCH/2) / LATCH; delay_at_last_interrupt = (count + LATCH/2) / LATCH;
} }
static void delay_tsc(unsigned long loops)
{
unsigned long bclock, now;
rdtscl(bclock);
do
{
rep_nop();
rdtscl(now);
} while ((now-bclock) < loops);
}
/* ------ Calibrate the TSC ------- /* ------ Calibrate the TSC -------
* Return 2^32 * (1 / (TSC clocks per usec)) for do_fast_gettimeoffset(). * Return 2^32 * (1 / (TSC clocks per usec)) for do_fast_gettimeoffset().
...@@ -272,8 +282,6 @@ static int init_tsc(void) ...@@ -272,8 +282,6 @@ static int init_tsc(void)
* We could be more selective here I suspect * We could be more selective here I suspect
* and just enable this for the next intel chips ? * and just enable this for the next intel chips ?
*/ */
x86_udelay_tsc = 1;
/* report CPU clock rate in Hz. /* report CPU clock rate in Hz.
* The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) = * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
* clock/second. Our precision is about 100 ppm. * clock/second. Our precision is about 100 ppm.
...@@ -310,4 +318,5 @@ struct timer_opts timer_tsc = { ...@@ -310,4 +318,5 @@ struct timer_opts timer_tsc = {
.init = init_tsc, .init = init_tsc,
.mark_offset = mark_offset_tsc, .mark_offset = mark_offset_tsc,
.get_offset = get_offset_tsc, .get_offset = get_offset_tsc,
.delay = delay_tsc,
}; };
...@@ -15,54 +15,17 @@ ...@@ -15,54 +15,17 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/delay.h> #include <asm/delay.h>
#include <asm/timer.h>
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#include <asm/smp.h> #include <asm/smp.h>
#endif #endif
int x86_udelay_tsc = 0; /* Delay via TSC */ extern struct timer_opts* timer;
/*
* Do a udelay using the TSC for any CPU that happens
* to have one that we trust.
*/
static void __rdtsc_delay(unsigned long loops)
{
unsigned long bclock, now;
rdtscl(bclock);
do
{
rep_nop();
rdtscl(now);
} while ((now-bclock) < loops);
}
/*
* Non TSC based delay loop for 386, 486, MediaGX
*/
static void __loop_delay(unsigned long loops)
{
int d0;
__asm__ __volatile__(
"\tjmp 1f\n"
".align 16\n"
"1:\tjmp 2f\n"
".align 16\n"
"2:\tdecl %0\n\tjns 2b"
:"=&a" (d0)
:"0" (loops));
}
void __delay(unsigned long loops) void __delay(unsigned long loops)
{ {
if (x86_udelay_tsc) timer->delay(loops);
__rdtsc_delay(loops);
else
__loop_delay(loops);
} }
inline void __const_udelay(unsigned long xloops) inline void __const_udelay(unsigned long xloops)
......
...@@ -338,254 +338,6 @@ unsigned long pcibios_fixup(unsigned long mem_start, unsigned long mem_end) ...@@ -338,254 +338,6 @@ unsigned long pcibios_fixup(unsigned long mem_start, unsigned long mem_end)
/*****************************************************************************/ /*****************************************************************************/
int pcibios_present(void)
{
return(pci_bus_is_present);
}
/*****************************************************************************/
int pcibios_read_config_dword(unsigned char bus, unsigned char dev,
unsigned char offset, unsigned int *val)
{
volatile unsigned long *rp;
unsigned long idsel, fnsel;
#ifdef DEBUGPCI
printk("pcibios_read_config_dword(bus=%x,dev=%x,offset=%x,val=%x)\n",
bus, dev, offset, val);
#endif
if (bus || ((pci_slotmask & (0x1 << PCI_SLOT(dev))) == 0)) {
*val = 0xffffffff;
return(PCIBIOS_SUCCESSFUL);
}
rp = (volatile unsigned long *) COMEM_BASE;
idsel = COMEM_DA_CFGRD | COMEM_DA_ADDR(0x1 << ((dev >> 3) + 16));
fnsel = (dev & 0x7) << 8;
rp[LREG(COMEM_DAHBASE)] = idsel;
*val = rp[LREG(COMEM_PCIBUS + (offset & 0xfc) + fnsel)];
#if 1
/* If we get back what we wrote, then nothing there */
/* This is pretty dodgy, but, hey, what else do we do?? */
if (!offset && (*val == ((idsel & 0xfffff000) | (offset & 0x00000fff))))
*val = 0xffffffff;
#endif
return(PCIBIOS_SUCCESSFUL);
}
/*****************************************************************************/
int pcibios_read_config_word(unsigned char bus, unsigned char dev,
unsigned char offset, unsigned short *val)
{
volatile unsigned long *rp;
volatile unsigned short *bp;
unsigned long idsel, fnsel;
unsigned char swapoffset;
#ifdef DEBUGPCI
printk("pcibios_read_config_word(bus=%x,dev=%x,offset=%x)\n",
bus, dev, offset);
#endif
if (bus || ((pci_slotmask & (0x1 << PCI_SLOT(dev))) == 0)) {
*val = 0xffff;
return(PCIBIOS_SUCCESSFUL);
}
rp = (volatile unsigned long *) COMEM_BASE;
bp = (volatile unsigned short *) COMEM_BASE;
idsel = COMEM_DA_CFGRD | COMEM_DA_ADDR(0x1 << ((dev >> 3) + 16));
fnsel = (dev & 0x7) << 8;
swapoffset = (offset & 0xfc) + (~offset & 0x02);
rp[LREG(COMEM_DAHBASE)] = idsel;
*val = bp[WREG(COMEM_PCIBUS + swapoffset + fnsel)];
return(PCIBIOS_SUCCESSFUL);
}
/*****************************************************************************/
int pcibios_read_config_byte(unsigned char bus, unsigned char dev,
unsigned char offset, unsigned char *val)
{
volatile unsigned long *rp;
volatile unsigned char *bp;
unsigned long idsel, fnsel;
unsigned char swapoffset;
#ifdef DEBUGPCI
printk("pcibios_read_config_byte(bus=%x,dev=%x,offset=%x)\n",
bus, dev, offset);
#endif
if (bus || ((pci_slotmask & (0x1 << PCI_SLOT(dev))) == 0)) {
*val = 0xff;
return(PCIBIOS_SUCCESSFUL);
}
rp = (volatile unsigned long *) COMEM_BASE;
bp = (volatile unsigned char *) COMEM_BASE;
idsel = COMEM_DA_CFGRD | COMEM_DA_ADDR(0x1 << ((dev >> 3) + 16));
fnsel = (dev & 0x7) << 8;
swapoffset = (offset & 0xfc) + (~offset & 0x03);
rp[LREG(COMEM_DAHBASE)] = idsel;
*val = bp[(COMEM_PCIBUS + swapoffset + fnsel)];
return(PCIBIOS_SUCCESSFUL);
}
/*****************************************************************************/
int pcibios_write_config_dword(unsigned char bus, unsigned char dev,
unsigned char offset, unsigned int val)
{
volatile unsigned long *rp;
unsigned long idsel, fnsel;
#ifdef DEBUGPCI
printk("pcibios_write_config_dword(bus=%x,dev=%x,offset=%x,val=%x)\n",
bus, dev, offset, val);
#endif
if (bus || ((pci_slotmask & (0x1 << PCI_SLOT(dev))) == 0))
return(PCIBIOS_SUCCESSFUL);
rp = (volatile unsigned long *) COMEM_BASE;
idsel = COMEM_DA_CFGRD | COMEM_DA_ADDR(0x1 << ((dev >> 3) + 16));
fnsel = (dev & 0x7) << 8;
rp[LREG(COMEM_DAHBASE)] = idsel;
rp[LREG(COMEM_PCIBUS + (offset & 0xfc) + fnsel)] = val;
return(PCIBIOS_SUCCESSFUL);
}
/*****************************************************************************/
int pcibios_write_config_word(unsigned char bus, unsigned char dev,
unsigned char offset, unsigned short val)
{
volatile unsigned long *rp;
volatile unsigned short *bp;
unsigned long idsel, fnsel;
unsigned char swapoffset;
#ifdef DEBUGPCI
printk("pcibios_write_config_word(bus=%x,dev=%x,offset=%x,val=%x)\n",
bus, dev, offset, val);
#endif
if (bus || ((pci_slotmask & (0x1 << PCI_SLOT(dev))) == 0))
return(PCIBIOS_SUCCESSFUL);
rp = (volatile unsigned long *) COMEM_BASE;
bp = (volatile unsigned short *) COMEM_BASE;
idsel = COMEM_DA_CFGRD | COMEM_DA_ADDR(0x1 << ((dev >> 3) + 16));
fnsel = (dev & 0x7) << 8;
swapoffset = (offset & 0xfc) + (~offset & 0x02);
rp[LREG(COMEM_DAHBASE)] = idsel;
bp[WREG(COMEM_PCIBUS + swapoffset + fnsel)] = val;
return(PCIBIOS_SUCCESSFUL);
}
/*****************************************************************************/
int pcibios_write_config_byte(unsigned char bus, unsigned char dev,
unsigned char offset, unsigned char val)
{
volatile unsigned long *rp;
volatile unsigned char *bp;
unsigned long idsel, fnsel;
unsigned char swapoffset;
#ifdef DEBUGPCI
printk("pcibios_write_config_byte(bus=%x,dev=%x,offset=%x,val=%x)\n",
bus, dev, offset, val);
#endif
if (bus || ((pci_slotmask & (0x1 << PCI_SLOT(dev))) == 0))
return(PCIBIOS_SUCCESSFUL);
rp = (volatile unsigned long *) COMEM_BASE;
bp = (volatile unsigned char *) COMEM_BASE;
idsel = COMEM_DA_CFGRD | COMEM_DA_ADDR(0x1 << ((dev >> 3) + 16));
fnsel = (dev & 0x7) << 8;
swapoffset = (offset & 0xfc) + (~offset & 0x03);
rp[LREG(COMEM_DAHBASE)] = idsel;
bp[(COMEM_PCIBUS + swapoffset + fnsel)] = val;
return(PCIBIOS_SUCCESSFUL);
}
/*****************************************************************************/
int pcibios_find_device(unsigned short vendor, unsigned short devid,
unsigned short index, unsigned char *bus, unsigned char *dev)
{
unsigned int vendev, val;
unsigned char devnr;
#ifdef DEBUGPCI
printk("pcibios_find_device(vendor=%04x,devid=%04x,index=%d)\n",
vendor, devid, index);
#endif
if (vendor == 0xffff)
return(PCIBIOS_BAD_VENDOR_ID);
vendev = (devid << 16) | vendor;
for (devnr = 0; (devnr < 32); devnr++) {
pcibios_read_config_dword(0, devnr, PCI_VENDOR_ID, &val);
if (vendev == val) {
if (index-- == 0) {
*bus = 0;
*dev = devnr;
return(PCIBIOS_SUCCESSFUL);
}
}
}
return(PCIBIOS_DEVICE_NOT_FOUND);
}
/*****************************************************************************/
int pcibios_find_class(unsigned int class, unsigned short index,
unsigned char *bus, unsigned char *dev)
{
unsigned int val;
unsigned char devnr;
#ifdef DEBUGPCI
printk("pcibios_find_class(class=%04x,index=%d)\n", class, index);
#endif
/* FIXME: this ignores multi-function devices... */
for (devnr = 0; (devnr < 128); devnr += 8) {
pcibios_read_config_dword(0, devnr, PCI_CLASS_REVISION, &val);
if ((val >> 8) == class) {
if (index-- == 0) {
*bus = 0;
*dev = devnr;
return(PCIBIOS_SUCCESSFUL);
}
}
}
return(PCIBIOS_DEVICE_NOT_FOUND);
}
/*****************************************************************************/
/* /*
* Local routines to interrcept the standard I/O and vector handling * Local routines to interrcept the standard I/O and vector handling
* code. Don't include this 'till now - initialization code above needs * code. Don't include this 'till now - initialization code above needs
......
/*
* linux/arch/m68knommu/kernel/entry.S
*
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
* Copyright (C) 1998 D. Jeff Dionne <jeff@lineo.ca>,
* Kenneth Albanowski <kjahds@kjahds.com>,
* Copyright (C) 2000 Lineo Inc. (www.lineo.com)
*
* Based on:
*
* linux/arch/m68k/kernel/entry.S
*
* Copyright (C) 1991, 1992 Linus Torvalds
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file README.legal in the main directory of this archive
* for more details.
*
* Linux/m68k support by Hamish Macdonald
*
* 68060 fixes by Jesper Skov
* ColdFire support by Greg Ungerer (gerg@snapgear.com)
* 5307 fixes by David W. Miller
* linux 2.4 support David McCullough <davidm@snapgear.com>
*/
#include <linux/config.h>
#include <linux/sys.h>
#include <linux/linkage.h>
#include <asm/thread_info.h>
#include <asm/errno.h>
#include <asm/setup.h>
#include <asm/segment.h>
#include <asm/asm-offsets.h>
#include <asm/entry.h>
.text
.globl buserr
.globl trap
.globl ret_from_exception
.globl ret_from_signal
.globl sys_fork
.globl sys_clone
.globl sys_vfork
ENTRY(buserr)
SAVE_ALL
moveq #-1,%d0
movel %d0,%sp@(LORIG_D0)
movel %sp,%sp@- /* stack frame pointer argument */
jsr buserr_c
addql #4,%sp
jra ret_from_exception
ENTRY(trap)
SAVE_ALL
moveq #-1,%d0
movel %d0,%sp@(LORIG_D0)
movel %sp,%sp@- /* stack frame pointer argument */
jsr trap_c
addql #4,%sp
jra ret_from_exception
#ifdef TRAP_DBG_INTERRUPT
.globl dbginterrupt
ENTRY(dbginterrupt)
SAVE_ALL
moveq #-1,%d0
movel %d0,%sp@(LORIG_D0)
movel %sp,%sp@- /* stack frame pointer argument */
jsr dbginterrupt_c
addql #4,%sp
jra ret_from_exception
#endif
ENTRY(reschedule)
/* save top of frame */
pea %sp@
jbsr set_esp0
addql #4,%sp
pea ret_from_exception
jmp schedule
ENTRY(ret_from_fork)
jra ret_from_exception
ENTRY(sys_fork)
SAVE_SWITCH_STACK
pea %sp@(SWITCH_STACK_SIZE)
jbsr m68k_fork
addql #4,%sp
RESTORE_SWITCH_STACK
rts
ENTRY(sys_vfork)
SAVE_SWITCH_STACK
pea %sp@(SWITCH_STACK_SIZE)
jbsr m68k_vfork
addql #4,%sp
RESTORE_SWITCH_STACK
rts
ENTRY(sys_clone)
SAVE_SWITCH_STACK
pea %sp@(SWITCH_STACK_SIZE)
jbsr m68k_clone
addql #4,%sp
RESTORE_SWITCH_STACK
rts
ENTRY(sys_sigsuspend)
SAVE_SWITCH_STACK
pea %sp@(SWITCH_STACK_SIZE)
jbsr do_sigsuspend
addql #4,%sp
RESTORE_SWITCH_STACK
rts
ENTRY(sys_rt_sigsuspend)
SAVE_SWITCH_STACK
pea %sp@(SWITCH_STACK_SIZE)
jbsr do_rt_sigsuspend
addql #4,%sp
RESTORE_SWITCH_STACK
rts
ENTRY(sys_sigreturn)
SAVE_SWITCH_STACK
jbsr do_sigreturn
RESTORE_SWITCH_STACK
rts
ENTRY(sys_rt_sigreturn)
SAVE_SWITCH_STACK
jbsr do_rt_sigreturn
RESTORE_SWITCH_STACK
rts
...@@ -343,10 +343,10 @@ static void c_stop(struct seq_file *m, void *v) ...@@ -343,10 +343,10 @@ static void c_stop(struct seq_file *m, void *v)
} }
struct seq_operations cpuinfo_op = { struct seq_operations cpuinfo_op = {
start: c_start, .start = c_start,
next: c_next, .next = c_next,
stop: c_stop, .stop = c_stop,
show: show_cpuinfo, .show = show_cpuinfo,
}; };
void arch_gettod(int *year, int *mon, int *day, int *hour, void arch_gettod(int *year, int *mon, int *day, int *hour,
......
...@@ -857,7 +857,7 @@ asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs) ...@@ -857,7 +857,7 @@ asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs)
case SIGQUIT: case SIGILL: case SIGTRAP: case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGIOT: case SIGFPE: case SIGSEGV: case SIGIOT: case SIGFPE: case SIGSEGV:
case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ: case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs)) if (do_coredump(signr, exit_code, regs))
exit_code |= 0x80; exit_code |= 0x80;
/* FALLTHRU */ /* FALLTHRU */
......
MEMORY {
ram : ORIGIN = 0x10000, LENGTH = 0x200000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x20000, LENGTH = 0x007E0000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit/text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x30020000, LENGTH = 0xe0000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text 0x30020000 : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x20000, LENGTH = 0x3e0000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
*(.modinfo)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
. = ALIGN(4);
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(8192) ;
*(.data.init_task)
. = ALIGN(8192) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
. = ALIGN(4096);
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4);
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
. = ALIGN(4);
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x20000, LENGTH = 0x3e0000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
*(.modinfo)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
. = ALIGN(4);
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(8192) ;
*(.data.init_task)
. = ALIGN(8192) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
. = ALIGN(4096);
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4);
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
. = ALIGN(4);
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x400, LENGTH = 0x400000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
*(.modinfo)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
. = ALIGN(4);
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(8192) ;
*(.data.init_task)
. = ALIGN(8192) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
. = ALIGN(4096);
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4);
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
. = ALIGN(4);
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x20000, LENGTH = 0x007E0000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x400, LENGTH = 0x1000000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = . ;
. = ALIGN(4);
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x20000, LENGTH = 0x007E0000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x400, LENGTH = 0x1000000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = . ;
. = ALIGN(4);
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x400, LENGTH = 0x400000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x400, LENGTH = 0x800000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = . ;
. = ALIGN(4);
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
MEMORY {
ram : ORIGIN = 0x20000, LENGTH = 0x007E0000
}
jiffies = jiffies_64 + 4;
SECTIONS {
.text : {
_stext = . ;
*(.text)
*(.exit.text)
*(.text.lock)
*(.exitcall.exit)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > ram
.data BLOCK(0x4) : {
_sdata = . ;
__data_start = . ;
*(.data)
*(.data.exit)
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.init BLOCK(4096) : {
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
} > ram
.bss BLOCK(0x4) : {
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
_end = . ;
} > ram
}
OUTPUT_ARCH(m68k)
ENTRY(_start)
MEMORY {
romvec : ORIGIN = 0x10c00000, LENGTH = 0x10400
flash : ORIGIN = 0x10c10400, LENGTH = 0xfec00
eflash : ORIGIN = 0x10d00000, LENGTH = 4
ramvec : ORIGIN = 0x00000000, LENGTH = 0x400
ram : ORIGIN = 0x10000400, LENGTH = 0x100000-0x400
eram : ORIGIN = 0x10100000, LENGTH = 4
}
jiffies = jiffies_64 + 4;
SECTIONS {
. = 0x10c00000 ;
.romvec : {
_flashstart = . ;
_romvec = . ;
} > romvec
. = 0x10c10400 ;
.text : {
_text = .; /* Text and read-only data */
text_start = . ;
*(.text)
*(.text.*)
*(.rodata)
*(.fixup)
*(__ex_table)
. = ALIGN(4) ;
_etext = . ;
__data_rom_start = . ;
} > flash
. = 0x10d00000 ;
.eflash :
{
_flashend = . ;
} > eflash
. = 0 ;
.ramvec :
{
__ramvec = . ;
} > ramvec
/* . = 0x10000400 ; */
.data 0x10000400 :
{
_sdata = . ;
__data_start = . ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
*(.data)
*(.data.*)
*(.setup.init)
*(.exitcall.exit)
. = ALIGN(4096) ;
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
_edata = . ;
edata = . ;
} > ram
.bss :
{
. = ALIGN(16) ;
_sbss = . ;
__bss_start = . ;
__data_end = . ;
*(.bss)
*(COMMON)
. = ALIGN(16) ;
end = . ;
_ebss = . ;
_end = . ;
} > ram
. = 0x10100000 ;
.eram :
{
__ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x00000000, LENGTH = 1028
flash : ORIGIN = 1028, LENGTH = 0x00080000 - 1028
eflash : ORIGIN = 0x00000000 + 0x00100000, LENGTH = 1
ramvec : ORIGIN = 0x00200000, LENGTH = 1028
ram : ORIGIN = 0x00200000 + 1028, LENGTH = 0x00080000 - 1028
eram : ORIGIN = 0x00200000 + 0x00080000, LENGTH = 1
dpram : ORIGIN = 0xffffe000, LENGTH = 0x00002000
}
jiffies = jiffies_64 + 4;
SECTIONS
{
.dpram :
{
_dprbase = . ;
} > dpram
.romvec :
{
_romvec = . ;
__flashstart = . ;
*(.data.initvect)
. = ALIGN(4);
} > romvec
.text :
{
text_start = . ;
*(.text)
*(.exit.text)
*(.text.*)
*(.rodata)
*(.fixup)
*(.kstrtab)
__start___ksymtab = . ;
*(__ksymtab)
__stop___ksymtab = . ;
__start___gpl_ksymtab = . ;
*(__gpl_ksymtab)
__stop___gpl_ksymtab = . ;
__start___ex_table = . ;
*(___ex_table)
__stop___ex_table = . ;
. = ALIGN(4) ;_etext = . ;
__data_rom_start = ALIGN ( 4 ) ;
} > flash
.eflash :
{
__flashend = . ;
} > eflash
.ramvec :
{
__ramstart = . ;
_ramvec = . ;
} > ramvec
.data :
{
_sdata = . ;
__data_start = . ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
*(.data)
*(.data.*)
*(.setup.init)
*(.exitcall.exit)
. = ALIGN(4096) ;
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
_edata = . ;
edata = .;
} > ram
.bss :
{
_sbss = ALIGN( 0x10 ) ;
__bss_start = ALIGN( 0x10 ) ;
__data_end = ALIGN( 0x10 ) ;
*(.bss)
*(COMMON)
_ebss = . ;
__bss_end = . ;
end = ALIGN( 0x10 ) ;
_end = ALIGN( 0x10 ) ;
} > ram
.eram :
{
_boot_stack = . - 4;
__ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x00000000, LENGTH = 1028
flash : ORIGIN = 1028, LENGTH = 0x00200000 - 1028
eflash : ORIGIN = 0x00000000 + 0x00200000, LENGTH = 1
ramvec : ORIGIN = 0x00200000, LENGTH = 1028
ram : ORIGIN = 0x00200000 + 1028, LENGTH = 0x00200000 - 1028
eram : ORIGIN = 0x00200000 + 0x00200000, LENGTH = 1
dpram : ORIGIN = 0xffffe000, LENGTH = 0x00002000
}
jiffies = jiffies_64 + 4;
SECTIONS
{
.dpram :
{
_dprbase = . ;
} > dpram
.romvec :
{
_romvec = . ;
__flashstart = . ;
*(.data.initvect)
. = ALIGN(4);
} > romvec
.text :
{
text_start = . ;
*(.text)
*(.exit.text)
*(.text.*)
*(.rodata)
*(.fixup)
*(.kstrtab)
__start___ksymtab = . ;
*(__ksymtab)
__stop___ksymtab = . ;
__start___gpl_ksymtab = . ;
*(__gpl_ksymtab)
__stop___gpl_ksymtab = . ;
__start___ex_table = . ;
*(___ex_table)
__stop___ex_table = . ;
. = ALIGN(4) ;_etext = . ;
__data_rom_start = ALIGN ( 4 ) ;
} > flash
.eflash :
{
__flashend = . ;
} > eflash
.ramvec :
{
__ramstart = . ;
_ramvec = . ;
} > ramvec
.data :
{
_sdata = . ;
__data_start = . ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
*(.data)
*(.data.*)
*(.setup.init)
*(.exitcall.exit)
. = ALIGN(4096) ;
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
_edata = . ;
edata = .;
} > ram
.bss :
{
_sbss = ALIGN( 0x10 ) ;
__bss_start = ALIGN( 0x10 ) ;
__data_end = ALIGN( 0x10 ) ;
*(.bss)
*(COMMON)
_ebss = . ;
__bss_end = . ;
end = ALIGN( 0x10 ) ;
_end = ALIGN( 0x10 ) ;
} > ram
.eram :
{
_boot_stack = . - 4;
__ramend = . ;
} > eram
}
...@@ -54,7 +54,7 @@ _stext: movew #0x2700,%sr ...@@ -54,7 +54,7 @@ _stext: movew #0x2700,%sr
bne 1b bne 1b
/* Copy data segment from ROM to RAM */ /* Copy data segment from ROM to RAM */
moveal #__data_rom_start, %a0 moveal #_etext, %a0
moveal #_sdata, %a1 moveal #_sdata, %a1
moveal #_edata, %a2 moveal #_edata, %a2
......
jiffies = jiffies_64 + 4;
SECTIONS
{
.romvec :
{
_flashstart = . ;
_romvec = . ;
__rom_start = . ;
} > romvec
.text :
{
_stext = . ;
*(.text)
*(.exit.text)
. = ALIGN(0x4) ;
*(.text.*)
. = ALIGN(0x4) ;
*(.exitcall.exit)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(0x4) ;
_etext = . ;
__data_rom_start = . ;
} > flash
.eflash :
{
_flashend = . ;
} > eflash
.ramvec :
{
__ram_start = . ;
__ramvec = . ;
} > ramvec
.data :
{
. = ALIGN(0x4) ;
_sdata = . ;
__data_start = . ;
. = ALIGN(0x4) ;
*(.rodata)
. = ALIGN(0x4) ;
*(.data)
. = ALIGN(0x4) ;
*(.data.*)
. = ALIGN(0x4) ;
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(0x4) ;
__setup_start = .;
*(.init.setup)
. = ALIGN(0x4) ;
__setup_end = .;
. = ALIGN(0x4) ;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(0x4) ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.bss :
{
. = ALIGN(0x4) ;
_sbss = . ;
*(.bss)
. = ALIGN(0x4) ;
*(COMMON)
. = ALIGN(0x4) ;
_ebss = . ;
_end = . ;
} > ram
.eram :
{
__ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x00600000, LENGTH = 0x00000400
flash : ORIGIN = 0x00600400, LENGTH = 0x00200000 - 0x00010400
eflash : ORIGIN = 0x007f0000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 0x00000400
ram : ORIGIN = 0x00020000, LENGTH = 0x00600000 - 0x00020000
eram : ORIGIN = 0x00600000, LENGTH = 0
}
INCLUDE arch/m68knommu/platform/68EZ328/ucsimm/fixed.ld
MEMORY
{
romvec : ORIGIN = 0x10c10000, LENGTH = 0x00000400
flash : ORIGIN = 0x10c10400, LENGTH = 0x00200000 - 0x00010400
eflash : ORIGIN = 0x10e00000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 0x00000400
bvec : ORIGIN = 0x00020000, LENGTH = 0x00000400
ram : ORIGIN = 0x00020400, LENGTH = 0x00800000 - 0x00020400
eram : ORIGIN = 0x00800000, LENGTH = 0
}
jiffies = jiffies_64 + 4;
SECTIONS
{
.fakevec :
{
} > romvec
.rom :
{
__rom_start = . ;
} > flash
.eflash :
{
_flashend = . ;
} > eflash
.realvec :
{
_ramvec = . ;
} > ramvec
.romvec :
{
_romvec = . ;
} > bvec
.text :
{
__ram_start = . ;
text_start = . ;
*(.text)
*(.exit.text)
*(.text.*)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
_etext = . ;
__data_rom_start = ALIGN ( 4 ) ;
} > ram
.data :
{
_sdata = . ;
__data_start = . ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
*(.data)
*(.data.*)
*(.exitcall.exit)
. = ALIGN(4096) ;
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
_edata = . ;
edata = ALIGN( 0x10 ) ;
} > ram
.bss :
{
_sbss = ALIGN( 0x10 ) ;
__bss_start = ALIGN( 0x10 ) ;
__data_end = ALIGN( 0x10 ) ;
*(.bss)
*(COMMON)
_ebss = . ;
__bss_end = . ;
end = ALIGN( 0x10 ) ;
_end = ALIGN( 0x10 ) ;
} > ram
.eram :
{
__ramend = . ;
_ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x10c10000, LENGTH = 0x00000400
flash : ORIGIN = 0x10c10400, LENGTH = 0x001fec00
eflash : ORIGIN = 0x10d00000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 1024
ram : ORIGIN = 0x00020000, LENGTH = 0x00800000 - 0x00020000
eram : ORIGIN = 0x00800000, LENGTH = 0
}
INCLUDE arch/m68knommu/platform/68EZ328/ucsimm/fixed.ld
...@@ -86,7 +86,7 @@ ram_jump: ...@@ -86,7 +86,7 @@ ram_jump:
#ifndef CONFIG_RAMKERNEL #ifndef CONFIG_RAMKERNEL
/* Copy data segment from ROM to RAM */ /* Copy data segment from ROM to RAM */
moveal #__data_rom_start, %a0 moveal #_etext, %a0
moveal #_sdata, %a1 moveal #_sdata, %a1
moveal #_edata, %a2 moveal #_edata, %a2
......
jiffies = jiffies_64 + 4;
SECTIONS
{
.romvec :
{
_flashstart = . ;
_romvec = . ;
__rom_start = . ;
} > romvec
.text :
{
_stext = . ;
*(.text)
. = ALIGN(0x4) ;
*(.text.*)
. = ALIGN(0x4) ;
*(.exitcall.exit)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(0x4) ;
_etext = . ;
__data_rom_start = . ;
} > flash
.eflash :
{
_flashend = . ;
} > eflash
.ramvec :
{
__ram_start = . ;
__ramvec = . ;
} > ramvec
.data :
{
. = ALIGN(0x4) ;
_sdata = . ;
__data_start = . ;
. = ALIGN(0x4) ;
*(.rodata)
. = ALIGN(0x4) ;
*(.data)
. = ALIGN(0x4) ;
*(.data.*)
. = ALIGN(0x4) ;
__setup_start = .;
*(.init.setup)
. = ALIGN(0x4) ;
__setup_end = .;
. = ALIGN(0x4) ;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(0x4) ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.bss :
{
. = ALIGN(0x4) ;
_sbss = . ;
*(.bss)
. = ALIGN(0x4) ;
*(COMMON)
. = ALIGN(0x4) ;
_ebss = . ;
_end = . ;
} > ram
.eram :
{
__ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x04030000, LENGTH = 1k
flash : ORIGIN = 0x04030400, LENGTH = 2M - 197k
eflash : ORIGIN = 0x04200000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 1k
bvec : ORIGIN = 0x00010000, LENGTH = 1k
ram : ORIGIN = 0x00010400, LENGTH = 32M - 65k
eram : ORIGIN = 0x02000000, LENGTH = 0
}
jiffies = jiffies_64 + 4;
SECTIONS
{
.fakevec :
{
} > romvec
.rom :
{
__rom_start = . ;
} > flash
.eflash :
{
_flashend = . ;
} > eflash
.realvec :
{
__ramvec = . ;
} > ramvec
.romvec :
{
_romvec = . ;
} > bvec
.text :
{
__ram_start = . ;
text_start = . ;
*(.text)
*(.text.*)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
_etext = . ;
__data_rom_start = ALIGN ( 4 ) ;
} > ram
.data :
{
_sdata = . ;
__data_start = . ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
*(.data)
*(.data.*)
*(.exitcall.exit)
. = ALIGN(4096) ;
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
_edata = . ;
edata = ALIGN( 0x10 ) ;
} > ram
.bss :
{
_sbss = ALIGN( 0x10 ) ;
__bss_start = ALIGN( 0x10 ) ;
__data_end = ALIGN( 0x10 ) ;
*(.bss)
*(COMMON)
_ebss = . ;
__bss_end = . ;
end = ALIGN( 0x10 ) ;
_end = ALIGN( 0x10 ) ;
} > ram
.eram :
{
__ramend = . ;
_ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x04030000, LENGTH = 1k
flash : ORIGIN = 0x04030400, LENGTH = 2M - 197k
eflash : ORIGIN = 0x04200000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 1k
ram : ORIGIN = 0x00010000, LENGTH = 32M - 64k
eram : ORIGIN = 0x02000000, LENGTH = 0
}
INCLUDE arch/m68knommu/platform/68VZ328/de2/fixed.ld
...@@ -54,7 +54,7 @@ _stext: movew #0x2700,%sr ...@@ -54,7 +54,7 @@ _stext: movew #0x2700,%sr
bne 1b bne 1b
/* Copy data segment from ROM to RAM */ /* Copy data segment from ROM to RAM */
moveal #__data_rom_start, %a0 moveal #_etext, %a0
moveal #_sdata, %a1 moveal #_sdata, %a1
moveal #_edata, %a2 moveal #_edata, %a2
......
jiffies = jiffies_64 + 4;
SECTIONS
{
.romvec :
{
_flashstart = . ;
_romvec = . ;
__rom_start = . ;
} > romvec
.text :
{
_stext = . ;
*(.text)
. = ALIGN(0x4) ;
*(.text.*)
. = ALIGN(0x4) ;
*(.exitcall.exit)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
. = ALIGN(0x4) ;
_etext = . ;
__data_rom_start = . ;
} > flash
.eflash :
{
_flashend = . ;
} > eflash
.ramvec :
{
__ram_start = . ;
__ramvec = . ;
} > ramvec
.data :
{
. = ALIGN(0x4) ;
_sdata = . ;
__data_start = . ;
. = ALIGN(0x4) ;
*(.rodata)
. = ALIGN(0x4) ;
*(.data)
. = ALIGN(0x4) ;
*(.data.*)
. = ALIGN(0x4) ;
__setup_start = .;
*(.init.setup)
. = ALIGN(0x4) ;
__setup_end = .;
. = ALIGN(0x4) ;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(0x4) ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
_edata = . ;
} > ram
.bss :
{
. = ALIGN(0x4) ;
_sbss = . ;
*(.bss)
. = ALIGN(0x4) ;
*(COMMON)
. = ALIGN(0x4) ;
_ebss = . ;
_end = . ;
} > ram
.eram :
{
__ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x00600000, LENGTH = 0x00000400
flash : ORIGIN = 0x00600400, LENGTH = 0x00200000 - 0x00010400
eflash : ORIGIN = 0x007f0000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 0x00000400
ram : ORIGIN = 0x00020000, LENGTH = 0x00600000 - 0x00020000
eram : ORIGIN = 0x00600000, LENGTH = 0
}
INCLUDE arch/m68knommu/platform/68VZ328/ucdimm/fixed.ld
MEMORY
{
romvec : ORIGIN = 0x10c10000, LENGTH = 0x00000400
flash : ORIGIN = 0x10c10400, LENGTH = 0x00200000 - 0x00010400
eflash : ORIGIN = 0x10e00000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 0x00000400
bvec : ORIGIN = 0x00020000, LENGTH = 0x00000400
ram : ORIGIN = 0x00020400, LENGTH = 0x00800000 - 0x00020400
eram : ORIGIN = 0x00800000, LENGTH = 0
}
jiffies = jiffies_64 + 4;
SECTIONS
{
.fakevec :
{
} > romvec
.rom :
{
__rom_start = . ;
} > flash
.eflash :
{
_flashend = . ;
} > eflash
.realvec :
{
_ramvec = . ;
} > ramvec
.romvec :
{
_romvec = . ;
} > bvec
.text :
{
__ram_start = . ;
text_start = . ;
*(.text)
*(.text.*)
*(.rodata)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
_etext = . ;
__data_rom_start = ALIGN ( 4 ) ;
} > ram
.data :
{
_sdata = . ;
__data_start = . ;
. = ALIGN(0x2000) ;
*(.data.init_task)
. = ALIGN(0x2000) ;
*(.data)
*(.data.*)
*(.exitcall.exit)
. = ALIGN(4096) ;
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4) ;
__init_end = .;
_edata = . ;
edata = ALIGN( 0x10 ) ;
} > ram
.bss :
{
_sbss = ALIGN( 0x10 ) ;
__bss_start = ALIGN( 0x10 ) ;
__data_end = ALIGN( 0x10 ) ;
*(.bss)
*(COMMON)
_ebss = . ;
__bss_end = . ;
end = ALIGN( 0x10 ) ;
_end = ALIGN( 0x10 ) ;
} > ram
.eram :
{
__ramend = . ;
_ramend = . ;
} > eram
}
MEMORY
{
romvec : ORIGIN = 0x10c10000, LENGTH = 0x00000400
flash : ORIGIN = 0x10c10400, LENGTH = 0x001fec00
eflash : ORIGIN = 0x10d00000, LENGTH = 0
ramvec : ORIGIN = 0x00000000, LENGTH = 1024
ram : ORIGIN = 0x00020000, LENGTH = 0x00800000 - 0x00020000
eram : ORIGIN = 0x00800000, LENGTH = 0
}
INCLUDE arch/m68knommu/platform/68VZ328/ucdimm/fixed.ld
/*
* vmlinux.lds.S -- master linker script for m68knommu arch
*
* (C) Copyright 2002, Greg Ungerer <gerg@snapgear.com>
*
* This ends up looking compilcated, because of the number of
* address variations for ram and rom/flash layouts. The real
* work of the linker script is all at the end, and reasonably
* strait forward.
*/
#include <linux/config.h> #include <linux/config.h>
/*
* Original Palm pilot (same for Xcopilot).
* There is really only a rom target for this.
*/
#ifdef CONFIG_PILOT3 #ifdef CONFIG_PILOT3
#ifdef CONFIG_ROMKERNEL #define ROMVEC_START 0x10c00000
#include "platform/68328/pilot/rom.ld" #define ROMVEC_LENGTH 0x10400
#endif #define ROM_START 0x10c10400
#ifdef CONFIG_RAMKERNEL #define ROM_LENGTH 0xfec00
#include "platform/68328/pilot/ram.ld" #define ROM_END 0x10d00000
#endif #define RAMVEC_START 0x00000000
#define RAMVEC_LENGTH 0x400
#define RAM_START 0x10000400
#define RAM_LENGTH 0xffc00
#define RAM_END 0x10100000
#define DATA_ADDR RAM_START
#endif #endif
#ifdef CONFIG_UCSIMM /*
* Same setup on both the uCsimm and uCdimm.
*/
#if defined(CONFIG_UCSIMM) || defined(CONFIG_UCDIMM)
#ifdef CONFIG_RAMKERNEL #ifdef CONFIG_RAMKERNEL
#include "platform/68EZ328/ucsimm/ram.ld" #define ROMVEC_START 0x10c10000
#define ROMVEC_LENGTH 0x400
#define ROM_START 0x10c10400
#define ROM_LENGTH 0x1efc00
#define ROM_END 0x10e00000
#define RAMVEC_START 0x00000000
#define RAMVEC_LENGTH 0x400
#define RAM_START 0x00020400
#define RAM_LENGTH 0x7dfc00
#define RAM_END 0x00800000
#endif #endif
#ifdef CONFIG_ROMKERNEL #ifdef CONFIG_ROMKERNEL
#include "platform/68EZ328/ucsimm/rom.ld" #define ROMVEC_START 0x10c10000
#define ROMVEC_LENGTH 0x400
#define ROM_START 0x10c10400
#define ROM_LENGTH 0x1efc00
#define ROM_END 0x10e00000
#define RAMVEC_START 0x00000000
#define RAMVEC_LENGTH 0x400
#define RAM_START 0x00020000
#define RAM_LENGTH 0x600000
#define RAM_END 0x00800000
#endif #endif
#ifdef CONFIG_HIMEMKERNEL #ifdef CONFIG_HIMEMKERNEL
#include "platform/68EZ328/ucsimm/himem.ld" #define ROMVEC_START 0x00600000
#define ROMVEC_LENGTH 0x400
#define ROM_START 0x00600400
#define ROM_LENGTH 0x1efc00
#define ROM_END 0x007f0000
#define RAMVEC_START 0x00000000
#define RAMVEC_LENGTH 0x400
#define RAM_START 0x00020000
#define RAM_LENGTH 0x5e0000
#define RAM_END 0x00600000
#endif #endif
#endif #endif
#ifdef CONFIG_UCDIMM
#ifdef CONFIG_RAMKERNEL
#include "platform/68VZ328/ucdimm/ram.ld"
#endif
#ifdef CONFIG_ROMKERNEL
#include "platform/68VZ328/ucdimm/rom.ld"
#endif
#ifdef CONFIG_HIMEMKERNEL
#include "platform/68VZ328/ucdimm/himem.ld"
#endif
#endif
#ifdef CONFIG_DRAGEN2 #ifdef CONFIG_DRAGEN2
#ifdef CONFIG_RAMKERNEL #ifdef CONFIG_RAMKERNEL
#include "platform/68VZ328/de2/ram.ld" #define ROMVEC_START 0x04030000
#define ROMVEC_LENGTH 0x400
#define ROM_START 0x04030400
#define ROM_LENGTH 0x1cec00
#define ROM_END 0x04200000
#define RAMVEC_START 0x00000000
#define RAMVEC_LENGTH 0x400
#define RAM_START 0x00010400
#define RAM_LENGTH 0x1ff0000
#define RAM_END 0x02000000
#endif #endif
#ifdef CONFIG_ROMKERNEL #ifdef CONFIG_ROMKERNEL
#include "platform/68VZ328/de2/rom.ld" #define ROMVEC_START 0x04030000
#define ROMVEC_LENGTH 0x400
#define ROM_START 0x04030400
#define ROM_LENGTH 0x1cec00
#define ROM_END 0x04200000
#define RAMVEC_START 0x00000000
#define RAMVEC_LENGTH 0x400
#define RAM_START 0x00010000
#define RAM_LENGTH 0x1ff0000
#define RAM_END 0x02000000
#endif #endif
#ifdef CONFIG_HIMEMKERNEL #ifdef CONFIG_HIMEMKERNEL
#include "platform/68VZ328/de2/himem.ld" #define ROMVEC_START 0x01e00000
#define ROMVEC_LENGTH 0x400
#define ROM_START 0x01e00400
#define ROM_LENGTH 0x1ffc00
#define ROM_END 0x02000000
#define RAMVEC_START 0x00000000
#define RAMVEC_LENGTH 0x400
#define RAM_START 0x00010000
#define RAM_LENGTH 0x1df0000
#define RAM_END 0x01e00000
#endif #endif
#endif #endif
#ifdef CONFIG_UCQUICC #ifdef CONFIG_UCQUICC
#ifdef CONFIG_RAMKERNEL #define ROMVEC_START 0x00000000
#include "platform/68360/uCquicc/ram.ld" #define ROMVEC_LENGTH 0x404
#endif #define ROM_START 0x00000404
#ifdef CONFIG_ROMKERNEL #define ROM_LENGTH 0x1ff6fc
#include "platform/68360/uCquicc/rom.ld" #define ROM_END 0x00200000
#endif #define RAMVEC_START 0x00200000
#define RAMVEC_LENGTH 0x404
#define RAM_START 0x00200404
#define RAM_LENGTH 0x1ff6fc
#define RAM_END 0x00400000
#endif #endif
#ifdef CONFIG_ARN5206 /*
#include "platform/5206/ARNEWSH/ram.ld" * The standard Arnewsh 5206 board only has 1MiB of ram. Not normally
* enough to be usefull. Assume the user has fitted something larger,
* at least 4MiB in size. No point in not letting the kernel completely
* link, it will be obvious if it is too big when they go to load it.
*/
#if defined(CONFIG_ARN5206)
#define RAM_START 0x10000
#define RAM_LENGTH 0x3f0000
#endif #endif
#ifdef CONFIG_M5206eC3 /*
#include "platform/5206e/MOTOROLA/ram.ld" * The Motorola 5206eLITE board only has 1MiB of static RAM.
#endif */
#ifdef CONFIG_ELITE #if defined(CONFIG_ELITE)
#include "platform/5206e/eLITE/ram.ld" #define RAM_START 0x30020000
#define RAM_END 0xe0000
#endif #endif
#ifdef CONFIG_M5249C3 /*
#include "platform/5249/MOTOROLA/ram.ld" * All the Motorola eval boards have the same basic arrangement.
* The end of RAM will vary depending on how much ram is fitted,
* but this isn't important here, we assume at least 4MiB.
*/
#if defined(CONFIG_M5206eC3) || defined(CONFIG_M5249C3) || \
defined(CONFIG_M5272C3) || defined(CONFIG_M5306C3) || \
defined(CONFIG_ARN5307) || defined(CONFIG_M5407C3)
#define RAM_START 0x20000
#define RAM_LENGTH 0x3e0000
#endif #endif
#ifdef CONFIG_M5272C3 /*
#include "platform/5272/MOTOROLA/ram.ld" * These flash boot boards use all of ram for operation. Again the
* actual memory size is not important here, assume at least 4MiB.
* They currently have no support for running in flash.
*/
#if defined(CONFIG_NETtel) || defined(CONFIG_eLIA) || \
defined(CONFIG_DISKtel) || defined(CONFIG_SECUREEDGEMP3) || \
defined(CONFIG_CLEOPATRA)
#define RAM_START 0x400
#define RAM_LENGTH 0x3ffc00
#endif #endif
#ifdef CONFIG_ARN5307 #ifdef CONFIG_RAMKERNEL
#include "platform/5307/ARNEWSH/ram.ld" #define TEXT ram
#endif #define DATA ram
#ifdef CONFIG_M5307C3 #define INIT ram
#include "platform/5307/MOTOROLA/ram.ld" #define BSS ram
#endif
#ifdef CONFIG_eLIA
#include "platform/5307/eLIA/ram.ld"
#endif
#ifdef CONFIG_DISKtel
#include "platform/5307/DISKtel/ram.ld"
#endif #endif
#ifdef CONFIG_SECUREEDGEMP3 #ifdef CONFIG_ROMKERNEL
#include "platform/5307/MP3/ram.ld" #define TEXT rom
#define DATA ram
#define INIT ram
#define BSS ram
#endif #endif
#ifdef CONFIG_M5407 #ifndef DATA_ADDR
#include "platform/5407/MOTOROLA/ram.ld" #define DATA_ADDR
#endif #endif
#ifdef CONFIG_CLEOPATRA
#ifdef CONFIG_M5307 OUTPUT_ARCH(m68k)
#include "platform/5307/CLEOPATRA/ram.ld" ENTRY(_start)
MEMORY {
#ifdef RAMVEC_START
ramvec : ORIGIN = RAMVEC_START, LENGTH = RAMVEC_LENGTH
#endif #endif
#ifdef CONFIG_M5407 ram : ORIGIN = RAM_START, LENGTH = RAM_LENGTH
#include "platform/5407/CLEOPATRA/ram.ld" #ifdef RAM_END
eram : ORIGIN = RAM_END, LENGTH = 0
#endif #endif
#ifdef ROM_START
romvec : ORIGIN = ROMVEC_START, LENGTH = ROMVEC_LENGTH
rom : ORIGIN = ROM_START, LENGTH = ROM_LENGTH
erom : ORIGIN = ROM_END, LENGTH = 0
#endif #endif
}
#ifdef CONFIG_NETtel jiffies = jiffies_64 + 4;
#ifdef CONFIG_M5206e
#include "platform/5206e/NETtel/ram.ld" SECTIONS {
#endif
#ifdef CONFIG_M5272 #ifdef ROMVEC_START
#include "platform/5272/NETtel/ram.ld" . = ROMVEC_START ;
#endif .romvec : {
#ifdef CONFIG_M5307 __rom_start = . ;
#include "platform/5307/NETtel/ram.ld" _romvec = .;
*(.data.initvect)
} > romvec
#endif #endif
.text : {
_stext = . ;
*(.text)
*(.text.lock)
*(.rodata)
*(.rodata.*)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
*(__ex_table)
__stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
. = ALIGN(4) ;
_etext = . ;
} > TEXT
#ifdef ROM_END
. = ROM_END ;
.erom : {
__rom_end = . ;
} > erom
#endif
#ifdef RAMVEC_START
. = RAMVEC_START ;
.ramvec : {
__ramvec = .;
} > ramvec
#endif #endif
.data DATA_ADDR : {
. = ALIGN(4);
_sdata = . ;
*(.data)
. = ALIGN(8192) ;
*(.data.init_task)
_edata = . ;
} > DATA
.init : {
. = ALIGN(4096);
__init_begin = .;
*(.init.text)
*(.init.data)
. = ALIGN(16);
__setup_start = .;
*(.init.setup)
__setup_end = .;
__start___param = .;
*(__param)
__stop___param = .;
__initcall_start = .;
*(.initcall1.init)
*(.initcall2.init)
*(.initcall3.init)
*(.initcall4.init)
*(.initcall5.init)
*(.initcall6.init)
*(.initcall7.init)
__initcall_end = .;
. = ALIGN(4);
__initramfs_start = .;
*(.init.ramfs)
__initramfs_end = .;
. = ALIGN(4);
__init_end = .;
} > INIT
/DISCARD/ : {
*(.exit.text)
*(.exit.data)
*(.exitcall.exit)
}
.bss : {
. = ALIGN(4);
_sbss = . ;
*(.bss)
*(COMMON)
. = ALIGN(4) ;
_ebss = . ;
} > BSS
#ifdef RAM_END
. = RAM_END ;
.eram : {
__ramend = . ;
_ramend = . ;
} > eram
#endif
}
...@@ -755,8 +755,6 @@ static struct ioctl32_list ioctl32_handler_table[] = { ...@@ -755,8 +755,6 @@ static struct ioctl32_list ioctl32_handler_table[] = {
IOCTL32_HANDLER(BLKSECTGET, w_long), IOCTL32_HANDLER(BLKSECTGET, w_long),
IOCTL32_DEFAULT(BLKSSZGET), IOCTL32_DEFAULT(BLKSSZGET),
IOCTL32_HANDLER(BLKPG, blkpg_ioctl_trans), IOCTL32_HANDLER(BLKPG, blkpg_ioctl_trans),
IOCTL32_DEFAULT(BLKELVGET),
IOCTL32_DEFAULT(BLKELVSET),
IOCTL32_DEFAULT(BLKBSZGET), IOCTL32_DEFAULT(BLKBSZGET),
IOCTL32_DEFAULT(BLKBSZSET), IOCTL32_DEFAULT(BLKBSZSET),
......
...@@ -107,6 +107,11 @@ config PARISC64 ...@@ -107,6 +107,11 @@ config PARISC64
enable this option otherwise. The 64bit kernel is significantly bigger enable this option otherwise. The 64bit kernel is significantly bigger
and slower than the 32bit one. and slower than the 32bit one.
config COMPAT
bool
depends on PARISC64
default y
config PDC_NARROW config PDC_NARROW
bool "32-bit firmware" bool "32-bit firmware"
depends on PARISC64 depends on PARISC64
...@@ -337,6 +342,8 @@ source "drivers/usb/Kconfig" ...@@ -337,6 +342,8 @@ source "drivers/usb/Kconfig"
source "net/bluetooth/Kconfig" source "net/bluetooth/Kconfig"
source "arch/parisc/oprofile/Kconfig"
menu "Kernel hacking" menu "Kernel hacking"
config DEBUG_KERNEL config DEBUG_KERNEL
......
...@@ -21,11 +21,9 @@ ifdef CONFIG_PARISC64 ...@@ -21,11 +21,9 @@ ifdef CONFIG_PARISC64
CROSS_COMPILE := hppa64-linux- CROSS_COMPILE := hppa64-linux-
UTS_MACHINE := parisc64 UTS_MACHINE := parisc64
LDFLAGS_BLOB := --format binary --oformat elf64-hppa-linux LDFLAGS_BLOB := --format binary --oformat elf64-hppa-linux
else else
MACHINE := $(subst 64,,$(shell uname -m)) MACHINE := $(subst 64,,$(shell uname -m))
ifneq (${MACHINE},parisc) ifneq ($(MACHINE),parisc)
# cross compilation
CROSS_COMPILE := hppa-linux- CROSS_COMPILE := hppa-linux-
endif endif
LDFLAGS_BLOB := --format binary --oformat elf32-hppa-linux LDFLAGS_BLOB := --format binary --oformat elf32-hppa-linux
...@@ -35,52 +33,36 @@ FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align ...@@ -35,52 +33,36 @@ FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align
OBJCOPY_FLAGS =-O binary -R .note -R .comment -S OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
CFLAGS_PIPE := -pipe cflags-y := -D__linux__ -pipe -fno-strength-reduce
CFLAGS_NSR := -fno-strength-reduce
CFLAGS := $(CFLAGS) -D__linux__ $(CFLAGS_PIPE) $(CFLAGS_NSR)
# These should be on for older toolchains or SOM toolchains that don't # These should be on for older toolchains or SOM toolchains that don't
# enable them by default. # enable them by default.
CFLAGS += -mno-space-regs -mfast-indirect-calls cflags-y += -mno-space-regs -mfast-indirect-calls
# No fixed-point multiply # No fixed-point multiply
CFLAGS += -mdisable-fpregs cflags-y += -mdisable-fpregs
# Without this, "ld -r" results in .text sections that are too big # Without this, "ld -r" results in .text sections that are too big
# (> 0x40000) for branches to reach stubs. # (> 0x40000) for branches to reach stubs.
CFLAGS += -ffunction-sections cflags-y += -ffunction-sections
# select which processor to optimise for # select which processor to optimise for
ifdef CONFIG_PA7100 cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100
CFLAGS += -march=1.1 -mschedule=7100 cflags-$(CONFIG_PA7200) += -march=1.1 -mschedule=7200
endif cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC
cflags-$(CONFIG_PA8X00) += -march=2.0 -mschedule=8000
ifdef CONFIG_PA7200
CFLAGS += -march=1.1 -mschedule=7200
endif
ifdef CONFIG_PA7100LC head-y := arch/parisc/kernel/head.o
CFLAGS += -march=1.1 -mschedule=7100LC head-$(CONFIG_PARISC64) := arch/parisc/kernel/head64.o
endif
ifdef CONFIG_PA8X00 CFLAGS += $(cflags-y)
CFLAGS += -march=2.0 -mschedule=8000 HEAD := $(head-y)
endif
HEAD := arch/parisc/kernel/head.o core-y += $(addprefix arch/parisc/, kernel/pdc_cons.o kernel/process.o \
ifdef CONFIG_PARISC64 mm/ kernel/ hpux/ math-emu/ kernel/init_task.o )
HEAD := arch/parisc/kernel/head64.o libs-y += arch/parisc/lib/ `$(CC) -print-libgcc-file-name`
endif
core-y += arch/parisc/kernel/pdc_cons.o \ drivers-$(CONFIG_OPROFILE) += arch/parisc/oprofile/
arch/parisc/kernel/process.o \
arch/parisc/mm/ \
arch/parisc/kernel/ \
arch/parisc/hpux/ \
arch/parisc/math-emu/ \
arch/parisc/kernel/init_task.o
libs-y += arch/parisc/lib/ \
`$(CC) -print-libgcc-file-name`
palo: vmlinux palo: vmlinux
@if [ $$(palo -f /dev/null >/dev/null 2>&1 ; echo $$?) != 2 ]; then \ @if [ $$(palo -f /dev/null >/dev/null 2>&1 ; echo $$?) != 2 ]; then \
...@@ -101,33 +83,26 @@ oldpalo: vmlinux ...@@ -101,33 +83,26 @@ oldpalo: vmlinux
export TOPDIR=`pwd`; \ export TOPDIR=`pwd`; \
unset STRIP LDFLAGS CPP CPPFLAGS AFLAGS CFLAGS CC LD; cd ../palo && make lifimage unset STRIP LDFLAGS CPP CPPFLAGS AFLAGS CFLAGS CC LD; cd ../palo && make lifimage
Image: palo # Shorthands for known targets not supported by parisc, use palo as default
Image zImage bzImage: palo
Image-clean:
ramdisk.o:
zImage: palo
bzImage: palo
compressed: zImage prepare: include/asm-parisc/offsets.h
install: arch/parisc/kernel/asm-offsets.s: include/asm include/linux/version.h \
archmrproper:
archclean:
prepare: include/asm-$(ARCH)/offsets.h
arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \
include/config/MARKER include/config/MARKER
include/asm-$(ARCH)/offsets.h.tmp: arch/$(ARCH)/kernel/asm-offsets.s include/asm-parisc/offsets.h: arch/parisc/kernel/asm-offsets.s
@$(generate-asm-offsets.h) < $< > $@
include/asm-$(ARCH)/offsets.h: include/asm-$(ARCH)/offsets.h.tmp
@echo -n ' Generating $@' @echo -n ' Generating $@'
@$(generate-asm-offsets.h) < $< > $@.tmp
@$(update-if-changed) @$(update-if-changed)
archclean:
archmrproper:
CLEAN_FILES += palo.conf lifimage include/asm-parisc/offsets.h \
include/asm-parisc/offsets.h.tmp
define archhelp
@echo '* vmlinux - Uncompressed kernel image (./vmlinux)'
@echo ' palo - Bootable image (./lifimage)'
endef
This diff is collapsed.
...@@ -131,9 +131,9 @@ static int cp_hpux_stat(struct kstat *stat, struct hpux_stat64 *statbuf) ...@@ -131,9 +131,9 @@ static int cp_hpux_stat(struct kstat *stat, struct hpux_stat64 *statbuf)
tmp.st_gid = stat->gid; tmp.st_gid = stat->gid;
tmp.st_rdev = stat->rdev; tmp.st_rdev = stat->rdev;
tmp.st_size = stat->size; tmp.st_size = stat->size;
tmp.st_atime = stat->atime; tmp.st_atime = stat->atime.tv_sec;
tmp.st_mtime = stat->mtime; tmp.st_mtime = stat->mtime.tv_sec;
tmp.st_ctime = stat->ctime; tmp.st_ctime = stat->ctime.tv_sec;
tmp.st_blocks = stat->blocks; tmp.st_blocks = stat->blocks;
tmp.st_blksize = stat->blksize; tmp.st_blksize = stat->blksize;
return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
......
...@@ -2,11 +2,9 @@ ...@@ -2,11 +2,9 @@
# Makefile for arch/parisc/kernel # Makefile for arch/parisc/kernel
# #
ifdef CONFIG_PARISC64 head-y := head.o
EXTRA_TARGETS := init_task.o pdc_cons.o process.o head64.o unaligned.o perf.o perf_asm.o head-$(CONFIG_PARISC64) := head64.o
else EXTRA_TARGETS := init_task.o pdc_cons.o process.o unaligned.o $(head-y)
EXTRA_TARGETS := init_task.o pdc_cons.o process.o head.o unaligned.o
endif
AFLAGS_entry.o := -traditional AFLAGS_entry.o := -traditional
AFLAGS_pacache.o := -traditional AFLAGS_pacache.o := -traditional
...@@ -20,9 +18,10 @@ obj-y := cache.o pacache.o setup.o traps.o time.o irq.o \ ...@@ -20,9 +18,10 @@ obj-y := cache.o pacache.o setup.o traps.o time.o irq.o \
processor.o pdc_chassis.o processor.o pdc_chassis.o
obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_PROFILING) += profile.o
obj-$(CONFIG_PA11) += pci-dma.o obj-$(CONFIG_PA11) += pci-dma.o
obj-$(CONFIG_PCI) += pci.o obj-$(CONFIG_PCI) += pci.o
obj-$(CONFIG_PARISC64) += binfmt_elf32.o sys_parisc32.o \ obj-$(CONFIG_MODULES) += module.o
ioctl32.o signal32.o obj-$(CONFIG_PARISC64) += binfmt_elf32.o sys_parisc32.o ioctl32.o signal32.o
# only supported for PCX-W/U in 64-bit mode at the moment # only supported for PCX-W/U in 64-bit mode at the moment
obj-$(CONFIG_PARISC64) += perf.o perf_asm.o obj-$(CONFIG_PARISC64) += perf.o perf_asm.o
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
int main(void) int main(void)
{ {
DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, thread_info));
DEFINE(TASK_STATE, offsetof(struct task_struct, state)); DEFINE(TASK_STATE, offsetof(struct task_struct, state));
DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags));
DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending)); DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending));
...@@ -213,6 +214,7 @@ int main(void) ...@@ -213,6 +214,7 @@ int main(void)
DEFINE(PT_SIZE, sizeof(struct pt_regs)); DEFINE(PT_SIZE, sizeof(struct pt_regs));
DEFINE(PT_SZ_ALGN, align(sizeof(struct pt_regs), 64)); DEFINE(PT_SZ_ALGN, align(sizeof(struct pt_regs), 64));
BLANK(); BLANK();
DEFINE(TI_TASK, offsetof(struct thread_info, task));
DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain));
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
......
...@@ -19,7 +19,7 @@ typedef unsigned int elf_greg_t; ...@@ -19,7 +19,7 @@ typedef unsigned int elf_greg_t;
#include <linux/module.h> #include <linux/module.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/elfcore.h> #include <linux/elfcore.h>
#include "sys32.h" /* struct timeval32 */ #include <linux/compat.h>
#define elf_prstatus elf_prstatus32 #define elf_prstatus elf_prstatus32
struct elf_prstatus32 struct elf_prstatus32
...@@ -32,10 +32,10 @@ struct elf_prstatus32 ...@@ -32,10 +32,10 @@ struct elf_prstatus32
pid_t pr_ppid; pid_t pr_ppid;
pid_t pr_pgrp; pid_t pr_pgrp;
pid_t pr_sid; pid_t pr_sid;
struct timeval32 pr_utime; /* User time */ struct compat_timeval pr_utime; /* User time */
struct timeval32 pr_stime; /* System time */ struct compat_timeval pr_stime; /* System time */
struct timeval32 pr_cutime; /* Cumulative user time */ struct compat_timeval pr_cutime; /* Cumulative user time */
struct timeval32 pr_cstime; /* Cumulative system time */ struct compat_timeval pr_cstime; /* Cumulative system time */
elf_gregset_t pr_reg; /* GP registers */ elf_gregset_t pr_reg; /* GP registers */
int pr_fpvalid; /* True if math co-processor being used. */ int pr_fpvalid; /* True if math co-processor being used. */
}; };
...@@ -89,4 +89,12 @@ struct elf_prpsinfo32 ...@@ -89,4 +89,12 @@ struct elf_prpsinfo32
#define SET_PERSONALITY(ex, ibcs2) \ #define SET_PERSONALITY(ex, ibcs2) \
current->personality = PER_LINUX_32BIT current->personality = PER_LINUX_32BIT
#define jiffies_to_timeval jiffies_to_compat_timeval
static __inline__ void
jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
{
value->tv_usec = (jiffies % HZ) * (1000000L / HZ);
value->tv_sec = jiffies / HZ;
}
#include "../../../fs/binfmt_elf.c" #include "../../../fs/binfmt_elf.c"
This diff is collapsed.
This diff is collapsed.
...@@ -48,7 +48,6 @@ boot_args: ...@@ -48,7 +48,6 @@ boot_args:
.import $global$ /* forward declaration */ .import $global$ /* forward declaration */
.import fault_vector_11,code /* IVA parisc 1.1 32 bit */ .import fault_vector_11,code /* IVA parisc 1.1 32 bit */
.import fault_vector_20,code /* IVA parisc 2.0 32 bit */ .import fault_vector_20,code /* IVA parisc 2.0 32 bit */
.import start_parisc,code /* then enable VM and go here */
.export stext .export stext
.export _stext,data /* Kernel want it this way! */ .export _stext,data /* Kernel want it this way! */
...@@ -74,7 +73,7 @@ stext: ...@@ -74,7 +73,7 @@ stext:
ldo R%PA(_end)(%r4),%r4 ldo R%PA(_end)(%r4),%r4
$bss_loop: $bss_loop:
cmpb,<<,n %r3,%r4,$bss_loop cmpb,<<,n %r3,%r4,$bss_loop
stb,ma %r0,1(%r3) stw,ma %r0,4(%r3)
/* Save away the arguments the boot loader passed in (32 bit args) */ /* Save away the arguments the boot loader passed in (32 bit args) */
...@@ -277,8 +276,8 @@ smp_slave_stext: ...@@ -277,8 +276,8 @@ smp_slave_stext:
ldo R%PA(smp_init_current_idle_task)(%sp),%sp ldo R%PA(smp_init_current_idle_task)(%sp),%sp
ldw 0(%sp),%sp /* load task address */ ldw 0(%sp),%sp /* load task address */
mtctl %sp,%cr30 /* store in cr30 */ mtctl %sp,%cr30 /* store in cr30 */
addil L%TASK_SZ_ALGN,%sp /* stack is above task */ addil L%THREAD_SZ_ALGN,%sp /* stack is above task */
ldo R%TASK_SZ_ALGN(%r1),%sp ldo R%THREAD_SZ_ALGN(%r1),%sp
/* point CPU to kernel page tables */ /* point CPU to kernel page tables */
ldil L%PA(swapper_pg_dir),%r4 ldil L%PA(swapper_pg_dir),%r4
......
...@@ -176,7 +176,9 @@ common_stext: ...@@ -176,7 +176,9 @@ common_stext:
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
/* Save the rfi target address */ /* Save the rfi target address */
std %r11, TASK_PT_GR11-TASK_SZ_ALGN(%sp) ldo -THREAD_SZ_ALGN(%sp), %r1
ldd TI_TASK(%r1), %r1
std %r11, TASK_PT_GR11(%r1)
#ifndef CONFIG_PDC_NARROW #ifndef CONFIG_PDC_NARROW
/* Switch to wide mode; Superdome doesn't support narrow PDC /* Switch to wide mode; Superdome doesn't support narrow PDC
...@@ -206,7 +208,9 @@ common_stext: ...@@ -206,7 +208,9 @@ common_stext:
stext_pdc_ret: stext_pdc_ret:
/* restore rfi target address*/ /* restore rfi target address*/
ldd TASK_PT_GR11-TASK_SZ_ALGN(%sp), %r11 ldo -THREAD_SZ_ALGN(%sp), %r1
ldd TI_TASK(%r1), %r1
ldd TASK_PT_GR11(%r1), %r11
/* PARANOID: clear user scratch/user space SR's */ /* PARANOID: clear user scratch/user space SR's */
mtsp %r0,%sr0 mtsp %r0,%sr0
...@@ -310,7 +314,7 @@ smp_slave_stext: ...@@ -310,7 +314,7 @@ smp_slave_stext:
load32 PA(smp_init_current_idle_task),%sp load32 PA(smp_init_current_idle_task),%sp
ldd 0(%sp),%sp /* load task address */ ldd 0(%sp),%sp /* load task address */
mtctl %sp,%cr30 /* store in cr30 */ mtctl %sp,%cr30 /* store in cr30 */
ldo TASK_SZ_ALGN(%sp),%sp ldo THREAD_SZ_ALGN(%sp),%sp
tophys_r1 %sp tophys_r1 %sp
/* point CPU to kernel page tables */ /* point CPU to kernel page tables */
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <asm/pdc.h> #include <asm/pdc.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/parisc-device.h>
/* /*
** Debug options ** Debug options
...@@ -529,7 +530,8 @@ static void __init system_map_inventory(void) ...@@ -529,7 +530,8 @@ static void __init system_map_inventory(void)
* first stop the usb controller, otherwise the machine * first stop the usb controller, otherwise the machine
* might crash during iommu setup * might crash during iommu setup
*/ */
pdc_suspend_usb(); #warning We still probably need to worry about USB here, but how?
/* pdc_suspend_usb(); */
for (i = 0; status != PDC_BAD_PROC && status != PDC_NE_MOD; i++) { for (i = 0; status != PDC_BAD_PROC && status != PDC_NE_MOD; i++) {
struct parisc_device *dev; struct parisc_device *dev;
...@@ -587,6 +589,8 @@ void __init do_memory_inventory(void) ...@@ -587,6 +589,8 @@ void __init do_memory_inventory(void)
void __init do_device_inventory(void) void __init do_device_inventory(void)
{ {
extern void parisc_generic_device_register(void);
printk(KERN_INFO "Searching for devices...\n"); printk(KERN_INFO "Searching for devices...\n");
switch (pdc_type) { switch (pdc_type) {
...@@ -606,7 +610,7 @@ void __init do_device_inventory(void) ...@@ -606,7 +610,7 @@ void __init do_device_inventory(void)
default: default:
panic("Unknown PDC type!\n"); panic("Unknown PDC type!\n");
} }
parisc_generic_device_register();
printk(KERN_INFO "Found devices:\n"); printk(KERN_INFO "Found devices:\n");
print_parisc_devices(); print_parisc_devices();
} }
This diff is collapsed.
This diff is collapsed.
...@@ -86,9 +86,9 @@ EXPORT_SYMBOL(pdc_iodc_read); ...@@ -86,9 +86,9 @@ EXPORT_SYMBOL(pdc_iodc_read);
#include <asm/io.h> #include <asm/io.h>
EXPORT_SYMBOL(__ioremap); EXPORT_SYMBOL(__ioremap);
EXPORT_SYMBOL(iounmap); EXPORT_SYMBOL(iounmap);
EXPORT_SYMBOL(memcpy_toio); EXPORT_SYMBOL(__memcpy_toio);
EXPORT_SYMBOL(memcpy_fromio); EXPORT_SYMBOL(__memcpy_fromio);
EXPORT_SYMBOL(memset_io); EXPORT_SYMBOL(__memset_io);
#if defined(CONFIG_PCI) || defined(CONFIG_ISA) #if defined(CONFIG_PCI) || defined(CONFIG_ISA)
EXPORT_SYMBOL(inb); EXPORT_SYMBOL(inb);
...@@ -141,7 +141,6 @@ extern void $$divU(void); ...@@ -141,7 +141,6 @@ extern void $$divU(void);
extern void $$remI(void); extern void $$remI(void);
extern void $$remU(void); extern void $$remU(void);
extern void $$mulI(void); extern void $$mulI(void);
extern void $$mulU(void);
extern void $$divU_3(void); extern void $$divU_3(void);
extern void $$divU_5(void); extern void $$divU_5(void);
extern void $$divU_6(void); extern void $$divU_6(void);
...@@ -166,9 +165,6 @@ EXPORT_SYMBOL_NOVERS($$divU); ...@@ -166,9 +165,6 @@ EXPORT_SYMBOL_NOVERS($$divU);
EXPORT_SYMBOL_NOVERS($$remI); EXPORT_SYMBOL_NOVERS($$remI);
EXPORT_SYMBOL_NOVERS($$remU); EXPORT_SYMBOL_NOVERS($$remU);
EXPORT_SYMBOL_NOVERS($$mulI); EXPORT_SYMBOL_NOVERS($$mulI);
#ifndef __LP64__
EXPORT_SYMBOL_NOVERS($$mulU);
#endif
EXPORT_SYMBOL_NOVERS($$divU_3); EXPORT_SYMBOL_NOVERS($$divU_3);
EXPORT_SYMBOL_NOVERS($$divU_5); EXPORT_SYMBOL_NOVERS($$divU_5);
EXPORT_SYMBOL_NOVERS($$divU_6); EXPORT_SYMBOL_NOVERS($$divU_6);
...@@ -215,3 +211,10 @@ extern void $$dyncall(void); ...@@ -215,3 +211,10 @@ extern void $$dyncall(void);
EXPORT_SYMBOL_NOVERS($$dyncall); EXPORT_SYMBOL_NOVERS($$dyncall);
#endif #endif
#ifdef CONFIG_PROFILING
EXPORT_SYMBOL_GPL(register_profile_notifier);
EXPORT_SYMBOL_GPL(unregister_profile_notifier);
#endif
#include <asm/pgtable.h>
EXPORT_SYMBOL_NOVERS(vmalloc_start);
This diff is collapsed.
...@@ -238,7 +238,7 @@ pcibios_update_resource( ...@@ -238,7 +238,7 @@ pcibios_update_resource(
if (res->flags & IORESOURCE_IO) { if (res->flags & IORESOURCE_IO) {
barval = PCI_PORT_ADDR(res->start); barval = PCI_PORT_ADDR(res->start);
} else if (res->flags & IORESOURCE_MEM) { } else if (res->flags & IORESOURCE_MEM) {
barval = PCI_BUS_ADDR(HBA_DATA(dev->bus->sysdata), res->start); barval = PCI_BUS_ADDR(HBA_DATA(dev->bus->dev->platform_data), res->start);
} else { } else {
panic("pcibios_update_resource() WTF? flags not IO or MEM"); panic("pcibios_update_resource() WTF? flags not IO or MEM");
} }
...@@ -350,7 +350,7 @@ void __devinit pcibios_fixup_pbus_ranges( ...@@ -350,7 +350,7 @@ void __devinit pcibios_fixup_pbus_ranges(
struct pbus_set_ranges_data *ranges struct pbus_set_ranges_data *ranges
) )
{ {
struct pci_hba_data *hba = HBA_DATA(bus->sysdata); struct pci_hba_data *hba = HBA_DATA(bus->dev->platform_data);
/* /*
** I/O space may see busnumbers here. Something ** I/O space may see busnumbers here. Something
...@@ -487,24 +487,6 @@ pcibios_setup_host_bridge(struct pci_bus *bus) ...@@ -487,24 +487,6 @@ pcibios_setup_host_bridge(struct pci_bus *bus)
} }
/*
** Mostly copied from drivers/pci/setup-bus.c:pci_assign_unassigned_resources()
*/
void __devinit
pcibios_assign_unassigned_resources(struct pci_bus *bus)
{
/* from drivers/pci/setup-bus.c */
extern void pbus_assign_resources(struct pci_bus *bus, struct pbus_set_ranges_data *ranges);
struct pbus_set_ranges_data ranges;
ranges.io_end = ranges.io_start
= bus->resource[0]->start + PCIBIOS_MIN_IO;
ranges.mem_end = ranges.mem_start
= bus->resource[1]->start + PCIBIOS_MIN_MEM;
pbus_assign_resources(bus, &ranges);
}
/* /*
** PARISC specific (unfortunately) ** PARISC specific (unfortunately)
*/ */
......
...@@ -56,7 +56,7 @@ static int pdc_console_setup(struct console *co, char *options) ...@@ -56,7 +56,7 @@ static int pdc_console_setup(struct console *co, char *options)
#define PDC_CONSOLE_DEVICE pdc_console_device #define PDC_CONSOLE_DEVICE pdc_console_device
static kdev_t pdc_console_device (struct console *c) static kdev_t pdc_console_device (struct console *c)
{ {
return mk_kdev(PDCCONS_MAJOR, 0); return mk_kdev(MUX_MAJOR, 0);
} }
#else #else
#define PDC_CONSOLE_DEVICE NULL #define PDC_CONSOLE_DEVICE NULL
......
This diff is collapsed.
...@@ -217,7 +217,7 @@ sys_clone(unsigned long clone_flags, unsigned long usp, ...@@ -217,7 +217,7 @@ sys_clone(unsigned long clone_flags, unsigned long usp,
{ {
struct task_struct *p; struct task_struct *p;
int *user_tid = (int *)regs->gr[26]; int *user_tid = (int *)regs->gr[26];
p = do_fork(clone_flags & ~CLONE_IDLETASK, usp, regs, 0, user_tid); p = do_fork(clone_flags & ~CLONE_IDLETASK, usp, regs, 0, user_tid, NULL);
return IS_ERR(p) ? PTR_ERR(p) : p->pid; return IS_ERR(p) ? PTR_ERR(p) : p->pid;
} }
...@@ -225,7 +225,7 @@ int ...@@ -225,7 +225,7 @@ int
sys_vfork(struct pt_regs *regs) sys_vfork(struct pt_regs *regs)
{ {
struct task_struct *p; struct task_struct *p;
p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->gr[30], regs, 0, NULL); p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->gr[30], regs, 0, NULL, NULL);
return IS_ERR(p) ? PTR_ERR(p) : p->pid; return IS_ERR(p) ? PTR_ERR(p) : p->pid;
} }
...@@ -295,6 +295,11 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp, ...@@ -295,6 +295,11 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
return 0; return 0;
} }
unsigned long thread_saved_pc(struct task_struct *t)
{
return t->thread.regs.kpc;
}
/* /*
* sys_execve() executes a new program. * sys_execve() executes a new program.
*/ */
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/pdc.h> #include <asm/pdc.h>
#include <asm/irq.h> /* for struct irq_region */ #include <asm/irq.h> /* for struct irq_region */
#include <asm/parisc-device.h>
struct system_cpuinfo_parisc boot_cpu_data; struct system_cpuinfo_parisc boot_cpu_data;
struct cpuinfo_parisc cpu_data[NR_CPUS]; struct cpuinfo_parisc cpu_data[NR_CPUS];
......
This diff is collapsed.
...@@ -103,7 +103,7 @@ long sys_ptrace(long request, pid_t pid, long addr, long data) ...@@ -103,7 +103,7 @@ long sys_ptrace(long request, pid_t pid, long addr, long data)
if (current->ptrace & PT_PTRACED) if (current->ptrace & PT_PTRACED)
goto out; goto out;
ret = security_ops->ptrace(current->parent, current); ret = security_ptrace(current->parent, current);
if (ret) if (ret)
goto out; goto out;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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