Commit d3791f47 authored by Ralf Bächle's avatar Ralf Bächle Committed by Linus Torvalds

[PATCH] 2.7.73 SGI IP27 update

An update of the SGI IP27 aka Origin 200/2000/Onyx 2 support.
parent 80b11f5a
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Makefile for the IP27 specific kernel interface routines under Linux. # Makefile for the IP27 specific kernel interface routines under Linux.
# #
EXTRA_AFLAGS := $(CFLAGS)
obj-y := ip27-berr.o ip27-console.o ip27-irq.o ip27-init.o ip27-irq-glue.o \ obj-y := ip27-berr.o ip27-console.o ip27-irq.o ip27-init.o ip27-irq-glue.o \
ip27-klconfig.o ip27-klnuma.o ip27-memory.o ip27-nmi.o ip27-pci.o \ ip27-klconfig.o ip27-klnuma.o ip27-memory.o ip27-nmi.o ip27-reset.o \
ip27-pci-dma.o ip27-reset.o ip27-setup.o ip27-timer.o ip27-setup.o ip27-timer.o
EXTRA_AFLAGS := $(CFLAGS)
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* *
* Copyright (C) 1994, 1995, 1996, 1999, 2000 by Ralf Baechle * Copyright (C) 1994, 1995, 1996, 1999, 2000 by Ralf Baechle
* Copyright (C) 1999, 2000 by Silicon Graphics * Copyright (C) 1999, 2000 by Silicon Graphics
* Copyright (C) 2002 Maciej W. Rozycki
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -14,86 +15,13 @@ ...@@ -14,86 +15,13 @@
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
#include <asm/sn/arch.h> #include <asm/sn/arch.h>
#include <asm/sn/sn0/hub.h> #include <asm/sn/sn0/hub.h>
#include <asm/tlbdebug.h>
#include <asm/traps.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
extern void dump_tlb_addr(unsigned long addr); extern void dump_tlb_addr(unsigned long addr);
extern void dump_tlb_all(void); extern void dump_tlb_all(void);
extern asmlinkage void handle_ibe(void);
extern asmlinkage void handle_dbe(void);
extern const struct exception_table_entry __start___dbe_table[];
extern const struct exception_table_entry __stop___dbe_table[];
static inline unsigned long
search_one_table(const struct exception_table_entry *first,
const struct exception_table_entry *last,
unsigned long value)
{
while (first <= last) {
const struct exception_table_entry *mid;
long diff;
mid = (last - first) / 2 + first;
diff = mid->insn - value;
if (diff == 0)
return mid->nextinsn;
else if (diff < 0)
first = mid+1;
else
last = mid-1;
}
return 0;
}
extern spinlock_t modlist_lock;
static inline unsigned long
search_dbe_table(unsigned long addr)
{
unsigned long ret;
#ifndef CONFIG_MODULES
/* There is only the kernel to search. */
ret = search_one_table(__start___dbe_table, __stop___dbe_table-1, addr);
return ret;
#else
unsigned long flags;
/* The kernel is the last "module" -- no need to treat it special. */
struct module *mp;
struct archdata *ap;
spin_lock_irqsave(&modlist_lock, flags);
for (mp = module_list; mp != NULL; mp = mp->next) {
if (!mod_member_present(mp, archdata_end) ||
!mod_archdata_member_present(mp, struct archdata,
dbe_table_end))
continue;
ap = (struct archdata *)(mod->archdata_start);
if (ap->dbe_table_start == NULL ||
!(mp->flags & (MOD_RUNNING | MOD_INITIALIZING)))
continue;
ret = search_one_table(ap->dbe_table_start,
ap->dbe_table_end - 1, addr);
if (ret)
break;
}
spin_unlock_irqrestore(&modlist_lock, flags);
return ret;
#endif
}
void do_ibe(struct pt_regs *regs)
{
printk("Got ibe at 0x%lx\n", regs->cp0_epc);
show_regs(regs);
dump_tlb_addr(regs->cp0_epc);
force_sig(SIGBUS, current);
while(1);
}
static void dump_hub_information(unsigned long errst0, unsigned long errst1) static void dump_hub_information(unsigned long errst0, unsigned long errst1)
{ {
static char *err_type[2][8] = { static char *err_type[2][8] = {
...@@ -127,21 +55,17 @@ static void dump_hub_information(unsigned long errst0, unsigned long errst1) ...@@ -127,21 +55,17 @@ static void dump_hub_information(unsigned long errst0, unsigned long errst1)
? : "invalid"); ? : "invalid");
} }
void do_dbe(struct pt_regs *regs) int ip27_be_handler(struct pt_regs *regs, int is_fixup)
{ {
unsigned long fixup, errst0, errst1; unsigned long errst0, errst1;
int data = regs->cp0_cause & 4;
int cpu = LOCAL_HUB_L(PI_CPU_NUM); int cpu = LOCAL_HUB_L(PI_CPU_NUM);
fixup = search_dbe_table(regs->cp0_epc); if (is_fixup)
if (fixup) { return MIPS_BE_FIXUP;
long new_epc;
new_epc = fixup_exception(dpf_reg, fixup, regs->cp0_epc);
regs->cp0_epc = new_epc;
return;
}
printk("Slice %c got dbe at 0x%lx\n", 'A' + cpu, regs->cp0_epc); printk("Slice %c got %cbe at 0x%lx\n", 'A' + cpu, data ? 'd' : 'i',
regs->cp0_epc);
printk("Hub information:\n"); printk("Hub information:\n");
printk("ERR_INT_PEND = 0x%06lx\n", LOCAL_HUB_L(PI_ERR_INT_PEND)); printk("ERR_INT_PEND = 0x%06lx\n", LOCAL_HUB_L(PI_ERR_INT_PEND));
errst0 = LOCAL_HUB_L(cpu ? PI_ERR_STATUS0_B : PI_ERR_STATUS0_A); errst0 = LOCAL_HUB_L(cpu ? PI_ERR_STATUS0_B : PI_ERR_STATUS0_A);
...@@ -153,15 +77,13 @@ void do_dbe(struct pt_regs *regs) ...@@ -153,15 +77,13 @@ void do_dbe(struct pt_regs *regs)
force_sig(SIGBUS, current); force_sig(SIGBUS, current);
} }
void __init void __init ip27_be_init(void)
bus_error_init(void)
{ {
/* XXX Initialize all the Hub & Bridge error handling here. */ /* XXX Initialize all the Hub & Bridge error handling here. */
int cpu = LOCAL_HUB_L(PI_CPU_NUM); int cpu = LOCAL_HUB_L(PI_CPU_NUM);
int cpuoff = cpu << 8; int cpuoff = cpu << 8;
set_except_vector(6, handle_ibe); board_be_handler = ip27_be_handler;
set_except_vector(7, handle_dbe);
LOCAL_HUB_S(PI_ERR_INT_PEND, LOCAL_HUB_S(PI_ERR_INT_PEND,
cpu ? PI_ERR_CLEAR_ALL_B : PI_ERR_CLEAR_ALL_A); cpu ? PI_ERR_CLEAR_ALL_B : PI_ERR_CLEAR_ALL_A);
......
...@@ -3,25 +3,35 @@ ...@@ -3,25 +3,35 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (C) 2001 Ralf Baechle * Copyright (C) 2001, 2002 Ralf Baechle
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/kdev_t.h> #include <linux/kdev_t.h>
#include <linux/major.h> #include <linux/major.h>
#include <linux/serial.h>
#include <asm/page.h>
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
#include <asm/sn/sn0/hub.h> #include <asm/sn/sn0/hub.h>
#include <asm/sn/klconfig.h> #include <asm/sn/klconfig.h>
#include <asm/sn/ioc3.h> #include <asm/sn/ioc3.h>
#include <asm/sn/sn_private.h> #include <asm/sn/sn_private.h>
void prom_putchar(char c) #define IOC3_BAUD (22000000 / (3*16))
#define IOC3_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
static inline struct ioc3_uartregs *console_uart(void)
{ {
struct ioc3 *ioc3; struct ioc3 *ioc3;
struct ioc3_uartregs *uart;
ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(master_nasid)->memory_base; ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(get_nasid())->memory_base;
uart = &ioc3->sregs.uarta;
return &ioc3->sregs.uarta;
}
void prom_putchar(char c)
{
struct ioc3_uartregs *uart = console_uart();
while ((uart->iu_lsr & 0x20) == 0); while ((uart->iu_lsr & 0x20) == 0);
uart->iu_thr = c; uart->iu_thr = c;
...@@ -32,27 +42,24 @@ char __init prom_getchar(void) ...@@ -32,27 +42,24 @@ char __init prom_getchar(void)
return 0; return 0;
} }
static void static void inline ioc3_console_probe(void)
ip27prom_console_write(struct console *con, const char *s, unsigned n)
{ {
prom_printf("%s", s); struct serial_struct req;
}
static kdev_t /* Register to interrupt zero because we share the interrupt with
ip27prom_console_dev(struct console *c) the serial driver which we don't properly support yet. */
{ memset(&req, 0, sizeof(req));
return MKDEV(TTY_MAJOR, 64 + c->index); req.irq = 0;
} req.flags = IOC3_COM_FLAGS;
req.io_type = SERIAL_IO_MEM;
req.iomem_reg_shift = 0;
req.baud_base = IOC3_BAUD;
static struct console ip27_prom_console = { req.iomem_base = (unsigned char *) console_uart();
.name = "prom", register_serial(&req);
.write = ip27prom_console_write, }
.device = ip27prom_console_dev,
.flags = CON_PRINTBUFFER,
.index = -1,
};
__init void ip27_setup_console(void) __init void ip27_setup_console(void)
{ {
register_console(&ip27_prom_console); ioc3_console_probe();
} }
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mmzone.h> /* for numnodes */ #include <linux/mmzone.h> /* for numnodes */
#include <linux/mm.h> #include <linux/mm.h>
#include <asm/cpu.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/sn/types.h> #include <asm/sn/types.h>
...@@ -28,6 +29,7 @@ ...@@ -28,6 +29,7 @@
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/thread_info.h>
#include <asm/sn/launch.h> #include <asm/sn/launch.h>
#include <asm/sn/sn_private.h> #include <asm/sn/sn_private.h>
#include <asm/sn/sn0/ip27.h> #include <asm/sn/sn0/ip27.h>
...@@ -45,8 +47,8 @@ ...@@ -45,8 +47,8 @@
#define CNODEMASK_SETB(p, bit) ((p) |= 1ULL << (bit)) #define CNODEMASK_SETB(p, bit) ((p) |= 1ULL << (bit))
cpumask_t boot_cpumask; cpumask_t boot_cpumask;
hubreg_t region_mask = 0; hubreg_t region_mask;
static int fine_mode = 0; static int fine_mode;
int maxcpus; int maxcpus;
static spinlock_t hub_mask_lock = SPIN_LOCK_UNLOCKED; static spinlock_t hub_mask_lock = SPIN_LOCK_UNLOCKED;
static cnodemask_t hub_init_mask; static cnodemask_t hub_init_mask;
...@@ -176,17 +178,17 @@ cpuid_t cpu_node_probe(cpumask_t *boot_cpumask, int *numnodes) ...@@ -176,17 +178,17 @@ cpuid_t cpu_node_probe(cpumask_t *boot_cpumask, int *numnodes)
* cpus are not numbered. * cpus are not numbered.
*/ */
return(highest + 1); return highest + 1;
} }
int cpu_enabled(cpuid_t cpu) int cpu_enabled(cpuid_t cpu)
{ {
if (cpu == CPU_NONE) if (cpu == CPU_NONE)
return 0; return 0;
return (CPUMASK_TSTB(boot_cpumask, cpu) != 0); return CPUMASK_TSTB(boot_cpumask, cpu) != 0;
} }
void mlreset (void) void mlreset(void)
{ {
int i; int i;
void init_topology_matrix(void); void init_topology_matrix(void);
...@@ -332,8 +334,7 @@ void per_hub_init(cnodeid_t cnode) ...@@ -332,8 +334,7 @@ void per_hub_init(cnodeid_t cnode)
memcpy((void *)(KSEG0 + 0x100), (void *) KSEG0, 0x80); memcpy((void *)(KSEG0 + 0x100), (void *) KSEG0, 0x80);
memcpy((void *)(KSEG0 + 0x180), &except_vec3_generic, memcpy((void *)(KSEG0 + 0x180), &except_vec3_generic,
0x100); 0x100);
flush_cache_l1(); __flush_cache_all();
flush_cache_l2();
} }
#endif #endif
} }
...@@ -359,12 +360,11 @@ void per_cpu_init(void) ...@@ -359,12 +360,11 @@ void per_cpu_init(void)
int cpu = smp_processor_id(); int cpu = smp_processor_id();
cnodeid_t cnode = get_compact_nodeid(); cnodeid_t cnode = get_compact_nodeid();
current_cpu_data.asid_cache = ASID_FIRST_VERSION;
TLBMISS_HANDLER_SETUP(); TLBMISS_HANDLER_SETUP();
#if 0 #if 0
intr_init(); intr_init();
#endif #endif
set_cp0_status(ST0_IM, 0); clear_c0_status(ST0_IM);
per_hub_init(cnode); per_hub_init(cnode);
cpu_time_init(); cpu_time_init();
if (smp_processor_id()) /* master can't do this early, no kmalloc */ if (smp_processor_id()) /* master can't do this early, no kmalloc */
...@@ -374,13 +374,13 @@ void per_cpu_init(void) ...@@ -374,13 +374,13 @@ void per_cpu_init(void)
#if 0 #if 0
install_tlbintr(cpu); install_tlbintr(cpu);
#endif #endif
set_cp0_status(SRB_DEV0 | SRB_DEV1, SRB_DEV0 | SRB_DEV1); set_c0_status(SRB_DEV0 | SRB_DEV1);
if (is_slave) { if (is_slave) {
set_cp0_status(ST0_BEV, 0); clear_c0_status(ST0_BEV);
if (mips4_available) if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV)
set_cp0_status(ST0_XX, ST0_XX); set_c0_status(ST0_XX);
set_cp0_status(ST0_KX|ST0_SX|ST0_UX, ST0_KX|ST0_SX|ST0_UX); set_c0_status(ST0_KX|ST0_SX|ST0_UX);
sti(); local_irq_enable();
load_mmu(); load_mmu();
atomic_inc(&numstarted); atomic_inc(&numstarted);
} else { } else {
...@@ -420,100 +420,59 @@ static void alloc_cpupda(cpuid_t cpu, int cpunum) ...@@ -420,100 +420,59 @@ static void alloc_cpupda(cpuid_t cpu, int cpunum)
cpu_data[cpunum].p_cpuid = cpu; cpu_data[cpunum].p_cpuid = cpu;
} }
void __init smp_callin(void) static struct task_struct * __init fork_by_hand(void)
{ {
#if 0 struct pt_regs regs;
calibrate_delay(); /*
smp_store_cpu_info(cpuid); * don't care about the eip and regs settings since
#endif * we'll never reschedule the forked task.
} */
return copy_process(CLONE_VM|CLONE_IDLETASK, 0, &regs, 0, NULL, NULL);
int __init start_secondary(void)
{
extern int cpu_idle(void);
extern atomic_t smp_commenced;
smp_callin();
while (!atomic_read(&smp_commenced));
return cpu_idle();
}
static volatile cpumask_t boot_barrier;
void cboot(void)
{
CPUMASK_CLRB(boot_barrier, getcpuid()); /* needs atomicity */
per_cpu_init();
#if 0
ecc_init();
bte_lateinit();
init_mfhi_war();
#endif
_flush_tlb_all();
flush_cache_l1();
flush_cache_l2();
start_secondary();
} }
void allowboot(void) static int __init do_boot_cpu(int cpu, int num_cpus)
{ {
int num_cpus = 0; extern void smp_bootstrap(void);
cpuid_t cpu, mycpuid = getcpuid(); cpuid_t mycpuid = getcpuid();
cnodeid_t cnode; struct task_struct *idle;
extern void bootstrap(void);
sn_mp_setup();
/* Master has already done per_cpu_init() */
install_cpuintr(smp_processor_id());
#if 0
bte_lateinit();
ecc_init();
#endif
replicate_kernel_text(numnodes);
boot_barrier = boot_cpumask;
/* Launch slaves. */
for (cpu = 0; cpu < maxcpus; cpu++) {
if (cpu == mycpuid) { if (cpu == mycpuid) {
alloc_cpupda(cpu, num_cpus); alloc_cpupda(cpu, num_cpus);
num_cpus++; return 1;
/* We're already started, clear our bit */
CPUMASK_CLRB(boot_barrier, cpu);
continue;
} }
/* Skip holes in CPU space */ /* Skip holes in CPU space */
if (CPUMASK_TSTB(boot_cpumask, cpu)) { if (!CPUMASK_TSTB(boot_cpumask, cpu))
struct task_struct *p; return 0;
/* /*
* The following code is purely to make sure * The following code is purely to make sure
* Linux can schedule processes on this slave. * Linux can schedule processes on this slave.
*/ */
kernel_thread(0, NULL, CLONE_IDLETASK); idle = fork_by_hand();
p = prev_task(&init_task); if (IS_ERR(idle))
sprintf(p->comm, "%s%d", "Idle", num_cpus); panic("failed fork for CPU %d", cpu);
init_tasks[num_cpus] = p;
/*
* We remove it from the pidhash and the runqueue
* once we got the process:
*/
init_idle(idle, cpu);
alloc_cpupda(cpu, num_cpus); alloc_cpupda(cpu, num_cpus);
del_from_runqueue(p);
p->processor = num_cpus; unhash_process(idle);
p->cpus_runnable = 1 << num_cpus; /* we schedule the first task manually */
unhash_process(p);
/* Attach to the address space of init_task. */
atomic_inc(&init_mm.mm_count);
p->active_mm = &init_mm;
/* /*
* Launch a slave into bootstrap(). * Launch a slave into smp_bootstrap(). It doesn't take an
* It doesn't take an argument, and we * argument, and we set sp to the kernel stack of the newly
* set sp to the kernel stack of the newly * created idle process, gp to the proc struct so that
* created idle process, gp to the proc struct * current_thread_info() will work.
* (so that current-> works).
*/ */
LAUNCH_SLAVE(cputonasid(num_cpus),cputoslice(num_cpus), LAUNCH_SLAVE(cputonasid(num_cpus),cputoslice(num_cpus),
(launch_proc_t)MAPPED_KERN_RW_TO_K0(bootstrap), (launch_proc_t)MAPPED_KERN_RW_TO_K0(smp_bootstrap),
0, (void *)((unsigned long)p + 0, (void *)((unsigned long)idle->thread_info +
KERNEL_STACK_SIZE - 32), (void *)p); KERNEL_STACK_SIZE - 32), (void *)idle);
/* /*
* Now optimistically set the mapping arrays. We * Now optimistically set the mapping arrays. We
...@@ -522,7 +481,8 @@ void allowboot(void) ...@@ -522,7 +481,8 @@ void allowboot(void)
*/ */
__cpu_number_map[cpu] = num_cpus; __cpu_number_map[cpu] = num_cpus;
__cpu_logical_map[num_cpus] = cpu; __cpu_logical_map[num_cpus] = cpu;
num_cpus++; CPUMASK_SETB(cpu_online_map, cpu);
/* /*
* Wait this cpu to start up and initialize its hub, * Wait this cpu to start up and initialize its hub,
* and discover the io devices it will control. * and discover the io devices it will control.
...@@ -531,10 +491,34 @@ void allowboot(void) ...@@ -531,10 +491,34 @@ void allowboot(void)
* at once. We have to preserve the order of the * at once. We have to preserve the order of the
* devices on the bridges first though. * devices on the bridges first though.
*/ */
while(atomic_read(&numstarted) != num_cpus); while (atomic_read(&numstarted) != num_cpus);
}
} return 1;
}
void __init smp_boot_cpus(void)
{
int num_cpus = 0;
cpuid_t cpu;
cnodeid_t cnode;
init_new_context(current, &init_mm);
current_thread_info()->cpu = 0;
smp_tune_scheduling();
sn_mp_setup();
/* Master has already done per_cpu_init() */
install_cpuintr(smp_processor_id());
#if 0
bte_lateinit();
ecc_init();
#endif
replicate_kernel_text(numnodes);
/* Launch slaves. */
for (cpu = 0; cpu < maxcpus; cpu++) {
num_cpus += do_boot_cpu(cpu, num_cpus);
}
#ifdef LATER #ifdef LATER
Wait logic goes here. Wait logic goes here.
...@@ -551,18 +535,19 @@ void allowboot(void) ...@@ -551,18 +535,19 @@ void allowboot(void)
cpu_io_setup(); cpu_io_setup();
init_mfhi_war(); init_mfhi_war();
#endif #endif
smp_num_cpus = num_cpus;
} }
#else /* CONFIG_SMP */ #else /* CONFIG_SMP */
void cboot(void) {} void __init start_secondary(void)
{
/* XXX Why do we need this empty definition at all? */
}
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
#define rou_rflag rou_flags #define rou_rflag rou_flags
void void router_recurse(klrou_t *router_a, klrou_t *router_b, int depth)
router_recurse(klrou_t *router_a, klrou_t *router_b, int depth)
{ {
klrou_t *router; klrou_t *router;
lboard_t *brd; lboard_t *brd;
...@@ -598,8 +583,7 @@ router_recurse(klrou_t *router_a, klrou_t *router_b, int depth) ...@@ -598,8 +583,7 @@ router_recurse(klrou_t *router_a, klrou_t *router_b, int depth)
router_a->rou_rflag = 0; router_a->rou_rflag = 0;
} }
int int node_distance(nasid_t nasid_a, nasid_t nasid_b)
node_distance(nasid_t nasid_a, nasid_t nasid_b)
{ {
nasid_t nasid; nasid_t nasid;
cnodeid_t cnode; cnodeid_t cnode;
...@@ -666,8 +650,7 @@ node_distance(nasid_t nasid_a, nasid_t nasid_b) ...@@ -666,8 +650,7 @@ node_distance(nasid_t nasid_a, nasid_t nasid_b)
return router_distance; return router_distance;
} }
void void init_topology_matrix(void)
init_topology_matrix(void)
{ {
nasid_t nasid, nasid2; nasid_t nasid, nasid2;
cnodeid_t row, col; cnodeid_t row, col;
...@@ -685,8 +668,7 @@ init_topology_matrix(void) ...@@ -685,8 +668,7 @@ init_topology_matrix(void)
} }
} }
void void dump_topology(void)
dump_topology(void)
{ {
nasid_t nasid; nasid_t nasid;
cnodeid_t cnode; cnodeid_t cnode;
...@@ -837,4 +819,3 @@ dump_klcfg(void) ...@@ -837,4 +819,3 @@ dump_klcfg(void)
dump_topology(); dump_topology();
} }
#endif #endif
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/irq.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/sched.h> #include <linux/sched.h>
...@@ -19,25 +20,25 @@ ...@@ -19,25 +20,25 @@
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/kernel_stat.h> #include <linux/kernel_stat.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h>
#include <asm/bitops.h> #include <asm/bitops.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/mipsregs.h> #include <asm/mipsregs.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/irq.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/pci/bridge.h> #include <asm/pci/bridge.h>
#include <asm/sn/sn0/hub.h> #include <asm/sn/sn0/hub.h>
#include <asm/sn/sn0/ip27.h> #include <asm/sn/sn0/ip27.h>
#include <asm/sn/addrs.h>
#include <asm/sn/agent.h>
#include <asm/sn/arch.h> #include <asm/sn/arch.h>
#include <asm/sn/intr.h> #include <asm/sn/intr.h>
#include <asm/sn/intr_public.h> #include <asm/sn/intr_public.h>
#undef DEBUG_IRQ #undef DEBUG_IRQ
#ifdef DEBUG_IRQ #ifdef DEBUG_IRQ
#define DBG(x...) printk(x) #define DBG(x...) printk(x)
...@@ -67,12 +68,11 @@ unsigned char num_bridges; /* number of bridges in the system */ ...@@ -67,12 +68,11 @@ unsigned char num_bridges; /* number of bridges in the system */
*/ */
extern asmlinkage void ip27_irq(void); extern asmlinkage void ip27_irq(void);
extern int irq_to_bus[], irq_to_slot[], bus_to_cpu[]; extern int irq_to_bus[], irq_to_slot[], bus_to_cpu[];
int intr_connect_level(int cpu, int bit); int intr_connect_level(int cpu, int bit);
int intr_disconnect_level(int cpu, int bit); int intr_disconnect_level(int cpu, int bit);
unsigned long spurious_count = 0;
/* /*
* There is a single intpend register per node, and we want to have * There is a single intpend register per node, and we want to have
* distinct levels for intercpu intrs for both cpus A and B on a node. * distinct levels for intercpu intrs for both cpus A and B on a node.
...@@ -123,94 +123,20 @@ static inline int find_level(cpuid_t *cpunum, int irq) ...@@ -123,94 +123,20 @@ static inline int find_level(cpuid_t *cpunum, int irq)
return(-1); return(-1);
} }
void disable_irq(unsigned int irq_nr)
{
panic("disable_irq() called ...");
}
void enable_irq(unsigned int irq_nr)
{
panic("enable_irq() called ...");
}
/* This is stupid for an Origin which can have thousands of IRQs ... */
static struct irqaction *irq_action[NR_IRQS];
int show_interrupts(struct seq_file *p, void *v)
{
int i;
struct irqaction * action;
unsigned long flags;
for (i = 0 ; i < NR_IRQS ; i++) {
local_irq_save(flags);
action = irq_action[i];
if (!action)
goto skip;
seq_printf(p, "%2d: %8d %c %s", i, kstat_cpu(0).irqs[i],
(action->flags & SA_INTERRUPT) ? '+' : ' ',
action->name);
for (action=action->next; action; action = action->next) {
seq_printf(p, ",%s %s",
(action->flags & SA_INTERRUPT)
? " +" : "",
action->name);
}
seq_putc(p, '\n');
skip:
local_irq_restore(flags);
}
return 0;
}
/*
* do_IRQ handles all normal device IRQ's (the special SMP cross-CPU interrupts
* have their own specific handlers).
*/
static void do_IRQ(cpuid_t thiscpu, int irq, struct pt_regs * regs)
{
struct irqaction *action;
int do_random;
irq_enter(thiscpu, irq);
kstat_cpu(thiscpu).irqs[irq]++;
action = *(irq + irq_action);
if (action) {
if (!(action->flags & SA_INTERRUPT))
local_irq_enable();
do_random = 0;
do {
do_random |= action->flags;
action->handler(irq, action->dev_id, regs);
action = action->next;
} while (action);
if (do_random & SA_SAMPLE_RANDOM)
add_interrupt_randomness(irq);
local_irq_disable();
}
irq_exit(thiscpu, irq);
if (softirq_pending(thiscpu))
do_softirq();
}
/* /*
* Find first bit set * Find first bit set
*/ */
static int ms1bit(unsigned long x) static int ms1bit(unsigned long x)
{ {
int b; int b = 0, s;
if (x >> 32) b = 32, x >>= 32; s = 16; if (x >> 16 == 0) s = 0; b += s; x >>= s;
else b = 0; s = 8; if (x >> 8 == 0) s = 0; b += s; x >>= s;
if (x >> 16) b += 16, x >>= 16; s = 4; if (x >> 4 == 0) s = 0; b += s; x >>= s;
if (x >> 8) b += 8, x >>= 8; s = 2; if (x >> 2 == 0) s = 0; b += s; x >>= s;
if (x >> 4) b += 4, x >>= 4; s = 1; if (x >> 1 == 0) s = 0; b += s;
if (x >> 2) b += 2, x >>= 2;
return b + (int) (x >> 1); return b;
} }
/* /*
...@@ -244,7 +170,7 @@ void ip27_do_irq(struct pt_regs *regs) ...@@ -244,7 +170,7 @@ void ip27_do_irq(struct pt_regs *regs)
LOCAL_HUB_CLR_INTR(swlevel); LOCAL_HUB_CLR_INTR(swlevel);
/* "map" swlevel to irq */ /* "map" swlevel to irq */
irq = LEVEL_TO_IRQ(thiscpu, swlevel); irq = LEVEL_TO_IRQ(thiscpu, swlevel);
do_IRQ(thiscpu, irq, regs); do_IRQ(irq, regs);
/* clear bit in pend0 */ /* clear bit in pend0 */
pend0 ^= 1ULL << swlevel; pend0 ^= 1ULL << swlevel;
} while(pend0); } while(pend0);
...@@ -257,7 +183,7 @@ void ip27_do_irq(struct pt_regs *regs) ...@@ -257,7 +183,7 @@ void ip27_do_irq(struct pt_regs *regs)
/* Startup one of the (PCI ...) IRQs routes over a bridge. */ /* Startup one of the (PCI ...) IRQs routes over a bridge. */
static unsigned int bridge_startup(unsigned int irq) static unsigned int startup_bridge_irq(unsigned int irq)
{ {
bridgereg_t device; bridgereg_t device;
bridge_t *bridge; bridge_t *bridge;
...@@ -265,6 +191,9 @@ static unsigned int bridge_startup(unsigned int irq) ...@@ -265,6 +191,9 @@ static unsigned int bridge_startup(unsigned int irq)
cpuid_t cpu; cpuid_t cpu;
nasid_t master = NASID_FROM_PCI_IRQ(irq); nasid_t master = NASID_FROM_PCI_IRQ(irq);
if (irq < BASE_PCI_IRQ)
return 0;
bridge = (bridge_t *) NODE_SWIN_BASE(master, WID_FROM_PCI_IRQ(irq)); bridge = (bridge_t *) NODE_SWIN_BASE(master, WID_FROM_PCI_IRQ(irq));
pin = SLOT_FROM_PCI_IRQ(irq); pin = SLOT_FROM_PCI_IRQ(irq);
cpu = IRQ_TO_CPU(irq); cpu = IRQ_TO_CPU(irq);
...@@ -297,12 +226,15 @@ static unsigned int bridge_startup(unsigned int irq) ...@@ -297,12 +226,15 @@ static unsigned int bridge_startup(unsigned int irq)
} }
/* Shutdown one of the (PCI ...) IRQs routes over a bridge. */ /* Shutdown one of the (PCI ...) IRQs routes over a bridge. */
static unsigned int bridge_shutdown(unsigned int irq) static unsigned int shutdown_bridge_irq(unsigned int irq)
{ {
bridge_t *bridge; bridge_t *bridge;
int pin, swlevel; int pin, swlevel;
cpuid_t cpu; cpuid_t cpu;
if (irq < BASE_PCI_IRQ)
return 0;
bridge = (bridge_t *) NODE_SWIN_BASE(NASID_FROM_PCI_IRQ(irq), bridge = (bridge_t *) NODE_SWIN_BASE(NASID_FROM_PCI_IRQ(irq),
WID_FROM_PCI_IRQ(irq)); WID_FROM_PCI_IRQ(irq));
DBG("bridge_shutdown: irq 0x%x\n", irq); DBG("bridge_shutdown: irq 0x%x\n", irq);
...@@ -322,312 +254,64 @@ static unsigned int bridge_shutdown(unsigned int irq) ...@@ -322,312 +254,64 @@ static unsigned int bridge_shutdown(unsigned int irq)
return 0; /* Never anything pending. */ return 0; /* Never anything pending. */
} }
void irq_debug(void) static inline void enable_bridge_irq(unsigned int irq)
{ {
bridge_t *bridge = (bridge_t *) 0x9200000008000000; /* All the braindamage happens magically for us in ip27_do_irq */
printk("bridge->b_int_status = 0x%x\n", bridge->b_int_status);
printk("bridge->b_int_enable = 0x%x\n", bridge->b_int_enable);
printk("PI_INT_PEND0 = 0x%lx\n", LOCAL_HUB_L(PI_INT_PEND0));
printk("PI_INT_MASK0_A = 0x%lx\n", LOCAL_HUB_L(PI_INT_MASK0_A));
} }
int setup_irq(unsigned int irq, struct irqaction *new) static void disable_bridge_irq(unsigned int irq)
{ {
int shared = 0; /* All the braindamage happens magically for us in ip27_do_irq */
struct irqaction *old, **p;
unsigned long flags;
DBG("setup_irq: 0x%x\n", irq);
if (irq >= NR_IRQS) {
printk("IRQ array overflow %d\n", irq);
while(1);
}
if (new->flags & SA_SAMPLE_RANDOM)
rand_initialize_irq(irq);
save_and_cli(flags);
p = irq_action + irq;
if ((old = *p) != NULL) {
/* Can't share interrupts unless both agree to */
if (!(old->flags & new->flags & SA_SHIRQ)) {
restore_flags(flags);
return -EBUSY;
}
/* Add new interrupt at end of irq queue */
do {
p = &old->next;
old = *p;
} while (old);
shared = 1;
}
*p = new;
if ((!shared) && (irq >= BASE_PCI_IRQ)) {
bridge_startup(irq);
}
restore_flags(flags);
return 0;
} }
int request_irq(unsigned int irq, static void mask_and_ack_bridge_irq(unsigned int irq)
void (*handler)(int, void *, struct pt_regs *),
unsigned long irqflags, const char * devname, void *dev_id)
{ {
int retval; /* All the braindamage happens magically for us in ip27_do_irq */
struct irqaction *action;
DBG("request_irq(): irq= 0x%x\n", irq);
if (!handler)
return -EINVAL;
action = (struct irqaction *)kmalloc(sizeof(*action), GFP_KERNEL);
if (!action)
return -ENOMEM;
action->handler = handler;
action->flags = irqflags;
action->mask = 0;
action->name = devname;
action->next = NULL;
action->dev_id = dev_id;
DBG("request_irq(): %s devid= 0x%x\n", devname, dev_id);
retval = setup_irq(irq, action);
DBG("request_irq(): retval= %d\n", retval);
if (retval)
kfree(action);
return retval;
} }
void free_irq(unsigned int irq, void *dev_id) static void end_bridge_irq (unsigned int irq)
{ {
struct irqaction * action, **p; if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
unsigned long flags; enable_bridge_irq(irq);
if (irq >= NR_IRQS) {
printk("Trying to free IRQ%d\n", irq);
return;
}
for (p = irq + irq_action; (action = *p) != NULL; p = &action->next) {
if (action->dev_id != dev_id)
continue;
/* Found it - now free it */
save_and_cli(flags);
*p = action->next;
if (irq >= BASE_PCI_IRQ)
bridge_shutdown(irq);
restore_flags(flags);
kfree(action);
return;
}
printk("Trying to free free IRQ%d\n",irq);
} }
/* Useless ISA nonsense. */ static struct hw_interrupt_type bridge_irq_type = {
unsigned long probe_irq_on (void) "bridge",
{ startup_bridge_irq,
panic("probe_irq_on called!\n"); shutdown_bridge_irq,
return 0; enable_bridge_irq,
} disable_bridge_irq,
mask_and_ack_bridge_irq,
end_bridge_irq
};
int probe_irq_off (unsigned long irqs) void irq_debug(void)
{ {
return 0; bridge_t *bridge = (bridge_t *) 0x9200000008000000;
}
void __init init_IRQ(void) printk("bridge->b_int_status = 0x%x\n", bridge->b_int_status);
{ printk("bridge->b_int_enable = 0x%x\n", bridge->b_int_enable);
set_except_vector(0, ip27_irq); printk("PI_INT_PEND0 = 0x%lx\n", LOCAL_HUB_L(PI_INT_PEND0));
printk("PI_INT_MASK0_A = 0x%lx\n", LOCAL_HUB_L(PI_INT_MASK0_A));
} }
#ifdef CONFIG_SMP void __init init_IRQ(void)
/*
* This following are the global intr on off routines, copied almost
* entirely from i386 code.
*/
int global_irq_holder = NO_PROC_ID;
spinlock_t global_irq_lock = SPIN_LOCK_UNLOCKED;
extern void show_stack(unsigned long* esp);
static void show(char * str)
{ {
int i; int i;
int cpu = smp_processor_id();
printk("\n%s, CPU %d:\n", str, cpu);
printk("irq: %d [",irqs_running());
for(i=0;i < smp_num_cpus;i++)
printk(" %d",local_irq_count(i));
printk(" ]\nbh: %d [",spin_is_locked(&global_bh_lock) ? 1 : 0);
for(i=0;i < smp_num_cpus;i++)
printk(" %d",local_bh_count(i));
printk(" ]\nStack dumps:");
for(i = 0; i < smp_num_cpus; i++) {
if (i == cpu)
continue;
printk("\nCPU %d:",i);
printk("Code not developed yet\n");
/* show_stack(0); */
}
printk("\nCPU %d:",cpu);
printk("Code not developed yet\n");
/* show_stack(NULL); */
printk("\n");
}
#define MAXCOUNT 100000000
#define SYNC_OTHER_CORES(x) udelay(x+1)
static inline void wait_on_irq(int cpu)
{
int count = MAXCOUNT;
for (;;) { set_except_vector(0, ip27_irq);
/*
* Wait until all interrupts are gone. Wait
* for bottom half handlers unless we're
* already executing in one..
*/
if (!irqs_running())
if (local_bh_count(cpu) || !spin_is_locked(&global_bh_lock))
break;
/* Duh, we have to loop. Release the lock to avoid deadlocks */
spin_unlock(&global_irq_lock);
for (;;) {
if (!--count) {
show("wait_on_irq");
count = ~0;
}
local_irq_enable();
SYNC_OTHER_CORES(cpu);
local_irq_disable();
if (irqs_running())
continue;
if (spin_is_locked(&global_irq_lock))
continue;
if (!local_bh_count(cpu) && spin_is_locked(&global_bh_lock))
continue;
if (spin_trylock(&global_irq_lock))
break;
}
}
}
void synchronize_irq(void)
{
if (irqs_running()) {
/* Stupid approach */
cli();
sti();
}
}
static inline void get_irqlock(int cpu)
{
if (!spin_trylock(&global_irq_lock)) {
/* do we already hold the lock? */
if ((unsigned char) cpu == global_irq_holder)
return;
/* Uhhuh.. Somebody else got it. Wait.. */
spin_lock(&global_irq_lock);
}
/*
* We also to make sure that nobody else is running
* in an interrupt context.
*/
wait_on_irq(cpu);
/* /*
* Ok, finally.. * Right now the bridge irq is our kitchen sink interrupt type
*/ */
global_irq_holder = cpu; for (i = 0; i <= NR_IRQS; i++) {
} irq_desc[i].status = IRQ_DISABLED;
irq_desc[i].action = 0;
void __global_cli(void) irq_desc[i].depth = 1;
{ irq_desc[i].handler = &bridge_irq_type;
unsigned int flags;
local_save_flags(flags);
if (flags & ST0_IE) {
int cpu = smp_processor_id();
local_irq_disable();
if (!local_irq_count(cpu))
get_irqlock(cpu);
} }
} }
void __global_sti(void)
{
int cpu = smp_processor_id();
if (!local_irq_count(cpu))
release_irqlock(cpu);
local_irq_enable();
}
/*
* SMP flags value to restore to:
* 0 - global cli
* 1 - global sti
* 2 - local cli
* 3 - local sti
*/
unsigned long __global_save_flags(void)
{
int retval;
int local_enabled;
unsigned long flags;
int cpu = smp_processor_id();
local_save_flags(flags);
local_enabled = (flags & ST0_IE);
/* default to local */
retval = 2 + local_enabled;
/* check for global flags if we're not in an interrupt */
if (!local_irq_count(cpu)) {
if (local_enabled)
retval = 1;
if (global_irq_holder == cpu)
retval = 0;
}
return retval;
}
void __global_restore_flags(unsigned long flags)
{
switch (flags) {
case 0:
__global_cli();
break;
case 1:
__global_sti();
break;
case 2:
local_irq_disable();
break;
case 3:
local_irq_enable();
break;
default:
printk("global_restore_flags: %08lx\n", flags);
}
}
#endif /* CONFIG_SMP */
/* /*
* Get values that vary depending on which CPU and bit we're operating on. * Get values that vary depending on which CPU and bit we're operating on.
*/ */
...@@ -697,12 +381,47 @@ int intr_disconnect_level(int cpu, int bit) ...@@ -697,12 +381,47 @@ int intr_disconnect_level(int cpu, int bit)
} }
void handle_resched_intr(int irq, void *dev_id, struct pt_regs *regs) irqreturn_t handle_resched_intr(int irq, void *dev_id, struct pt_regs *regs)
{ {
/* Nothing, the return from intr will work for us */ /* Nothing, the return from intr will work for us */
return IRQ_NONE;
} }
extern void smp_call_function_interrupt(void); #ifdef CONFIG_SMP
void core_send_ipi(int destid, unsigned int action)
{
int irq;
#if (CPUS_PER_NODE == 2)
switch (action) {
case SMP_RESCHEDULE_YOURSELF:
irq = CPU_RESCHED_A_IRQ;
break;
case SMP_CALL_FUNCTION:
irq = CPU_CALL_A_IRQ;
break;
default:
panic("sendintr");
}
irq += cputoslice(destid);
/*
* Convert the compact hub number to the NASID to get the correct
* part of the address space. Then set the interrupt bit associated
* with the CPU we want to send the interrupt to.
*/
REMOTE_HUB_SEND_INTR(COMPACT_TO_NASID_NODEID(cputocnode(destid)),
FAST_IRQ_TO_LEVEL(irq));
#else
<< Bomb! Must redefine this for more than 2 CPUS. >>
#endif
}
#endif
extern irqreturn_t smp_call_function_interrupt(int irq, void *dev,
struct pt_regs *regs);
void install_cpuintr(int cpu) void install_cpuintr(int cpu)
{ {
...@@ -720,16 +439,16 @@ void install_cpuintr(int cpu) ...@@ -720,16 +439,16 @@ void install_cpuintr(int cpu)
if (request_irq(CPU_RESCHED_A_IRQ, handle_resched_intr, if (request_irq(CPU_RESCHED_A_IRQ, handle_resched_intr,
0, "resched", 0)) 0, "resched", 0))
panic("intercpu intr unconnectible\n"); panic("intercpu intr unconnectible");
if (request_irq(CPU_RESCHED_B_IRQ, handle_resched_intr, if (request_irq(CPU_RESCHED_B_IRQ, handle_resched_intr,
0, "resched", 0)) 0, "resched", 0))
panic("intercpu intr unconnectible\n"); panic("intercpu intr unconnectible");
if (request_irq(CPU_CALL_A_IRQ, smp_call_function_interrupt, if (request_irq(CPU_CALL_A_IRQ, smp_call_function_interrupt,
0, "callfunc", 0)) 0, "callfunc", 0))
panic("intercpu intr unconnectible\n"); panic("intercpu intr unconnectible");
if (request_irq(CPU_CALL_B_IRQ, smp_call_function_interrupt, if (request_irq(CPU_CALL_B_IRQ, smp_call_function_interrupt,
0, "callfunc", 0)) 0, "callfunc", 0))
panic("intercpu intr unconnectible\n"); panic("intercpu intr unconnectible");
for (j = 0; j < PERNODE_LEVELS; j++) for (j = 0; j < PERNODE_LEVELS; j++)
LEVEL_TO_IRQ(0, j) = -1; LEVEL_TO_IRQ(0, j) = -1;
......
...@@ -224,7 +224,7 @@ prom_free_prom_memory (void) ...@@ -224,7 +224,7 @@ prom_free_prom_memory (void)
#ifdef CONFIG_DISCONTIGMEM #ifdef CONFIG_DISCONTIGMEM
static pfn_t pagenr = 0; static pfn_t pagenr;
void __init paging_init(void) void __init paging_init(void)
{ {
...@@ -241,10 +241,10 @@ void __init paging_init(void) ...@@ -241,10 +241,10 @@ void __init paging_init(void)
memset((void *)invalid_pte_table, 0, sizeof(pte_t) * PTRS_PER_PTE); memset((void *)invalid_pte_table, 0, sizeof(pte_t) * PTRS_PER_PTE);
/* This is for vmalloc */ /* This is for vmalloc */
memset((void *)kptbl, 0, PAGE_SIZE << KPTBL_PAGE_ORDER); memset((void *)kptbl, 0, PAGE_SIZE << PGD_ORDER);
memset((void *)kpmdtbl, 0, PAGE_SIZE); memset((void *)kpmdtbl, 0, PAGE_SIZE);
pgd_set(swapper_pg_dir, kpmdtbl); set_pgd(swapper_pg_dir, __pgd(kpmdtbl));
for (i = 0; i < (1 << KPTBL_PAGE_ORDER); pmd++,i++,pte+=PTRS_PER_PTE) for (i = 0; i < (1 << PGD_ORDER); pmd++,i++,pte+=PTRS_PER_PTE)
pmd_val(*pmd) = (unsigned long)pte; pmd_val(*pmd) = (unsigned long)pte;
for (node = 0; node < numnodes; node++) { for (node = 0; node < numnodes; node++) {
......
...@@ -157,7 +157,7 @@ cont_nmi_dump(void) ...@@ -157,7 +157,7 @@ cont_nmi_dump(void)
udelay(10000); udelay(10000);
} }
#else #else
while (atomic_read(&nmied_cpus) != smp_num_cpus); while (atomic_read(&nmied_cpus) != num_online_cpus());
#endif #endif
/* /*
......
...@@ -14,8 +14,10 @@ ...@@ -14,8 +14,10 @@
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/mmzone.h> #include <linux/mmzone.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/reboot.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/sgialib.h> #include <asm/sgialib.h>
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
...@@ -30,7 +32,7 @@ void machine_power_off(void) __attribute__((noreturn)); ...@@ -30,7 +32,7 @@ void machine_power_off(void) __attribute__((noreturn));
#define noreturn while(1); /* Silence gcc. */ #define noreturn while(1); /* Silence gcc. */
/* XXX How to pass the reboot command to the firmware??? */ /* XXX How to pass the reboot command to the firmware??? */
void machine_restart(char *command) static void ip27_machine_restart(char *command)
{ {
#if 0 #if 0
int i; int i;
...@@ -50,7 +52,7 @@ void machine_restart(char *command) ...@@ -50,7 +52,7 @@ void machine_restart(char *command)
noreturn; noreturn;
} }
void machine_halt(void) static void ip27_machine_halt(void)
{ {
int i; int i;
...@@ -64,7 +66,7 @@ void machine_halt(void) ...@@ -64,7 +66,7 @@ void machine_halt(void)
noreturn; noreturn;
} }
void machine_power_off(void) static void ip27_machine_power_off(void)
{ {
/* To do ... */ /* To do ... */
noreturn; noreturn;
...@@ -72,5 +74,7 @@ void machine_power_off(void) ...@@ -72,5 +74,7 @@ void machine_power_off(void)
void ip27_reboot_setup(void) void ip27_reboot_setup(void)
{ {
/* Nothing to do on IP27. */ _machine_restart = ip27_machine_restart;
_machine_halt = ip27_machine_halt;
_machine_power_off = ip27_machine_power_off;
} }
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/sn/types.h> #include <asm/sn/types.h>
#include <asm/sn/sn0/addrs.h> #include <asm/sn/sn0/addrs.h>
...@@ -21,12 +22,14 @@ ...@@ -21,12 +22,14 @@
#include <asm/sn/sn0/hubio.h> #include <asm/sn/sn0/hubio.h>
#include <asm/sn/klconfig.h> #include <asm/sn/klconfig.h>
#include <asm/sn/ioc3.h> #include <asm/sn/ioc3.h>
#include <asm/time.h>
#include <asm/mipsregs.h> #include <asm/mipsregs.h>
#include <asm/sn/arch.h> #include <asm/sn/arch.h>
#include <asm/sn/sn_private.h> #include <asm/sn/sn_private.h>
#include <asm/pci/bridge.h> #include <asm/pci/bridge.h>
#include <asm/paccess.h> #include <asm/paccess.h>
#include <asm/sn/sn0/ip27.h> #include <asm/sn/sn0/ip27.h>
#include <asm/traps.h>
/* Check against user dumbness. */ /* Check against user dumbness. */
#ifdef CONFIG_VT #ifdef CONFIG_VT
...@@ -40,7 +43,7 @@ ...@@ -40,7 +43,7 @@
#define DBG(x...) #define DBG(x...)
#endif #endif
unsigned long mips_io_port_base = IO_BASE; extern void ip27_be_init(void) __init;
/* /*
* get_nasid() returns the physical node id number of the caller. * get_nasid() returns the physical node id number of the caller.
...@@ -275,6 +278,8 @@ void __init pcibr_setup(cnodeid_t nid) ...@@ -275,6 +278,8 @@ void __init pcibr_setup(cnodeid_t nid)
} }
extern void ip27_setup_console(void); extern void ip27_setup_console(void);
extern void ip27_time_init(void);
extern void ip27_reboot_setup(void);
void __init ip27_setup(void) void __init ip27_setup(void)
{ {
...@@ -282,6 +287,7 @@ void __init ip27_setup(void) ...@@ -282,6 +287,7 @@ void __init ip27_setup(void)
hubreg_t p, e; hubreg_t p, e;
ip27_setup_console(); ip27_setup_console();
ip27_reboot_setup();
num_bridges = 0; num_bridges = 0;
/* /*
...@@ -307,4 +313,7 @@ void __init ip27_setup(void) ...@@ -307,4 +313,7 @@ void __init ip27_setup(void)
ioc3_sio_init(); ioc3_sio_init();
ioc3_eth_init(); ioc3_eth_init();
per_cpu_init(); per_cpu_init();
mips_io_port_base = IO_BASE;
board_time_init = ip27_time_init;
} }
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* Copytight (C) 1999, 2000 Ralf Baechle (ralf@gnu.org) * Copytight (C) 1999, 2000 Ralf Baechle (ralf@gnu.org)
* Copytight (C) 1999, 2000 Silicon Graphics, Inc. * Copytight (C) 1999, 2000 Silicon Graphics, Inc.
*/ */
#include <linux/bcd.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -14,6 +15,7 @@ ...@@ -14,6 +15,7 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <asm/time.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/sgialib.h> #include <asm/sgialib.h>
#include <asm/sn/ioc3.h> #include <asm/sn/ioc3.h>
...@@ -34,10 +36,11 @@ ...@@ -34,10 +36,11 @@
* Ralf: which clock rate is used to feed the counter? * Ralf: which clock rate is used to feed the counter?
*/ */
#define NSEC_PER_CYCLE 800 #define NSEC_PER_CYCLE 800
#define NSEC_PER_SEC 1000000000
#define CYCLES_PER_SEC (NSEC_PER_SEC/NSEC_PER_CYCLE) #define CYCLES_PER_SEC (NSEC_PER_SEC/NSEC_PER_CYCLE)
#define CYCLES_PER_JIFFY (CYCLES_PER_SEC/HZ) #define CYCLES_PER_JIFFY (CYCLES_PER_SEC/HZ)
#define TICK_SIZE (tick_nsec / 1000)
static unsigned long ct_cur[NR_CPUS]; /* What counter should be at next timer irq */ static unsigned long ct_cur[NR_CPUS]; /* What counter should be at next timer irq */
static long last_rtc_update; /* Last time the rtc clock got updated */ static long last_rtc_update; /* Last time the rtc clock got updated */
...@@ -56,8 +59,7 @@ static int set_rtc_mmss(unsigned long nowtime) ...@@ -56,8 +59,7 @@ static int set_rtc_mmss(unsigned long nowtime)
IOC3_BYTEBUS_DEV0); IOC3_BYTEBUS_DEV0);
rtc->control |= M48T35_RTC_READ; rtc->control |= M48T35_RTC_READ;
cmos_minutes = rtc->min; cmos_minutes = BCD2BIN(rtc->min);
BCD_TO_BIN(cmos_minutes);
rtc->control &= ~M48T35_RTC_READ; rtc->control &= ~M48T35_RTC_READ;
/* /*
...@@ -72,8 +74,8 @@ static int set_rtc_mmss(unsigned long nowtime) ...@@ -72,8 +74,8 @@ static int set_rtc_mmss(unsigned long nowtime)
real_minutes %= 60; real_minutes %= 60;
if (abs(real_minutes - cmos_minutes) < 30) { if (abs(real_minutes - cmos_minutes) < 30) {
BIN_TO_BCD(real_seconds); real_seconds = BIN2BCD(real_seconds);
BIN_TO_BCD(real_minutes); real_minutes = BIN2BCD(real_minutes);
rtc->control |= M48T35_RTC_SET; rtc->control |= M48T35_RTC_SET;
rtc->sec = real_seconds; rtc->sec = real_seconds;
rtc->min = real_minutes; rtc->min = real_minutes;
...@@ -92,8 +94,9 @@ void rt_timer_interrupt(struct pt_regs *regs) ...@@ -92,8 +94,9 @@ void rt_timer_interrupt(struct pt_regs *regs)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
int cpuA = ((cputoslice(cpu)) == 0); int cpuA = ((cputoslice(cpu)) == 0);
int irq = 7; /* XXX Assign number */ int irq = 9; /* XXX Assign number */
irq_enter();
write_seqlock(&xtime_lock); write_seqlock(&xtime_lock);
again: again:
...@@ -110,19 +113,7 @@ void rt_timer_interrupt(struct pt_regs *regs) ...@@ -110,19 +113,7 @@ void rt_timer_interrupt(struct pt_regs *regs)
do_timer(regs); do_timer(regs);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
{ update_process_times(user_mode(regs));
int user = user_mode(regs);
/*
* update_process_times() expects us to have done irq_enter().
* Besides, if we don't timer interrupts ignore the global
* interrupt lock, which is the WrongThing (tm) to do.
* Picked from i386 code.
*/
irq_enter(cpu, 0);
update_process_times(user);
irq_exit(cpu, 0);
}
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
/* /*
...@@ -131,80 +122,31 @@ void rt_timer_interrupt(struct pt_regs *regs) ...@@ -131,80 +122,31 @@ void rt_timer_interrupt(struct pt_regs *regs)
* called as close as possible to when a second starts. * called as close as possible to when a second starts.
*/ */
if ((time_status & STA_UNSYNC) == 0 && if ((time_status & STA_UNSYNC) == 0 &&
xtime.tv_sec > last_rtc_update + 660) { xtime.tv_sec > last_rtc_update + 660 &&
if (xtime.tv_usec >= 1000000 - ((unsigned) tick) / 2) { (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
if (set_rtc_mmss(xtime.tv_sec + 1) == 0) (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
if (rtc_set_time(xtime.tv_sec) == 0) {
last_rtc_update = xtime.tv_sec; last_rtc_update = xtime.tv_sec;
else } else {
last_rtc_update = xtime.tv_sec - 600;
} else if (xtime.tv_usec <= ((unsigned) tick) / 2) {
if (set_rtc_mmss(xtime.tv_sec) == 0)
last_rtc_update = xtime.tv_sec;
else
last_rtc_update = xtime.tv_sec - 600; last_rtc_update = xtime.tv_sec - 600;
/* do it again in 60 s */
} }
} }
write_sequnlock(&xtime_lock); write_sequnlock(&xtime_lock);
irq_exit();
if (softirq_pending(cpu)) if (softirq_pending(cpu))
do_softirq(); do_softirq();
} }
unsigned long inline do_gettimeoffset(void) unsigned long ip27_do_gettimeoffset(void)
{ {
unsigned long ct_cur1; unsigned long ct_cur1;
ct_cur1 = REMOTE_HUB_L(cputonasid(0), PI_RT_COUNT) + CYCLES_PER_JIFFY; ct_cur1 = REMOTE_HUB_L(cputonasid(0), PI_RT_COUNT) + CYCLES_PER_JIFFY;
return (ct_cur1 - ct_cur[0]) * NSEC_PER_CYCLE / 1000; return (ct_cur1 - ct_cur[0]) * NSEC_PER_CYCLE / 1000;
} }
void do_gettimeofday(struct timeval *tv)
{
unsigned long flags;
unsigned long usec, sec;
unsigned long seq;
do {
seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = do_gettimeoffset();
{
unsigned long lost = jiffies - wall_jiffies;
if (lost)
usec += lost * (1000000 / HZ);
}
sec = xtime.tv_sec;
usec += xtime.tv_usec;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
while (usec >= 1000000) {
usec -= 1000000;
sec++;
}
tv->tv_sec = sec;
tv->tv_usec = usec;
}
void do_settimeofday(struct timeval *tv)
{
write_seqlock_irq(&xtime_lock);
tv->tv_usec -= do_gettimeoffset();
tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ);
while (tv->tv_usec < 0) {
tv->tv_usec += 1000000;
tv->tv_sec--;
}
xtime = *tv;
time_adjust = 0; /* stop active adjtime() */
time_status |= STA_UNSYNC;
time_maxerror = NTP_PHASE_LIMIT;
time_esterror = NTP_PHASE_LIMIT;
write_sequnlock_irq(&xtime_lock);
}
/* Includes for ioc3_init(). */ /* Includes for ioc3_init(). */
#include <asm/sn/types.h> #include <asm/sn/types.h>
#include <asm/sn/sn0/addrs.h> #include <asm/sn/sn0/addrs.h>
...@@ -231,22 +173,24 @@ static __init unsigned long get_m48t35_time(void) ...@@ -231,22 +173,24 @@ static __init unsigned long get_m48t35_time(void)
year = rtc->year; year = rtc->year;
rtc->control &= ~M48T35_RTC_READ; rtc->control &= ~M48T35_RTC_READ;
BCD_TO_BIN(sec); sec = BCD2BIN(sec);
BCD_TO_BIN(min); min = BCD2BIN(min);
BCD_TO_BIN(hour); hour = BCD2BIN(hour);
BCD_TO_BIN(date); date = BCD2BIN(date);
BCD_TO_BIN(month); month = BCD2BIN(month);
BCD_TO_BIN(year); year = BCD2BIN(year);
year += 1970; year += 1970;
return mktime(year, month, date, hour, min, sec); return mktime(year, month, date, hour, min, sec);
} }
void __init time_init(void) void __init ip27_time_init(void)
{ {
xtime.tv_sec = get_m48t35_time(); xtime.tv_sec = get_m48t35_time();
xtime.tv_usec = 0; xtime.tv_nsec = 0;
do_gettimeoffset = ip27_do_gettimeoffset;
} }
void __init cpu_time_init(void) void __init cpu_time_init(void)
...@@ -267,7 +211,7 @@ void __init cpu_time_init(void) ...@@ -267,7 +211,7 @@ void __init cpu_time_init(void)
printk("CPU %d clock is %dMHz.\n", smp_processor_id(), cpu->cpu_speed); printk("CPU %d clock is %dMHz.\n", smp_processor_id(), cpu->cpu_speed);
set_cp0_status(SRB_TIMOCLK, SRB_TIMOCLK); set_c0_status(SRB_TIMOCLK);
} }
void __init hub_rtc_init(cnodeid_t cnode) void __init hub_rtc_init(cnodeid_t cnode)
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# #
CONFIG_MIPS=y
# CONFIG_MIPS32 is not set
CONFIG_MIPS64=y
# #
# Code maturity level options # Code maturity level options
# #
# CONFIG_EXPERIMENTAL is not set CONFIG_EXPERIMENTAL=y
#
# General setup
#
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=15
# CONFIG_EMBEDDED is not set
CONFIG_FUTEX=y
CONFIG_EPOLL=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
# #
# Machine selection # Machine selection
# #
# CONFIG_ACER_PICA_61 is not set
# CONFIG_CASIO_E55 is not set
# CONFIG_MIPS_COBALT is not set
# CONFIG_DECSTATION is not set
# CONFIG_MIPS_EV64120 is not set
# CONFIG_MIPS_EV96100 is not set
# CONFIG_MIPS_IVR is not set
# CONFIG_LASAT is not set
# CONFIG_HP_LASERJET is not set
# CONFIG_IBM_WORKPAD is not set
# CONFIG_MIPS_ITE8172 is not set
# CONFIG_MIPS_ATLAS is not set
# CONFIG_MIPS_MAGNUM_4000 is not set
# CONFIG_MIPS_MALTA is not set
# CONFIG_MIPS_SEAD is not set
# CONFIG_MOMENCO_OCELOT is not set
# CONFIG_MOMENCO_OCELOT_G is not set
# CONFIG_MOMENCO_OCELOT_C is not set
# CONFIG_DDB5074 is not set
# CONFIG_DDB5476 is not set
# CONFIG_DDB5477 is not set
# CONFIG_NEC_OSPREY is not set
# CONFIG_NEC_EAGLE is not set
# CONFIG_OLIVETTI_M700 is not set
# CONFIG_SGI_IP22 is not set # CONFIG_SGI_IP22 is not set
CONFIG_SGI_IP27=y CONFIG_SGI_IP27=y
# CONFIG_SGI_SN0_N_MODE is not set # CONFIG_SGI_SN0_N_MODE is not set
CONFIG_DISCONTIGMEM=y # CONFIG_DISCONTIGMEM is not set
CONFIG_NUMA=y # CONFIG_NUMA is not set
# CONFIG_MAPPED_KERNEL is not set # CONFIG_MAPPED_KERNEL is not set
# CONFIG_REPLICATE_KTEXT is not set # CONFIG_REPLICATE_KTEXT is not set
# CONFIG_REPLICATE_EXHANDLERS is not set # CONFIG_REPLICATE_EXHANDLERS is not set
CONFIG_SMP=y # CONFIG_SGI_IP32 is not set
# CONFIG_SIBYTE_SB1xxx_SOC is not set
# CONFIG_SNI_RM200_PCI is not set
# CONFIG_TANBAC_TB0226 is not set
# CONFIG_TANBAC_TB0229 is not set
# CONFIG_VICTOR_MPC30X is not set
# CONFIG_ZAO_CAPCELLA is not set
CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set CONFIG_ARC=y
CONFIG_BOOT_ELF64=y CONFIG_GENERIC_ISA_DMA=y
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_FB is not set
CONFIG_ARC64=y CONFIG_ARC64=y
CONFIG_COHERENT_IO=y CONFIG_BOOT_ELF64=y
CONFIG_MAPPED_PCI_IO=y
CONFIG_PCI=y
CONFIG_QL_ISP_A64=y CONFIG_QL_ISP_A64=y
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_ISA is not set
# CONFIG_EISA is not set
# CONFIG_MCA is not set
# CONFIG_SBUS is not set
CONFIG_NR_CPUS=64
# #
# CPU selection # CPU selection
# #
# CONFIG_CPU_MIPS32 is not set
# CONFIG_CPU_MIPS64 is not set
# CONFIG_CPU_R3000 is not set
# CONFIG_CPU_TX39XX is not set
# CONFIG_CPU_VR41XX is not set
# CONFIG_CPU_R4300 is not set # CONFIG_CPU_R4300 is not set
# CONFIG_CPU_R4X00 is not set # CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_TX49XX is not set
# CONFIG_CPU_R5000 is not set # CONFIG_CPU_R5000 is not set
# CONFIG_CPU_R5432 is not set
# CONFIG_CPU_R6000 is not set
# CONFIG_CPU_NEVADA is not set # CONFIG_CPU_NEVADA is not set
# CONFIG_CPU_R8000 is not set # CONFIG_CPU_R8000 is not set
CONFIG_CPU_R10000=y CONFIG_CPU_R10000=y
# CONFIG_CPU_RM7000 is not set
# CONFIG_CPU_SB1 is not set
CONFIG_CPU_HAS_LLSC=y
CONFIG_CPU_HAS_LLDSCD=y
CONFIG_CPU_HAS_SYNC=y
CONFIG_SMP=y
CONFIG_NR_CPUS=4
# CONFIG_PREEMPT is not set
CONFIG_KALLSYMS=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_MIPS_INSANE_LARGE is not set
# #
# General setup # Bus options (PCI, PCMCIA, EISA, ISA, TC)
# #
# CONFIG_MIPS_INSANE_LARGE is not set CONFIG_PCI=y
# CONFIG_CPU_LITTLE_ENDIAN is not set CONFIG_PCI_LEGACY_PROC=y
CONFIG_NET=y
CONFIG_PCI_NAMES=y CONFIG_PCI_NAMES=y
CONFIG_MMU=y
# CONFIG_HOTPLUG is not set # CONFIG_HOTPLUG is not set
# CONFIG_PCMCIA is not set
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_BINFMT_ELF=y
CONFIG_MIPS32_COMPAT=y
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_MISC is not set
# #
# Loadable module support # Executable file formats
# #
# CONFIG_MODULES is not set CONFIG_KCORE_ELF=y
CONFIG_PCI_NAMES=y CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
CONFIG_MIPS32_COMPAT=y
CONFIG_COMPAT=y
CONFIG_MIPS32_O32=y
# CONFIG_MIPS32_N32 is not set
CONFIG_BINFMT_ELF32=y
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
...@@ -77,84 +139,36 @@ CONFIG_PCI_NAMES=y ...@@ -77,84 +139,36 @@ CONFIG_PCI_NAMES=y
# #
# CONFIG_PARPORT is not set # CONFIG_PARPORT is not set
#
# Plug and Play support
#
# CONFIG_PNP is not set
#
# Generic Driver Options
#
# CONFIG_FW_LOADER is not set
# #
# Block devices # Block devices
# #
# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set # CONFIG_BLK_DEV_INITRD is not set
# #
# Multi-device support (RAID and LVM) # ATA/ATAPI/MFM/RLL support
#
# CONFIG_MD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
# CONFIG_BLK_DEV_LVM is not set
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK=y
CONFIG_RTNETLINK=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
# CONFIG_PHONE_IXJ is not set
# CONFIG_PHONE_IXJ_PCMCIA is not set
#
# ATA/IDE/MFM/RLL support
# #
# CONFIG_IDE is not set # CONFIG_IDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
# #
# SCSI support # SCSI device support
# #
CONFIG_SCSI=y CONFIG_SCSI=y
...@@ -162,7 +176,6 @@ CONFIG_SCSI=y ...@@ -162,7 +176,6 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM) # SCSI support type (disk, tape, CD-ROM)
# #
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y CONFIG_CHR_DEV_ST=y
# CONFIG_CHR_DEV_OSST is not set # CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set # CONFIG_BLK_DEV_SR is not set
...@@ -171,8 +184,8 @@ CONFIG_CHR_DEV_ST=y ...@@ -171,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
# #
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
# #
# CONFIG_SCSI_DEBUG_QUEUES is not set
# CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_REPORT_LUNS is not set
CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y CONFIG_SCSI_LOGGING=y
...@@ -180,52 +193,116 @@ CONFIG_SCSI_LOGGING=y ...@@ -180,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
# SCSI low-level drivers # SCSI low-level drivers
# #
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set # CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set # CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR_D700 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set # CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set # CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set # CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set # CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
CONFIG_SCSI_QLOGIC_ISP=y
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SIM710 is not set # CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set # CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_DEBUG is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support (EXPERIMENTAL)
#
# CONFIG_IEEE1394 is not set
#
# I2O device support
#
# CONFIG_I2O is not set
#
# Networking support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
CONFIG_UNIX=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_IPV6 is not set
# CONFIG_XFRM_USER is not set
# #
# Network device support # SCTP Configuration (EXPERIMENTAL)
# #
CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_LLC is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
# #
...@@ -236,39 +313,44 @@ CONFIG_NETDEVICES=y ...@@ -236,39 +313,44 @@ CONFIG_NETDEVICES=y
# CONFIG_BONDING is not set # CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set # CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set # CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
# #
# Ethernet (10 or 100Mbit) # Ethernet (10 or 100Mbit)
# #
CONFIG_NET_ETHERNET=y CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
CONFIG_SGI_IOC3_ETH=y CONFIG_SGI_IOC3_ETH=y
# CONFIG_SUNLANCE is not set
# CONFIG_HAPPYMEAL is not set # CONFIG_HAPPYMEAL is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNLANCE is not set
# CONFIG_SUNGEM is not set # CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set # CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set #
# CONFIG_NET_VENDOR_RACAL is not set # Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set # CONFIG_HP100 is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_PCI is not set # CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
# #
# Ethernet (1000 Mbit) # Ethernet (1000 Mbit)
# #
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
# CONFIG_DL2K is not set # CONFIG_DL2K is not set
# CONFIG_MYRI_SBUS is not set # CONFIG_E1000 is not set
# CONFIG_NS83820 is not set # CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set # CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_IXGB is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_PLIP is not set # CONFIG_HIPPI is not set
# CONFIG_PPP is not set # CONFIG_PPP is not set
# CONFIG_SLIP is not set # CONFIG_SLIP is not set
...@@ -278,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y ...@@ -278,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
# CONFIG_NET_RADIO is not set # CONFIG_NET_RADIO is not set
# #
# Token Ring devices # Token Ring devices (depends on LLC=y)
# #
# CONFIG_TR is not set
# CONFIG_NET_FC is not set # CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set
# #
# Wan interfaces # Wan interfaces
...@@ -301,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y ...@@ -301,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
# #
# ISDN subsystem # ISDN subsystem
# #
# CONFIG_ISDN is not set # CONFIG_ISDN_BOOL is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
#
# Input device support
#
CONFIG_INPUT=y
#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
# CONFIG_SERIO_I8042 is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# #
# Old CD-ROM drivers (not SCSI, not IDE) # Input Device Drivers
# #
# CONFIG_CD_NO_IDESCSI is not set # CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
# #
# Character devices # Character devices
# #
# CONFIG_VT is not set # CONFIG_VT is not set
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256 CONFIG_UNIX98_PTY_COUNT=256
...@@ -325,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256 ...@@ -325,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_I2C is not set # CONFIG_I2C is not set
# #
# Mice # I2C Hardware Sensors Mainboard support
# #
# CONFIG_BUSMOUSE is not set
# CONFIG_MOUSE is not set
# #
# Joysticks # I2C Hardware Sensors Chip support
# #
# CONFIG_INPUT_GAMEPORT is not set # CONFIG_I2C_SENSOR is not set
# #
# Input core support is needed for gameports # Mice
# #
# CONFIG_BUSMOUSE is not set
# CONFIG_QIC02_TAPE is not set
# #
# Input core support is needed for joysticks # IPMI
# #
# CONFIG_QIC02_TAPE is not set # CONFIG_IPMI_HANDLER is not set
# #
# Watchdog Cards # Watchdog Cards
# #
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set # CONFIG_NVRAM is not set
# CONFIG_RTC is not set # CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
CONFIG_SGI_IP27_RTC=y
# CONFIG_DTLK is not set # CONFIG_DTLK is not set
# CONFIG_R3964 is not set # CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set # CONFIG_APPLICOM is not set
...@@ -361,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256 ...@@ -361,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
# CONFIG_AGP is not set # CONFIG_AGP is not set
# CONFIG_DRM is not set # CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HANGCHECK_TIMER is not set
# #
# Multimedia devices # Multimedia devices
# #
# CONFIG_VIDEO_DEV is not set # CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
# #
# File systems # File systems
# #
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
CONFIG_JBD_DEBUG=y
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
CONFIG_AUTOFS_FS=y CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set #
# CONFIG_REISERFS_PROC_INFO is not set # CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
# CONFIG_FAT_FS is not set
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS=y
CONFIG_DEVPTS_FS_XATTR=y
CONFIG_DEVPTS_FS_SECURITY=y
# CONFIG_TMPFS is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set # CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set # CONFIG_HFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set # CONFIG_BFS_FS is not set
# CONFIG_CMS_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set # CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set # CONFIG_VXFS_FS is not set
# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_FREEVXFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_UFS_FS_WRITE is not set
# #
# Network File Systems # Network File Systems
# #
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y # CONFIG_NFS_V4 is not set
# CONFIG_NFSD is not set # CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set CONFIG_ROOT_NFS=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=y
# CONFIG_SUNRPC_GSS is not set
# CONFIG_SMB_FS is not set # CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set # CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set # CONFIG_CODA_FS is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set # CONFIG_INTERMEZZO_FS is not set
# CONFIG_NCPFS_STRONG is not set # CONFIG_AFS_FS is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not set
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
# #
# Partition Types # Partition Types
...@@ -457,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y ...@@ -457,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set # CONFIG_LDM_PARTITION is not set
# CONFIG_NEC98_PARTITION is not set
CONFIG_SGI_PARTITION=y CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set # CONFIG_SUN_PARTITION is not set
# CONFIG_SMB_NLS is not set # CONFIG_EFI_PARTITION is not set
# CONFIG_NLS is not set
CONFIG_KCORE_ELF=y #
# Graphics support
#
# #
# Sound # Sound
...@@ -473,113 +623,30 @@ CONFIG_KCORE_ELF=y ...@@ -473,113 +623,30 @@ CONFIG_KCORE_ELF=y
# USB support # USB support
# #
# CONFIG_USB is not set # CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
# #
# USB Controllers # Bluetooth support
# #
# CONFIG_USB_UHCI is not set # CONFIG_BT is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
# #
# USB Device Class drivers # Kernel hacking
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH is not set
# CONFIG_USB_STORAGE is not set
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# USB Human Interface Devices (HID)
#
#
# Input core support is needed for USB HID
#
#
# USB Imaging devices
#
# CONFIG_USB_DC2XX is not set
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
#
#
# Video4Linux support is needed for USB Multimedia device support
#
# CONFIG_USB_DABUSB is not set
#
# USB Network adaptors
#
# CONFIG_USB_PLUSB is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_USBNET is not set
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
# #
# CONFIG_USB_SERIAL is not set CONFIG_CROSSCOMPILE=y
# CONFIG_USB_SERIAL_GENERIC is not set # CONFIG_DEBUG_KERNEL is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_OMNINET is not set
# #
# Miscellaneous USB drivers # Security options
# #
# CONFIG_USB_RIO500 is not set # CONFIG_SECURITY is not set
# CONFIG_USB_ID75 is not set
# #
# Input core support # Cryptographic options
# #
# CONFIG_INPUT is not set # CONFIG_CRYPTO is not set
# CONFIG_INPUT_KEYBDEV is not set
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
# #
# Kernel hacking # Library routines
# #
CONFIG_CROSSCOMPILE=y # CONFIG_CRC32 is not set
# CONFIG_REMOTE_DEBUG is not set
# CONFIG_MAGIC_SYSRQ is not set
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# #
CONFIG_MIPS=y
# CONFIG_MIPS32 is not set
CONFIG_MIPS64=y
# #
# Code maturity level options # Code maturity level options
# #
# CONFIG_EXPERIMENTAL is not set CONFIG_EXPERIMENTAL=y
#
# General setup
#
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=15
# CONFIG_EMBEDDED is not set
CONFIG_FUTEX=y
CONFIG_EPOLL=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
# #
# Machine selection # Machine selection
# #
# CONFIG_ACER_PICA_61 is not set
# CONFIG_CASIO_E55 is not set
# CONFIG_MIPS_COBALT is not set
# CONFIG_DECSTATION is not set
# CONFIG_MIPS_EV64120 is not set
# CONFIG_MIPS_EV96100 is not set
# CONFIG_MIPS_IVR is not set
# CONFIG_LASAT is not set
# CONFIG_HP_LASERJET is not set
# CONFIG_IBM_WORKPAD is not set
# CONFIG_MIPS_ITE8172 is not set
# CONFIG_MIPS_ATLAS is not set
# CONFIG_MIPS_MAGNUM_4000 is not set
# CONFIG_MIPS_MALTA is not set
# CONFIG_MIPS_SEAD is not set
# CONFIG_MOMENCO_OCELOT is not set
# CONFIG_MOMENCO_OCELOT_G is not set
# CONFIG_MOMENCO_OCELOT_C is not set
# CONFIG_DDB5074 is not set
# CONFIG_DDB5476 is not set
# CONFIG_DDB5477 is not set
# CONFIG_NEC_OSPREY is not set
# CONFIG_NEC_EAGLE is not set
# CONFIG_OLIVETTI_M700 is not set
# CONFIG_SGI_IP22 is not set # CONFIG_SGI_IP22 is not set
CONFIG_SGI_IP27=y CONFIG_SGI_IP27=y
# CONFIG_SGI_SN0_N_MODE is not set # CONFIG_SGI_SN0_N_MODE is not set
CONFIG_DISCONTIGMEM=y # CONFIG_DISCONTIGMEM is not set
CONFIG_NUMA=y # CONFIG_NUMA is not set
# CONFIG_MAPPED_KERNEL is not set # CONFIG_MAPPED_KERNEL is not set
# CONFIG_REPLICATE_KTEXT is not set # CONFIG_REPLICATE_KTEXT is not set
# CONFIG_REPLICATE_EXHANDLERS is not set # CONFIG_REPLICATE_EXHANDLERS is not set
CONFIG_SMP=y # CONFIG_SGI_IP32 is not set
# CONFIG_SIBYTE_SB1xxx_SOC is not set
# CONFIG_SNI_RM200_PCI is not set
# CONFIG_TANBAC_TB0226 is not set
# CONFIG_TANBAC_TB0229 is not set
# CONFIG_VICTOR_MPC30X is not set
# CONFIG_ZAO_CAPCELLA is not set
CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set CONFIG_ARC=y
CONFIG_BOOT_ELF64=y CONFIG_GENERIC_ISA_DMA=y
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_FB is not set
CONFIG_ARC64=y CONFIG_ARC64=y
CONFIG_COHERENT_IO=y CONFIG_BOOT_ELF64=y
CONFIG_MAPPED_PCI_IO=y
CONFIG_PCI=y
CONFIG_QL_ISP_A64=y CONFIG_QL_ISP_A64=y
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_ISA is not set
# CONFIG_EISA is not set
# CONFIG_MCA is not set
# CONFIG_SBUS is not set
# #
# CPU selection # CPU selection
# #
# CONFIG_CPU_MIPS32 is not set
# CONFIG_CPU_MIPS64 is not set
# CONFIG_CPU_R3000 is not set
# CONFIG_CPU_TX39XX is not set
# CONFIG_CPU_VR41XX is not set
# CONFIG_CPU_R4300 is not set # CONFIG_CPU_R4300 is not set
# CONFIG_CPU_R4X00 is not set # CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_TX49XX is not set
# CONFIG_CPU_R5000 is not set # CONFIG_CPU_R5000 is not set
# CONFIG_CPU_R5432 is not set
# CONFIG_CPU_R6000 is not set
# CONFIG_CPU_NEVADA is not set # CONFIG_CPU_NEVADA is not set
# CONFIG_CPU_R8000 is not set # CONFIG_CPU_R8000 is not set
CONFIG_CPU_R10000=y CONFIG_CPU_R10000=y
# CONFIG_CPU_RM7000 is not set
# CONFIG_CPU_SB1 is not set
CONFIG_CPU_HAS_LLSC=y
CONFIG_CPU_HAS_LLDSCD=y
CONFIG_CPU_HAS_SYNC=y
CONFIG_SMP=y
CONFIG_NR_CPUS=4
# CONFIG_PREEMPT is not set
CONFIG_KALLSYMS=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_MIPS_INSANE_LARGE is not set
# #
# General setup # Bus options (PCI, PCMCIA, EISA, ISA, TC)
# #
# CONFIG_MIPS_INSANE_LARGE is not set CONFIG_PCI=y
# CONFIG_CPU_LITTLE_ENDIAN is not set CONFIG_PCI_LEGACY_PROC=y
CONFIG_NET=y
CONFIG_PCI_NAMES=y CONFIG_PCI_NAMES=y
CONFIG_MMU=y
# CONFIG_HOTPLUG is not set # CONFIG_HOTPLUG is not set
# CONFIG_PCMCIA is not set
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_BINFMT_ELF=y
CONFIG_MIPS32_COMPAT=y
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_MISC is not set
# #
# Loadable module support # Executable file formats
# #
# CONFIG_MODULES is not set CONFIG_KCORE_ELF=y
CONFIG_PCI_NAMES=y CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
CONFIG_MIPS32_COMPAT=y
CONFIG_COMPAT=y
CONFIG_MIPS32_O32=y
# CONFIG_MIPS32_N32 is not set
CONFIG_BINFMT_ELF32=y
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
...@@ -76,84 +139,36 @@ CONFIG_PCI_NAMES=y ...@@ -76,84 +139,36 @@ CONFIG_PCI_NAMES=y
# #
# CONFIG_PARPORT is not set # CONFIG_PARPORT is not set
#
# Plug and Play support
#
# CONFIG_PNP is not set
#
# Generic Driver Options
#
# CONFIG_FW_LOADER is not set
# #
# Block devices # Block devices
# #
# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set # CONFIG_BLK_DEV_INITRD is not set
# #
# Multi-device support (RAID and LVM) # ATA/ATAPI/MFM/RLL support
#
# CONFIG_MD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
# CONFIG_BLK_DEV_LVM is not set
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK=y
CONFIG_RTNETLINK=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
# CONFIG_PHONE_IXJ is not set
# CONFIG_PHONE_IXJ_PCMCIA is not set
#
# ATA/IDE/MFM/RLL support
# #
# CONFIG_IDE is not set # CONFIG_IDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
# #
# SCSI support # SCSI device support
# #
CONFIG_SCSI=y CONFIG_SCSI=y
...@@ -161,7 +176,6 @@ CONFIG_SCSI=y ...@@ -161,7 +176,6 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM) # SCSI support type (disk, tape, CD-ROM)
# #
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y CONFIG_CHR_DEV_ST=y
# CONFIG_CHR_DEV_OSST is not set # CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set # CONFIG_BLK_DEV_SR is not set
...@@ -170,8 +184,8 @@ CONFIG_CHR_DEV_ST=y ...@@ -170,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
# #
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
# #
# CONFIG_SCSI_DEBUG_QUEUES is not set
# CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_REPORT_LUNS is not set
CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y CONFIG_SCSI_LOGGING=y
...@@ -179,52 +193,116 @@ CONFIG_SCSI_LOGGING=y ...@@ -179,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
# SCSI low-level drivers # SCSI low-level drivers
# #
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set # CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set # CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR_D700 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set # CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set # CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set # CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set # CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
CONFIG_SCSI_QLOGIC_ISP=y
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SIM710 is not set # CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set # CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_DEBUG is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support (EXPERIMENTAL)
#
# CONFIG_IEEE1394 is not set
#
# I2O device support
#
# CONFIG_I2O is not set
#
# Networking support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
CONFIG_UNIX=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_IPV6 is not set
# CONFIG_XFRM_USER is not set
# #
# Network device support # SCTP Configuration (EXPERIMENTAL)
# #
CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_LLC is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
# #
...@@ -235,39 +313,44 @@ CONFIG_NETDEVICES=y ...@@ -235,39 +313,44 @@ CONFIG_NETDEVICES=y
# CONFIG_BONDING is not set # CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set # CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set # CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
# #
# Ethernet (10 or 100Mbit) # Ethernet (10 or 100Mbit)
# #
CONFIG_NET_ETHERNET=y CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
CONFIG_SGI_IOC3_ETH=y CONFIG_SGI_IOC3_ETH=y
# CONFIG_SUNLANCE is not set
# CONFIG_HAPPYMEAL is not set # CONFIG_HAPPYMEAL is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNLANCE is not set
# CONFIG_SUNGEM is not set # CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set # CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set #
# CONFIG_NET_VENDOR_RACAL is not set # Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set # CONFIG_HP100 is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_PCI is not set # CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
# #
# Ethernet (1000 Mbit) # Ethernet (1000 Mbit)
# #
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
# CONFIG_DL2K is not set # CONFIG_DL2K is not set
# CONFIG_MYRI_SBUS is not set # CONFIG_E1000 is not set
# CONFIG_NS83820 is not set # CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set # CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_IXGB is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_PLIP is not set # CONFIG_HIPPI is not set
# CONFIG_PPP is not set # CONFIG_PPP is not set
# CONFIG_SLIP is not set # CONFIG_SLIP is not set
...@@ -277,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y ...@@ -277,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
# CONFIG_NET_RADIO is not set # CONFIG_NET_RADIO is not set
# #
# Token Ring devices # Token Ring devices (depends on LLC=y)
# #
# CONFIG_TR is not set
# CONFIG_NET_FC is not set # CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set
# #
# Wan interfaces # Wan interfaces
...@@ -300,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y ...@@ -300,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
# #
# ISDN subsystem # ISDN subsystem
# #
# CONFIG_ISDN is not set # CONFIG_ISDN_BOOL is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
#
# Input device support
#
CONFIG_INPUT=y
#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
# CONFIG_SERIO_I8042 is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# #
# Old CD-ROM drivers (not SCSI, not IDE) # Input Device Drivers
# #
# CONFIG_CD_NO_IDESCSI is not set # CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
# #
# Character devices # Character devices
# #
# CONFIG_VT is not set # CONFIG_VT is not set
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256 CONFIG_UNIX98_PTY_COUNT=256
...@@ -324,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256 ...@@ -324,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_I2C is not set # CONFIG_I2C is not set
# #
# Mice # I2C Hardware Sensors Mainboard support
# #
# CONFIG_BUSMOUSE is not set
# CONFIG_MOUSE is not set
# #
# Joysticks # I2C Hardware Sensors Chip support
# #
# CONFIG_INPUT_GAMEPORT is not set # CONFIG_I2C_SENSOR is not set
# #
# Input core support is needed for gameports # Mice
# #
# CONFIG_BUSMOUSE is not set
# CONFIG_QIC02_TAPE is not set
# #
# Input core support is needed for joysticks # IPMI
# #
# CONFIG_QIC02_TAPE is not set # CONFIG_IPMI_HANDLER is not set
# #
# Watchdog Cards # Watchdog Cards
# #
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set # CONFIG_NVRAM is not set
# CONFIG_RTC is not set # CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
CONFIG_SGI_IP27_RTC=y
# CONFIG_DTLK is not set # CONFIG_DTLK is not set
# CONFIG_R3964 is not set # CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set # CONFIG_APPLICOM is not set
...@@ -360,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256 ...@@ -360,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
# CONFIG_AGP is not set # CONFIG_AGP is not set
# CONFIG_DRM is not set # CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HANGCHECK_TIMER is not set
# #
# Multimedia devices # Multimedia devices
# #
# CONFIG_VIDEO_DEV is not set # CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
# #
# File systems # File systems
# #
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
CONFIG_JBD_DEBUG=y
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
CONFIG_AUTOFS_FS=y CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set #
# CONFIG_REISERFS_PROC_INFO is not set # CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
# CONFIG_FAT_FS is not set
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS=y
CONFIG_DEVPTS_FS_XATTR=y
CONFIG_DEVPTS_FS_SECURITY=y
# CONFIG_TMPFS is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set # CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set # CONFIG_HFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set # CONFIG_BFS_FS is not set
# CONFIG_CMS_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set # CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set # CONFIG_VXFS_FS is not set
# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_FREEVXFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_UFS_FS_WRITE is not set
# #
# Network File Systems # Network File Systems
# #
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y # CONFIG_NFS_V4 is not set
# CONFIG_NFSD is not set # CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set CONFIG_ROOT_NFS=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=y
# CONFIG_SUNRPC_GSS is not set
# CONFIG_SMB_FS is not set # CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set # CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set # CONFIG_CODA_FS is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set # CONFIG_INTERMEZZO_FS is not set
# CONFIG_NCPFS_STRONG is not set # CONFIG_AFS_FS is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not set
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
# #
# Partition Types # Partition Types
...@@ -456,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y ...@@ -456,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set # CONFIG_LDM_PARTITION is not set
# CONFIG_NEC98_PARTITION is not set
CONFIG_SGI_PARTITION=y CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set # CONFIG_SUN_PARTITION is not set
# CONFIG_SMB_NLS is not set # CONFIG_EFI_PARTITION is not set
# CONFIG_NLS is not set
CONFIG_KCORE_ELF=y #
# Graphics support
#
# #
# Sound # Sound
...@@ -472,113 +623,30 @@ CONFIG_KCORE_ELF=y ...@@ -472,113 +623,30 @@ CONFIG_KCORE_ELF=y
# USB support # USB support
# #
# CONFIG_USB is not set # CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
# #
# USB Controllers # Bluetooth support
# #
# CONFIG_USB_UHCI is not set # CONFIG_BT is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
# #
# USB Device Class drivers # Kernel hacking
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH is not set
# CONFIG_USB_STORAGE is not set
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# USB Human Interface Devices (HID)
#
#
# Input core support is needed for USB HID
#
#
# USB Imaging devices
#
# CONFIG_USB_DC2XX is not set
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
#
#
# Video4Linux support is needed for USB Multimedia device support
#
# CONFIG_USB_DABUSB is not set
#
# USB Network adaptors
#
# CONFIG_USB_PLUSB is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_USBNET is not set
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
# #
# CONFIG_USB_SERIAL is not set CONFIG_CROSSCOMPILE=y
# CONFIG_USB_SERIAL_GENERIC is not set # CONFIG_DEBUG_KERNEL is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_OMNINET is not set
# #
# Miscellaneous USB drivers # Security options
# #
# CONFIG_USB_RIO500 is not set # CONFIG_SECURITY is not set
# CONFIG_USB_ID75 is not set
# #
# Input core support # Cryptographic options
# #
# CONFIG_INPUT is not set # CONFIG_CRYPTO is not set
# CONFIG_INPUT_KEYBDEV is not set
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
# #
# Kernel hacking # Library routines
# #
CONFIG_CROSSCOMPILE=y # CONFIG_CRC32 is not set
# CONFIG_REMOTE_DEBUG is not set
# CONFIG_MAGIC_SYSRQ is not set
/*
* Dynamic DMA mapping support.
*
* On the Origin there is dynamic DMA address translation for all PCI DMA.
* However we don't use this facility yet but rely on the 2gb direct
* mapped DMA window for PCI64. So consistent alloc/free are merely page
* allocation/freeing. The rest of the dynamic DMA mapping interface is
* implemented in <asm/pci.h>. So this code will fail with more than
* 2gb of memory.
*/
#include <linux/types.h>
#include <linux/mm.h>
#include <linux/string.h>
#include <linux/pci.h>
#include <asm/io.h>
/* Pure 2^n version of get_order */
extern __inline__ int __get_order(unsigned long size)
{
int order;
size = (size-1) >> (PAGE_SHIFT-1);
order = -1;
do {
size >>= 1;
order++;
} while (size);
return order;
}
void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
dma_addr_t *dma_handle)
{
void *ret;
int gfp = GFP_ATOMIC;
int order = __get_order(size);
if (hwdev == NULL || hwdev->dma_mask != 0xffffffff)
gfp |= GFP_DMA;
ret = (void *)__get_free_pages(gfp, order);
if (ret != NULL) {
memset(ret, 0, size);
*dma_handle = (bus_to_baddr[hwdev->bus->number] | __pa(ret));
}
return ret;
}
void pci_free_consistent(struct pci_dev *hwdev, size_t size,
void *vaddr, dma_addr_t dma_handle)
{
free_pages((unsigned long)vaddr, __get_order(size));
}
/*
* Map a single buffer of the indicated size for DMA in streaming mode.
* The 32-bit bus address to use is returned.
*
* Once the device is given the dma address, the device owns this memory
* until either pci_unmap_single or pci_dma_sync_single is performed.
*/
dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size,
int direction)
{
if (direction == PCI_DMA_NONE)
BUG();
return (bus_to_baddr[hwdev->bus->number] | __pa(ptr));
}
/*
* Unmap a single streaming mode DMA translation. The dma_addr and size
* must match what was provided for in a previous pci_map_single call. All
* other usages are undefined.
*
* After this call, reads by the cpu to the buffer are guaranteed to see
* whatever the device wrote there.
*/
void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
size_t size, int direction)
{
if (direction == PCI_DMA_NONE)
BUG();
/* Nothing to do */
}
/*
* Map a set of buffers described by scatterlist in streaming
* mode for DMA. This is the scather-gather version of the
* above pci_map_single interface. Here the scatter gather list
* elements are each tagged with the appropriate dma address
* and length. They are obtained via sg_dma_{address,length}(SG).
*
* NOTE: An implementation may be able to use a smaller number of
* DMA address/length pairs than there are SG table elements.
* (for example via virtual mapping capabilities)
* The routine returns the number of addr/length pairs actually
* used, at most nents.
*
* Device ownership issues as mentioned above for pci_map_single are
* the same here.
*/
int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents,
int direction)
{
int i;
if (direction == PCI_DMA_NONE)
BUG();
/* Make sure that gcc doesn't leave the empty loop body. */
for (i = 0; i < nents; i++, sg++) {
sg->address = (char *)(bus_to_baddr[hwdev->bus->number] | __pa(sg->address));
}
return nents;
}
/*
* Unmap a set of streaming mode DMA translations.
* Again, cpu read rules concerning calls here are the same as for
* pci_unmap_single() above.
*/
void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents,
int direction)
{
if (direction == PCI_DMA_NONE)
BUG();
/* Nothing to do */
}
/*
* Make physical memory consistent for a single
* streaming mode DMA translation after a transfer.
*
* If you perform a pci_map_single() but wish to interrogate the
* buffer using the cpu, yet do not wish to teardown the PCI dma
* mapping, you must call this function before doing so. At the
* next point you give the PCI dma address back to the card, the
* device again owns the buffer.
*/
void pci_dma_sync_single(struct pci_dev *hwdev, dma_addr_t dma_handle,
size_t size, int direction)
{
if (direction == PCI_DMA_NONE)
BUG();
}
/*
* Make physical memory consistent for a set of streaming
* mode DMA translations after a transfer.
*
* The same as pci_dma_sync_single but for a scatter-gather list,
* same rules and usage.
*/
void pci_dma_sync_sg(struct pci_dev *hwdev, struct scatterlist *sg,
int nelems, int direction)
{
if (direction == PCI_DMA_NONE)
BUG();
}
/*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 1999, 2000 Ralf Baechle (ralf@gnu.org)
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <asm/sn/arch.h>
#include <asm/pci/bridge.h>
#include <asm/paccess.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/sn/sn0/hub.h>
/*
* Max #PCI busses we can handle; ie, max #PCI bridges.
*/
#define MAX_PCI_BUSSES 40
/*
* Max #PCI devices (like scsi controllers) we handle on a bus.
*/
#define MAX_DEVICES_PER_PCIBUS 8
/*
* No locking needed until PCI initialization is done parallely.
*/
int irqstore[MAX_PCI_BUSSES][MAX_DEVICES_PER_PCIBUS];
int lastirq = BASE_PCI_IRQ;
/*
* Translate from irq to software PCI bus number and PCI slot.
*/
int irq_to_bus[MAX_PCI_BUSSES * MAX_DEVICES_PER_PCIBUS];
int irq_to_slot[MAX_PCI_BUSSES * MAX_DEVICES_PER_PCIBUS];
/*
* The Bridge ASIC supports both type 0 and type 1 access. Type 1 is
* not really documented, so right now I can't write code which uses it.
* Therefore we use type 0 accesses for now even though they won't work
* correcly for PCI-to-PCI bridges.
*/
#define CF0_READ_PCI_CFG(dev,where,value,bm,mask) \
do { \
bridge_t *bridge; \
int slot = PCI_SLOT(dev->devfn); \
int fn = PCI_FUNC(dev->devfn); \
volatile u32 *addr; \
u32 cf, __bit; \
unsigned int bus_id = (unsigned) dev->bus->number; \
\
bridge = (bridge_t *) NODE_SWIN_BASE(bus_to_nid[bus_id], \
bus_to_wid[bus_id]); \
\
if (dev->vendor == PCI_VENDOR_ID_SGI \
&& dev->device == PCI_DEVICE_ID_SGI_IOC3 \
&& ((where >= 0x14 && where < 0x40) || (where >= 0x48))) { \
*value = 0; \
return PCIBIOS_SUCCESSFUL; \
} \
\
__bit = (((where) & (bm)) << 3); \
addr = &bridge->b_type0_cfg_dev[slot].f[fn].l[where >> 2]; \
if (get_dbe(cf, addr)) \
return PCIBIOS_DEVICE_NOT_FOUND; \
*value = (cf >> __bit) & (mask); \
return PCIBIOS_SUCCESSFUL; \
} while (0)
static int
pci_conf0_read_config_byte(struct pci_dev *dev, int where, u8 *value)
{
CF0_READ_PCI_CFG(dev,where,value,3,0xff);
}
static int
pci_conf0_read_config_word(struct pci_dev *dev, int where, u16 *value)
{
CF0_READ_PCI_CFG(dev,where,value,2,0xffff);
}
static int
pci_conf0_read_config_dword(struct pci_dev *dev, int where, u32 *value)
{
CF0_READ_PCI_CFG(dev,where,value,0,0xffffffff);
}
#define CF0_WRITE_PCI_CFG(dev,where,value,bm,mask) \
do { \
bridge_t *bridge; \
int slot = PCI_SLOT(dev->devfn); \
int fn = PCI_FUNC(dev->devfn); \
volatile u32 *addr; \
u32 cf, __bit; \
unsigned int bus_id = (unsigned) dev->bus->number; \
\
bridge = (bridge_t *) NODE_SWIN_BASE(bus_to_nid[bus_id], \
bus_to_wid[bus_id]); \
\
if (dev->vendor == PCI_VENDOR_ID_SGI \
&& dev->device == PCI_DEVICE_ID_SGI_IOC3 \
&& ((where >= 0x14 && where < 0x40) || (where >= 0x48))) \
return PCIBIOS_SUCCESSFUL; \
\
__bit = (((where) & (bm)) << 3); \
addr = &bridge->b_type0_cfg_dev[slot].f[fn].l[where >> 2]; \
if (get_dbe(cf, addr)) \
return PCIBIOS_DEVICE_NOT_FOUND; \
cf &= (~mask); \
cf |= (value); \
put_dbe(cf, addr); \
return PCIBIOS_SUCCESSFUL; \
} while (0)
static int
pci_conf0_write_config_byte(struct pci_dev *dev, int where, u8 value)
{
CF0_WRITE_PCI_CFG(dev,where,value,3,0xff);
}
static int
pci_conf0_write_config_word(struct pci_dev *dev, int where, u16 value)
{
CF0_WRITE_PCI_CFG(dev,where,value,2,0xffff);
}
static int
pci_conf0_write_config_dword(struct pci_dev *dev, int where, u32 value)
{
CF0_WRITE_PCI_CFG(dev,where,value,0,0xffffffff);
}
static struct pci_ops bridge_pci_ops = {
pci_conf0_read_config_byte,
pci_conf0_read_config_word,
pci_conf0_read_config_dword,
pci_conf0_write_config_byte,
pci_conf0_write_config_word,
pci_conf0_write_config_dword
};
void __init pcibios_init(void)
{
struct pci_ops *ops = &bridge_pci_ops;
int i;
ioport_resource.end = ~0UL;
for (i=0; i<num_bridges; i++) {
printk("PCI: Probing PCI hardware on host bus %2d.\n", i);
pci_scan_bus(i, ops, NULL);
}
}
static inline u8
bridge_swizzle(u8 pin, u8 slot)
{
return (((pin-1) + slot) % 4) + 1;
}
static u8 __init
pci_swizzle(struct pci_dev *dev, u8 *pinp)
{
u8 pin = *pinp;
while (dev->bus->self) { /* Move up the chain of bridges. */
pin = bridge_swizzle(pin, PCI_SLOT(dev->devfn));
dev = dev->bus->self;
}
*pinp = pin;
return PCI_SLOT(dev->devfn);
}
/*
* All observed requests have pin == 1. We could have a global here, that
* gets incremented and returned every time - unfortunately, pci_map_irq
* may be called on the same device over and over, and need to return the
* same value. On O2000, pin can be 0 or 1, and PCI slots can be [0..7].
*
* A given PCI device, in general, should be able to intr any of the cpus
* on any one of the hubs connected to its xbow.
*/
static int __init
pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
{
if ((dev->bus->number >= MAX_PCI_BUSSES)
|| (pin != 1)
|| (slot >= MAX_DEVICES_PER_PCIBUS))
panic("Increase supported PCI busses %d,%d,%d\n",
dev->bus->number, slot, pin);
/*
* Already assigned? Then return previously assigned value ...
*/
if (irqstore[dev->bus->number][slot])
return irqstore[dev->bus->number][slot];
irq_to_bus[lastirq] = dev->bus->number;
irq_to_slot[lastirq] = slot;
irqstore[dev->bus->number][slot] = lastirq;
lastirq++;
return lastirq - 1;
}
void __init
pcibios_update_irq(struct pci_dev *dev, int irq)
{
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq);
}
#warning pcibios_update_resource() is now a generic implementation - please check
void __init
pcibios_fixup_bus(struct pci_bus *b)
{
pci_fixup_irqs(pci_swizzle, pci_map_irq);
}
int __init
pcibios_enable_device(struct pci_dev *dev)
{
/* Not needed, since we enable all devices at startup. */
return 0;
}
void __init
pcibios_align_resource(void *data, struct resource *res,
unsigned long size, unsigned long align)
{
}
unsigned __init int pcibios_assign_all_busses(void)
{
return 0;
}
char * __init
pcibios_setup(char *str)
{
/* Nothing to do for now. */
return str;
}
/*
* Device might live on a subordinate PCI bus. XXX Walk up the chain of buses
* to find the slot number in sense of the bridge device register.
* XXX This also means multiple devices might rely on conflicting bridge
* settings.
*/
static void __init
pci_disable_swapping(struct pci_dev *dev)
{
unsigned int bus_id = (unsigned) dev->bus->number;
bridge_t *bridge = (bridge_t *) NODE_SWIN_BASE(bus_to_nid[bus_id],
bus_to_wid[bus_id]);
int slot = PCI_SLOT(dev->devfn);
/* Turn off byte swapping */
bridge->b_device[slot].reg &= ~BRIDGE_DEV_SWAP_DIR;
bridge->b_widget.w_tflush; /* Flush */
}
static void __init
pci_enable_swapping(struct pci_dev *dev)
{
unsigned int bus_id = (unsigned) dev->bus->number;
bridge_t *bridge = (bridge_t *) NODE_SWIN_BASE(bus_to_nid[bus_id],
bus_to_wid[bus_id]);
int slot = PCI_SLOT(dev->devfn);
/* Turn on byte swapping */
bridge->b_device[slot].reg |= BRIDGE_DEV_SWAP_DIR;
bridge->b_widget.w_tflush; /* Flush */
}
static void __init
pci_fixup_ioc3(struct pci_dev *d)
{
unsigned long bus_id = (unsigned) d->bus->number;
printk("PCI: Fixing base addresses for IOC3 device %s\n", d->slot_name);
d->resource[0].start |= NODE_OFFSET(bus_to_nid[bus_id]);
d->resource[0].end |= NODE_OFFSET(bus_to_nid[bus_id]);
pci_disable_swapping(d);
}
static void __init
pci_fixup_isp1020(struct pci_dev *d)
{
unsigned short command;
d->resource[0].start |= ((unsigned long)(bus_to_nid[d->bus->number])<<32);
printk("PCI: Fixing isp1020 in [bus:slot.fn] %s\n", d->slot_name);
/*
* Configure device to allow bus mastering, i/o and memory mapping.
* Older qlogicisp driver expects to have the IO space enable
* bit set. Things stop working if we program the controllers as not
* having PCI_COMMAND_MEMORY, so we have to fudge the mem_flags.
*/
pci_set_master(d);
pci_read_config_word(d, PCI_COMMAND, &command);
command |= PCI_COMMAND_MEMORY;
command |= PCI_COMMAND_IO;
pci_write_config_word(d, PCI_COMMAND, command);
d->resource[1].flags |= 1;
pci_enable_swapping(d);
}
static void __init
pci_fixup_isp2x00(struct pci_dev *d)
{
unsigned int bus_id = (unsigned) d->bus->number;
bridge_t *bridge = (bridge_t *) NODE_SWIN_BASE(bus_to_nid[bus_id],
bus_to_wid[bus_id]);
bridgereg_t devreg;
int i;
int slot = PCI_SLOT(d->devfn);
unsigned int start;
unsigned short command;
printk("PCI: Fixing isp2x00 in [bus:slot.fn] %s\n", d->slot_name);
/* set the resource struct for this device */
start = (u32) (u64)bridge; /* yes, we want to lose the upper 32 bits here */
start |= BRIDGE_DEVIO(slot);
d->resource[0].start = start;
d->resource[0].end = d->resource[0].start + 0xff;
d->resource[0].flags = IORESOURCE_IO;
d->resource[1].start = start;
d->resource[1].end = d->resource[0].start + 0xfff;
d->resource[1].flags = IORESOURCE_MEM;
/*
* set the bridge device(x) reg for this device
*/
devreg = bridge->b_device[slot].reg;
/* point device(x) to it appropriate small window */
devreg &= ~BRIDGE_DEV_OFF_MASK;
devreg |= (start >> 20) & BRIDGE_DEV_OFF_MASK;
bridge->b_device[slot].reg = devreg;
pci_enable_swapping(d);
/* set card's base addr reg */
//pci_conf0_write_config_dword(d, PCI_BASE_ADDRESS_0, 0x500001);
//pci_conf0_write_config_dword(d, PCI_BASE_ADDRESS_1, 0x8b00000);
//pci_conf0_write_config_dword(d, PCI_ROM_ADDRESS, 0x8b20000);
/* I got these from booting irix on system...*/
pci_conf0_write_config_dword(d, PCI_BASE_ADDRESS_0, 0x200001);
//pci_conf0_write_config_dword(d, PCI_BASE_ADDRESS_1, 0xf800000);
pci_conf0_write_config_dword(d, PCI_ROM_ADDRESS, 0x10200000);
pci_conf0_write_config_dword(d, PCI_BASE_ADDRESS_1, start);
//pci_conf0_write_config_dword(d, PCI_ROM_ADDRESS, (start | 0x20000));
/* set cache line size */
pci_conf0_write_config_dword(d, PCI_CACHE_LINE_SIZE, 0xf080);
/* set pci bus timeout */
bridge->b_bus_timeout |= BRIDGE_BUS_PCI_RETRY_HLD(0x3);
bridge->b_wid_tflush;
printk("PCI: bridge bus timeout= 0x%x \n", bridge->b_bus_timeout);
/* set host error field */
bridge->b_int_host_err = 0x44;
bridge->b_wid_tflush;
bridge->b_wid_tflush; /* wait until Bridge PIO complete */
for (i=0; i<8; i++)
printk("PCI: device(%d)= 0x%x\n",i,bridge->b_device[i].reg);
/* configure device to allow bus mastering, i/o and memory mapping */
pci_set_master(d);
pci_read_config_word(d, PCI_COMMAND, &command);
command |= PCI_COMMAND_MEMORY;
command |= PCI_COMMAND_IO;
pci_write_config_word(d, PCI_COMMAND, command);
/*d->resource[1].flags |= 1;*/
}
struct pci_fixup pcibios_fixups[] = {
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
pci_fixup_ioc3 },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP1020,
pci_fixup_isp1020 },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100,
pci_fixup_isp2x00 },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200,
pci_fixup_isp2x00 },
{ 0 }
};
/*
* Driver for the SGS-Thomson M48T35 Timekeeper RAM chip
*
* Real Time Clock interface for Linux
*
* TODO: Implement periodic interrupts.
*
* Copyright (C) 2000 Silicon Graphics, Inc.
* Written by Ulf Carlsson (ulfc@engr.sgi.com)
*
* Based on code written by Paul Gortmaker.
*
* This driver allows use of the real time clock (built into
* nearly all computers) from user space. It exports the /dev/rtc
* interface supporting various ioctl() and also the /proc/rtc
* pseudo-file for status information.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
*/
#define RTC_VERSION "1.09b"
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/miscdevice.h>
#include <linux/ioport.h>
#include <linux/fcntl.h>
#include <linux/rtc.h>
#include <linux/init.h>
#include <linux/poll.h>
#include <linux/proc_fs.h>
#include <linux/smp_lock.h>
#include <linux/bcd.h>
#include <asm/m48t35.h>
#include <asm/sn/ioc3.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/sn/sn0/hub.h>
static int rtc_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg);
static int rtc_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data);
static void get_rtc_time(struct rtc_time *rtc_tm);
static atomic_t rtc_ready = ATOMIC_INIT(1);
static unsigned long rtc_freq; /* Current periodic IRQ rate */
static struct m48t35_rtc *rtc;
/*
* If this driver ever becomes modularised, it will be really nice
* to make the epoch retain its value across module reload...
*/
static unsigned long epoch = 1970; /* year corresponding to 0x00 */
static const unsigned char days_in_mo[] =
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg)
{
struct rtc_time wtime;
switch (cmd) {
case RTC_RD_TIME: /* Read the time/date from RTC */
{
get_rtc_time(&wtime);
break;
}
case RTC_SET_TIME: /* Set the RTC */
{
struct rtc_time rtc_tm;
unsigned char mon, day, hrs, min, sec, leap_yr;
unsigned int yrs;
unsigned long flags;
if (!capable(CAP_SYS_TIME))
return -EACCES;
if (copy_from_user(&rtc_tm, (struct rtc_time*)arg,
sizeof(struct rtc_time)))
return -EFAULT;
yrs = rtc_tm.tm_year + 1900;
mon = rtc_tm.tm_mon + 1; /* tm_mon starts at zero */
day = rtc_tm.tm_mday;
hrs = rtc_tm.tm_hour;
min = rtc_tm.tm_min;
sec = rtc_tm.tm_sec;
if (yrs < 1970)
return -EINVAL;
leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400));
if ((mon > 12) || (day == 0))
return -EINVAL;
if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr)))
return -EINVAL;
if ((hrs >= 24) || (min >= 60) || (sec >= 60))
return -EINVAL;
if ((yrs -= epoch) > 255) /* They are unsigned */
return -EINVAL;
save_flags(flags);
cli();
if (yrs > 169) {
restore_flags(flags);
return -EINVAL;
}
if (yrs >= 100)
yrs -= 100;
BIN_TO_BCD(sec);
BIN_TO_BCD(min);
BIN_TO_BCD(hrs);
BIN_TO_BCD(day);
BIN_TO_BCD(mon);
BIN_TO_BCD(yrs);
rtc->control &= ~M48T35_RTC_SET;
rtc->year = yrs;
rtc->month = mon;
rtc->date = day;
rtc->hour = hrs;
rtc->min = min;
rtc->sec = sec;
rtc->control &= ~M48T35_RTC_SET;
restore_flags(flags);
return 0;
}
default:
return -EINVAL;
}
return copy_to_user((void *)arg, &wtime, sizeof wtime) ? -EFAULT : 0;
}
/*
* We enforce only one user at a time here with the open/close.
* Also clear the previous interrupt data on an open, and clean
* up things on a close.
*/
static int rtc_open(struct inode *inode, struct file *file)
{
if( atomic_dec_and_test( &rtc_ready ) )
{
atomic_inc( &rtc_ready );
return -EBUSY;
}
return 0;
}
static int rtc_release(struct inode *inode, struct file *file)
{
atomic_inc( &rtc_ready );
return 0;
}
/*
* The various file operations we support.
*/
static struct file_operations rtc_fops = {
.owner = THIS_MODULE,
.ioctl = rtc_ioctl,
.open = rtc_open,
.release = rtc_release,
};
static struct miscdevice rtc_dev=
{
RTC_MINOR,
"rtc",
&rtc_fops
};
static int __init rtc_init(void)
{
unsigned long flags;
nasid_t nid;
nid = get_nasid();
rtc = (struct m48t35_rtc *)
KL_CONFIG_CH_CONS_INFO(nid)->memory_base + IOC3_BYTEBUS_DEV0;
printk(KERN_INFO "Real Time Clock Driver v%s\n", RTC_VERSION);
if (misc_register(&rtc_dev)) {
printk(KERN_ERR "rtc: cannot register misc device.\n");
return -ENODEV;
}
if (!create_proc_read_entry ("rtc", 0, NULL, rtc_read_proc, NULL)) {
printk(KERN_ERR "rtc: cannot create /proc/rtc.\n");
misc_deregister(&rtc_dev);
return -ENOENT;
}
save_flags(flags);
cli();
restore_flags(flags);
rtc_freq = 1024;
return 0;
}
static void __exit rtc_exit (void)
{
/* interrupts and timer disabled at this point by rtc_release */
remove_proc_entry ("rtc", NULL);
misc_deregister(&rtc_dev);
}
module_init(rtc_init);
module_exit(rtc_exit);
/*
* Info exported via "/proc/rtc".
*/
static int rtc_get_status(char *buf)
{
char *p;
struct rtc_time tm;
/*
* Just emulate the standard /proc/rtc
*/
p = buf;
get_rtc_time(&tm);
/*
* There is no way to tell if the luser has the RTC set for local
* time or for Universal Standard Time (GMT). Probably local though.
*/
p += sprintf(p,
"rtc_time\t: %02d:%02d:%02d\n"
"rtc_date\t: %04d-%02d-%02d\n"
"rtc_epoch\t: %04lu\n"
"24hr\t\t: yes\n",
tm.tm_hour, tm.tm_min, tm.tm_sec,
tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, epoch);
return p - buf;
}
static int rtc_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
int len = rtc_get_status(page);
if (len <= off+count) *eof = 1;
*start = page + off;
len -= off;
if (len>count) len = count;
if (len<0) len = 0;
return len;
}
static void get_rtc_time(struct rtc_time *rtc_tm)
{
unsigned long flags;
/*
* Do we need to wait for the last update to finish?
*/
/*
* Only the values that we read from the RTC are set. We leave
* tm_wday, tm_yday and tm_isdst untouched. Even though the
* RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated
* by the RTC when initially set to a non-zero value.
*/
save_flags(flags);
cli();
rtc->control |= M48T35_RTC_READ;
rtc_tm->tm_sec = rtc->sec;
rtc_tm->tm_min = rtc->min;
rtc_tm->tm_hour = rtc->hour;
rtc_tm->tm_mday = rtc->date;
rtc_tm->tm_mon = rtc->month;
rtc_tm->tm_year = rtc->year;
rtc->control &= ~M48T35_RTC_READ;
restore_flags(flags);
BCD_TO_BIN(rtc_tm->tm_sec);
BCD_TO_BIN(rtc_tm->tm_min);
BCD_TO_BIN(rtc_tm->tm_hour);
BCD_TO_BIN(rtc_tm->tm_mday);
BCD_TO_BIN(rtc_tm->tm_mon);
BCD_TO_BIN(rtc_tm->tm_year);
/*
* Account for differences between how the RTC uses the values
* and how they are defined in a struct rtc_time;
*/
if ((rtc_tm->tm_year += (epoch - 1900)) <= 69)
rtc_tm->tm_year += 100;
rtc_tm->tm_mon--;
}
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
* Bridge address map * Bridge address map
*/ */
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) #ifndef __ASSEMBLY__
/* /*
* All accesses to bridge hardware registers must be done * All accesses to bridge hardware registers must be done
...@@ -283,7 +283,7 @@ typedef struct bridge_err_cmdword_s { ...@@ -283,7 +283,7 @@ typedef struct bridge_err_cmdword_s {
} bridge_err_cmdword_t; } bridge_err_cmdword_t;
#define berr_field berr_un.berr_st #define berr_field berr_un.berr_st
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* The values of these macros can and should be crosschecked * The values of these macros can and should be crosschecked
...@@ -793,7 +793,7 @@ typedef struct bridge_err_cmdword_s { ...@@ -793,7 +793,7 @@ typedef struct bridge_err_cmdword_s {
#define PCI64_ATTR_RMF_MASK 0x00ff000000000000 #define PCI64_ATTR_RMF_MASK 0x00ff000000000000
#define PCI64_ATTR_RMF_SHFT 48 #define PCI64_ATTR_RMF_SHFT 48
#if LANGUAGE_C #ifndef __ASSEMBLY__
/* Address translation entry for mapped pci32 accesses */ /* Address translation entry for mapped pci32 accesses */
typedef union ate_u { typedef union ate_u {
u64 ent; u64 ent;
...@@ -809,7 +809,7 @@ typedef union ate_u { ...@@ -809,7 +809,7 @@ typedef union ate_u {
u64 valid:1; u64 valid:1;
} field; } field;
} ate_t; } ate_t;
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#define ATE_V 0x01 #define ATE_V 0x01
#define ATE_CO 0x02 #define ATE_CO 0x02
......
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
#include <linux/config.h> #include <linux/config.h>
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#include <linux/types.h> #include <linux/types.h>
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#include <asm/addrspace.h> #include <asm/addrspace.h>
#include <asm/reg.h> #include <asm/reg.h>
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#endif #endif
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#if defined(CONFIG_SGI_IO) /* FIXME */ #if defined(CONFIG_SGI_IO) /* FIXME */
#define PS_UINT_CAST (__psunsigned_t) #define PS_UINT_CAST (__psunsigned_t)
...@@ -38,13 +38,13 @@ ...@@ -38,13 +38,13 @@
#define HUBREG_CAST (volatile hubreg_t *) #define HUBREG_CAST (volatile hubreg_t *)
#elif _LANGUAGE_ASSEMBLY #else /* __ASSEMBLY__ */
#define PS_UINT_CAST #define PS_UINT_CAST
#define UINT64_CAST #define UINT64_CAST
#define HUBREG_CAST #define HUBREG_CAST
#endif #endif /* __ASSEMBLY__ */
#define NASID_GET_META(_n) ((_n) >> NASID_LOCAL_BITS) #define NASID_GET_META(_n) ((_n) >> NASID_LOCAL_BITS)
...@@ -278,7 +278,7 @@ ...@@ -278,7 +278,7 @@
0x800000 + (_x))) 0x800000 + (_x)))
#endif /* CONFIG_SGI_IP27 */ #endif /* CONFIG_SGI_IP27 */
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#define HUB_L(_a) *(_a) #define HUB_L(_a) *(_a)
#define HUB_S(_a, _d) *(_a) = (_d) #define HUB_S(_a, _d) *(_a) = (_d)
...@@ -290,7 +290,7 @@ ...@@ -290,7 +290,7 @@
#define REMOTE_HUB_PI_L(_n, _sn, _r) HUB_L(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r))) #define REMOTE_HUB_PI_L(_n, _sn, _r) HUB_L(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)))
#define REMOTE_HUB_PI_S(_n, _sn, _r, _d) HUB_S(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)), (_d)) #define REMOTE_HUB_PI_S(_n, _sn, _r, _d) HUB_S(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)), (_d))
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* The following macros are used to get to a hub/bridge register, given * The following macros are used to get to a hub/bridge register, given
...@@ -367,7 +367,7 @@ ...@@ -367,7 +367,7 @@
#define KLI_KERN_XP 8 #define KLI_KERN_XP 8
#define KLI_KERN_PARTID 9 #define KLI_KERN_PARTID 9
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#define KLD_BASE(nasid) ((kldir_ent_t *) KLDIR_ADDR(nasid)) #define KLD_BASE(nasid) ((kldir_ent_t *) KLDIR_ADDR(nasid))
#define KLD_LAUNCH(nasid) (KLD_BASE(nasid) + KLI_LAUNCH) #define KLD_LAUNCH(nasid) (KLD_BASE(nasid) + KLI_LAUNCH)
...@@ -453,7 +453,7 @@ ...@@ -453,7 +453,7 @@
#define GPDA_ADDR(nasid) TO_NODE_CAC(nasid, GPDA_OFFSET) #define GPDA_ADDR(nasid) TO_NODE_CAC(nasid, GPDA_OFFSET)
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#endif /* _ASM_SN_ADDRS_H */ #endif /* _ASM_SN_ADDRS_H */
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#endif #endif
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) #ifndef __ASSEMBLY__
#if !defined(CONFIG_SGI_IO) #if !defined(CONFIG_SGI_IO)
typedef u64 hubreg_t; typedef u64 hubreg_t;
typedef u64 nic_t; typedef u64 nic_t;
...@@ -44,7 +44,7 @@ typedef u64 nic_t; ...@@ -44,7 +44,7 @@ typedef u64 nic_t;
#define makespnum(_nasid, _slice) \ #define makespnum(_nasid, _slice) \
(((_nasid) << CPUS_PER_NODE_SHFT) | (_slice)) (((_nasid) << CPUS_PER_NODE_SHFT) | (_slice))
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) #ifndef __ASSEMBLY__
#define INVALID_NASID (nasid_t)-1 #define INVALID_NASID (nasid_t)-1
#define INVALID_CNODEID (cnodeid_t)-1 #define INVALID_CNODEID (cnodeid_t)-1
...@@ -102,7 +102,7 @@ nasid_t compact_to_nasid_nodeid(cnodeid_t cnode); ...@@ -102,7 +102,7 @@ nasid_t compact_to_nasid_nodeid(cnodeid_t cnode);
extern int node_getlastslot(cnodeid_t); extern int node_getlastslot(cnodeid_t);
#endif /* _LANGUAGE_C || _LANGUAGE_C_PLUS_PLUS */ #endif /* !__ASSEMBLY__ */
#define SLOT_BITMASK (MAX_MEM_SLOTS - 1) #define SLOT_BITMASK (MAX_MEM_SLOTS - 1)
#define SLOT_SIZE (1LL<<SLOT_SHIFT) #define SLOT_SIZE (1LL<<SLOT_SHIFT)
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#define G_PARTIDOFF 40 #define G_PARTIDOFF 40
#define G_TABLEOFF 128 #define G_TABLEOFF 128
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef struct gda { typedef struct gda {
u32 g_magic; /* GDA magic number */ u32 g_magic; /* GDA magic number */
...@@ -67,7 +67,7 @@ typedef struct gda { ...@@ -67,7 +67,7 @@ typedef struct gda {
#define GDA ((gda_t*) GDA_ADDR(get_nasid())) #define GDA ((gda_t*) GDA_ADDR(get_nasid()))
#endif /* __LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* Define: PART_GDA_VERSION * Define: PART_GDA_VERSION
* Purpose: Define the minimum version of the GDA required, lower * Purpose: Define the minimum version of the GDA required, lower
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include <asm/sn/intr_public.h> #include <asm/sn/intr_public.h>
#if _LANGUAGE_C #ifndef __ASSEMBLY__
/* /*
* Macros to manipulate the interrupt register on the calling hub chip. * Macros to manipulate the interrupt register on the calling hub chip.
...@@ -43,9 +43,9 @@ ...@@ -43,9 +43,9 @@
REMOTE_HUB_S((_hub), PI_INT_PEND_MOD, (_level)), \ REMOTE_HUB_S((_hub), PI_INT_PEND_MOD, (_level)), \
REMOTE_HUB_L((_hub), PI_INT_PEND0) REMOTE_HUB_L((_hub), PI_INT_PEND0)
#else /* LANGUAGE_ASSEMBLY */ #else /* __ASSEMBLY__ */
#endif /* LANGUAGE_C */ #endif /* __ASSEMBLY__ */
/* /*
* Hard-coded interrupt levels: * Hard-coded interrupt levels:
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#define INTPEND0_MAXMASK (N_INTPEND0_MASKS - 1) #define INTPEND0_MAXMASK (N_INTPEND0_MASKS - 1)
#define INTPEND1_MAXMASK (N_INTPEND1_MASKS - 1) #define INTPEND1_MAXMASK (N_INTPEND1_MASKS - 1)
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#include <asm/sn/arch.h> #include <asm/sn/arch.h>
struct intr_vecblk_s; /* defined in asm/sn/intr.h */ struct intr_vecblk_s; /* defined in asm/sn/intr.h */
...@@ -49,5 +49,5 @@ typedef struct hub_intmasks_s { ...@@ -49,5 +49,5 @@ typedef struct hub_intmasks_s {
struct intr_vecblk_s *dispatch1; struct intr_vecblk_s *dispatch1;
} hub_intmasks_t; } hub_intmasks_t;
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#endif /* __ASM_SN_INTR_PUBLIC_H */ #endif /* __ASM_SN_INTR_PUBLIC_H */
...@@ -11,17 +11,7 @@ ...@@ -11,17 +11,7 @@
#include <linux/config.h> #include <linux/config.h>
#if !defined(CONFIG_SGI_IO) #ifdef CONFIG_SGI_IO
#include <asm/sn/sn0/addrs.h>
#define IO_SPACE_BASE IO_BASE
/* Because we only have PCI I/O ports. */
#define IO_SPACE_LIMIT 0xffffffff
/* No isa_* versions, the Origin doesn't have ISA / EISA bridges. */
#else /* CONFIG_SGI_IO */
#define IIO_ITTE_BASE 0x400160 /* base of translation table entries */ #define IIO_ITTE_BASE 0x400160 /* base of translation table entries */
#define IIO_ITTE(bigwin) (IIO_ITTE_BASE + 8*(bigwin)) #define IIO_ITTE(bigwin) (IIO_ITTE_BASE + 8*(bigwin))
...@@ -69,6 +59,17 @@ ...@@ -69,6 +59,17 @@
#include <asm/sn/sn0/hubio.h> #include <asm/sn/sn0/hubio.h>
#endif #endif
#else /* CONFIG_SGI_IO */
#include <asm/sn/sn0/addrs.h>
#define IO_SPACE_BASE IO_BASE
/* Because we only have PCI I/O ports. */
#define IO_SPACE_LIMIT 0xffffffff
/* No isa_* versions, the Origin doesn't have ISA / EISA bridges. */
#endif /* CONFIG_SGI_IO */ #endif /* CONFIG_SGI_IO */
#endif /* _ASM_SN_IO_H */ #endif /* _ASM_SN_IO_H */
...@@ -127,14 +127,14 @@ ...@@ -127,14 +127,14 @@
* 0x0 (0K) +-----------------------------------------+ * 0x0 (0K) +-----------------------------------------+
*/ */
#ifdef LANGUAGE_ASSEMBLY #ifdef __ASSEMBLY__
#define KLDIR_OFF_MAGIC 0x00 #define KLDIR_OFF_MAGIC 0x00
#define KLDIR_OFF_OFFSET 0x08 #define KLDIR_OFF_OFFSET 0x08
#define KLDIR_OFF_POINTER 0x10 #define KLDIR_OFF_POINTER 0x10
#define KLDIR_OFF_SIZE 0x18 #define KLDIR_OFF_SIZE 0x18
#define KLDIR_OFF_COUNT 0x20 #define KLDIR_OFF_COUNT 0x20
#define KLDIR_OFF_STRIDE 0x28 #define KLDIR_OFF_STRIDE 0x28
#endif /* LANGUAGE_ASSEMBLY */ #endif /* __ASSEMBLY__ */
#if !defined(CONFIG_SGI_IO) #if !defined(CONFIG_SGI_IO)
...@@ -209,7 +209,7 @@ ...@@ -209,7 +209,7 @@
#endif /* !CONFIG_SGI_IO */ #endif /* !CONFIG_SGI_IO */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef struct kldir_ent_s { typedef struct kldir_ent_s {
u64 magic; /* Indicates validity of entry */ u64 magic; /* Indicates validity of entry */
off_t offset; /* Offset from start of node space */ off_t offset; /* Offset from start of node space */
...@@ -225,7 +225,7 @@ typedef struct kldir_ent_s { ...@@ -225,7 +225,7 @@ typedef struct kldir_ent_s {
/* NOTE: These 16 bytes are used in the Partition KLDIR /* NOTE: These 16 bytes are used in the Partition KLDIR
entry to store partition info. Refer to klpart.h for this. */ entry to store partition info. Refer to klpart.h for this. */
} kldir_ent_t; } kldir_ent_t;
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#if defined(CONFIG_SGI_IO) #if defined(CONFIG_SGI_IO)
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#define KV_MAGIC 0x5f4b565f #define KV_MAGIC 0x5f4b565f
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#include <asm/sn/types.h> #include <asm/sn/types.h>
...@@ -23,7 +23,7 @@ typedef struct kern_vars_s { ...@@ -23,7 +23,7 @@ typedef struct kern_vars_s {
unsigned long kv_rw_baseaddr; unsigned long kv_rw_baseaddr;
} kern_vars_t; } kern_vars_t;
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#endif /* __ASM_SN_KLKERNVARS_H */ #endif /* __ASM_SN_KLKERNVARS_H */
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
* clears the BUSY flag after control is returned to it. * clears the BUSY flag after control is returned to it.
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef int launch_state_t; typedef int launch_state_t;
typedef void (*launch_proc_t)(u64 call_parm); typedef void (*launch_proc_t)(u64 call_parm);
...@@ -102,21 +102,6 @@ typedef struct launch_s { ...@@ -102,21 +102,6 @@ typedef struct launch_s {
#define LAUNCH_FLASH (*(void (*)(void)) \ #define LAUNCH_FLASH (*(void (*)(void)) \
IP27PROM_FLASHLEDS) IP27PROM_FLASHLEDS)
#ifdef _STANDALONE #endif /* !__ASSEMBLY__ */
launch_t *launch_get(int nasid, int cpu);
launch_t *launch_get_current(void);
void launch_loop(void);
void launch_slave(int nasid, int cpu,
launch_proc_t call_addr,
__int64_t call_parm,
void *stack_addr,
void *gp_addr);
int launch_wait(int nasid, int cpu, int timeout_msec);
launch_state_t launch_poll(int nasid, int cpu);
#endif /* _STANDALONE */
#endif /* _LANGUAGE_C */
#endif /* _ASM_SN_LAUNCH_H */ #endif /* _ASM_SN_LAUNCH_H */
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#ifndef __ASM_SN_NMI_H #ifndef __ASM_SN_NMI_H
#define __ASM_SN_NMI_H #define __ASM_SN_NMI_H
#ident "$Revision: 1.2 $" #ident "$Revision: 1.5 $"
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
* *
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef struct nmi_s { typedef struct nmi_s {
volatile unsigned long magic; /* Magic number */ volatile unsigned long magic; /* Magic number */
...@@ -59,13 +59,13 @@ typedef struct nmi_s { ...@@ -59,13 +59,13 @@ typedef struct nmi_s {
volatile unsigned long gmaster; /* Flag true only on global master*/ volatile unsigned long gmaster; /* Flag true only on global master*/
} nmi_t; } nmi_t;
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* Following definitions are needed both in the prom & the kernel /* Following definitions are needed both in the prom & the kernel
* to identify the format of the nmi cpu register save area in the * to identify the format of the nmi cpu register save area in the
* low memory on each node. * low memory on each node.
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
struct reg_struct { struct reg_struct {
unsigned long gpr[32]; unsigned long gpr[32];
...@@ -78,7 +78,7 @@ struct reg_struct { ...@@ -78,7 +78,7 @@ struct reg_struct {
unsigned long nmi_sr; unsigned long nmi_sr;
}; };
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* These are the assembly language offsets into the reg_struct structure */ /* These are the assembly language offsets into the reg_struct structure */
......
...@@ -99,14 +99,15 @@ ...@@ -99,14 +99,15 @@
#define NASID_GET(_pa) (int) ((UINT64_CAST (_pa) >> \ #define NASID_GET(_pa) (int) ((UINT64_CAST (_pa) >> \
NASID_SHFT) & NASID_BITMASK) NASID_SHFT) & NASID_BITMASK)
#if _LANGUAGE_C && !defined(_STANDALONE) #if !defined(__ASSEMBLY__) && !defined(_STANDALONE)
#define NODE_SWIN_BASE(nasid, widget) \ #define NODE_SWIN_BASE(nasid, widget) \
((widget == 0) ? NODE_BWIN_BASE((nasid), SWIN0_BIGWIN) \ ((widget == 0) ? NODE_BWIN_BASE((nasid), SWIN0_BIGWIN) \
: RAW_NODE_SWIN_BASE(nasid, widget)) : RAW_NODE_SWIN_BASE(nasid, widget))
#else #else /* __ASSEMBLY__ || _STANDALONE */
#define NODE_SWIN_BASE(nasid, widget) \ #define NODE_SWIN_BASE(nasid, widget) \
(NODE_IO_BASE(nasid) + (UINT64_CAST (widget) << SWIN_SIZE_BITS)) (NODE_IO_BASE(nasid) + (UINT64_CAST (widget) << SWIN_SIZE_BITS))
#endif /* _LANGUAGE_C */ #endif /* __ASSEMBLY__ || _STANDALONE */
/* /*
* The following definitions pertain to the IO special address * The following definitions pertain to the IO special address
...@@ -163,11 +164,11 @@ ...@@ -163,11 +164,11 @@
#define SABLE_LOG_TRIGGER(_map) #define SABLE_LOG_TRIGGER(_map)
#endif /* SABLE */ #endif /* SABLE */
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#define KERN_NMI_ADDR(nasid, slice) \ #define KERN_NMI_ADDR(nasid, slice) \
TO_NODE_UNCAC((nasid), IP27_NMI_KREGS_OFFSET + \ TO_NODE_UNCAC((nasid), IP27_NMI_KREGS_OFFSET + \
(IP27_NMI_KREGS_CPU_SIZE * (slice))) (IP27_NMI_KREGS_CPU_SIZE * (slice)))
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#ifdef PROM #ifdef PROM
...@@ -272,7 +273,8 @@ ...@@ -272,7 +273,8 @@
#define KL_UART_DATA LOCAL_HUB_ADDR(MD_UREG0_1) /* UART data reg */ #define KL_UART_DATA LOCAL_HUB_ADDR(MD_UREG0_1) /* UART data reg */
#define KL_I2C_REG MD_UREG0_0 /* I2C reg */ #define KL_I2C_REG MD_UREG0_0 /* I2C reg */
#if !_LANGUAGE_ASSEMBLY #ifndef __ASSEMBLY__
/* Address 0x400 to 0x1000 ualias points to cache error eframe + misc /* Address 0x400 to 0x1000 ualias points to cache error eframe + misc
* CACHE_ERR_SP_PTR could either contain an address to the stack, or * CACHE_ERR_SP_PTR could either contain an address to the stack, or
* the stack could start at CACHE_ERR_SP_PTR * the stack could start at CACHE_ERR_SP_PTR
...@@ -289,7 +291,7 @@ ...@@ -289,7 +291,7 @@
#define CACHE_ERR_SP (CACHE_ERR_SP_PTR - 16) #define CACHE_ERR_SP (CACHE_ERR_SP_PTR - 16)
#define CACHE_ERR_AREA_SIZE (ARCS_SPB_OFFSET - CACHE_ERR_EFRAME) #define CACHE_ERR_AREA_SIZE (ARCS_SPB_OFFSET - CACHE_ERR_EFRAME)
#endif /* !_LANGUAGE_ASSEMBLY */ #endif /* !__ASSEMBLY__ */
#define _ARCSPROM #define _ARCSPROM
...@@ -314,7 +316,7 @@ ...@@ -314,7 +316,7 @@
* is in place. * is in place.
*/ */
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#define uchar unsigned char #define uchar unsigned char
...@@ -359,7 +361,7 @@ ...@@ -359,7 +361,7 @@
#define PUT_INSTALL_STATUS(c,s) c->Revision = s #define PUT_INSTALL_STATUS(c,s) c->Revision = s
#define GET_INSTALL_STATUS(c) c->Revision #define GET_INSTALL_STATUS(c) c->Revision
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#endif /* _STANDALONE */ #endif /* _STANDALONE */
......
...@@ -169,7 +169,7 @@ ...@@ -169,7 +169,7 @@
/* /*
* The IO LLP control status register and widget control register * The IO LLP control status register and widget control register
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union hubii_wid_u { typedef union hubii_wid_u {
u64 wid_reg_value; u64 wid_reg_value;
...@@ -292,7 +292,7 @@ typedef union io_perf_cnt { ...@@ -292,7 +292,7 @@ typedef union io_perf_cnt {
} perf_cnt_bits; } perf_cnt_bits;
} io_perf_cnt_t; } io_perf_cnt_t;
#endif #endif /* !__ASSEMBLY__ */
#define LNK_STAT_WORKING 0x2 #define LNK_STAT_WORKING 0x2
...@@ -440,7 +440,7 @@ typedef union io_perf_cnt { ...@@ -440,7 +440,7 @@ typedef union io_perf_cnt {
/* /*
* Fields in CRB Register A * Fields in CRB Register A
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union icrba_u { typedef union icrba_u {
u64 reg_value; u64 reg_value;
struct { struct {
...@@ -500,7 +500,7 @@ typedef union h1_icrba_u { ...@@ -500,7 +500,7 @@ typedef union h1_icrba_u {
#define a_valid icrba_fields_s.valid #define a_valid icrba_fields_s.valid
#define a_iow icrba_fields_s.iow #define a_iow icrba_fields_s.iow
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#define IIO_ICRB_ADDR_SHFT 2 /* Shift to get proper address */ #define IIO_ICRB_ADDR_SHFT 2 /* Shift to get proper address */
...@@ -523,7 +523,7 @@ typedef union h1_icrba_u { ...@@ -523,7 +523,7 @@ typedef union h1_icrba_u {
/* /*
* Fields in CRB Register B * Fields in CRB Register B
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union icrbb_u { typedef union icrbb_u {
u64 reg_value; u64 reg_value;
struct { struct {
...@@ -622,7 +622,7 @@ typedef union h1_icrbb_u { ...@@ -622,7 +622,7 @@ typedef union h1_icrbb_u {
#define b_imsg icrbb_field_s.imsg #define b_imsg icrbb_field_s.imsg
#define b_initiator icrbb_field_s.initiator #define b_initiator icrbb_field_s.initiator
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* values for field xtsize * values for field xtsize
...@@ -680,7 +680,7 @@ typedef union h1_icrbb_u { ...@@ -680,7 +680,7 @@ typedef union h1_icrbb_u {
* Fields in CRB Register C * Fields in CRB Register C
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union icrbc_s { typedef union icrbc_s {
u64 reg_value; u64 reg_value;
...@@ -712,13 +712,13 @@ typedef union icrbc_s { ...@@ -712,13 +712,13 @@ typedef union icrbc_s {
#define c_barrop icrbc_field_s.barrop #define c_barrop icrbc_field_s.barrop
#define c_doresp icrbc_field_s.doresp #define c_doresp icrbc_field_s.doresp
#define c_gbr icrbc_field_s.gbr #define c_gbr icrbc_field_s.gbr
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* Fields in CRB Register D * Fields in CRB Register D
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union icrbd_s { typedef union icrbd_s {
u64 reg_value; u64 reg_value;
struct { struct {
...@@ -751,7 +751,7 @@ typedef union hubii_ifdr_u { ...@@ -751,7 +751,7 @@ typedef union hubii_ifdr_u {
} hi_ifdr_fields; } hi_ifdr_fields;
} hubii_ifdr_t; } hubii_ifdr_t;
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* Hardware designed names for the BTE control registers. * Hardware designed names for the BTE control registers.
...@@ -798,7 +798,7 @@ typedef union hubii_ifdr_u { ...@@ -798,7 +798,7 @@ typedef union hubii_ifdr_u {
* IO PIO Read Table Entry format * IO PIO Read Table Entry format
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union iprte_a { typedef union iprte_a {
u64 entry; u64 entry;
...@@ -820,7 +820,7 @@ typedef union iprte_a { ...@@ -820,7 +820,7 @@ typedef union iprte_a {
#define iprte_init iprte_fields.initiator #define iprte_init iprte_fields.initiator
#define iprte_addr iprte_fields.addr #define iprte_addr iprte_fields.addr
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#define IPRTE_ADDRSHFT 3 #define IPRTE_ADDRSHFT 3
...@@ -828,7 +828,7 @@ typedef union iprte_a { ...@@ -828,7 +828,7 @@ typedef union iprte_a {
* Hub IIO PRB Register format. * Hub IIO PRB Register format.
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
/* /*
* Note: Fields bnakctr, anakctr, xtalkctrmode, ovflow fields are * Note: Fields bnakctr, anakctr, xtalkctrmode, ovflow fields are
* "Status" fields, and should only be used in case of clean up after errors. * "Status" fields, and should only be used in case of clean up after errors.
...@@ -860,7 +860,7 @@ typedef union iprb_u { ...@@ -860,7 +860,7 @@ typedef union iprb_u {
#define iprb_anakctr iprb_fields_s.anakctr #define iprb_anakctr iprb_fields_s.anakctr
#define iprb_xtalkctr iprb_fields_s.xtalkctr #define iprb_xtalkctr iprb_fields_s.xtalkctr
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* values for mode field in iprb_t. * values for mode field in iprb_t.
...@@ -875,7 +875,7 @@ typedef union iprb_u { ...@@ -875,7 +875,7 @@ typedef union iprb_u {
/* /*
* IO CRB entry C_A to E_A : Partial (cache) CRBS * IO CRB entry C_A to E_A : Partial (cache) CRBS
*/ */
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union icrbp_a { typedef union icrbp_a {
u64 ip_reg; /* the entire register value */ u64 ip_reg; /* the entire register value */
struct { struct {
...@@ -909,7 +909,7 @@ typedef union icrbp_a { ...@@ -909,7 +909,7 @@ typedef union icrbp_a {
} ip_fmt; } ip_fmt;
} icrbp_a_t; } icrbp_a_t;
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* A couple of defines to go with the above structure. * A couple of defines to go with the above structure.
...@@ -917,7 +917,7 @@ typedef union icrbp_a { ...@@ -917,7 +917,7 @@ typedef union icrbp_a {
#define ICRBP_A_CERR_SHFT 54 #define ICRBP_A_CERR_SHFT 54
#define ICRBP_A_ERR_MASK 0x3ff #define ICRBP_A_ERR_MASK 0x3ff
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union hubii_idsr { typedef union hubii_idsr {
u64 iin_reg; u64 iin_reg;
struct { struct {
...@@ -931,7 +931,7 @@ typedef union hubii_idsr { ...@@ -931,7 +931,7 @@ typedef union hubii_idsr {
level : 7; level : 7;
} iin_fmt; } iin_fmt;
} hubii_idsr_t; } hubii_idsr_t;
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* /*
* IO BTE Length/Status (IIO_IBLS) register bit field definitions * IO BTE Length/Status (IIO_IBLS) register bit field definitions
......
...@@ -424,8 +424,7 @@ ...@@ -424,8 +424,7 @@
* Operations on page migration threshold register * Operations on page migration threshold register
*/ */
#if _LANGUAGE_C #ifndef __ASSEMBLY__
#ifndef _STANDALONE
/* /*
* LED register macros * LED register macros
...@@ -538,8 +537,6 @@ ...@@ -538,8 +537,6 @@
#define MD_SPROT_MIGMD_GET(value) ( \ #define MD_SPROT_MIGMD_GET(value) ( \
((value) & MD_SPROT_MIGMD_MASK) >> MD_SPROT_MIGMD_SHFT) ((value) & MD_SPROT_MIGMD_MASK) >> MD_SPROT_MIGMD_SHFT)
#endif /* _STANDALONE */
/* /*
* Format of dir_error, mem_error, protocol_error and misc_error registers * Format of dir_error, mem_error, protocol_error and misc_error registers
*/ */
...@@ -739,7 +736,7 @@ typedef union md_perf_cnt { ...@@ -739,7 +736,7 @@ typedef union md_perf_cnt {
} md_perf_cnt_t; } md_perf_cnt_t;
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#define DIR_ERROR_VALID_MASK 0xe000000000000000 #define DIR_ERROR_VALID_MASK 0xe000000000000000
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#ifndef _ASM_SGI_SN0_HUBNI_H #ifndef _ASM_SGI_SN0_HUBNI_H
#define _ASM_SGI_SN0_HUBNI_H #define _ASM_SGI_SN0_HUBNI_H
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
#include <linux/types.h> #include <linux/types.h>
#endif #endif
...@@ -226,7 +226,7 @@ ...@@ -226,7 +226,7 @@
#define NLT_EXIT_PORT_MASK (UINT64_CAST 0xf) #define NLT_EXIT_PORT_MASK (UINT64_CAST 0xf)
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
typedef union hubni_port_error_u { typedef union hubni_port_error_u {
u64 nipe_reg_value; u64 nipe_reg_value;
...@@ -250,6 +250,6 @@ typedef union hubni_port_error_u { ...@@ -250,6 +250,6 @@ typedef union hubni_port_error_u {
#define NI_LLP_CB_MAX 0xff #define NI_LLP_CB_MAX 0xff
#define NI_LLP_SN_MAX 0xff #define NI_LLP_SN_MAX 0xff
#endif /* LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
#endif /* _ASM_SGI_SN0_HUBNI_H */ #endif /* _ASM_SGI_SN0_HUBNI_H */
...@@ -306,7 +306,7 @@ ...@@ -306,7 +306,7 @@
#define ERR_STACK_SIZE_BYTES(_sz) \ #define ERR_STACK_SIZE_BYTES(_sz) \
((_sz) ? (PI_MIN_STACK_SIZE << ((_sz) - 1)) : 0) ((_sz) ? (PI_MIN_STACK_SIZE << ((_sz) - 1)) : 0)
#ifdef _LANGUAGE_C #ifndef __ASSEMBLY__
/* /*
* format of error stack and error status registers. * format of error stack and error status registers.
*/ */
...@@ -359,7 +359,7 @@ typedef union pi_err_stat1 { ...@@ -359,7 +359,7 @@ typedef union pi_err_stat1 {
typedef u64 rtc_time_t; typedef u64 rtc_time_t;
#endif /* _LANGUAGE_C */ #endif /* !__ASSEMBLY__ */
/* Bits in PI_SYSAD_ERRCHK_EN */ /* Bits in PI_SYSAD_ERRCHK_EN */
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#define TLBLO_HWBITSHIFT 0 /* Shift value, for masking */ #define TLBLO_HWBITSHIFT 0 /* Shift value, for masking */
#if !_LANGUAGE_ASSEMBLY #ifndef __ASSEMBLY__
#define CAUSE_BERRINTR IE_IRQ5 #define CAUSE_BERRINTR IE_IRQ5
...@@ -30,9 +30,9 @@ ...@@ -30,9 +30,9 @@
#define ECCF_PADDR 4 #define ECCF_PADDR 4
#define ECCF_SIZE (5 * sizeof(long)) #define ECCF_SIZE (5 * sizeof(long))
#endif /* !_LANGUAGE_ASSEMBLY */ #endif /* !__ASSEMBLY__ */
#if _LANGUAGE_ASSEMBLY #ifdef __ASSEMBLY__
/* /*
* KL_GET_CPUNUM (similar to EV_GET_SPNUM for EVEREST platform) reads * KL_GET_CPUNUM (similar to EV_GET_SPNUM for EVEREST platform) reads
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
dli proc, LOCAL_HUB(0); \ dli proc, LOCAL_HUB(0); \
ld proc, PI_CPU_NUM(proc) ld proc, PI_CPU_NUM(proc)
#endif /* _LANGUAGE_ASSEMBLY */ #endif /* __ASSEMBLY__ */
/* /*
* R10000 status register interrupt bit mask usage for IP27. * R10000 status register interrupt bit mask usage for IP27.
......
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