Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
d3791f47
Commit
d3791f47
authored
Jun 22, 2003
by
Ralf Bächle
Committed by
Linus Torvalds
Jun 22, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] 2.7.73 SGI IP27 update
An update of the SGI IP27 aka Origin 200/2000/Onyx 2 support.
parent
80b11f5a
Changes
39
Show whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
1315 additions
and
2440 deletions
+1315
-2440
arch/mips/sgi-ip27/Makefile
arch/mips/sgi-ip27/Makefile
+4
-4
arch/mips/sgi-ip27/TODO
arch/mips/sgi-ip27/TODO
+4
-4
arch/mips/sgi-ip27/ip27-berr.c
arch/mips/sgi-ip27/ip27-berr.c
+13
-91
arch/mips/sgi-ip27/ip27-console.c
arch/mips/sgi-ip27/ip27-console.c
+65
-0
arch/mips/sgi-ip27/ip27-init.c
arch/mips/sgi-ip27/ip27-init.c
+112
-131
arch/mips/sgi-ip27/ip27-irq-glue.S
arch/mips/sgi-ip27/ip27-irq-glue.S
+0
-0
arch/mips/sgi-ip27/ip27-irq.c
arch/mips/sgi-ip27/ip27-irq.c
+110
-391
arch/mips/sgi-ip27/ip27-klconfig.c
arch/mips/sgi-ip27/ip27-klconfig.c
+2
-2
arch/mips/sgi-ip27/ip27-klnuma.c
arch/mips/sgi-ip27/ip27-klnuma.c
+3
-3
arch/mips/sgi-ip27/ip27-memory.c
arch/mips/sgi-ip27/ip27-memory.c
+10
-10
arch/mips/sgi-ip27/ip27-nmi.c
arch/mips/sgi-ip27/ip27-nmi.c
+9
-9
arch/mips/sgi-ip27/ip27-reset.c
arch/mips/sgi-ip27/ip27-reset.c
+10
-6
arch/mips/sgi-ip27/ip27-setup.c
arch/mips/sgi-ip27/ip27-setup.c
+17
-8
arch/mips/sgi-ip27/ip27-timer.c
arch/mips/sgi-ip27/ip27-timer.c
+38
-94
arch/mips64/defconfig
arch/mips64/defconfig
+354
-287
arch/mips64/defconfig-ip27
arch/mips64/defconfig-ip27
+354
-286
arch/mips64/sgi-ip27/ip27-pci-dma.c
arch/mips64/sgi-ip27/ip27-pci-dma.c
+0
-164
arch/mips64/sgi-ip27/ip27-pci.c
arch/mips64/sgi-ip27/ip27-pci.c
+0
-406
arch/mips64/sgi-ip27/ip27-rtc.c
arch/mips64/sgi-ip27/ip27-rtc.c
+0
-319
include/asm-mips64/pci/bridge.h
include/asm-mips64/pci/bridge.h
+5
-5
include/asm-mips64/sn/addrs.h
include/asm-mips64/sn/addrs.h
+9
-9
include/asm-mips64/sn/arch.h
include/asm-mips64/sn/arch.h
+3
-3
include/asm-mips64/sn/gda.h
include/asm-mips64/sn/gda.h
+6
-6
include/asm-mips64/sn/intr.h
include/asm-mips64/sn/intr.h
+4
-4
include/asm-mips64/sn/intr_public.h
include/asm-mips64/sn/intr_public.h
+5
-5
include/asm-mips64/sn/io.h
include/asm-mips64/sn/io.h
+15
-14
include/asm-mips64/sn/klconfig.h
include/asm-mips64/sn/klconfig.h
+48
-48
include/asm-mips64/sn/kldir.h
include/asm-mips64/sn/kldir.h
+5
-5
include/asm-mips64/sn/klkernvars.h
include/asm-mips64/sn/klkernvars.h
+2
-2
include/asm-mips64/sn/launch.h
include/asm-mips64/sn/launch.h
+2
-17
include/asm-mips64/sn/mapped_kernel.h
include/asm-mips64/sn/mapped_kernel.h
+12
-12
include/asm-mips64/sn/nmi.h
include/asm-mips64/sn/nmi.h
+6
-6
include/asm-mips64/sn/sn0/addrs.h
include/asm-mips64/sn/sn0/addrs.h
+11
-9
include/asm-mips64/sn/sn0/arch.h
include/asm-mips64/sn/sn0/arch.h
+1
-1
include/asm-mips64/sn/sn0/hubio.h
include/asm-mips64/sn/sn0/hubio.h
+61
-61
include/asm-mips64/sn/sn0/hubmd.h
include/asm-mips64/sn/sn0/hubmd.h
+3
-6
include/asm-mips64/sn/sn0/hubni.h
include/asm-mips64/sn/sn0/hubni.h
+3
-3
include/asm-mips64/sn/sn0/hubpi.h
include/asm-mips64/sn/sn0/hubpi.h
+5
-5
include/asm-mips64/sn/sn0/ip27.h
include/asm-mips64/sn/sn0/ip27.h
+4
-4
No files found.
arch/mips
64
/sgi-ip27/Makefile
→
arch/mips/sgi-ip27/Makefile
View file @
d3791f47
...
...
@@ -2,8 +2,8 @@
# 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
\
ip27-klconfig.o ip27-klnuma.o ip27-memory.o ip27-nmi.o ip27-pci.o
\
ip27-pci-dma.o ip27-reset.o ip27-setup.o ip27-timer.o
ip27-klconfig.o ip27-klnuma.o ip27-memory.o ip27-nmi.o ip27-reset.o
\
ip27-setup.o ip27-timer.o
EXTRA_AFLAGS
:=
$(CFLAGS)
arch/mips
64
/sgi-ip27/TODO
→
arch/mips/sgi-ip27/TODO
View file @
d3791f47
arch/mips
64
/sgi-ip27/ip27-berr.c
→
arch/mips/sgi-ip27/ip27-berr.c
View file @
d3791f47
...
...
@@ -5,6 +5,7 @@
*
* Copyright (C) 1994, 1995, 1996, 1999, 2000 by Ralf Baechle
* Copyright (C) 1999, 2000 by Silicon Graphics
* Copyright (C) 2002 Maciej W. Rozycki
*/
#include <linux/init.h>
#include <linux/kernel.h>
...
...
@@ -14,86 +15,13 @@
#include <asm/sn/addrs.h>
#include <asm/sn/arch.h>
#include <asm/sn/sn0/hub.h>
#include <asm/tlbdebug.h>
#include <asm/traps.h>
#include <asm/uaccess.h>
extern
void
dump_tlb_addr
(
unsigned
long
addr
);
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
char
*
err_type
[
2
][
8
]
=
{
...
...
@@ -127,21 +55,17 @@ static void dump_hub_information(unsigned long errst0, unsigned long errst1)
?
:
"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
);
fixup
=
search_dbe_table
(
regs
->
cp0_epc
);
if
(
fixup
)
{
long
new_epc
;
new_epc
=
fixup_exception
(
dpf_reg
,
fixup
,
regs
->
cp0_epc
);
regs
->
cp0_epc
=
new_epc
;
return
;
}
if
(
is_fixup
)
return
MIPS_BE_FIXUP
;
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
(
"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
);
...
...
@@ -153,15 +77,13 @@ void do_dbe(struct pt_regs *regs)
force_sig
(
SIGBUS
,
current
);
}
void
__init
bus_error_init
(
void
)
void
__init
ip27_be_init
(
void
)
{
/* XXX Initialize all the Hub & Bridge error handling here. */
int
cpu
=
LOCAL_HUB_L
(
PI_CPU_NUM
);
int
cpuoff
=
cpu
<<
8
;
set_except_vector
(
6
,
handle_ibe
);
set_except_vector
(
7
,
handle_dbe
);
board_be_handler
=
ip27_be_handler
;
LOCAL_HUB_S
(
PI_ERR_INT_PEND
,
cpu
?
PI_ERR_CLEAR_ALL_B
:
PI_ERR_CLEAR_ALL_A
);
...
...
arch/mips
64
/sgi-ip27/ip27-console.c
→
arch/mips/sgi-ip27/ip27-console.c
View file @
d3791f47
...
...
@@ -3,25 +3,35 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2001 Ralf Baechle
* Copyright (C) 2001
, 2002
Ralf Baechle
*/
#include <linux/init.h>
#include <linux/console.h>
#include <linux/kdev_t.h>
#include <linux/major.h>
#include <linux/serial.h>
#include <asm/page.h>
#include <asm/sn/addrs.h>
#include <asm/sn/sn0/hub.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/ioc3.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_uartregs
*
uart
;
ioc3
=
(
struct
ioc3
*
)
KL_CONFIG_CH_CONS_INFO
(
master_nasid
)
->
memory_base
;
uart
=
&
ioc3
->
sregs
.
uarta
;
ioc3
=
(
struct
ioc3
*
)
KL_CONFIG_CH_CONS_INFO
(
get_nasid
())
->
memory_base
;
return
&
ioc3
->
sregs
.
uarta
;
}
void
prom_putchar
(
char
c
)
{
struct
ioc3_uartregs
*
uart
=
console_uart
();
while
((
uart
->
iu_lsr
&
0x20
)
==
0
);
uart
->
iu_thr
=
c
;
...
...
@@ -32,27 +42,24 @@ char __init prom_getchar(void)
return
0
;
}
static
void
ip27prom_console_write
(
struct
console
*
con
,
const
char
*
s
,
unsigned
n
)
static
void
inline
ioc3_console_probe
(
void
)
{
prom_printf
(
"%s"
,
s
);
}
struct
serial_struct
req
;
static
kdev_t
ip27prom_console_dev
(
struct
console
*
c
)
{
return
MKDEV
(
TTY_MAJOR
,
64
+
c
->
index
);
}
/* Register to interrupt zero because we share the interrupt with
the serial driver which we don't properly support yet. */
memset
(
&
req
,
0
,
sizeof
(
req
));
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
=
{
.
name
=
"prom"
,
.
write
=
ip27prom_console_write
,
.
device
=
ip27prom_console_dev
,
.
flags
=
CON_PRINTBUFFER
,
.
index
=
-
1
,
};
req
.
iomem_base
=
(
unsigned
char
*
)
console_uart
();
register_serial
(
&
req
);
}
__init
void
ip27_setup_console
(
void
)
{
register_console
(
&
ip27_prom_console
);
ioc3_console_probe
(
);
}
arch/mips
64
/sgi-ip27/ip27-init.c
→
arch/mips/sgi-ip27/ip27-init.c
View file @
d3791f47
...
...
@@ -13,6 +13,7 @@
#include <linux/sched.h>
#include <linux/mmzone.h>
/* for numnodes */
#include <linux/mm.h>
#include <asm/cpu.h>
#include <asm/pgalloc.h>
#include <asm/pgtable.h>
#include <asm/sn/types.h>
...
...
@@ -28,6 +29,7 @@
#include <asm/smp.h>
#include <asm/processor.h>
#include <asm/mmu_context.h>
#include <asm/thread_info.h>
#include <asm/sn/launch.h>
#include <asm/sn/sn_private.h>
#include <asm/sn/sn0/ip27.h>
...
...
@@ -45,8 +47,8 @@
#define CNODEMASK_SETB(p, bit) ((p) |= 1ULL << (bit))
cpumask_t
boot_cpumask
;
hubreg_t
region_mask
=
0
;
static
int
fine_mode
=
0
;
hubreg_t
region_mask
;
static
int
fine_mode
;
int
maxcpus
;
static
spinlock_t
hub_mask_lock
=
SPIN_LOCK_UNLOCKED
;
static
cnodemask_t
hub_init_mask
;
...
...
@@ -176,17 +178,17 @@ cpuid_t cpu_node_probe(cpumask_t *boot_cpumask, int *numnodes)
* cpus are not numbered.
*/
return
(
highest
+
1
)
;
return
highest
+
1
;
}
int
cpu_enabled
(
cpuid_t
cpu
)
{
if
(
cpu
==
CPU_NONE
)
return
0
;
return
(
CPUMASK_TSTB
(
boot_cpumask
,
cpu
)
!=
0
)
;
return
CPUMASK_TSTB
(
boot_cpumask
,
cpu
)
!=
0
;
}
void
mlreset
(
void
)
void
mlreset
(
void
)
{
int
i
;
void
init_topology_matrix
(
void
);
...
...
@@ -332,8 +334,7 @@ void per_hub_init(cnodeid_t cnode)
memcpy
((
void
*
)(
KSEG0
+
0x100
),
(
void
*
)
KSEG0
,
0x80
);
memcpy
((
void
*
)(
KSEG0
+
0x180
),
&
except_vec3_generic
,
0x100
);
flush_cache_l1
();
flush_cache_l2
();
__flush_cache_all
();
}
#endif
}
...
...
@@ -359,12 +360,11 @@ void per_cpu_init(void)
int
cpu
=
smp_processor_id
();
cnodeid_t
cnode
=
get_compact_nodeid
();
current_cpu_data
.
asid_cache
=
ASID_FIRST_VERSION
;
TLBMISS_HANDLER_SETUP
();
#if 0
intr_init();
#endif
set_cp0_status
(
ST0_IM
,
0
);
clear_c0_status
(
ST0_IM
);
per_hub_init
(
cnode
);
cpu_time_init
();
if
(
smp_processor_id
())
/* master can't do this early, no kmalloc */
...
...
@@ -374,13 +374,13 @@ void per_cpu_init(void)
#if 0
install_tlbintr(cpu);
#endif
set_c
p0_status
(
SRB_DEV0
|
SRB_DEV1
,
SRB_DEV0
|
SRB_DEV1
);
set_c
0_status
(
SRB_DEV0
|
SRB_DEV1
);
if
(
is_slave
)
{
set_cp0_status
(
ST0_BEV
,
0
);
if
(
mips4_available
)
set_c
p0_status
(
ST0_XX
,
ST0_XX
);
set_c
p0_status
(
ST0_KX
|
ST0_SX
|
ST0_UX
,
ST0_KX
|
ST0_SX
|
ST0_UX
);
sti
();
clear_c0_status
(
ST0_BEV
);
if
(
current_cpu_data
.
isa_level
==
MIPS_CPU_ISA_IV
)
set_c
0_status
(
ST0_XX
);
set_c
0_status
(
ST0_KX
|
ST0_SX
|
ST0_UX
);
local_irq_enable
();
load_mmu
();
atomic_inc
(
&
numstarted
);
}
else
{
...
...
@@ -420,100 +420,59 @@ static void alloc_cpupda(cpuid_t cpu, int cpunum)
cpu_data
[
cpunum
].
p_cpuid
=
cpu
;
}
void
__init
smp_callin
(
void
)
static
struct
task_struct
*
__init
fork_by_hand
(
void
)
{
#if 0
calibrate_delay();
smp_store_cpu_info(cpuid);
#endif
}
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
();
struct
pt_regs
regs
;
/*
* don't care about the eip and regs settings since
* we'll never reschedule the forked task.
*/
return
copy_process
(
CLONE_VM
|
CLONE_IDLETASK
,
0
,
&
regs
,
0
,
NULL
,
NULL
);
}
void
allowboot
(
void
)
static
int
__init
do_boot_cpu
(
int
cpu
,
int
num_cpus
)
{
int
num_cpus
=
0
;
cpuid_t
cpu
,
mycpuid
=
getcpuid
();
cnodeid_t
cnode
;
extern
void
bootstrap
(
void
);
extern
void
smp_bootstrap
(
void
);
cpuid_t
mycpuid
=
getcpuid
();
struct
task_struct
*
idle
;
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
)
{
alloc_cpupda
(
cpu
,
num_cpus
);
num_cpus
++
;
/* We're already started, clear our bit */
CPUMASK_CLRB
(
boot_barrier
,
cpu
);
continue
;
return
1
;
}
/* Skip holes in CPU space */
if
(
CPUMASK_TSTB
(
boot_cpumask
,
cpu
))
{
struct
task_struct
*
p
;
if
(
!
CPUMASK_TSTB
(
boot_cpumask
,
cpu
))
return
0
;
/*
* The following code is purely to make sure
* Linux can schedule processes on this slave.
*/
kernel_thread
(
0
,
NULL
,
CLONE_IDLETASK
);
p
=
prev_task
(
&
init_task
);
sprintf
(
p
->
comm
,
"%s%d"
,
"Idle"
,
num_cpus
);
init_tasks
[
num_cpus
]
=
p
;
idle
=
fork_by_hand
();
if
(
IS_ERR
(
idle
))
panic
(
"failed fork for CPU %d"
,
cpu
);
/*
* We remove it from the pidhash and the runqueue
* once we got the process:
*/
init_idle
(
idle
,
cpu
);
alloc_cpupda
(
cpu
,
num_cpus
);
del_from_runqueue
(
p
);
p
->
processor
=
num_cpus
;
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
;
unhash_process
(
idle
);
/*
* Launch a slave into bootstrap().
* It doesn't take an argument, and we
* set sp to the kernel stack of the newly
* created idle process, gp to the proc struct
* (so that current-> works).
* Launch a slave into smp_bootstrap(). It doesn't take an
* argument, and we set sp to the kernel stack of the newly
* created idle process, gp to the proc struct so that
* current_thread_info() will work.
*/
LAUNCH_SLAVE
(
cputonasid
(
num_cpus
),
cputoslice
(
num_cpus
),
(
launch_proc_t
)
MAPPED_KERN_RW_TO_K0
(
bootstrap
),
0
,
(
void
*
)((
unsigned
long
)
p
+
KERNEL_STACK_SIZE
-
32
),
(
void
*
)
p
);
(
launch_proc_t
)
MAPPED_KERN_RW_TO_K0
(
smp_
bootstrap
),
0
,
(
void
*
)((
unsigned
long
)
idle
->
thread_info
+
KERNEL_STACK_SIZE
-
32
),
(
void
*
)
idle
);
/*
* Now optimistically set the mapping arrays. We
...
...
@@ -522,7 +481,8 @@ void allowboot(void)
*/
__cpu_number_map
[
cpu
]
=
num_cpus
;
__cpu_logical_map
[
num_cpus
]
=
cpu
;
num_cpus
++
;
CPUMASK_SETB
(
cpu_online_map
,
cpu
);
/*
* Wait this cpu to start up and initialize its hub,
* and discover the io devices it will control.
...
...
@@ -531,10 +491,34 @@ void allowboot(void)
* at once. We have to preserve the order of the
* 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
Wait
logic
goes
here
.
...
...
@@ -551,18 +535,19 @@ void allowboot(void)
cpu_io_setup();
init_mfhi_war();
#endif
smp_num_cpus
=
num_cpus
;
}
#else
/* CONFIG_SMP */
void
cboot
(
void
)
{}
void
__init
start_secondary
(
void
)
{
/* XXX Why do we need this empty definition at all? */
}
#endif
/* CONFIG_SMP */
#define rou_rflag rou_flags
void
router_recurse
(
klrou_t
*
router_a
,
klrou_t
*
router_b
,
int
depth
)
void
router_recurse
(
klrou_t
*
router_a
,
klrou_t
*
router_b
,
int
depth
)
{
klrou_t
*
router
;
lboard_t
*
brd
;
...
...
@@ -598,8 +583,7 @@ router_recurse(klrou_t *router_a, klrou_t *router_b, int depth)
router_a
->
rou_rflag
=
0
;
}
int
node_distance
(
nasid_t
nasid_a
,
nasid_t
nasid_b
)
int
node_distance
(
nasid_t
nasid_a
,
nasid_t
nasid_b
)
{
nasid_t
nasid
;
cnodeid_t
cnode
;
...
...
@@ -666,8 +650,7 @@ node_distance(nasid_t nasid_a, nasid_t nasid_b)
return
router_distance
;
}
void
init_topology_matrix
(
void
)
void
init_topology_matrix
(
void
)
{
nasid_t
nasid
,
nasid2
;
cnodeid_t
row
,
col
;
...
...
@@ -685,8 +668,7 @@ init_topology_matrix(void)
}
}
void
dump_topology
(
void
)
void
dump_topology
(
void
)
{
nasid_t
nasid
;
cnodeid_t
cnode
;
...
...
@@ -837,4 +819,3 @@ dump_klcfg(void)
dump_topology();
}
#endif
arch/mips
64
/sgi-ip27/ip27-irq-glue.S
→
arch/mips/sgi-ip27/ip27-irq-glue.S
View file @
d3791f47
File moved
arch/mips
64
/sgi-ip27/ip27-irq.c
→
arch/mips/sgi-ip27/ip27-irq.c
View file @
d3791f47
...
...
@@ -7,6 +7,7 @@
*/
#include <linux/config.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/errno.h>
#include <linux/signal.h>
#include <linux/sched.h>
...
...
@@ -19,25 +20,25 @@
#include <linux/smp_lock.h>
#include <linux/kernel_stat.h>
#include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h>
#include <asm/bitops.h>
#include <asm/bootinfo.h>
#include <asm/io.h>
#include <asm/mipsregs.h>
#include <asm/system.h>
#include <asm/irq.h>
#include <asm/ptrace.h>
#include <asm/processor.h>
#include <asm/pci/bridge.h>
#include <asm/sn/sn0/hub.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/intr.h>
#include <asm/sn/intr_public.h>
#undef DEBUG_IRQ
#ifdef DEBUG_IRQ
#define DBG(x...) printk(x)
...
...
@@ -67,12 +68,11 @@ unsigned char num_bridges; /* number of bridges in the system */
*/
extern
asmlinkage
void
ip27_irq
(
void
);
extern
int
irq_to_bus
[],
irq_to_slot
[],
bus_to_cpu
[];
int
intr_connect_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
* 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)
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
*/
static
int
ms1bit
(
unsigned
long
x
)
{
int
b
;
int
b
=
0
,
s
;
if
(
x
>>
32
)
b
=
32
,
x
>>=
32
;
else
b
=
0
;
if
(
x
>>
16
)
b
+=
16
,
x
>>=
16
;
if
(
x
>>
8
)
b
+=
8
,
x
>>=
8
;
if
(
x
>>
4
)
b
+=
4
,
x
>>=
4
;
if
(
x
>>
2
)
b
+=
2
,
x
>>=
2
;
s
=
16
;
if
(
x
>>
16
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
s
=
8
;
if
(
x
>>
8
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
s
=
4
;
if
(
x
>>
4
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
s
=
2
;
if
(
x
>>
2
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
s
=
1
;
if
(
x
>>
1
==
0
)
s
=
0
;
b
+=
s
;
return
b
+
(
int
)
(
x
>>
1
)
;
return
b
;
}
/*
...
...
@@ -244,7 +170,7 @@ void ip27_do_irq(struct pt_regs *regs)
LOCAL_HUB_CLR_INTR
(
swlevel
);
/* "map" swlevel to irq */
irq
=
LEVEL_TO_IRQ
(
thiscpu
,
swlevel
);
do_IRQ
(
thiscpu
,
irq
,
regs
);
do_IRQ
(
irq
,
regs
);
/* clear bit in pend0 */
pend0
^=
1ULL
<<
swlevel
;
}
while
(
pend0
);
...
...
@@ -257,7 +183,7 @@ void ip27_do_irq(struct pt_regs *regs)
/* 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
;
bridge_t
*
bridge
;
...
...
@@ -265,6 +191,9 @@ static unsigned int bridge_startup(unsigned int irq)
cpuid_t
cpu
;
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
));
pin
=
SLOT_FROM_PCI_IRQ
(
irq
);
cpu
=
IRQ_TO_CPU
(
irq
);
...
...
@@ -297,12 +226,15 @@ static unsigned int bridge_startup(unsigned int irq)
}
/* 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
;
int
pin
,
swlevel
;
cpuid_t
cpu
;
if
(
irq
<
BASE_PCI_IRQ
)
return
0
;
bridge
=
(
bridge_t
*
)
NODE_SWIN_BASE
(
NASID_FROM_PCI_IRQ
(
irq
),
WID_FROM_PCI_IRQ
(
irq
));
DBG
(
"bridge_shutdown: irq 0x%x
\n
"
,
irq
);
...
...
@@ -322,312 +254,64 @@ static unsigned int bridge_shutdown(unsigned int irq)
return
0
;
/* Never anything pending. */
}
void
irq_debug
(
void
)
static
inline
void
enable_bridge_irq
(
unsigned
int
irq
)
{
bridge_t
*
bridge
=
(
bridge_t
*
)
0x9200000008000000
;
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
));
/* All the braindamage happens magically for us in ip27_do_irq */
}
int
setup_irq
(
unsigned
int
irq
,
struct
irqaction
*
new
)
static
void
disable_bridge_irq
(
unsigned
int
irq
)
{
int
shared
=
0
;
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
;
/* All the braindamage happens magically for us in ip27_do_irq */
}
int
request_irq
(
unsigned
int
irq
,
void
(
*
handler
)(
int
,
void
*
,
struct
pt_regs
*
),
unsigned
long
irqflags
,
const
char
*
devname
,
void
*
dev_id
)
static
void
mask_and_ack_bridge_irq
(
unsigned
int
irq
)
{
int
retval
;
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
;
/* All the braindamage happens magically for us in ip27_do_irq */
}
void
free_irq
(
unsigned
int
irq
,
void
*
dev_id
)
static
void
end_bridge_irq
(
unsigned
int
irq
)
{
struct
irqaction
*
action
,
**
p
;
unsigned
long
flags
;
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
);
if
(
!
(
irq_desc
[
irq
].
status
&
(
IRQ_DISABLED
|
IRQ_INPROGRESS
)))
enable_bridge_irq
(
irq
);
}
/* Useless ISA nonsense. */
unsigned
long
probe_irq_on
(
void
)
{
panic
(
"probe_irq_on called!
\n
"
);
return
0
;
}
static
struct
hw_interrupt_type
bridge_irq_type
=
{
"bridge"
,
startup_bridge_irq
,
shutdown_bridge_irq
,
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
)
{
set_except_vector
(
0
,
ip27_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
));
}
#ifdef CONFIG_SMP
/*
* 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
)
void
__init
init_IRQ
(
void
)
{
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
(
" ]
\n
bh: %d ["
,
spin_is_locked
(
&
global_bh_lock
)
?
1
:
0
);
for
(
i
=
0
;
i
<
smp_num_cpus
;
i
++
)
printk
(
" %d"
,
local_bh_count
(
i
));
printk
(
" ]
\n
Stack dumps:"
);
for
(
i
=
0
;
i
<
smp_num_cpus
;
i
++
)
{
if
(
i
==
cpu
)
continue
;
printk
(
"
\n
CPU %d:"
,
i
);
printk
(
"Code not developed yet
\n
"
);
/* show_stack(0); */
}
printk
(
"
\n
CPU %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
(;;)
{
/*
* 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
);
set_except_vector
(
0
,
ip27_irq
);
/*
*
Ok, finally..
*
Right now the bridge irq is our kitchen sink interrupt type
*/
global_irq_holder
=
cpu
;
}
void
__global_cli
(
void
)
{
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
);
for
(
i
=
0
;
i
<=
NR_IRQS
;
i
++
)
{
irq_desc
[
i
].
status
=
IRQ_DISABLED
;
irq_desc
[
i
].
action
=
0
;
irq_desc
[
i
].
depth
=
1
;
irq_desc
[
i
].
handler
=
&
bridge_irq_type
;
}
}
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.
*/
...
...
@@ -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 */
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
)
{
...
...
@@ -720,16 +439,16 @@ void install_cpuintr(int cpu)
if
(
request_irq
(
CPU_RESCHED_A_IRQ
,
handle_resched_intr
,
0
,
"resched"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
if
(
request_irq
(
CPU_RESCHED_B_IRQ
,
handle_resched_intr
,
0
,
"resched"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
if
(
request_irq
(
CPU_CALL_A_IRQ
,
smp_call_function_interrupt
,
0
,
"callfunc"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
if
(
request_irq
(
CPU_CALL_B_IRQ
,
smp_call_function_interrupt
,
0
,
"callfunc"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
for
(
j
=
0
;
j
<
PERNODE_LEVELS
;
j
++
)
LEVEL_TO_IRQ
(
0
,
j
)
=
-
1
;
...
...
arch/mips
64
/sgi-ip27/ip27-klconfig.c
→
arch/mips/sgi-ip27/ip27-klconfig.c
View file @
d3791f47
arch/mips
64
/sgi-ip27/ip27-klnuma.c
→
arch/mips/sgi-ip27/ip27-klnuma.c
View file @
d3791f47
arch/mips
64
/sgi-ip27/ip27-memory.c
→
arch/mips/sgi-ip27/ip27-memory.c
View file @
d3791f47
...
...
@@ -224,7 +224,7 @@ prom_free_prom_memory (void)
#ifdef CONFIG_DISCONTIGMEM
static
pfn_t
pagenr
=
0
;
static
pfn_t
pagenr
;
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
);
/* 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
);
pgd_set
(
swapper_pg_dir
,
kpmdtbl
);
for
(
i
=
0
;
i
<
(
1
<<
KPTBL_PAGE
_ORDER
);
pmd
++
,
i
++
,
pte
+=
PTRS_PER_PTE
)
set_pgd
(
swapper_pg_dir
,
__pgd
(
kpmdtbl
)
);
for
(
i
=
0
;
i
<
(
1
<<
PGD
_ORDER
);
pmd
++
,
i
++
,
pte
+=
PTRS_PER_PTE
)
pmd_val
(
*
pmd
)
=
(
unsigned
long
)
pte
;
for
(
node
=
0
;
node
<
numnodes
;
node
++
)
{
...
...
arch/mips
64
/sgi-ip27/ip27-nmi.c
→
arch/mips/sgi-ip27/ip27-nmi.c
View file @
d3791f47
...
...
@@ -157,7 +157,7 @@ cont_nmi_dump(void)
udelay
(
10000
);
}
#else
while
(
atomic_read
(
&
nmied_cpus
)
!=
smp_num_cpus
);
while
(
atomic_read
(
&
nmied_cpus
)
!=
num_online_cpus
()
);
#endif
/*
...
...
arch/mips
64
/sgi-ip27/ip27-reset.c
→
arch/mips/sgi-ip27/ip27-reset.c
View file @
d3791f47
...
...
@@ -14,8 +14,10 @@
#include <linux/timer.h>
#include <linux/smp.h>
#include <linux/mmzone.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/reboot.h>
#include <asm/system.h>
#include <asm/sgialib.h>
#include <asm/sn/addrs.h>
...
...
@@ -30,7 +32,7 @@ void machine_power_off(void) __attribute__((noreturn));
#define noreturn while(1);
/* Silence gcc. */
/* XXX How to pass the reboot command to the firmware??? */
void
machine_restart
(
char
*
command
)
static
void
ip27_
machine_restart
(
char
*
command
)
{
#if 0
int i;
...
...
@@ -50,7 +52,7 @@ void machine_restart(char *command)
noreturn
;
}
void
machine_halt
(
void
)
static
void
ip27_
machine_halt
(
void
)
{
int
i
;
...
...
@@ -64,7 +66,7 @@ void machine_halt(void)
noreturn
;
}
void
machine_power_off
(
void
)
static
void
ip27_
machine_power_off
(
void
)
{
/* To do ... */
noreturn
;
...
...
@@ -72,5 +74,7 @@ void machine_power_off(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
;
}
arch/mips
64
/sgi-ip27/ip27-setup.c
→
arch/mips/sgi-ip27/ip27-setup.c
View file @
d3791f47
...
...
@@ -14,6 +14,7 @@
#include <linux/spinlock.h>
#include <linux/sched.h>
#include <linux/smp.h>
#include <asm/io.h>
#include <asm/sn/types.h>
#include <asm/sn/sn0/addrs.h>
...
...
@@ -21,12 +22,14 @@
#include <asm/sn/sn0/hubio.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/ioc3.h>
#include <asm/time.h>
#include <asm/mipsregs.h>
#include <asm/sn/arch.h>
#include <asm/sn/sn_private.h>
#include <asm/pci/bridge.h>
#include <asm/paccess.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/traps.h>
/* Check against user dumbness. */
#ifdef CONFIG_VT
...
...
@@ -40,7 +43,7 @@
#define DBG(x...)
#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.
...
...
@@ -275,6 +278,8 @@ void __init pcibr_setup(cnodeid_t nid)
}
extern
void
ip27_setup_console
(
void
);
extern
void
ip27_time_init
(
void
);
extern
void
ip27_reboot_setup
(
void
);
void
__init
ip27_setup
(
void
)
{
...
...
@@ -282,6 +287,7 @@ void __init ip27_setup(void)
hubreg_t
p
,
e
;
ip27_setup_console
();
ip27_reboot_setup
();
num_bridges
=
0
;
/*
...
...
@@ -307,4 +313,7 @@ void __init ip27_setup(void)
ioc3_sio_init
();
ioc3_eth_init
();
per_cpu_init
();
mips_io_port_base
=
IO_BASE
;
board_time_init
=
ip27_time_init
;
}
arch/mips
64
/sgi-ip27/ip27-timer.c
→
arch/mips/sgi-ip27/ip27-timer.c
View file @
d3791f47
...
...
@@ -2,6 +2,7 @@
* Copytight (C) 1999, 2000 Ralf Baechle (ralf@gnu.org)
* Copytight (C) 1999, 2000 Silicon Graphics, Inc.
*/
#include <linux/bcd.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/kernel.h>
...
...
@@ -14,6 +15,7 @@
#include <linux/mm.h>
#include <linux/bcd.h>
#include <asm/time.h>
#include <asm/pgtable.h>
#include <asm/sgialib.h>
#include <asm/sn/ioc3.h>
...
...
@@ -34,10 +36,11 @@
* Ralf: which clock rate is used to feed the counter?
*/
#define NSEC_PER_CYCLE 800
#define NSEC_PER_SEC 1000000000
#define CYCLES_PER_SEC (NSEC_PER_SEC/NSEC_PER_CYCLE)
#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
long
last_rtc_update
;
/* Last time the rtc clock got updated */
...
...
@@ -56,8 +59,7 @@ static int set_rtc_mmss(unsigned long nowtime)
IOC3_BYTEBUS_DEV0
);
rtc
->
control
|=
M48T35_RTC_READ
;
cmos_minutes
=
rtc
->
min
;
BCD_TO_BIN
(
cmos_minutes
);
cmos_minutes
=
BCD2BIN
(
rtc
->
min
);
rtc
->
control
&=
~
M48T35_RTC_READ
;
/*
...
...
@@ -72,8 +74,8 @@ static int set_rtc_mmss(unsigned long nowtime)
real_minutes
%=
60
;
if
(
abs
(
real_minutes
-
cmos_minutes
)
<
30
)
{
BIN_TO_
BCD
(
real_seconds
);
BIN_TO_
BCD
(
real_minutes
);
real_seconds
=
BIN2
BCD
(
real_seconds
);
real_minutes
=
BIN2
BCD
(
real_minutes
);
rtc
->
control
|=
M48T35_RTC_SET
;
rtc
->
sec
=
real_seconds
;
rtc
->
min
=
real_minutes
;
...
...
@@ -92,8 +94,9 @@ void rt_timer_interrupt(struct pt_regs *regs)
{
int
cpu
=
smp_processor_id
();
int
cpuA
=
((
cputoslice
(
cpu
))
==
0
);
int
irq
=
7
;
/* XXX Assign number */
int
irq
=
9
;
/* XXX Assign number */
irq_enter
();
write_seqlock
(
&
xtime_lock
);
again:
...
...
@@ -110,19 +113,7 @@ void rt_timer_interrupt(struct pt_regs *regs)
do_timer
(
regs
);
#ifdef CONFIG_SMP
{
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
);
}
update_process_times
(
user_mode
(
regs
));
#endif
/* CONFIG_SMP */
/*
...
...
@@ -131,80 +122,31 @@ void rt_timer_interrupt(struct pt_regs *regs)
* called as close as possible to when a second starts.
*/
if
((
time_status
&
STA_UNSYNC
)
==
0
&&
xtime
.
tv_sec
>
last_rtc_update
+
660
)
{
if
(
xtime
.
tv_usec
>=
1000000
-
((
unsigned
)
tick
)
/
2
)
{
if
(
set_rtc_mmss
(
xtime
.
tv_sec
+
1
)
==
0
)
xtime
.
tv_sec
>
last_rtc_update
+
660
&&
(
xtime
.
tv_nsec
/
1000
)
>=
500000
-
((
unsigned
)
TICK_SIZE
)
/
2
&&
(
xtime
.
tv_nsec
/
1000
)
<=
500000
+
((
unsigned
)
TICK_SIZE
)
/
2
)
{
if
(
rtc_set_time
(
xtime
.
tv_sec
)
==
0
)
{
last_rtc_update
=
xtime
.
tv_sec
;
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
}
else
{
last_rtc_update
=
xtime
.
tv_sec
-
600
;
/* do it again in 60 s */
}
}
write_sequnlock
(
&
xtime_lock
);
irq_exit
();
if
(
softirq_pending
(
cpu
))
do_softirq
();
}
unsigned
long
i
nline
do_gettimeoffset
(
void
)
unsigned
long
i
p27_
do_gettimeoffset
(
void
)
{
unsigned
long
ct_cur1
;
ct_cur1
=
REMOTE_HUB_L
(
cputonasid
(
0
),
PI_RT_COUNT
)
+
CYCLES_PER_JIFFY
;
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(). */
#include <asm/sn/types.h>
#include <asm/sn/sn0/addrs.h>
...
...
@@ -231,22 +173,24 @@ static __init unsigned long get_m48t35_time(void)
year
=
rtc
->
year
;
rtc
->
control
&=
~
M48T35_RTC_READ
;
BCD_TO_
BIN
(
sec
);
BCD_TO_
BIN
(
min
);
BCD_TO_
BIN
(
hour
);
BCD_TO_
BIN
(
date
);
BCD_TO_
BIN
(
month
);
BCD_TO_
BIN
(
year
);
sec
=
BCD2
BIN
(
sec
);
min
=
BCD2
BIN
(
min
);
hour
=
BCD2
BIN
(
hour
);
date
=
BCD2
BIN
(
date
);
month
=
BCD2
BIN
(
month
);
year
=
BCD2
BIN
(
year
);
year
+=
1970
;
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_usec
=
0
;
xtime
.
tv_nsec
=
0
;
do_gettimeoffset
=
ip27_do_gettimeoffset
;
}
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
);
set_c
p0_status
(
SRB_TIMOCLK
,
SRB_TIMOCLK
);
set_c
0_status
(
SRB_TIMOCLK
);
}
void
__init
hub_rtc_init
(
cnodeid_t
cnode
)
...
...
arch/mips64/defconfig
View file @
d3791f47
#
# Automatically generated make config: don't edit
#
CONFIG_MIPS=y
# CONFIG_MIPS32 is not set
CONFIG_MIPS64=y
#
# 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
#
# 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_IP27=y
# CONFIG_SGI_SN0_N_MODE is not set
CONFIG_DISCONTIGMEM=y
CONFIG_NUMA=y
# CONFIG_DISCONTIGMEM is not set
# CONFIG_NUMA is not set
# CONFIG_MAPPED_KERNEL is not set
# CONFIG_REPLICATE_KTEXT 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_XCHGADD_ALGORITHM is not set
CONFIG_BOOT_ELF64=y
CONFIG_ARC=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_COHERENT_IO=y
CONFIG_MAPPED_PCI_IO=y
CONFIG_PCI=y
CONFIG_BOOT_ELF64=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
#
# 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_R4X00 is not set
# CONFIG_CPU_TX49XX 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_R8000 is not set
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_CPU_LITTLE_ENDIAN is not set
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
CONFIG_MMU=y
# 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_PCI_NAMES=y
CONFIG_KCORE_ELF=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)
...
...
@@ -77,84 +139,36 @@ CONFIG_PCI_NAMES=y
#
# 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
#
# 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_CISS_DA 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_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set
#
# Multi-device support (RAID and LVM)
#
# 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
# ATA/ATAPI/MFM/RLL support
#
# 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
...
...
@@ -162,7 +176,6 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
...
...
@@ -171,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
#
# 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_REPORT_LUNS is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
...
...
@@ -180,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
# SCSI low-level drivers
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX 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_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 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_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR_D700 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
CONFIG_SCSI_QLOGIC_ISP=y
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_NSP32 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
#
...
...
@@ -236,39 +313,44 @@ CONFIG_NETDEVICES=y
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
CONFIG_SGI_IOC3_ETH=y
# CONFIG_SUNLANCE 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_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_NET_ISA is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC 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_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 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_
PLIP
is not set
# CONFIG_
HIPPI
is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
...
...
@@ -278,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
# 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_RCPCI is not set
# CONFIG_SHAPER is not set
#
# Wan interfaces
...
...
@@ -301,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
#
# 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
#
# CONFIG_VT is not set
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED 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_PTY_COUNT=256
...
...
@@ -325,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
# 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_I
NPUT_GAMEPORT
is not set
# CONFIG_I
2C_SENSOR
is not set
#
#
Input core support is needed for gameports
#
Mice
#
# CONFIG_BUSMOUSE is not set
# CONFIG_QIC02_TAPE is not set
#
# I
nput core support is needed for joysticks
# I
PMI
#
# CONFIG_
QIC02_TAPE
is not set
# CONFIG_
IPMI_HANDLER
is not set
#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM 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_R3964 is not set
# CONFIG_APPLICOM is not set
...
...
@@ -361,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HANGCHECK_TIMER is not set
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
#
# 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_AUTOFS_FS=y
# 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_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BEFS_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_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS 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_VXFS_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_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# 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_WRITE is not set
#
# Network File Systems
#
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=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_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_NCPFS_STRONG 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
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
...
...
@@ -457,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_NEC98_PARTITION is not set
CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_SMB_NLS is not set
# CONFIG_NLS is not set
CONFIG_KCORE_ELF=y
# CONFIG_EFI_PARTITION is not set
#
# Graphics support
#
#
# Sound
...
...
@@ -473,113 +623,30 @@ CONFIG_KCORE_ELF=y
# USB support
#
# CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
#
#
USB Controllers
#
Bluetooth support
#
# CONFIG_USB_UHCI is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
# CONFIG_BT is not set
#
# USB Device Class drivers
#
# 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
# Kernel hacking
#
# CONFIG_USB_SERIAL is not set
# CONFIG_USB_SERIAL_GENERIC 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
CONFIG_CROSSCOMPILE=y
# CONFIG_DEBUG_KERNEL is not set
#
#
Miscellaneous USB driver
s
#
Security option
s
#
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_ID75 is not set
# CONFIG_SECURITY is not set
#
#
Input core support
#
Cryptographic options
#
# CONFIG_INPUT 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
# CONFIG_CRYPTO is not set
#
#
Kernel hacking
#
Library routines
#
CONFIG_CROSSCOMPILE=y
# CONFIG_REMOTE_DEBUG is not set
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_CRC32 is not set
arch/mips64/defconfig-ip27
View file @
d3791f47
#
# Automatically generated make config: don't edit
#
CONFIG_MIPS=y
# CONFIG_MIPS32 is not set
CONFIG_MIPS64=y
#
# 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
#
# 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_IP27=y
# CONFIG_SGI_SN0_N_MODE is not set
CONFIG_DISCONTIGMEM=y
CONFIG_NUMA=y
# CONFIG_DISCONTIGMEM is not set
# CONFIG_NUMA is not set
# CONFIG_MAPPED_KERNEL is not set
# CONFIG_REPLICATE_KTEXT 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_XCHGADD_ALGORITHM is not set
CONFIG_BOOT_ELF64=y
CONFIG_ARC=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_COHERENT_IO=y
CONFIG_MAPPED_PCI_IO=y
CONFIG_PCI=y
CONFIG_BOOT_ELF64=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
#
# 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_R4X00 is not set
# CONFIG_CPU_TX49XX 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_R8000 is not set
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_CPU_LITTLE_ENDIAN is not set
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
CONFIG_MMU=y
# 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_PCI_NAMES=y
CONFIG_KCORE_ELF=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)
...
...
@@ -76,84 +139,36 @@ CONFIG_PCI_NAMES=y
#
# 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
#
# 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_CISS_DA 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_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set
#
# Multi-device support (RAID and LVM)
#
# 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
# ATA/ATAPI/MFM/RLL support
#
# 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
...
...
@@ -161,7 +176,6 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
...
...
@@ -170,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
#
# 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_REPORT_LUNS is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
...
...
@@ -179,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
# SCSI low-level drivers
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX 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_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 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_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR_D700 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
CONFIG_SCSI_QLOGIC_ISP=y
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_NSP32 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
#
...
...
@@ -235,39 +313,44 @@ CONFIG_NETDEVICES=y
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
CONFIG_SGI_IOC3_ETH=y
# CONFIG_SUNLANCE 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_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_NET_ISA is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC 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_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 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_
PLIP
is not set
# CONFIG_
HIPPI
is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
...
...
@@ -277,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
# 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_RCPCI is not set
# CONFIG_SHAPER is not set
#
# Wan interfaces
...
...
@@ -300,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
#
# 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
#
# CONFIG_VT is not set
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED 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_PTY_COUNT=256
...
...
@@ -324,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
# 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_I
NPUT_GAMEPORT
is not set
# CONFIG_I
2C_SENSOR
is not set
#
#
Input core support is needed for gameports
#
Mice
#
# CONFIG_BUSMOUSE is not set
# CONFIG_QIC02_TAPE is not set
#
# I
nput core support is needed for joysticks
# I
PMI
#
# CONFIG_
QIC02_TAPE
is not set
# CONFIG_
IPMI_HANDLER
is not set
#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM 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_R3964 is not set
# CONFIG_APPLICOM is not set
...
...
@@ -360,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HANGCHECK_TIMER is not set
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
#
# 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_AUTOFS_FS=y
# 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_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BEFS_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_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS 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_VXFS_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_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# 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_WRITE is not set
#
# Network File Systems
#
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=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_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_NCPFS_STRONG 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
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
...
...
@@ -456,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_NEC98_PARTITION is not set
CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_SMB_NLS is not set
# CONFIG_NLS is not set
CONFIG_KCORE_ELF=y
# CONFIG_EFI_PARTITION is not set
#
# Graphics support
#
#
# Sound
...
...
@@ -472,113 +623,30 @@ CONFIG_KCORE_ELF=y
# USB support
#
# CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
#
#
USB Controllers
#
Bluetooth support
#
# CONFIG_USB_UHCI is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
# CONFIG_BT is not set
#
# USB Device Class drivers
#
# 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
# Kernel hacking
#
# CONFIG_USB_SERIAL is not set
# CONFIG_USB_SERIAL_GENERIC 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
CONFIG_CROSSCOMPILE=y
# CONFIG_DEBUG_KERNEL is not set
#
#
Miscellaneous USB driver
s
#
Security option
s
#
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_ID75 is not set
# CONFIG_SECURITY is not set
#
#
Input core support
#
Cryptographic options
#
# CONFIG_INPUT 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
# CONFIG_CRYPTO is not set
#
#
Kernel hacking
#
Library routines
#
CONFIG_CROSSCOMPILE=y
# CONFIG_REMOTE_DEBUG is not set
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_CRC32 is not set
arch/mips64/sgi-ip27/ip27-pci-dma.c
deleted
100644 → 0
View file @
80b11f5a
/*
* 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
();
}
arch/mips64/sgi-ip27/ip27-pci.c
deleted
100644 → 0
View file @
80b11f5a
/*
* 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
}
};
arch/mips64/sgi-ip27/ip27-rtc.c
deleted
100644 → 0
View file @
80b11f5a
/*
* 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
--
;
}
include/asm-mips64/pci/bridge.h
View file @
d3791f47
...
...
@@ -41,7 +41,7 @@
* Bridge address map
*/
#if
defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#if
ndef __ASSEMBLY__
/*
* All accesses to bridge hardware registers must be done
...
...
@@ -283,7 +283,7 @@ typedef struct bridge_err_cmdword_s {
}
bridge_err_cmdword_t
;
#define berr_field berr_un.berr_st
#endif
/* LANGUAGE_C
*/
#endif
/* !__ASSEMBLY__
*/
/*
* The values of these macros can and should be crosschecked
...
...
@@ -793,7 +793,7 @@ typedef struct bridge_err_cmdword_s {
#define PCI64_ATTR_RMF_MASK 0x00ff000000000000
#define PCI64_ATTR_RMF_SHFT 48
#if
LANGUAGE_C
#if
ndef __ASSEMBLY__
/* Address translation entry for mapped pci32 accesses */
typedef
union
ate_u
{
u64
ent
;
...
...
@@ -809,7 +809,7 @@ typedef union ate_u {
u64
valid
:
1
;
}
field
;
}
ate_t
;
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define ATE_V 0x01
#define ATE_CO 0x02
...
...
include/asm-mips64/sn/addrs.h
View file @
d3791f47
...
...
@@ -11,9 +11,9 @@
#include <linux/config.h>
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <linux/types.h>
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#include <asm/addrspace.h>
#include <asm/reg.h>
...
...
@@ -26,7 +26,7 @@
#endif
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#if defined(CONFIG_SGI_IO)
/* FIXME */
#define PS_UINT_CAST (__psunsigned_t)
...
...
@@ -38,13 +38,13 @@
#define HUBREG_CAST (volatile hubreg_t *)
#el
if _LANGUAGE_ASSEMBLY
#el
se
/* __ASSEMBLY__ */
#define PS_UINT_CAST
#define UINT64_CAST
#define HUBREG_CAST
#endif
#endif
/* __ASSEMBLY__ */
#define NASID_GET_META(_n) ((_n) >> NASID_LOCAL_BITS)
...
...
@@ -278,7 +278,7 @@
0x800000 + (_x)))
#endif
/* CONFIG_SGI_IP27 */
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define HUB_L(_a) *(_a)
#define HUB_S(_a, _d) *(_a) = (_d)
...
...
@@ -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_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
...
...
@@ -367,7 +367,7 @@
#define KLI_KERN_XP 8
#define KLI_KERN_PARTID 9
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define KLD_BASE(nasid) ((kldir_ent_t *) KLDIR_ADDR(nasid))
#define KLD_LAUNCH(nasid) (KLD_BASE(nasid) + KLI_LAUNCH)
...
...
@@ -453,7 +453,7 @@
#define GPDA_ADDR(nasid) TO_NODE_CAC(nasid, GPDA_OFFSET)
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* _ASM_SN_ADDRS_H */
include/asm-mips64/sn/arch.h
View file @
d3791f47
...
...
@@ -20,7 +20,7 @@
#endif
#if
defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#if
ndef __ASSEMBLY__
#if !defined(CONFIG_SGI_IO)
typedef
u64
hubreg_t
;
typedef
u64
nic_t
;
...
...
@@ -44,7 +44,7 @@ typedef u64 nic_t;
#define makespnum(_nasid, _slice) \
(((_nasid) << CPUS_PER_NODE_SHFT) | (_slice))
#if
defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#if
ndef __ASSEMBLY__
#define INVALID_NASID (nasid_t)-1
#define INVALID_CNODEID (cnodeid_t)-1
...
...
@@ -102,7 +102,7 @@ nasid_t compact_to_nasid_nodeid(cnodeid_t cnode);
extern
int
node_getlastslot
(
cnodeid_t
);
#endif
/*
_LANGUAGE_C || _LANGUAGE_C_PLUS_PLUS
*/
#endif
/*
!__ASSEMBLY__
*/
#define SLOT_BITMASK (MAX_MEM_SLOTS - 1)
#define SLOT_SIZE (1LL<<SLOT_SHIFT)
...
...
include/asm-mips64/sn/gda.h
View file @
d3791f47
...
...
@@ -41,7 +41,7 @@
#define G_PARTIDOFF 40
#define G_TABLEOFF 128
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
struct
gda
{
u32
g_magic
;
/* GDA magic number */
...
...
@@ -67,7 +67,7 @@ typedef struct gda {
#define GDA ((gda_t*) GDA_ADDR(get_nasid()))
#endif
/*
__LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
* Define: PART_GDA_VERSION
* Purpose: Define the minimum version of the GDA required, lower
...
...
include/asm-mips64/sn/intr.h
View file @
d3791f47
...
...
@@ -19,7 +19,7 @@
#include <asm/sn/intr_public.h>
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
/*
* Macros to manipulate the interrupt register on the calling hub chip.
...
...
@@ -43,9 +43,9 @@
REMOTE_HUB_S((_hub), PI_INT_PEND_MOD, (_level)), \
REMOTE_HUB_L((_hub), PI_INT_PEND0)
#else
/*
LANGUAGE_ASSEMBLY
*/
#else
/*
__ASSEMBLY__
*/
#endif
/*
LANGUAGE_C
*/
#endif
/*
__ASSEMBLY__
*/
/*
* Hard-coded interrupt levels:
...
...
include/asm-mips64/sn/intr_public.h
View file @
d3791f47
...
...
@@ -20,7 +20,7 @@
#define INTPEND0_MAXMASK (N_INTPEND0_MASKS - 1)
#define INTPEND1_MAXMASK (N_INTPEND1_MASKS - 1)
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <asm/sn/arch.h>
struct
intr_vecblk_s
;
/* defined in asm/sn/intr.h */
...
...
@@ -49,5 +49,5 @@ typedef struct hub_intmasks_s {
struct
intr_vecblk_s
*
dispatch1
;
}
hub_intmasks_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* __ASM_SN_INTR_PUBLIC_H */
include/asm-mips64/sn/io.h
View file @
d3791f47
...
...
@@ -11,17 +11,7 @@
#include <linux/config.h>
#if !defined(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 */
#ifdef CONFIG_SGI_IO
#define IIO_ITTE_BASE 0x400160
/* base of translation table entries */
#define IIO_ITTE(bigwin) (IIO_ITTE_BASE + 8*(bigwin))
...
...
@@ -69,6 +59,17 @@
#include <asm/sn/sn0/hubio.h>
#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
/* _ASM_SN_IO_H */
include/asm-mips64/sn/klconfig.h
View file @
d3791f47
include/asm-mips64/sn/kldir.h
View file @
d3791f47
...
...
@@ -127,14 +127,14 @@
* 0x0 (0K) +-----------------------------------------+
*/
#ifdef
LANGUAGE_ASSEMBLY
#ifdef
__ASSEMBLY__
#define KLDIR_OFF_MAGIC 0x00
#define KLDIR_OFF_OFFSET 0x08
#define KLDIR_OFF_POINTER 0x10
#define KLDIR_OFF_SIZE 0x18
#define KLDIR_OFF_COUNT 0x20
#define KLDIR_OFF_STRIDE 0x28
#endif
/*
LANGUAGE_ASSEMBLY
*/
#endif
/*
__ASSEMBLY__
*/
#if !defined(CONFIG_SGI_IO)
...
...
@@ -209,7 +209,7 @@
#endif
/* !CONFIG_SGI_IO */
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
struct
kldir_ent_s
{
u64
magic
;
/* Indicates validity of entry */
off_t
offset
;
/* Offset from start of node space */
...
...
@@ -225,7 +225,7 @@ typedef struct kldir_ent_s {
/* NOTE: These 16 bytes are used in the Partition KLDIR
entry to store partition info. Refer to klpart.h for this. */
}
kldir_ent_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#if defined(CONFIG_SGI_IO)
...
...
include/asm-mips64/sn/klkernvars.h
View file @
d3791f47
...
...
@@ -11,7 +11,7 @@
#define KV_MAGIC 0x5f4b565f
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <asm/sn/types.h>
...
...
@@ -23,7 +23,7 @@ typedef struct kern_vars_s {
unsigned
long
kv_rw_baseaddr
;
}
kern_vars_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* __ASM_SN_KLKERNVARS_H */
include/asm-mips64/sn/launch.h
View file @
d3791f47
...
...
@@ -60,7 +60,7 @@
* clears the BUSY flag after control is returned to it.
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
int
launch_state_t
;
typedef
void
(
*
launch_proc_t
)(
u64
call_parm
);
...
...
@@ -102,21 +102,6 @@ typedef struct launch_s {
#define LAUNCH_FLASH (*(void (*)(void)) \
IP27PROM_FLASHLEDS)
#ifdef _STANDALONE
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
/* !__ASSEMBLY__ */
#endif
/* _ASM_SN_LAUNCH_H */
include/asm-mips64/sn/mapped_kernel.h
View file @
d3791f47
include/asm-mips64/sn/nmi.h
View file @
d3791f47
...
...
@@ -8,7 +8,7 @@
#ifndef __ASM_SN_NMI_H
#define __ASM_SN_NMI_H
#ident "$Revision: 1.
2
$"
#ident "$Revision: 1.
5
$"
#include <asm/sn/addrs.h>
...
...
@@ -48,7 +48,7 @@
*
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
struct
nmi_s
{
volatile
unsigned
long
magic
;
/* Magic number */
...
...
@@ -59,13 +59,13 @@ typedef struct nmi_s {
volatile
unsigned
long
gmaster
;
/* Flag true only on global master*/
}
nmi_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/* Following definitions are needed both in the prom & the kernel
* to identify the format of the nmi cpu register save area in the
* low memory on each node.
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
struct
reg_struct
{
unsigned
long
gpr
[
32
];
...
...
@@ -78,7 +78,7 @@ struct reg_struct {
unsigned
long
nmi_sr
;
};
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/* These are the assembly language offsets into the reg_struct structure */
...
...
include/asm-mips64/sn/sn0/addrs.h
View file @
d3791f47
...
...
@@ -99,14 +99,15 @@
#define NASID_GET(_pa) (int) ((UINT64_CAST (_pa) >> \
NASID_SHFT) & NASID_BITMASK)
#if _LANGUAGE_C && !defined(_STANDALONE)
#if !defined(__ASSEMBLY__) && !defined(_STANDALONE)
#define NODE_SWIN_BASE(nasid, widget) \
((widget == 0) ? NODE_BWIN_BASE((nasid), SWIN0_BIGWIN) \
: RAW_NODE_SWIN_BASE(nasid, widget))
#else
#else
/* __ASSEMBLY__ || _STANDALONE */
#define NODE_SWIN_BASE(nasid, widget) \
(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
...
...
@@ -163,11 +164,11 @@
#define SABLE_LOG_TRIGGER(_map)
#endif
/* SABLE */
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define KERN_NMI_ADDR(nasid, slice) \
TO_NODE_UNCAC((nasid), IP27_NMI_KREGS_OFFSET + \
(IP27_NMI_KREGS_CPU_SIZE * (slice)))
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#ifdef PROM
...
...
@@ -272,7 +273,8 @@
#define KL_UART_DATA LOCAL_HUB_ADDR(MD_UREG0_1)
/* UART data 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
* CACHE_ERR_SP_PTR could either contain an address to the stack, or
* the stack could start at CACHE_ERR_SP_PTR
...
...
@@ -289,7 +291,7 @@
#define CACHE_ERR_SP (CACHE_ERR_SP_PTR - 16)
#define CACHE_ERR_AREA_SIZE (ARCS_SPB_OFFSET - CACHE_ERR_EFRAME)
#endif
/* !_
LANGUAGE_ASSEMBLY
*/
#endif
/* !_
_ASSEMBLY__
*/
#define _ARCSPROM
...
...
@@ -314,7 +316,7 @@
* is in place.
*/
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define uchar unsigned char
...
...
@@ -359,7 +361,7 @@
#define PUT_INSTALL_STATUS(c,s) c->Revision = s
#define GET_INSTALL_STATUS(c) c->Revision
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* _STANDALONE */
...
...
include/asm-mips64/sn/sn0/arch.h
View file @
d3791f47
include/asm-mips64/sn/sn0/hubio.h
View file @
d3791f47
...
...
@@ -169,7 +169,7 @@
/*
* The IO LLP control status register and widget control register
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
hubii_wid_u
{
u64
wid_reg_value
;
...
...
@@ -292,7 +292,7 @@ typedef union io_perf_cnt {
}
perf_cnt_bits
;
}
io_perf_cnt_t
;
#endif
#endif
/* !__ASSEMBLY__ */
#define LNK_STAT_WORKING 0x2
...
...
@@ -440,7 +440,7 @@ typedef union io_perf_cnt {
/*
* Fields in CRB Register A
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrba_u
{
u64
reg_value
;
struct
{
...
...
@@ -500,7 +500,7 @@ typedef union h1_icrba_u {
#define a_valid icrba_fields_s.valid
#define a_iow icrba_fields_s.iow
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define IIO_ICRB_ADDR_SHFT 2
/* Shift to get proper address */
...
...
@@ -523,7 +523,7 @@ typedef union h1_icrba_u {
/*
* Fields in CRB Register B
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbb_u
{
u64
reg_value
;
struct
{
...
...
@@ -622,7 +622,7 @@ typedef union h1_icrbb_u {
#define b_imsg icrbb_field_s.imsg
#define b_initiator icrbb_field_s.initiator
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
* values for field xtsize
...
...
@@ -680,7 +680,7 @@ typedef union h1_icrbb_u {
* Fields in CRB Register C
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbc_s
{
u64
reg_value
;
...
...
@@ -712,13 +712,13 @@ typedef union icrbc_s {
#define c_barrop icrbc_field_s.barrop
#define c_doresp icrbc_field_s.doresp
#define c_gbr icrbc_field_s.gbr
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
* Fields in CRB Register D
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbd_s
{
u64
reg_value
;
struct
{
...
...
@@ -751,7 +751,7 @@ typedef union hubii_ifdr_u {
}
hi_ifdr_fields
;
}
hubii_ifdr_t
;
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
* Hardware designed names for the BTE control registers.
...
...
@@ -798,7 +798,7 @@ typedef union hubii_ifdr_u {
* IO PIO Read Table Entry format
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
iprte_a
{
u64
entry
;
...
...
@@ -820,7 +820,7 @@ typedef union iprte_a {
#define iprte_init iprte_fields.initiator
#define iprte_addr iprte_fields.addr
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define IPRTE_ADDRSHFT 3
...
...
@@ -828,7 +828,7 @@ typedef union iprte_a {
* Hub IIO PRB Register format.
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
/*
* Note: Fields bnakctr, anakctr, xtalkctrmode, ovflow fields are
* "Status" fields, and should only be used in case of clean up after errors.
...
...
@@ -860,7 +860,7 @@ typedef union iprb_u {
#define iprb_anakctr iprb_fields_s.anakctr
#define iprb_xtalkctr iprb_fields_s.xtalkctr
#endif
/* _LANGUAGE_C
*/
#endif
/* !__ASSEMBLY__
*/
/*
* values for mode field in iprb_t.
...
...
@@ -875,7 +875,7 @@ typedef union iprb_u {
/*
* IO CRB entry C_A to E_A : Partial (cache) CRBS
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbp_a
{
u64
ip_reg
;
/* the entire register value */
struct
{
...
...
@@ -909,7 +909,7 @@ typedef union icrbp_a {
}
ip_fmt
;
}
icrbp_a_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
* A couple of defines to go with the above structure.
...
...
@@ -917,7 +917,7 @@ typedef union icrbp_a {
#define ICRBP_A_CERR_SHFT 54
#define ICRBP_A_ERR_MASK 0x3ff
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
hubii_idsr
{
u64
iin_reg
;
struct
{
...
...
@@ -931,7 +931,7 @@ typedef union hubii_idsr {
level
:
7
;
}
iin_fmt
;
}
hubii_idsr_t
;
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
* IO BTE Length/Status (IIO_IBLS) register bit field definitions
...
...
include/asm-mips64/sn/sn0/hubmd.h
View file @
d3791f47
...
...
@@ -424,8 +424,7 @@
* Operations on page migration threshold register
*/
#if _LANGUAGE_C
#ifndef _STANDALONE
#ifndef __ASSEMBLY__
/*
* LED register macros
...
...
@@ -538,8 +537,6 @@
#define MD_SPROT_MIGMD_GET(value) ( \
((value) & MD_SPROT_MIGMD_MASK) >> MD_SPROT_MIGMD_SHFT)
#endif
/* _STANDALONE */
/*
* Format of dir_error, mem_error, protocol_error and misc_error registers
*/
...
...
@@ -739,7 +736,7 @@ typedef union md_perf_cnt {
}
md_perf_cnt_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define DIR_ERROR_VALID_MASK 0xe000000000000000
...
...
include/asm-mips64/sn/sn0/hubni.h
View file @
d3791f47
...
...
@@ -11,7 +11,7 @@
#ifndef _ASM_SGI_SN0_HUBNI_H
#define _ASM_SGI_SN0_HUBNI_H
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <linux/types.h>
#endif
...
...
@@ -226,7 +226,7 @@
#define NLT_EXIT_PORT_MASK (UINT64_CAST 0xf)
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
hubni_port_error_u
{
u64
nipe_reg_value
;
...
...
@@ -250,6 +250,6 @@ typedef union hubni_port_error_u {
#define NI_LLP_CB_MAX 0xff
#define NI_LLP_SN_MAX 0xff
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* _ASM_SGI_SN0_HUBNI_H */
include/asm-mips64/sn/sn0/hubpi.h
View file @
d3791f47
...
...
@@ -306,7 +306,7 @@
#define ERR_STACK_SIZE_BYTES(_sz) \
((_sz) ? (PI_MIN_STACK_SIZE << ((_sz) - 1)) : 0)
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
/*
* format of error stack and error status registers.
*/
...
...
@@ -359,7 +359,7 @@ typedef union pi_err_stat1 {
typedef
u64
rtc_time_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/* Bits in PI_SYSAD_ERRCHK_EN */
...
...
include/asm-mips64/sn/sn0/ip27.h
View file @
d3791f47
...
...
@@ -19,7 +19,7 @@
#define TLBLO_HWBITSHIFT 0
/* Shift value, for masking */
#if
!_LANGUAGE_ASSEMBLY
#if
ndef __ASSEMBLY__
#define CAUSE_BERRINTR IE_IRQ5
...
...
@@ -30,9 +30,9 @@
#define ECCF_PADDR 4
#define ECCF_SIZE (5 * sizeof(long))
#endif
/* !_
LANGUAGE_ASSEMBLY
*/
#endif
/* !_
_ASSEMBLY__
*/
#if
_LANGUAGE_ASSEMBLY
#if
def __ASSEMBLY__
/*
* KL_GET_CPUNUM (similar to EV_GET_SPNUM for EVEREST platform) reads
...
...
@@ -43,7 +43,7 @@
dli proc, LOCAL_HUB(0); \
ld proc, PI_CPU_NUM(proc)
#endif
/* _
LANGUAGE_ASSEMBLY
*/
#endif
/* _
_ASSEMBLY__
*/
/*
* R10000 status register interrupt bit mask usage for IP27.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment