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
40
Hide whitespace changes
Inline
Side-by-side
Showing
40 changed files
with
1319 additions
and
2444 deletions
+1319
-2444
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
include/asm-mips64/sn/sn0/sn0_fru.h
include/asm-mips64/sn/sn0/sn0_fru.h
+4
-4
No files found.
arch/mips
64
/sgi-ip27/Makefile
→
arch/mips/sgi-ip27/Makefile
View file @
d3791f47
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
# Makefile for the IP27 specific kernel interface routines under Linux.
# Makefile for the IP27 specific kernel interface routines under Linux.
#
#
EXTRA_AFLAGS
:=
$(CFLAGS)
obj-y
:=
ip27-berr.o ip27-console.o ip27-irq.o ip27-init.o ip27-irq-glue.o
\
obj-y
:=
ip27-berr.o ip27-console.o ip27-irq.o ip27-init.o ip27-irq-glue.o
\
ip27-klconfig.o ip27-klnuma.o ip27-memory.o ip27-nmi.o ip27-pci.o
\
ip27-klconfig.o ip27-klnuma.o ip27-memory.o ip27-nmi.o ip27-reset.o
\
ip27-pci-dma.o ip27-reset.o ip27-setup.o ip27-timer.o
ip27-setup.o ip27-timer.o
EXTRA_AFLAGS
:=
$(CFLAGS)
arch/mips
64
/sgi-ip27/TODO
→
arch/mips/sgi-ip27/TODO
View file @
d3791f47
1. Need to figure out why PCI writes to the IOC3 hang, and if it is okay
1. Need to figure out why PCI writes to the IOC3 hang, and if it is okay
not to write to the IOC3 ever.
not to write to the IOC3 ever.
2. Need to figure out RRB allocation in bridge_startup().
2. Need to figure out RRB allocation in bridge_startup().
3. Need to figure out why address swaizzling is needed in inw/outw for
3. Need to figure out why address swaizzling is needed in inw/outw for
Qlogic scsi controllers.
Qlogic scsi controllers.
4. Need to integrate ip27-klconfig.c:find_lboard and
4. Need to integrate ip27-klconfig.c:find_lboard and
ip27-init.c:find_lbaord_real. DONE
ip27-init.c:find_lbaord_real. DONE
5. Is it okay to set calias space on all nodes as 0, instead of 8k as
5. Is it okay to set calias space on all nodes as 0, instead of 8k as
in irix?
in irix?
6. Investigate why things do not work without the setup_test() call
6. Investigate why things do not work without the setup_test() call
being invoked on all nodes in ip27-memory.c.
being invoked on all nodes in ip27-memory.c.
7. Too many CLIs in the locore handlers :
7. Too many CLIs in the locore handlers :
For the low level handlers set up by set_except_vector(),
For the low level handlers set up by set_except_vector(),
__tlb_refill_debug_tramp, __xtlb_refill_debug_tramp and cacheerror,
__tlb_refill_debug_tramp, __xtlb_refill_debug_tramp and cacheerror,
investigate whether the code should do CLI, STI or KMODE.
investigate whether the code should do CLI, STI or KMODE.
8. Too many do_page_faults invoked - investigate.
8. Too many do_page_faults invoked - investigate.
9. start_thread must turn off UX64 ... and define tlb_refill_debug.
9. start_thread must turn off UX64 ... and define tlb_refill_debug.
10. Need a bad pmd table, bad pte table. __bad_pmd_table/__bad_pagetable
10. Need a bad pmd table, bad pte table. __bad_pmd_table/__bad_pagetable
...
...
arch/mips
64
/sgi-ip27/ip27-berr.c
→
arch/mips/sgi-ip27/ip27-berr.c
View file @
d3791f47
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
*
*
* Copyright (C) 1994, 1995, 1996, 1999, 2000 by Ralf Baechle
* Copyright (C) 1994, 1995, 1996, 1999, 2000 by Ralf Baechle
* Copyright (C) 1999, 2000 by Silicon Graphics
* Copyright (C) 1999, 2000 by Silicon Graphics
* Copyright (C) 2002 Maciej W. Rozycki
*/
*/
#include <linux/init.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/kernel.h>
...
@@ -14,86 +15,13 @@
...
@@ -14,86 +15,13 @@
#include <asm/sn/addrs.h>
#include <asm/sn/addrs.h>
#include <asm/sn/arch.h>
#include <asm/sn/arch.h>
#include <asm/sn/sn0/hub.h>
#include <asm/sn/sn0/hub.h>
#include <asm/tlbdebug.h>
#include <asm/traps.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
extern
void
dump_tlb_addr
(
unsigned
long
addr
);
extern
void
dump_tlb_addr
(
unsigned
long
addr
);
extern
void
dump_tlb_all
(
void
);
extern
void
dump_tlb_all
(
void
);
extern
asmlinkage
void
handle_ibe
(
void
);
extern
asmlinkage
void
handle_dbe
(
void
);
extern
const
struct
exception_table_entry
__start___dbe_table
[];
extern
const
struct
exception_table_entry
__stop___dbe_table
[];
static
inline
unsigned
long
search_one_table
(
const
struct
exception_table_entry
*
first
,
const
struct
exception_table_entry
*
last
,
unsigned
long
value
)
{
while
(
first
<=
last
)
{
const
struct
exception_table_entry
*
mid
;
long
diff
;
mid
=
(
last
-
first
)
/
2
+
first
;
diff
=
mid
->
insn
-
value
;
if
(
diff
==
0
)
return
mid
->
nextinsn
;
else
if
(
diff
<
0
)
first
=
mid
+
1
;
else
last
=
mid
-
1
;
}
return
0
;
}
extern
spinlock_t
modlist_lock
;
static
inline
unsigned
long
search_dbe_table
(
unsigned
long
addr
)
{
unsigned
long
ret
;
#ifndef CONFIG_MODULES
/* There is only the kernel to search. */
ret
=
search_one_table
(
__start___dbe_table
,
__stop___dbe_table
-
1
,
addr
);
return
ret
;
#else
unsigned
long
flags
;
/* The kernel is the last "module" -- no need to treat it special. */
struct
module
*
mp
;
struct
archdata
*
ap
;
spin_lock_irqsave
(
&
modlist_lock
,
flags
);
for
(
mp
=
module_list
;
mp
!=
NULL
;
mp
=
mp
->
next
)
{
if
(
!
mod_member_present
(
mp
,
archdata_end
)
||
!
mod_archdata_member_present
(
mp
,
struct
archdata
,
dbe_table_end
))
continue
;
ap
=
(
struct
archdata
*
)(
mod
->
archdata_start
);
if
(
ap
->
dbe_table_start
==
NULL
||
!
(
mp
->
flags
&
(
MOD_RUNNING
|
MOD_INITIALIZING
)))
continue
;
ret
=
search_one_table
(
ap
->
dbe_table_start
,
ap
->
dbe_table_end
-
1
,
addr
);
if
(
ret
)
break
;
}
spin_unlock_irqrestore
(
&
modlist_lock
,
flags
);
return
ret
;
#endif
}
void
do_ibe
(
struct
pt_regs
*
regs
)
{
printk
(
"Got ibe at 0x%lx
\n
"
,
regs
->
cp0_epc
);
show_regs
(
regs
);
dump_tlb_addr
(
regs
->
cp0_epc
);
force_sig
(
SIGBUS
,
current
);
while
(
1
);
}
static
void
dump_hub_information
(
unsigned
long
errst0
,
unsigned
long
errst1
)
static
void
dump_hub_information
(
unsigned
long
errst0
,
unsigned
long
errst1
)
{
{
static
char
*
err_type
[
2
][
8
]
=
{
static
char
*
err_type
[
2
][
8
]
=
{
...
@@ -109,7 +37,7 @@ static void dump_hub_information(unsigned long errst0, unsigned long errst1)
...
@@ -109,7 +37,7 @@ static void dump_hub_information(unsigned long errst0, unsigned long errst1)
return
;
return
;
}
}
printk
(
"Hub has valid error information:
\n
"
);
printk
(
"Hub has valid error information:
\n
"
);
if
(
errst0
&
PI_ERR_ST0_OVERRUN_MASK
)
if
(
errst0
&
PI_ERR_ST0_OVERRUN_MASK
)
printk
(
"Overrun is set. Error stack may contain additional "
printk
(
"Overrun is set. Error stack may contain additional "
...
@@ -127,21 +55,17 @@ static void dump_hub_information(unsigned long errst0, unsigned long errst1)
...
@@ -127,21 +55,17 @@ static void dump_hub_information(unsigned long errst0, unsigned long errst1)
?
:
"invalid"
);
?
:
"invalid"
);
}
}
void
do_dbe
(
struct
pt_regs
*
regs
)
int
ip27_be_handler
(
struct
pt_regs
*
regs
,
int
is_fixup
)
{
{
unsigned
long
fixup
,
errst0
,
errst1
;
unsigned
long
errst0
,
errst1
;
int
data
=
regs
->
cp0_cause
&
4
;
int
cpu
=
LOCAL_HUB_L
(
PI_CPU_NUM
);
int
cpu
=
LOCAL_HUB_L
(
PI_CPU_NUM
);
fixup
=
search_dbe_table
(
regs
->
cp0_epc
);
if
(
is_fixup
)
if
(
fixup
)
{
return
MIPS_BE_FIXUP
;
long
new_epc
;
new_epc
=
fixup_exception
(
dpf_reg
,
fixup
,
regs
->
cp0_epc
);
regs
->
cp0_epc
=
new_epc
;
return
;
}
printk
(
"Slice %c got dbe at 0x%lx
\n
"
,
'A'
+
cpu
,
regs
->
cp0_epc
);
printk
(
"Slice %c got %cbe at 0x%lx
\n
"
,
'A'
+
cpu
,
data
?
'd'
:
'i'
,
regs
->
cp0_epc
);
printk
(
"Hub information:
\n
"
);
printk
(
"Hub information:
\n
"
);
printk
(
"ERR_INT_PEND = 0x%06lx
\n
"
,
LOCAL_HUB_L
(
PI_ERR_INT_PEND
));
printk
(
"ERR_INT_PEND = 0x%06lx
\n
"
,
LOCAL_HUB_L
(
PI_ERR_INT_PEND
));
errst0
=
LOCAL_HUB_L
(
cpu
?
PI_ERR_STATUS0_B
:
PI_ERR_STATUS0_A
);
errst0
=
LOCAL_HUB_L
(
cpu
?
PI_ERR_STATUS0_B
:
PI_ERR_STATUS0_A
);
...
@@ -153,15 +77,13 @@ void do_dbe(struct pt_regs *regs)
...
@@ -153,15 +77,13 @@ void do_dbe(struct pt_regs *regs)
force_sig
(
SIGBUS
,
current
);
force_sig
(
SIGBUS
,
current
);
}
}
void
__init
void
__init
ip27_be_init
(
void
)
bus_error_init
(
void
)
{
{
/* XXX Initialize all the Hub & Bridge error handling here. */
/* XXX Initialize all the Hub & Bridge error handling here. */
int
cpu
=
LOCAL_HUB_L
(
PI_CPU_NUM
);
int
cpu
=
LOCAL_HUB_L
(
PI_CPU_NUM
);
int
cpuoff
=
cpu
<<
8
;
int
cpuoff
=
cpu
<<
8
;
set_except_vector
(
6
,
handle_ibe
);
board_be_handler
=
ip27_be_handler
;
set_except_vector
(
7
,
handle_dbe
);
LOCAL_HUB_S
(
PI_ERR_INT_PEND
,
LOCAL_HUB_S
(
PI_ERR_INT_PEND
,
cpu
?
PI_ERR_CLEAR_ALL_B
:
PI_ERR_CLEAR_ALL_A
);
cpu
?
PI_ERR_CLEAR_ALL_B
:
PI_ERR_CLEAR_ALL_A
);
...
...
arch/mips
64
/sgi-ip27/ip27-console.c
→
arch/mips/sgi-ip27/ip27-console.c
View file @
d3791f47
...
@@ -3,25 +3,35 @@
...
@@ -3,25 +3,35 @@
* License. See the file "COPYING" in the main directory of this archive
* License. See the file "COPYING" in the main directory of this archive
* for more details.
* for more details.
*
*
* Copyright (C) 2001 Ralf Baechle
* Copyright (C) 2001
, 2002
Ralf Baechle
*/
*/
#include <linux/init.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/console.h>
#include <linux/kdev_t.h>
#include <linux/kdev_t.h>
#include <linux/major.h>
#include <linux/major.h>
#include <linux/serial.h>
#include <asm/page.h>
#include <asm/sn/addrs.h>
#include <asm/sn/addrs.h>
#include <asm/sn/sn0/hub.h>
#include <asm/sn/sn0/hub.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/ioc3.h>
#include <asm/sn/ioc3.h>
#include <asm/sn/sn_private.h>
#include <asm/sn/sn_private.h>
void
prom_putchar
(
char
c
)
#define IOC3_BAUD (22000000 / (3*16))
#define IOC3_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
static
inline
struct
ioc3_uartregs
*
console_uart
(
void
)
{
{
struct
ioc3
*
ioc3
;
struct
ioc3
*
ioc3
;
struct
ioc3_uartregs
*
uart
;
ioc3
=
(
struct
ioc3
*
)
KL_CONFIG_CH_CONS_INFO
(
master_nasid
)
->
memory_base
;
ioc3
=
(
struct
ioc3
*
)
KL_CONFIG_CH_CONS_INFO
(
get_nasid
())
->
memory_base
;
uart
=
&
ioc3
->
sregs
.
uarta
;
return
&
ioc3
->
sregs
.
uarta
;
}
void
prom_putchar
(
char
c
)
{
struct
ioc3_uartregs
*
uart
=
console_uart
();
while
((
uart
->
iu_lsr
&
0x20
)
==
0
);
while
((
uart
->
iu_lsr
&
0x20
)
==
0
);
uart
->
iu_thr
=
c
;
uart
->
iu_thr
=
c
;
...
@@ -32,27 +42,24 @@ char __init prom_getchar(void)
...
@@ -32,27 +42,24 @@ char __init prom_getchar(void)
return
0
;
return
0
;
}
}
static
void
static
void
inline
ioc3_console_probe
(
void
)
ip27prom_console_write
(
struct
console
*
con
,
const
char
*
s
,
unsigned
n
)
{
{
prom_printf
(
"%s"
,
s
);
struct
serial_struct
req
;
}
static
kdev_t
/* Register to interrupt zero because we share the interrupt with
ip27prom_console_dev
(
struct
console
*
c
)
the serial driver which we don't properly support yet. */
{
memset
(
&
req
,
0
,
sizeof
(
req
));
return
MKDEV
(
TTY_MAJOR
,
64
+
c
->
index
);
req
.
irq
=
0
;
}
req
.
flags
=
IOC3_COM_FLAGS
;
req
.
io_type
=
SERIAL_IO_MEM
;
req
.
iomem_reg_shift
=
0
;
req
.
baud_base
=
IOC3_BAUD
;
static
struct
console
ip27_prom_console
=
{
req
.
iomem_base
=
(
unsigned
char
*
)
console_uart
();
.
name
=
"prom"
,
register_serial
(
&
req
);
.
write
=
ip27prom_console_write
,
}
.
device
=
ip27prom_console_dev
,
.
flags
=
CON_PRINTBUFFER
,
.
index
=
-
1
,
};
__init
void
ip27_setup_console
(
void
)
__init
void
ip27_setup_console
(
void
)
{
{
register_console
(
&
ip27_prom_console
);
ioc3_console_probe
(
);
}
}
arch/mips
64
/sgi-ip27/ip27-init.c
→
arch/mips/sgi-ip27/ip27-init.c
View file @
d3791f47
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/mmzone.h>
/* for numnodes */
#include <linux/mmzone.h>
/* for numnodes */
#include <linux/mm.h>
#include <linux/mm.h>
#include <asm/cpu.h>
#include <asm/pgalloc.h>
#include <asm/pgalloc.h>
#include <asm/pgtable.h>
#include <asm/pgtable.h>
#include <asm/sn/types.h>
#include <asm/sn/types.h>
...
@@ -28,6 +29,7 @@
...
@@ -28,6 +29,7 @@
#include <asm/smp.h>
#include <asm/smp.h>
#include <asm/processor.h>
#include <asm/processor.h>
#include <asm/mmu_context.h>
#include <asm/mmu_context.h>
#include <asm/thread_info.h>
#include <asm/sn/launch.h>
#include <asm/sn/launch.h>
#include <asm/sn/sn_private.h>
#include <asm/sn/sn_private.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/sn/sn0/ip27.h>
...
@@ -45,8 +47,8 @@
...
@@ -45,8 +47,8 @@
#define CNODEMASK_SETB(p, bit) ((p) |= 1ULL << (bit))
#define CNODEMASK_SETB(p, bit) ((p) |= 1ULL << (bit))
cpumask_t
boot_cpumask
;
cpumask_t
boot_cpumask
;
hubreg_t
region_mask
=
0
;
hubreg_t
region_mask
;
static
int
fine_mode
=
0
;
static
int
fine_mode
;
int
maxcpus
;
int
maxcpus
;
static
spinlock_t
hub_mask_lock
=
SPIN_LOCK_UNLOCKED
;
static
spinlock_t
hub_mask_lock
=
SPIN_LOCK_UNLOCKED
;
static
cnodemask_t
hub_init_mask
;
static
cnodemask_t
hub_init_mask
;
...
@@ -103,7 +105,7 @@ nasid_t get_actual_nasid(lboard_t *brd)
...
@@ -103,7 +105,7 @@ nasid_t get_actual_nasid(lboard_t *brd)
/* Tweak this for maximum number of CPUs to activate */
/* Tweak this for maximum number of CPUs to activate */
static
int
max_cpus
=
NR_CPUS
;
static
int
max_cpus
=
NR_CPUS
;
int
do_cpumask
(
cnodeid_t
cnode
,
nasid_t
nasid
,
cpumask_t
*
boot_cpumask
,
int
do_cpumask
(
cnodeid_t
cnode
,
nasid_t
nasid
,
cpumask_t
*
boot_cpumask
,
int
*
highest
)
int
*
highest
)
{
{
static
int
tot_cpus_found
=
0
;
static
int
tot_cpus_found
=
0
;
...
@@ -130,7 +132,7 @@ int do_cpumask(cnodeid_t cnode, nasid_t nasid, cpumask_t *boot_cpumask,
...
@@ -130,7 +132,7 @@ int do_cpumask(cnodeid_t cnode, nasid_t nasid, cpumask_t *boot_cpumask,
cpus_found
++
;
cpus_found
++
;
tot_cpus_found
++
;
tot_cpus_found
++
;
}
}
acpu
=
(
klcpu_t
*
)
find_component
(
brd
,
(
klinfo_t
*
)
acpu
,
acpu
=
(
klcpu_t
*
)
find_component
(
brd
,
(
klinfo_t
*
)
acpu
,
KLSTRUCT_CPU
);
KLSTRUCT_CPU
);
}
}
brd
=
KLCF_NEXT
(
brd
);
brd
=
KLCF_NEXT
(
brd
);
...
@@ -176,17 +178,17 @@ cpuid_t cpu_node_probe(cpumask_t *boot_cpumask, int *numnodes)
...
@@ -176,17 +178,17 @@ cpuid_t cpu_node_probe(cpumask_t *boot_cpumask, int *numnodes)
* cpus are not numbered.
* cpus are not numbered.
*/
*/
return
(
highest
+
1
)
;
return
highest
+
1
;
}
}
int
cpu_enabled
(
cpuid_t
cpu
)
int
cpu_enabled
(
cpuid_t
cpu
)
{
{
if
(
cpu
==
CPU_NONE
)
if
(
cpu
==
CPU_NONE
)
return
0
;
return
0
;
return
(
CPUMASK_TSTB
(
boot_cpumask
,
cpu
)
!=
0
)
;
return
CPUMASK_TSTB
(
boot_cpumask
,
cpu
)
!=
0
;
}
}
void
mlreset
(
void
)
void
mlreset
(
void
)
{
{
int
i
;
int
i
;
void
init_topology_matrix
(
void
);
void
init_topology_matrix
(
void
);
...
@@ -257,7 +259,7 @@ void intr_clear_bits(nasid_t nasid, volatile hubreg_t *pend, int base_level,
...
@@ -257,7 +259,7 @@ void intr_clear_bits(nasid_t nasid, volatile hubreg_t *pend, int base_level,
if
(
bits
&
(
1
<<
i
))
if
(
bits
&
(
1
<<
i
))
LOCAL_HUB_CLR_INTR
(
base_level
+
i
);
LOCAL_HUB_CLR_INTR
(
base_level
+
i
);
}
}
void
intr_clear_all
(
nasid_t
nasid
)
void
intr_clear_all
(
nasid_t
nasid
)
{
{
REMOTE_HUB_S
(
nasid
,
PI_INT_MASK0_A
,
0
);
REMOTE_HUB_S
(
nasid
,
PI_INT_MASK0_A
,
0
);
...
@@ -313,10 +315,10 @@ void per_hub_init(cnodeid_t cnode)
...
@@ -313,10 +315,10 @@ void per_hub_init(cnodeid_t cnode)
REMOTE_HUB_S
(
nasid
,
IIO_ICTP
,
0x800
);
REMOTE_HUB_S
(
nasid
,
IIO_ICTP
,
0x800
);
REMOTE_HUB_S
(
nasid
,
IIO_ICTO
,
0xff
);
REMOTE_HUB_S
(
nasid
,
IIO_ICTO
,
0xff
);
hub_rtc_init
(
cnode
);
hub_rtc_init
(
cnode
);
pcibr_setup
(
cnode
);
pcibr_setup
(
cnode
);
#ifdef CONFIG_REPLICATE_EXHANDLERS
#ifdef CONFIG_REPLICATE_EXHANDLERS
/*
/*
* If this is not a headless node initialization,
* If this is not a headless node initialization,
* copy over the caliased exception handlers.
* copy over the caliased exception handlers.
*/
*/
if
(
get_compact_nodeid
()
==
cnode
)
{
if
(
get_compact_nodeid
()
==
cnode
)
{
...
@@ -332,8 +334,7 @@ void per_hub_init(cnodeid_t cnode)
...
@@ -332,8 +334,7 @@ void per_hub_init(cnodeid_t cnode)
memcpy
((
void
*
)(
KSEG0
+
0x100
),
(
void
*
)
KSEG0
,
0x80
);
memcpy
((
void
*
)(
KSEG0
+
0x100
),
(
void
*
)
KSEG0
,
0x80
);
memcpy
((
void
*
)(
KSEG0
+
0x180
),
&
except_vec3_generic
,
memcpy
((
void
*
)(
KSEG0
+
0x180
),
&
except_vec3_generic
,
0x100
);
0x100
);
flush_cache_l1
();
__flush_cache_all
();
flush_cache_l2
();
}
}
#endif
#endif
}
}
...
@@ -359,12 +360,11 @@ void per_cpu_init(void)
...
@@ -359,12 +360,11 @@ void per_cpu_init(void)
int
cpu
=
smp_processor_id
();
int
cpu
=
smp_processor_id
();
cnodeid_t
cnode
=
get_compact_nodeid
();
cnodeid_t
cnode
=
get_compact_nodeid
();
current_cpu_data
.
asid_cache
=
ASID_FIRST_VERSION
;
TLBMISS_HANDLER_SETUP
();
TLBMISS_HANDLER_SETUP
();
#if 0
#if 0
intr_init();
intr_init();
#endif
#endif
set_cp0_status
(
ST0_IM
,
0
);
clear_c0_status
(
ST0_IM
);
per_hub_init
(
cnode
);
per_hub_init
(
cnode
);
cpu_time_init
();
cpu_time_init
();
if
(
smp_processor_id
())
/* master can't do this early, no kmalloc */
if
(
smp_processor_id
())
/* master can't do this early, no kmalloc */
...
@@ -374,13 +374,13 @@ void per_cpu_init(void)
...
@@ -374,13 +374,13 @@ void per_cpu_init(void)
#if 0
#if 0
install_tlbintr(cpu);
install_tlbintr(cpu);
#endif
#endif
set_c
p0_status
(
SRB_DEV0
|
SRB_DEV1
,
SRB_DEV0
|
SRB_DEV1
);
set_c
0_status
(
SRB_DEV0
|
SRB_DEV1
);
if
(
is_slave
)
{
if
(
is_slave
)
{
set_cp0_status
(
ST0_BEV
,
0
);
clear_c0_status
(
ST0_BEV
);
if
(
mips4_available
)
if
(
current_cpu_data
.
isa_level
==
MIPS_CPU_ISA_IV
)
set_c
p0_status
(
ST0_XX
,
ST0_XX
);
set_c
0_status
(
ST0_XX
);
set_c
p0_status
(
ST0_KX
|
ST0_SX
|
ST0_UX
,
ST0_KX
|
ST0_SX
|
ST0_UX
);
set_c
0_status
(
ST0_KX
|
ST0_SX
|
ST0_UX
);
sti
();
local_irq_enable
();
load_mmu
();
load_mmu
();
atomic_inc
(
&
numstarted
);
atomic_inc
(
&
numstarted
);
}
else
{
}
else
{
...
@@ -420,47 +420,91 @@ static void alloc_cpupda(cpuid_t cpu, int cpunum)
...
@@ -420,47 +420,91 @@ static void alloc_cpupda(cpuid_t cpu, int cpunum)
cpu_data
[
cpunum
].
p_cpuid
=
cpu
;
cpu_data
[
cpunum
].
p_cpuid
=
cpu
;
}
}
void
__init
smp_callin
(
void
)
static
struct
task_struct
*
__init
fork_by_hand
(
void
)
{
{
#if 0
struct
pt_regs
regs
;
calibrate_delay();
/*
smp_store_cpu_info(cpuid);
* don't care about the eip and regs settings since
#endif
* we'll never reschedule the forked task.
*/
return
copy_process
(
CLONE_VM
|
CLONE_IDLETASK
,
0
,
&
regs
,
0
,
NULL
,
NULL
);
}
}
int
__init
start_secondary
(
void
)
static
int
__init
do_boot_cpu
(
int
cpu
,
int
num_cpus
)
{
{
extern
int
cpu_idle
(
void
);
extern
void
smp_bootstrap
(
void
);
extern
atomic_t
smp_commenced
;
cpuid_t
mycpuid
=
getcpuid
();
struct
task_struct
*
idle
;
smp_callin
();
if
(
cpu
==
mycpuid
)
{
while
(
!
atomic_read
(
&
smp_commenced
)
);
alloc_cpupda
(
cpu
,
num_cpus
);
return
cpu_idle
()
;
return
1
;
}
}
static
volatile
cpumask_t
boot_barrier
;
/* Skip holes in CPU space */
if
(
!
CPUMASK_TSTB
(
boot_cpumask
,
cpu
))
return
0
;
void
cboot
(
void
)
/*
{
* The following code is purely to make sure
CPUMASK_CLRB
(
boot_barrier
,
getcpuid
());
/* needs atomicity */
* Linux can schedule processes on this slave.
per_cpu_init
();
*/
#if 0
idle
=
fork_by_hand
();
ecc_init();
if
(
IS_ERR
(
idle
))
bte_lateinit();
panic
(
"failed fork for CPU %d"
,
cpu
);
init_mfhi_war();
#endif
/*
_flush_tlb_all
();
* We remove it from the pidhash and the runqueue
flush_cache_l1
();
* once we got the process:
flush_cache_l2
();
*/
start_secondary
();
init_idle
(
idle
,
cpu
);
alloc_cpupda
(
cpu
,
num_cpus
);
unhash_process
(
idle
);
/*
* 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
(
smp_bootstrap
),
0
,
(
void
*
)((
unsigned
long
)
idle
->
thread_info
+
KERNEL_STACK_SIZE
-
32
),
(
void
*
)
idle
);
/*
* Now optimistically set the mapping arrays. We
* need to wait here, verify the cpu booted up, then
* fire up the next cpu.
*/
__cpu_number_map
[
cpu
]
=
num_cpus
;
__cpu_logical_map
[
num_cpus
]
=
cpu
;
CPUMASK_SETB
(
cpu_online_map
,
cpu
);
/*
* Wait this cpu to start up and initialize its hub,
* and discover the io devices it will control.
*
* XXX: We really want to fire up launch all the CPUs
* at once. We have to preserve the order of the
* devices on the bridges first though.
*/
while
(
atomic_read
(
&
numstarted
)
!=
num_cpus
);
return
1
;
}
}
void
allowboot
(
void
)
void
__init
smp_boot_cpus
(
void
)
{
{
int
num_cpus
=
0
;
int
num_cpus
=
0
;
cpuid_t
cpu
,
mycpuid
=
getcpuid
()
;
cpuid_t
cpu
;
cnodeid_t
cnode
;
cnodeid_t
cnode
;
extern
void
bootstrap
(
void
);
init_new_context
(
current
,
&
init_mm
);
current_thread_info
()
->
cpu
=
0
;
smp_tune_scheduling
();
sn_mp_setup
();
sn_mp_setup
();
/* Master has already done per_cpu_init() */
/* Master has already done per_cpu_init() */
...
@@ -471,71 +515,11 @@ void allowboot(void)
...
@@ -471,71 +515,11 @@ void allowboot(void)
#endif
#endif
replicate_kernel_text
(
numnodes
);
replicate_kernel_text
(
numnodes
);
boot_barrier
=
boot_cpumask
;
/* Launch slaves. */
/* Launch slaves. */
for
(
cpu
=
0
;
cpu
<
maxcpus
;
cpu
++
)
{
for
(
cpu
=
0
;
cpu
<
maxcpus
;
cpu
++
)
{
if
(
cpu
==
mycpuid
)
{
num_cpus
+=
do_boot_cpu
(
cpu
,
num_cpus
);
alloc_cpupda
(
cpu
,
num_cpus
);
num_cpus
++
;
/* We're already started, clear our bit */
CPUMASK_CLRB
(
boot_barrier
,
cpu
);
continue
;
}
/* Skip holes in CPU space */
if
(
CPUMASK_TSTB
(
boot_cpumask
,
cpu
))
{
struct
task_struct
*
p
;
/*
* 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
;
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
;
/*
* 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_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
);
/*
* Now optimistically set the mapping arrays. We
* need to wait here, verify the cpu booted up, then
* fire up the next cpu.
*/
__cpu_number_map
[
cpu
]
=
num_cpus
;
__cpu_logical_map
[
num_cpus
]
=
cpu
;
num_cpus
++
;
/*
* Wait this cpu to start up and initialize its hub,
* and discover the io devices it will control.
*
* XXX: We really want to fire up launch all the CPUs
* at once. We have to preserve the order of the
* devices on the bridges first though.
*/
while
(
atomic_read
(
&
numstarted
)
!=
num_cpus
);
}
}
}
#ifdef LATER
#ifdef LATER
Wait
logic
goes
here
.
Wait
logic
goes
here
.
#endif
#endif
...
@@ -551,18 +535,19 @@ void allowboot(void)
...
@@ -551,18 +535,19 @@ void allowboot(void)
cpu_io_setup();
cpu_io_setup();
init_mfhi_war();
init_mfhi_war();
#endif
#endif
smp_num_cpus
=
num_cpus
;
}
}
#else
/* CONFIG_SMP */
#else
/* CONFIG_SMP */
void
cboot
(
void
)
{}
void
__init
start_secondary
(
void
)
{
/* XXX Why do we need this empty definition at all? */
}
#endif
/* CONFIG_SMP */
#endif
/* CONFIG_SMP */
#define rou_rflag rou_flags
#define rou_rflag rou_flags
void
void
router_recurse
(
klrou_t
*
router_a
,
klrou_t
*
router_b
,
int
depth
)
router_recurse
(
klrou_t
*
router_a
,
klrou_t
*
router_b
,
int
depth
)
{
{
klrou_t
*
router
;
klrou_t
*
router
;
lboard_t
*
brd
;
lboard_t
*
brd
;
...
@@ -598,8 +583,7 @@ router_recurse(klrou_t *router_a, klrou_t *router_b, int depth)
...
@@ -598,8 +583,7 @@ router_recurse(klrou_t *router_a, klrou_t *router_b, int depth)
router_a
->
rou_rflag
=
0
;
router_a
->
rou_rflag
=
0
;
}
}
int
int
node_distance
(
nasid_t
nasid_a
,
nasid_t
nasid_b
)
node_distance
(
nasid_t
nasid_a
,
nasid_t
nasid_b
)
{
{
nasid_t
nasid
;
nasid_t
nasid
;
cnodeid_t
cnode
;
cnodeid_t
cnode
;
...
@@ -641,7 +625,7 @@ node_distance(nasid_t nasid_a, nasid_t nasid_b)
...
@@ -641,7 +625,7 @@ node_distance(nasid_t nasid_a, nasid_t nasid_b)
router_b
=
router
;
router_b
=
router
;
}
}
}
}
}
while
(
(
brd
=
find_lboard_class
(
KLCF_NEXT
(
brd
),
KLTYPE_ROUTER
))
);
}
while
(
(
brd
=
find_lboard_class
(
KLCF_NEXT
(
brd
),
KLTYPE_ROUTER
))
);
}
}
...
@@ -666,8 +650,7 @@ node_distance(nasid_t nasid_a, nasid_t nasid_b)
...
@@ -666,8 +650,7 @@ node_distance(nasid_t nasid_a, nasid_t nasid_b)
return
router_distance
;
return
router_distance
;
}
}
void
void
init_topology_matrix
(
void
)
init_topology_matrix
(
void
)
{
{
nasid_t
nasid
,
nasid2
;
nasid_t
nasid
,
nasid2
;
cnodeid_t
row
,
col
;
cnodeid_t
row
,
col
;
...
@@ -685,8 +668,7 @@ init_topology_matrix(void)
...
@@ -685,8 +668,7 @@ init_topology_matrix(void)
}
}
}
}
void
void
dump_topology
(
void
)
dump_topology
(
void
)
{
{
nasid_t
nasid
;
nasid_t
nasid
;
cnodeid_t
cnode
;
cnodeid_t
cnode
;
...
@@ -742,7 +724,7 @@ dump_topology(void)
...
@@ -742,7 +724,7 @@ dump_topology(void)
printk
(
" r"
);
printk
(
" r"
);
}
}
printk
(
"
\n
"
);
printk
(
"
\n
"
);
}
while
(
(
brd
=
find_lboard_class
(
KLCF_NEXT
(
brd
),
KLTYPE_ROUTER
))
);
}
while
(
(
brd
=
find_lboard_class
(
KLCF_NEXT
(
brd
),
KLTYPE_ROUTER
))
);
}
}
}
}
...
@@ -758,7 +740,7 @@ dump_klcfg(void)
...
@@ -758,7 +740,7 @@ dump_klcfg(void)
nasid_t nasid;
nasid_t nasid;
lboard_t *lbptr;
lboard_t *lbptr;
gda_t *gdap;
gda_t *gdap;
gdap = (gda_t *)GDA_ADDR(get_nasid());
gdap = (gda_t *)GDA_ADDR(get_nasid());
if (gdap->g_magic != GDA_MAGIC) {
if (gdap->g_magic != GDA_MAGIC) {
printk("dumpklcfg_cmd: Invalid GDA MAGIC\n");
printk("dumpklcfg_cmd: Invalid GDA MAGIC\n");
...
@@ -772,24 +754,24 @@ dump_klcfg(void)
...
@@ -772,24 +754,24 @@ dump_klcfg(void)
continue;
continue;
printk("\nDumpping klconfig Nasid %d:\n", nasid);
printk("\nDumpping klconfig Nasid %d:\n", nasid);
lbptr = KL_CONFIG_INFO(nasid);
lbptr = KL_CONFIG_INFO(nasid);
while (lbptr) {
while (lbptr) {
printk(" %s, Nasid %d, Module %d, widget 0x%x, partition %d, NIC 0x%x lboard 0x%lx",
printk(" %s, Nasid %d, Module %d, widget 0x%x, partition %d, NIC 0x%x lboard 0x%lx",
"board name here", /* BOARD_NAME(lbptr->brd_type), */
"board name here", /* BOARD_NAME(lbptr->brd_type), */
lbptr->brd_nasid, lbptr->brd_module,
lbptr->brd_nasid, lbptr->brd_module,
lbptr->brd_widgetnum,
lbptr->brd_widgetnum,
lbptr->brd_partition,
lbptr->brd_partition,
(lbptr->brd_nic), lbptr);
(lbptr->brd_nic), lbptr);
if (lbptr->brd_flags & DUPLICATE_BOARD)
if (lbptr->brd_flags & DUPLICATE_BOARD)
printk(" -D");
printk(" -D");
printk("\n");
printk("\n");
for (i = 0; i < lbptr->brd_numcompts; i++) {
for (i = 0; i < lbptr->brd_numcompts; i++) {
klinfo_t *kli;
klinfo_t *kli;
kli = NODE_OFFSET_TO_KLINFO(NASID_GET(lbptr), lbptr->brd_compts[i]);
kli = NODE_OFFSET_TO_KLINFO(NASID_GET(lbptr), lbptr->brd_compts[i]);
printk(" type %2d, flags 0x%04x, diagval %3d, physid %4d, virtid %2d: %s\n",
printk(" type %2d, flags 0x%04x, diagval %3d, physid %4d, virtid %2d: %s\n",
kli->struct_type,
kli->struct_type,
kli->flags,
kli->flags,
kli->diagval,
kli->diagval,
kli->physid,
kli->physid,
...
@@ -814,7 +796,7 @@ dump_klcfg(void)
...
@@ -814,7 +796,7 @@ dump_klcfg(void)
lbptr = KL_CONFIG_INFO(nasid);
lbptr = KL_CONFIG_INFO(nasid);
while (lbptr) {
while (lbptr) {
lbptr = find_lboard_class(lbptr, KLCLASS_ROUTER);
lbptr = find_lboard_class(lbptr, KLCLASS_ROUTER);
if(!lbptr)
if(!lbptr)
break;
break;
...
@@ -837,4 +819,3 @@ dump_klcfg(void)
...
@@ -837,4 +819,3 @@ dump_klcfg(void)
dump_topology();
dump_topology();
}
}
#endif
#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 @@
...
@@ -7,6 +7,7 @@
*/
*/
#include <linux/config.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/errno.h>
#include <linux/errno.h>
#include <linux/signal.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/sched.h>
...
@@ -19,25 +20,25 @@
...
@@ -19,25 +20,25 @@
#include <linux/smp_lock.h>
#include <linux/smp_lock.h>
#include <linux/kernel_stat.h>
#include <linux/kernel_stat.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h>
#include <asm/bitops.h>
#include <asm/bitops.h>
#include <asm/bootinfo.h>
#include <asm/bootinfo.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/mipsregs.h>
#include <asm/mipsregs.h>
#include <asm/system.h>
#include <asm/system.h>
#include <asm/irq.h>
#include <asm/ptrace.h>
#include <asm/ptrace.h>
#include <asm/processor.h>
#include <asm/processor.h>
#include <asm/pci/bridge.h>
#include <asm/pci/bridge.h>
#include <asm/sn/sn0/hub.h>
#include <asm/sn/sn0/hub.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/sn/addrs.h>
#include <asm/sn/agent.h>
#include <asm/sn/arch.h>
#include <asm/sn/arch.h>
#include <asm/sn/intr.h>
#include <asm/sn/intr.h>
#include <asm/sn/intr_public.h>
#include <asm/sn/intr_public.h>
#undef DEBUG_IRQ
#undef DEBUG_IRQ
#ifdef DEBUG_IRQ
#ifdef DEBUG_IRQ
#define DBG(x...) printk(x)
#define DBG(x...) printk(x)
...
@@ -67,12 +68,11 @@ unsigned char num_bridges; /* number of bridges in the system */
...
@@ -67,12 +68,11 @@ unsigned char num_bridges; /* number of bridges in the system */
*/
*/
extern
asmlinkage
void
ip27_irq
(
void
);
extern
asmlinkage
void
ip27_irq
(
void
);
extern
int
irq_to_bus
[],
irq_to_slot
[],
bus_to_cpu
[];
extern
int
irq_to_bus
[],
irq_to_slot
[],
bus_to_cpu
[];
int
intr_connect_level
(
int
cpu
,
int
bit
);
int
intr_connect_level
(
int
cpu
,
int
bit
);
int
intr_disconnect_level
(
int
cpu
,
int
bit
);
int
intr_disconnect_level
(
int
cpu
,
int
bit
);
unsigned
long
spurious_count
=
0
;
/*
/*
* There is a single intpend register per node, and we want to have
* There is a single intpend register per node, and we want to have
* distinct levels for intercpu intrs for both cpus A and B on a node.
* distinct levels for intercpu intrs for both cpus A and B on a node.
...
@@ -123,101 +123,27 @@ static inline int find_level(cpuid_t *cpunum, int irq)
...
@@ -123,101 +123,27 @@ static inline int find_level(cpuid_t *cpunum, int irq)
return
(
-
1
);
return
(
-
1
);
}
}
void
disable_irq
(
unsigned
int
irq_nr
)
{
panic
(
"disable_irq() called ..."
);
}
void
enable_irq
(
unsigned
int
irq_nr
)
{
panic
(
"enable_irq() called ..."
);
}
/* This is stupid for an Origin which can have thousands of IRQs ... */
static
struct
irqaction
*
irq_action
[
NR_IRQS
];
int
show_interrupts
(
struct
seq_file
*
p
,
void
*
v
)
{
int
i
;
struct
irqaction
*
action
;
unsigned
long
flags
;
for
(
i
=
0
;
i
<
NR_IRQS
;
i
++
)
{
local_irq_save
(
flags
);
action
=
irq_action
[
i
];
if
(
!
action
)
goto
skip
;
seq_printf
(
p
,
"%2d: %8d %c %s"
,
i
,
kstat_cpu
(
0
).
irqs
[
i
],
(
action
->
flags
&
SA_INTERRUPT
)
?
'+'
:
' '
,
action
->
name
);
for
(
action
=
action
->
next
;
action
;
action
=
action
->
next
)
{
seq_printf
(
p
,
",%s %s"
,
(
action
->
flags
&
SA_INTERRUPT
)
?
" +"
:
""
,
action
->
name
);
}
seq_putc
(
p
,
'\n'
);
skip:
local_irq_restore
(
flags
);
}
return
0
;
}
/*
* do_IRQ handles all normal device IRQ's (the special SMP cross-CPU interrupts
* have their own specific handlers).
*/
static
void
do_IRQ
(
cpuid_t
thiscpu
,
int
irq
,
struct
pt_regs
*
regs
)
{
struct
irqaction
*
action
;
int
do_random
;
irq_enter
(
thiscpu
,
irq
);
kstat_cpu
(
thiscpu
).
irqs
[
irq
]
++
;
action
=
*
(
irq
+
irq_action
);
if
(
action
)
{
if
(
!
(
action
->
flags
&
SA_INTERRUPT
))
local_irq_enable
();
do_random
=
0
;
do
{
do_random
|=
action
->
flags
;
action
->
handler
(
irq
,
action
->
dev_id
,
regs
);
action
=
action
->
next
;
}
while
(
action
);
if
(
do_random
&
SA_SAMPLE_RANDOM
)
add_interrupt_randomness
(
irq
);
local_irq_disable
();
}
irq_exit
(
thiscpu
,
irq
);
if
(
softirq_pending
(
thiscpu
))
do_softirq
();
}
/*
/*
* Find first bit set
* Find first bit set
*/
*/
static
int
ms1bit
(
unsigned
long
x
)
static
int
ms1bit
(
unsigned
long
x
)
{
{
int
b
;
int
b
=
0
,
s
;
if
(
x
>>
32
)
b
=
32
,
x
>>=
32
;
s
=
16
;
if
(
x
>>
16
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
else
b
=
0
;
s
=
8
;
if
(
x
>>
8
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
if
(
x
>>
16
)
b
+=
16
,
x
>>=
16
;
s
=
4
;
if
(
x
>>
4
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
if
(
x
>>
8
)
b
+=
8
,
x
>>=
8
;
s
=
2
;
if
(
x
>>
2
==
0
)
s
=
0
;
b
+=
s
;
x
>>=
s
;
if
(
x
>>
4
)
b
+=
4
,
x
>>=
4
;
s
=
1
;
if
(
x
>>
1
==
0
)
s
=
0
;
b
+=
s
;
if
(
x
>>
2
)
b
+=
2
,
x
>>=
2
;
return
b
+
(
int
)
(
x
>>
1
)
;
return
b
;
}
}
/*
/*
* This code is unnecessarily complex, because we do SA_INTERRUPT
* This code is unnecessarily complex, because we do SA_INTERRUPT
* intr enabling. Basically, once we grab the set of intrs we need
* intr enabling. Basically, once we grab the set of intrs we need
* to service, we must mask _all_ these interrupts; firstly, to make
* to service, we must mask _all_ these interrupts; firstly, to make
* sure the same intr does not intr again, causing recursion that
* sure the same intr does not intr again, causing recursion that
* can lead to stack overflow. Secondly, we can not just mask the
* can lead to stack overflow. Secondly, we can not just mask the
* one intr we are do_IRQing, because the non-masked intrs in the
* one intr we are do_IRQing, because the non-masked intrs in the
* first set might intr again, causing multiple servicings of the
* first set might intr again, causing multiple servicings of the
...
@@ -233,7 +159,7 @@ void ip27_do_irq(struct pt_regs *regs)
...
@@ -233,7 +159,7 @@ void ip27_do_irq(struct pt_regs *regs)
PI_INT_MASK0_A
:
PI_INT_MASK0_B
);
PI_INT_MASK0_A
:
PI_INT_MASK0_B
);
/* copied from Irix intpend0() */
/* copied from Irix intpend0() */
while
(((
pend0
=
LOCAL_HUB_L
(
PI_INT_PEND0
))
&
while
(((
pend0
=
LOCAL_HUB_L
(
PI_INT_PEND0
))
&
(
mask0
=
LOCAL_HUB_L
(
pi_int_mask0
)))
!=
0
)
{
(
mask0
=
LOCAL_HUB_L
(
pi_int_mask0
)))
!=
0
)
{
pend0
&=
mask0
;
/* Pick intrs we should look at */
pend0
&=
mask0
;
/* Pick intrs we should look at */
if
(
pend0
)
{
if
(
pend0
)
{
...
@@ -244,7 +170,7 @@ void ip27_do_irq(struct pt_regs *regs)
...
@@ -244,7 +170,7 @@ void ip27_do_irq(struct pt_regs *regs)
LOCAL_HUB_CLR_INTR
(
swlevel
);
LOCAL_HUB_CLR_INTR
(
swlevel
);
/* "map" swlevel to irq */
/* "map" swlevel to irq */
irq
=
LEVEL_TO_IRQ
(
thiscpu
,
swlevel
);
irq
=
LEVEL_TO_IRQ
(
thiscpu
,
swlevel
);
do_IRQ
(
thiscpu
,
irq
,
regs
);
do_IRQ
(
irq
,
regs
);
/* clear bit in pend0 */
/* clear bit in pend0 */
pend0
^=
1ULL
<<
swlevel
;
pend0
^=
1ULL
<<
swlevel
;
}
while
(
pend0
);
}
while
(
pend0
);
...
@@ -257,7 +183,7 @@ void ip27_do_irq(struct pt_regs *regs)
...
@@ -257,7 +183,7 @@ void ip27_do_irq(struct pt_regs *regs)
/* Startup one of the (PCI ...) IRQs routes over a bridge. */
/* Startup one of the (PCI ...) IRQs routes over a bridge. */
static
unsigned
int
bridge_startup
(
unsigned
int
irq
)
static
unsigned
int
startup_bridge_irq
(
unsigned
int
irq
)
{
{
bridgereg_t
device
;
bridgereg_t
device
;
bridge_t
*
bridge
;
bridge_t
*
bridge
;
...
@@ -265,6 +191,9 @@ static unsigned int bridge_startup(unsigned int irq)
...
@@ -265,6 +191,9 @@ static unsigned int bridge_startup(unsigned int irq)
cpuid_t
cpu
;
cpuid_t
cpu
;
nasid_t
master
=
NASID_FROM_PCI_IRQ
(
irq
);
nasid_t
master
=
NASID_FROM_PCI_IRQ
(
irq
);
if
(
irq
<
BASE_PCI_IRQ
)
return
0
;
bridge
=
(
bridge_t
*
)
NODE_SWIN_BASE
(
master
,
WID_FROM_PCI_IRQ
(
irq
));
bridge
=
(
bridge_t
*
)
NODE_SWIN_BASE
(
master
,
WID_FROM_PCI_IRQ
(
irq
));
pin
=
SLOT_FROM_PCI_IRQ
(
irq
);
pin
=
SLOT_FROM_PCI_IRQ
(
irq
);
cpu
=
IRQ_TO_CPU
(
irq
);
cpu
=
IRQ_TO_CPU
(
irq
);
...
@@ -297,13 +226,16 @@ static unsigned int bridge_startup(unsigned int irq)
...
@@ -297,13 +226,16 @@ static unsigned int bridge_startup(unsigned int irq)
}
}
/* Shutdown one of the (PCI ...) IRQs routes over a bridge. */
/* Shutdown one of the (PCI ...) IRQs routes over a bridge. */
static
unsigned
int
bridge_shutdown
(
unsigned
int
irq
)
static
unsigned
int
shutdown_bridge_irq
(
unsigned
int
irq
)
{
{
bridge_t
*
bridge
;
bridge_t
*
bridge
;
int
pin
,
swlevel
;
int
pin
,
swlevel
;
cpuid_t
cpu
;
cpuid_t
cpu
;
bridge
=
(
bridge_t
*
)
NODE_SWIN_BASE
(
NASID_FROM_PCI_IRQ
(
irq
),
if
(
irq
<
BASE_PCI_IRQ
)
return
0
;
bridge
=
(
bridge_t
*
)
NODE_SWIN_BASE
(
NASID_FROM_PCI_IRQ
(
irq
),
WID_FROM_PCI_IRQ
(
irq
));
WID_FROM_PCI_IRQ
(
irq
));
DBG
(
"bridge_shutdown: irq 0x%x
\n
"
,
irq
);
DBG
(
"bridge_shutdown: irq 0x%x
\n
"
,
irq
);
pin
=
SLOT_FROM_PCI_IRQ
(
irq
);
pin
=
SLOT_FROM_PCI_IRQ
(
irq
);
...
@@ -322,312 +254,64 @@ static unsigned int bridge_shutdown(unsigned int irq)
...
@@ -322,312 +254,64 @@ static unsigned int bridge_shutdown(unsigned int irq)
return
0
;
/* Never anything pending. */
return
0
;
/* Never anything pending. */
}
}
void
irq_debug
(
void
)
static
inline
void
enable_bridge_irq
(
unsigned
int
irq
)
{
{
bridge_t
*
bridge
=
(
bridge_t
*
)
0x9200000008000000
;
/* All the braindamage happens magically for us in ip27_do_irq */
printk
(
"bridge->b_int_status = 0x%x
\n
"
,
bridge
->
b_int_status
);
printk
(
"bridge->b_int_enable = 0x%x
\n
"
,
bridge
->
b_int_enable
);
printk
(
"PI_INT_PEND0 = 0x%lx
\n
"
,
LOCAL_HUB_L
(
PI_INT_PEND0
));
printk
(
"PI_INT_MASK0_A = 0x%lx
\n
"
,
LOCAL_HUB_L
(
PI_INT_MASK0_A
));
}
}
int
setup_irq
(
unsigned
int
irq
,
struct
irqaction
*
new
)
static
void
disable_bridge_irq
(
unsigned
int
irq
)
{
{
int
shared
=
0
;
/* All the braindamage happens magically for us in ip27_do_irq */
struct
irqaction
*
old
,
**
p
;
unsigned
long
flags
;
DBG
(
"setup_irq: 0x%x
\n
"
,
irq
);
if
(
irq
>=
NR_IRQS
)
{
printk
(
"IRQ array overflow %d
\n
"
,
irq
);
while
(
1
);
}
if
(
new
->
flags
&
SA_SAMPLE_RANDOM
)
rand_initialize_irq
(
irq
);
save_and_cli
(
flags
);
p
=
irq_action
+
irq
;
if
((
old
=
*
p
)
!=
NULL
)
{
/* Can't share interrupts unless both agree to */
if
(
!
(
old
->
flags
&
new
->
flags
&
SA_SHIRQ
))
{
restore_flags
(
flags
);
return
-
EBUSY
;
}
/* Add new interrupt at end of irq queue */
do
{
p
=
&
old
->
next
;
old
=
*
p
;
}
while
(
old
);
shared
=
1
;
}
*
p
=
new
;
if
((
!
shared
)
&&
(
irq
>=
BASE_PCI_IRQ
))
{
bridge_startup
(
irq
);
}
restore_flags
(
flags
);
return
0
;
}
}
int
request_irq
(
unsigned
int
irq
,
static
void
mask_and_ack_bridge_irq
(
unsigned
int
irq
)
void
(
*
handler
)(
int
,
void
*
,
struct
pt_regs
*
),
unsigned
long
irqflags
,
const
char
*
devname
,
void
*
dev_id
)
{
{
int
retval
;
/* All the braindamage happens magically for us in ip27_do_irq */
struct
irqaction
*
action
;
DBG
(
"request_irq(): irq= 0x%x
\n
"
,
irq
);
if
(
!
handler
)
return
-
EINVAL
;
action
=
(
struct
irqaction
*
)
kmalloc
(
sizeof
(
*
action
),
GFP_KERNEL
);
if
(
!
action
)
return
-
ENOMEM
;
action
->
handler
=
handler
;
action
->
flags
=
irqflags
;
action
->
mask
=
0
;
action
->
name
=
devname
;
action
->
next
=
NULL
;
action
->
dev_id
=
dev_id
;
DBG
(
"request_irq(): %s devid= 0x%x
\n
"
,
devname
,
dev_id
);
retval
=
setup_irq
(
irq
,
action
);
DBG
(
"request_irq(): retval= %d
\n
"
,
retval
);
if
(
retval
)
kfree
(
action
);
return
retval
;
}
}
void
free_irq
(
unsigned
int
irq
,
void
*
dev_id
)
static
void
end_bridge_irq
(
unsigned
int
irq
)
{
{
struct
irqaction
*
action
,
**
p
;
if
(
!
(
irq_desc
[
irq
].
status
&
(
IRQ_DISABLED
|
IRQ_INPROGRESS
)))
unsigned
long
flags
;
enable_bridge_irq
(
irq
);
if
(
irq
>=
NR_IRQS
)
{
printk
(
"Trying to free IRQ%d
\n
"
,
irq
);
return
;
}
for
(
p
=
irq
+
irq_action
;
(
action
=
*
p
)
!=
NULL
;
p
=
&
action
->
next
)
{
if
(
action
->
dev_id
!=
dev_id
)
continue
;
/* Found it - now free it */
save_and_cli
(
flags
);
*
p
=
action
->
next
;
if
(
irq
>=
BASE_PCI_IRQ
)
bridge_shutdown
(
irq
);
restore_flags
(
flags
);
kfree
(
action
);
return
;
}
printk
(
"Trying to free free IRQ%d
\n
"
,
irq
);
}
}
/* Useless ISA nonsense. */
static
struct
hw_interrupt_type
bridge_irq_type
=
{
unsigned
long
probe_irq_on
(
void
)
"bridge"
,
{
startup_bridge_irq
,
panic
(
"probe_irq_on called!
\n
"
);
shutdown_bridge_irq
,
return
0
;
enable_bridge_irq
,
}
disable_bridge_irq
,
mask_and_ack_bridge_irq
,
end_bridge_irq
};
int
probe_irq_off
(
unsigned
long
irqs
)
void
irq_debug
(
void
)
{
{
return
0
;
bridge_t
*
bridge
=
(
bridge_t
*
)
0x9200000008000000
;
}
void
__init
init_IRQ
(
void
)
printk
(
"bridge->b_int_status = 0x%x
\n
"
,
bridge
->
b_int_status
);
{
printk
(
"bridge->b_int_enable = 0x%x
\n
"
,
bridge
->
b_int_enable
);
set_except_vector
(
0
,
ip27_irq
);
printk
(
"PI_INT_PEND0 = 0x%lx
\n
"
,
LOCAL_HUB_L
(
PI_INT_PEND0
));
printk
(
"PI_INT_MASK0_A = 0x%lx
\n
"
,
LOCAL_HUB_L
(
PI_INT_MASK0_A
));
}
}
#ifdef CONFIG_SMP
void
__init
init_IRQ
(
void
)
/*
* This following are the global intr on off routines, copied almost
* entirely from i386 code.
*/
int
global_irq_holder
=
NO_PROC_ID
;
spinlock_t
global_irq_lock
=
SPIN_LOCK_UNLOCKED
;
extern
void
show_stack
(
unsigned
long
*
esp
);
static
void
show
(
char
*
str
)
{
{
int
i
;
int
i
;
int
cpu
=
smp_processor_id
();
printk
(
"
\n
%s, CPU %d:
\n
"
,
str
,
cpu
);
printk
(
"irq: %d ["
,
irqs_running
());
for
(
i
=
0
;
i
<
smp_num_cpus
;
i
++
)
printk
(
" %d"
,
local_irq_count
(
i
));
printk
(
" ]
\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
)
set_except_vector
(
0
,
ip27_irq
);
{
if
(
!
spin_trylock
(
&
global_irq_lock
))
{
/* do we already hold the lock? */
if
((
unsigned
char
)
cpu
==
global_irq_holder
)
return
;
/* Uhhuh.. Somebody else got it. Wait.. */
spin_lock
(
&
global_irq_lock
);
}
/*
* We also to make sure that nobody else is running
* in an interrupt context.
*/
wait_on_irq
(
cpu
);
/*
/*
*
Ok, finally..
*
Right now the bridge irq is our kitchen sink interrupt type
*/
*/
global_irq_holder
=
cpu
;
for
(
i
=
0
;
i
<=
NR_IRQS
;
i
++
)
{
}
irq_desc
[
i
].
status
=
IRQ_DISABLED
;
irq_desc
[
i
].
action
=
0
;
void
__global_cli
(
void
)
irq_desc
[
i
].
depth
=
1
;
{
irq_desc
[
i
].
handler
=
&
bridge_irq_type
;
unsigned
int
flags
;
local_save_flags
(
flags
);
if
(
flags
&
ST0_IE
)
{
int
cpu
=
smp_processor_id
();
local_irq_disable
();
if
(
!
local_irq_count
(
cpu
))
get_irqlock
(
cpu
);
}
}
}
}
void
__global_sti
(
void
)
{
int
cpu
=
smp_processor_id
();
if
(
!
local_irq_count
(
cpu
))
release_irqlock
(
cpu
);
local_irq_enable
();
}
/*
* SMP flags value to restore to:
* 0 - global cli
* 1 - global sti
* 2 - local cli
* 3 - local sti
*/
unsigned
long
__global_save_flags
(
void
)
{
int
retval
;
int
local_enabled
;
unsigned
long
flags
;
int
cpu
=
smp_processor_id
();
local_save_flags
(
flags
);
local_enabled
=
(
flags
&
ST0_IE
);
/* default to local */
retval
=
2
+
local_enabled
;
/* check for global flags if we're not in an interrupt */
if
(
!
local_irq_count
(
cpu
))
{
if
(
local_enabled
)
retval
=
1
;
if
(
global_irq_holder
==
cpu
)
retval
=
0
;
}
return
retval
;
}
void
__global_restore_flags
(
unsigned
long
flags
)
{
switch
(
flags
)
{
case
0
:
__global_cli
();
break
;
case
1
:
__global_sti
();
break
;
case
2
:
local_irq_disable
();
break
;
case
3
:
local_irq_enable
();
break
;
default:
printk
(
"global_restore_flags: %08lx
\n
"
,
flags
);
}
}
#endif
/* CONFIG_SMP */
/*
/*
* Get values that vary depending on which CPU and bit we're operating on.
* Get values that vary depending on which CPU and bit we're operating on.
*/
*/
...
@@ -665,10 +349,10 @@ int intr_connect_level(int cpu, int bit)
...
@@ -665,10 +349,10 @@ int intr_connect_level(int cpu, int bit)
intpend_masks
[
0
]
|=
(
1ULL
<<
(
u64
)
bit
);
intpend_masks
[
0
]
|=
(
1ULL
<<
(
u64
)
bit
);
if
(
ip
==
0
)
{
if
(
ip
==
0
)
{
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK0_A
+
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK0_A
+
PI_INT_MASK_OFFSET
*
slice
);
PI_INT_MASK_OFFSET
*
slice
);
}
else
{
}
else
{
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK1_A
+
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK1_A
+
PI_INT_MASK_OFFSET
*
slice
);
PI_INT_MASK_OFFSET
*
slice
);
}
}
HUB_S
(
mask_reg
,
intpend_masks
[
0
]);
HUB_S
(
mask_reg
,
intpend_masks
[
0
]);
...
@@ -686,10 +370,10 @@ int intr_disconnect_level(int cpu, int bit)
...
@@ -686,10 +370,10 @@ int intr_disconnect_level(int cpu, int bit)
(
void
)
intr_get_ptrs
(
cpu
,
bit
,
&
bit
,
&
intpend_masks
,
&
ip
);
(
void
)
intr_get_ptrs
(
cpu
,
bit
,
&
bit
,
&
intpend_masks
,
&
ip
);
intpend_masks
[
0
]
&=
~
(
1ULL
<<
(
u64
)
bit
);
intpend_masks
[
0
]
&=
~
(
1ULL
<<
(
u64
)
bit
);
if
(
ip
==
0
)
{
if
(
ip
==
0
)
{
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK0_A
+
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK0_A
+
PI_INT_MASK_OFFSET
*
slice
);
PI_INT_MASK_OFFSET
*
slice
);
}
else
{
}
else
{
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK1_A
+
mask_reg
=
REMOTE_HUB_ADDR
(
nasid
,
PI_INT_MASK1_A
+
PI_INT_MASK_OFFSET
*
slice
);
PI_INT_MASK_OFFSET
*
slice
);
}
}
HUB_S
(
mask_reg
,
intpend_masks
[
0
]);
HUB_S
(
mask_reg
,
intpend_masks
[
0
]);
...
@@ -697,12 +381,47 @@ int intr_disconnect_level(int cpu, int bit)
...
@@ -697,12 +381,47 @@ int intr_disconnect_level(int cpu, int bit)
}
}
void
handle_resched_intr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
irqreturn_t
handle_resched_intr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
{
/* Nothing, the return from intr will work for us */
/* Nothing, the return from intr will work for us */
return
IRQ_NONE
;
}
}
extern
void
smp_call_function_interrupt
(
void
);
#ifdef CONFIG_SMP
void
core_send_ipi
(
int
destid
,
unsigned
int
action
)
{
int
irq
;
#if (CPUS_PER_NODE == 2)
switch
(
action
)
{
case
SMP_RESCHEDULE_YOURSELF
:
irq
=
CPU_RESCHED_A_IRQ
;
break
;
case
SMP_CALL_FUNCTION
:
irq
=
CPU_CALL_A_IRQ
;
break
;
default:
panic
(
"sendintr"
);
}
irq
+=
cputoslice
(
destid
);
/*
* Convert the compact hub number to the NASID to get the correct
* part of the address space. Then set the interrupt bit associated
* with the CPU we want to send the interrupt to.
*/
REMOTE_HUB_SEND_INTR
(
COMPACT_TO_NASID_NODEID
(
cputocnode
(
destid
)),
FAST_IRQ_TO_LEVEL
(
irq
));
#else
<<
Bomb
!
Must
redefine
this
for
more
than
2
CPUS
.
>>
#endif
}
#endif
extern
irqreturn_t
smp_call_function_interrupt
(
int
irq
,
void
*
dev
,
struct
pt_regs
*
regs
);
void
install_cpuintr
(
int
cpu
)
void
install_cpuintr
(
int
cpu
)
{
{
...
@@ -718,38 +437,38 @@ void install_cpuintr(int cpu)
...
@@ -718,38 +437,38 @@ void install_cpuintr(int cpu)
if
(
done
==
0
)
{
if
(
done
==
0
)
{
int
j
;
int
j
;
if
(
request_irq
(
CPU_RESCHED_A_IRQ
,
handle_resched_intr
,
if
(
request_irq
(
CPU_RESCHED_A_IRQ
,
handle_resched_intr
,
0
,
"resched"
,
0
))
0
,
"resched"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
if
(
request_irq
(
CPU_RESCHED_B_IRQ
,
handle_resched_intr
,
if
(
request_irq
(
CPU_RESCHED_B_IRQ
,
handle_resched_intr
,
0
,
"resched"
,
0
))
0
,
"resched"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
if
(
request_irq
(
CPU_CALL_A_IRQ
,
smp_call_function_interrupt
,
if
(
request_irq
(
CPU_CALL_A_IRQ
,
smp_call_function_interrupt
,
0
,
"callfunc"
,
0
))
0
,
"callfunc"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
if
(
request_irq
(
CPU_CALL_B_IRQ
,
smp_call_function_interrupt
,
if
(
request_irq
(
CPU_CALL_B_IRQ
,
smp_call_function_interrupt
,
0
,
"callfunc"
,
0
))
0
,
"callfunc"
,
0
))
panic
(
"intercpu intr unconnectible
\n
"
);
panic
(
"intercpu intr unconnectible"
);
for
(
j
=
0
;
j
<
PERNODE_LEVELS
;
j
++
)
for
(
j
=
0
;
j
<
PERNODE_LEVELS
;
j
++
)
LEVEL_TO_IRQ
(
0
,
j
)
=
-
1
;
LEVEL_TO_IRQ
(
0
,
j
)
=
-
1
;
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_RESCHED_A_IRQ
))
=
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_RESCHED_A_IRQ
))
=
CPU_RESCHED_A_IRQ
;
CPU_RESCHED_A_IRQ
;
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_RESCHED_B_IRQ
))
=
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_RESCHED_B_IRQ
))
=
CPU_RESCHED_B_IRQ
;
CPU_RESCHED_B_IRQ
;
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_CALL_A_IRQ
))
=
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_CALL_A_IRQ
))
=
CPU_CALL_A_IRQ
;
CPU_CALL_A_IRQ
;
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_CALL_B_IRQ
))
=
LEVEL_TO_IRQ
(
0
,
FAST_IRQ_TO_LEVEL
(
CPU_CALL_B_IRQ
))
=
CPU_CALL_B_IRQ
;
CPU_CALL_B_IRQ
;
for
(
j
=
1
;
j
<
MAX_COMPACT_NODES
;
j
++
)
for
(
j
=
1
;
j
<
MAX_COMPACT_NODES
;
j
++
)
memcpy
(
&
node_level_to_irq
[
j
][
0
],
memcpy
(
&
node_level_to_irq
[
j
][
0
],
&
node_level_to_irq
[
0
][
0
],
&
node_level_to_irq
[
0
][
0
],
sizeof
(
node_level_to_irq
[
0
][
0
])
*
PERNODE_LEVELS
);
sizeof
(
node_level_to_irq
[
0
][
0
])
*
PERNODE_LEVELS
);
done
=
1
;
done
=
1
;
}
}
intr_connect_level
(
cpu
,
FAST_IRQ_TO_LEVEL
(
CPU_RESCHED_A_IRQ
+
intr_connect_level
(
cpu
,
FAST_IRQ_TO_LEVEL
(
CPU_RESCHED_A_IRQ
+
cputoslice
(
cpu
)));
cputoslice
(
cpu
)));
intr_connect_level
(
cpu
,
FAST_IRQ_TO_LEVEL
(
CPU_CALL_A_IRQ
+
intr_connect_level
(
cpu
,
FAST_IRQ_TO_LEVEL
(
CPU_CALL_A_IRQ
+
cputoslice
(
cpu
)));
cputoslice
(
cpu
)));
...
...
arch/mips
64
/sgi-ip27/ip27-klconfig.c
→
arch/mips/sgi-ip27/ip27-klconfig.c
View file @
d3791f47
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
#include <linux/kernel_stat.h>
#include <linux/kernel_stat.h>
#include <linux/param.h>
#include <linux/param.h>
#include <linux/timex.h>
#include <linux/timex.h>
#include <linux/mm.h>
#include <linux/mm.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/arch.h>
#include <asm/sn/arch.h>
...
@@ -92,7 +92,7 @@ klcpu_t * nasid_slice_to_cpuinfo(nasid_t nasid, int slice)
...
@@ -92,7 +92,7 @@ klcpu_t * nasid_slice_to_cpuinfo(nasid_t nasid, int slice)
do
{
do
{
if
((
acpu
->
cpu_info
.
physid
)
==
slice
)
if
((
acpu
->
cpu_info
.
physid
)
==
slice
)
return
acpu
;
return
acpu
;
}
while
((
acpu
=
(
klcpu_t
*
)
find_component
(
brd
,
(
klinfo_t
*
)
acpu
,
}
while
((
acpu
=
(
klcpu_t
*
)
find_component
(
brd
,
(
klinfo_t
*
)
acpu
,
KLSTRUCT_CPU
)));
KLSTRUCT_CPU
)));
return
(
klcpu_t
*
)
NULL
;
return
(
klcpu_t
*
)
NULL
;
}
}
...
...
arch/mips
64
/sgi-ip27/ip27-klnuma.c
→
arch/mips/sgi-ip27/ip27-klnuma.c
View file @
d3791f47
...
@@ -65,7 +65,7 @@ static __init void set_ktext_source(nasid_t client_nasid, nasid_t server_nasid)
...
@@ -65,7 +65,7 @@ static __init void set_ktext_source(nasid_t client_nasid, nasid_t server_nasid)
cnodeid_t
client_cnode
;
cnodeid_t
client_cnode
;
client_cnode
=
NASID_TO_COMPACT_NODEID
(
client_nasid
);
client_cnode
=
NASID_TO_COMPACT_NODEID
(
client_nasid
);
kvp
=
&
(
PLAT_NODE_DATA
(
client_cnode
)
->
kern_vars
);
kvp
=
&
(
PLAT_NODE_DATA
(
client_cnode
)
->
kern_vars
);
KERN_VARS_ADDR
(
client_nasid
)
=
(
unsigned
long
)
kvp
;
KERN_VARS_ADDR
(
client_nasid
)
=
(
unsigned
long
)
kvp
;
...
@@ -121,7 +121,7 @@ void __init replicate_kernel_text(int maxnodes)
...
@@ -121,7 +121,7 @@ void __init replicate_kernel_text(int maxnodes)
/*
/*
* Return pfn of first free page of memory on a node. PROM may allocate
* Return pfn of first free page of memory on a node. PROM may allocate
* data structures on the first couple of pages of the first slot of each
* data structures on the first couple of pages of the first slot of each
* node. If this is the case, getfirstfree(node) > getslotstart(node, 0).
* node. If this is the case, getfirstfree(node) > getslotstart(node, 0).
*/
*/
pfn_t
node_getfirstfree
(
cnodeid_t
cnode
)
pfn_t
node_getfirstfree
(
cnodeid_t
cnode
)
...
@@ -137,7 +137,7 @@ pfn_t node_getfirstfree(cnodeid_t cnode)
...
@@ -137,7 +137,7 @@ pfn_t node_getfirstfree(cnodeid_t cnode)
if
((
cnode
==
0
)
||
(
CPUMASK_TSTB
(
ktext_repmask
,
cnode
)))
if
((
cnode
==
0
)
||
(
CPUMASK_TSTB
(
ktext_repmask
,
cnode
)))
return
(
TO_NODE
(
nasid
,
offset
)
>>
PAGE_SHIFT
);
return
(
TO_NODE
(
nasid
,
offset
)
>>
PAGE_SHIFT
);
else
else
return
(
KDM_TO_PHYS
(
PAGE_ALIGN
(
SYMMON_STK_ADDR
(
nasid
,
0
)))
>>
return
(
KDM_TO_PHYS
(
PAGE_ALIGN
(
SYMMON_STK_ADDR
(
nasid
,
0
)))
>>
PAGE_SHIFT
);
PAGE_SHIFT
);
}
}
arch/mips
64
/sgi-ip27/ip27-memory.c
→
arch/mips/sgi-ip27/ip27-memory.c
View file @
d3791f47
...
@@ -142,7 +142,7 @@ pfn_t szmem(pfn_t fpage, pfn_t maxpmem)
...
@@ -142,7 +142,7 @@ pfn_t szmem(pfn_t fpage, pfn_t maxpmem)
for
(
slot
=
0
;
slot
<
numslots
;
slot
++
)
{
for
(
slot
=
0
;
slot
<
numslots
;
slot
++
)
{
slot_psize
=
slot_psize_compute
(
node
,
slot
);
slot_psize
=
slot_psize_compute
(
node
,
slot
);
if
(
slot
==
0
)
slot0sz
=
slot_psize
;
if
(
slot
==
0
)
slot0sz
=
slot_psize
;
/*
/*
* We need to refine the hack when we have replicated
* We need to refine the hack when we have replicated
* kernel text.
* kernel text.
*/
*/
...
@@ -158,7 +158,7 @@ pfn_t szmem(pfn_t fpage, pfn_t maxpmem)
...
@@ -158,7 +158,7 @@ pfn_t szmem(pfn_t fpage, pfn_t maxpmem)
continue
;
continue
;
}
}
num_pages
+=
slot_psize
;
num_pages
+=
slot_psize
;
slot_psize_cache
[
node
][
slot
]
=
slot_psize_cache
[
node
][
slot
]
=
(
unsigned
short
)
slot_psize
;
(
unsigned
short
)
slot_psize
;
if
(
slot_psize
)
if
(
slot_psize
)
slot_lastfilled_cache
[
node
]
=
slot
;
slot_lastfilled_cache
[
node
]
=
slot
;
...
@@ -201,9 +201,9 @@ void __init prom_meminit(void)
...
@@ -201,9 +201,9 @@ void __init prom_meminit(void)
<<
PAGE_SHIFT
));
<<
PAGE_SHIFT
));
NODE_DATA
(
node
)
->
bdata
=
plat_node_bdata
+
node
;
NODE_DATA
(
node
)
->
bdata
=
plat_node_bdata
+
node
;
slot_freepfn
+=
node_datasz
;
slot_freepfn
+=
node_datasz
;
bootmap_size
=
init_bootmem_node
(
NODE_DATA
(
node
),
slot_freepfn
,
bootmap_size
=
init_bootmem_node
(
NODE_DATA
(
node
),
slot_freepfn
,
slot_firstpfn
,
slot_lastpfn
);
slot_firstpfn
,
slot_lastpfn
);
free_bootmem_node
(
NODE_DATA
(
node
),
slot_firstpfn
<<
PAGE_SHIFT
,
free_bootmem_node
(
NODE_DATA
(
node
),
slot_firstpfn
<<
PAGE_SHIFT
,
(
slot_lastpfn
-
slot_firstpfn
)
<<
PAGE_SHIFT
);
(
slot_lastpfn
-
slot_firstpfn
)
<<
PAGE_SHIFT
);
reserve_bootmem_node
(
NODE_DATA
(
node
),
slot_firstpfn
<<
PAGE_SHIFT
,
reserve_bootmem_node
(
NODE_DATA
(
node
),
slot_firstpfn
<<
PAGE_SHIFT
,
((
slot_freepfn
-
slot_firstpfn
)
<<
PAGE_SHIFT
)
+
bootmap_size
);
((
slot_freepfn
-
slot_firstpfn
)
<<
PAGE_SHIFT
)
+
bootmap_size
);
...
@@ -224,7 +224,7 @@ prom_free_prom_memory (void)
...
@@ -224,7 +224,7 @@ prom_free_prom_memory (void)
#ifdef CONFIG_DISCONTIGMEM
#ifdef CONFIG_DISCONTIGMEM
static
pfn_t
pagenr
=
0
;
static
pfn_t
pagenr
;
void
__init
paging_init
(
void
)
void
__init
paging_init
(
void
)
{
{
...
@@ -241,10 +241,10 @@ void __init paging_init(void)
...
@@ -241,10 +241,10 @@ void __init paging_init(void)
memset
((
void
*
)
invalid_pte_table
,
0
,
sizeof
(
pte_t
)
*
PTRS_PER_PTE
);
memset
((
void
*
)
invalid_pte_table
,
0
,
sizeof
(
pte_t
)
*
PTRS_PER_PTE
);
/* This is for vmalloc */
/* This is for vmalloc */
memset
((
void
*
)
kptbl
,
0
,
PAGE_SIZE
<<
KPTBL_PAGE
_ORDER
);
memset
((
void
*
)
kptbl
,
0
,
PAGE_SIZE
<<
PGD
_ORDER
);
memset
((
void
*
)
kpmdtbl
,
0
,
PAGE_SIZE
);
memset
((
void
*
)
kpmdtbl
,
0
,
PAGE_SIZE
);
pgd_set
(
swapper_pg_dir
,
kpmdtbl
);
set_pgd
(
swapper_pg_dir
,
__pgd
(
kpmdtbl
)
);
for
(
i
=
0
;
i
<
(
1
<<
KPTBL_PAGE
_ORDER
);
pmd
++
,
i
++
,
pte
+=
PTRS_PER_PTE
)
for
(
i
=
0
;
i
<
(
1
<<
PGD
_ORDER
);
pmd
++
,
i
++
,
pte
+=
PTRS_PER_PTE
)
pmd_val
(
*
pmd
)
=
(
unsigned
long
)
pte
;
pmd_val
(
*
pmd
)
=
(
unsigned
long
)
pte
;
for
(
node
=
0
;
node
<
numnodes
;
node
++
)
{
for
(
node
=
0
;
node
<
numnodes
;
node
++
)
{
...
@@ -252,7 +252,7 @@ void __init paging_init(void)
...
@@ -252,7 +252,7 @@ void __init paging_init(void)
pfn_t
end_pfn
=
node_getmaxclick
(
node
);
pfn_t
end_pfn
=
node_getmaxclick
(
node
);
zones_size
[
ZONE_DMA
]
=
end_pfn
+
1
-
start_pfn
;
zones_size
[
ZONE_DMA
]
=
end_pfn
+
1
-
start_pfn
;
free_area_init_node
(
node
,
NODE_DATA
(
node
),
0
,
zones_size
,
free_area_init_node
(
node
,
NODE_DATA
(
node
),
0
,
zones_size
,
start_pfn
,
0
);
start_pfn
,
0
);
}
}
}
}
...
@@ -290,7 +290,7 @@ void __init mem_init(void)
...
@@ -290,7 +290,7 @@ void __init mem_init(void)
pg
=
NODE_DATA
(
nid
)
->
node_mem_map
+
slot_getsize
(
nid
,
0
);
pg
=
NODE_DATA
(
nid
)
->
node_mem_map
+
slot_getsize
(
nid
,
0
);
numslots
=
node_getlastslot
(
nid
);
numslots
=
node_getlastslot
(
nid
);
for
(
slot
=
1
;
slot
<=
numslots
;
slot
++
)
{
for
(
slot
=
1
;
slot
<=
numslots
;
slot
++
)
{
pslot
=
NODE_DATA
(
nid
)
->
node_mem_map
+
pslot
=
NODE_DATA
(
nid
)
->
node_mem_map
+
slot_getbasepfn
(
nid
,
slot
)
-
slot_getbasepfn
(
nid
,
0
);
slot_getbasepfn
(
nid
,
slot
)
-
slot_getbasepfn
(
nid
,
0
);
/*
/*
...
...
arch/mips
64
/sgi-ip27/ip27-nmi.c
→
arch/mips/sgi-ip27/ip27-nmi.c
View file @
d3791f47
...
@@ -62,7 +62,7 @@ nmi_cpu_eframe_save(nasid_t nasid,
...
@@ -62,7 +62,7 @@ nmi_cpu_eframe_save(nasid_t nasid,
numberof_nmi_cpu_regs
=
sizeof
(
struct
reg_struct
)
/
sizeof
(
machreg_t
);
numberof_nmi_cpu_regs
=
sizeof
(
struct
reg_struct
)
/
sizeof
(
machreg_t
);
/* Get the pointer to the current cpu's register set. */
/* Get the pointer to the current cpu's register set. */
prom_format
=
prom_format
=
(
machreg_t
*
)(
TO_UNCAC
(
TO_NODE
(
nasid
,
IP27_NMI_KREGS_OFFSET
))
+
(
machreg_t
*
)(
TO_UNCAC
(
TO_NODE
(
nasid
,
IP27_NMI_KREGS_OFFSET
))
+
slice
*
IP27_NMI_KREGS_CPU_SIZE
);
slice
*
IP27_NMI_KREGS_CPU_SIZE
);
...
@@ -70,7 +70,7 @@ nmi_cpu_eframe_save(nasid_t nasid,
...
@@ -70,7 +70,7 @@ nmi_cpu_eframe_save(nasid_t nasid,
for
(
i
=
0
;
i
<
numberof_nmi_cpu_regs
;
i
++
)
for
(
i
=
0
;
i
<
numberof_nmi_cpu_regs
;
i
++
)
printk
(
"0x%lx "
,
prom_format
[
i
]);
printk
(
"0x%lx "
,
prom_format
[
i
]);
printk
(
"
\n\n
"
);
printk
(
"
\n\n
"
);
}
}
/*
/*
* Copy the cpu registers which have been saved in the IP27prom format
* Copy the cpu registers which have been saved in the IP27prom format
...
@@ -91,7 +91,7 @@ nmi_node_eframe_save(cnodeid_t cnode)
...
@@ -91,7 +91,7 @@ nmi_node_eframe_save(cnodeid_t cnode)
return
;
return
;
/* Save the registers into eframe for each cpu */
/* Save the registers into eframe for each cpu */
for
(
cpu
=
0
;
cpu
<
NODE_NUM_CPUS
(
cnode
);
cpu
++
)
for
(
cpu
=
0
;
cpu
<
NODE_NUM_CPUS
(
cnode
);
cpu
++
)
nmi_cpu_eframe_save
(
nasid
,
cpu
);
nmi_cpu_eframe_save
(
nasid
,
cpu
);
}
}
...
@@ -103,7 +103,7 @@ nmi_eframes_save(void)
...
@@ -103,7 +103,7 @@ nmi_eframes_save(void)
{
{
cnodeid_t
cnode
;
cnodeid_t
cnode
;
for
(
cnode
=
0
;
cnode
<
numnodes
;
cnode
++
)
for
(
cnode
=
0
;
cnode
<
numnodes
;
cnode
++
)
nmi_node_eframe_save
(
cnode
);
nmi_node_eframe_save
(
cnode
);
}
}
...
@@ -115,7 +115,7 @@ cont_nmi_dump(void)
...
@@ -115,7 +115,7 @@ cont_nmi_dump(void)
atomic_inc
(
&
nmied_cpus
);
atomic_inc
(
&
nmied_cpus
);
#endif
#endif
/*
/*
* Use enter_panic_mode to allow only 1 cpu to proceed
* Use enter_panic_mode to allow only 1 cpu to proceed
*/
*/
enter_panic_mode
();
enter_panic_mode
();
...
@@ -129,7 +129,7 @@ cont_nmi_dump(void)
...
@@ -129,7 +129,7 @@ cont_nmi_dump(void)
* - on 512p SN0 system, the MMSC will only send NMIs to
* - on 512p SN0 system, the MMSC will only send NMIs to
* half the cpus. Unfortunately, we don't know which cpus may be
* half the cpus. Unfortunately, we don't know which cpus may be
* NMIed - it depends on how the site chooses to configure.
* NMIed - it depends on how the site chooses to configure.
*
*
* Note: it has been measure that it takes the MMSC up to 2.3 secs to
* Note: it has been measure that it takes the MMSC up to 2.3 secs to
* send NMIs to all cpus on a 256p system.
* send NMIs to all cpus on a 256p system.
*/
*/
...
@@ -145,19 +145,19 @@ cont_nmi_dump(void)
...
@@ -145,19 +145,19 @@ cont_nmi_dump(void)
cpu
=
CNODE_TO_CPU_BASE
(
node
);
cpu
=
CNODE_TO_CPU_BASE
(
node
);
for
(
n
=
0
;
n
<
CNODE_NUM_CPUS
(
node
);
cpu
++
,
n
++
)
{
for
(
n
=
0
;
n
<
CNODE_NUM_CPUS
(
node
);
cpu
++
,
n
++
)
{
CPUMASK_SETB
(
nmied_cpus
,
cpu
);
CPUMASK_SETB
(
nmied_cpus
,
cpu
);
/*
/*
* cputonasid, cputoslice
* cputonasid, cputoslice
* needs kernel cpuid
* needs kernel cpuid
*/
*/
SEND_NMI
((
cputonasid
(
cpu
)),
(
cputoslice
(
cpu
)));
SEND_NMI
((
cputonasid
(
cpu
)),
(
cputoslice
(
cpu
)));
}
}
}
}
}
}
udelay
(
10000
);
udelay
(
10000
);
}
}
#else
#else
while
(
atomic_read
(
&
nmied_cpus
)
!=
smp_num_cpus
);
while
(
atomic_read
(
&
nmied_cpus
)
!=
num_online_cpus
()
);
#endif
#endif
/*
/*
...
...
arch/mips
64
/sgi-ip27/ip27-reset.c
→
arch/mips/sgi-ip27/ip27-reset.c
View file @
d3791f47
...
@@ -14,8 +14,10 @@
...
@@ -14,8 +14,10 @@
#include <linux/timer.h>
#include <linux/timer.h>
#include <linux/smp.h>
#include <linux/smp.h>
#include <linux/mmzone.h>
#include <linux/mmzone.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/reboot.h>
#include <asm/system.h>
#include <asm/system.h>
#include <asm/sgialib.h>
#include <asm/sgialib.h>
#include <asm/sn/addrs.h>
#include <asm/sn/addrs.h>
...
@@ -30,7 +32,7 @@ void machine_power_off(void) __attribute__((noreturn));
...
@@ -30,7 +32,7 @@ void machine_power_off(void) __attribute__((noreturn));
#define noreturn while(1);
/* Silence gcc. */
#define noreturn while(1);
/* Silence gcc. */
/* XXX How to pass the reboot command to the firmware??? */
/* XXX How to pass the reboot command to the firmware??? */
void
machine_restart
(
char
*
command
)
static
void
ip27_
machine_restart
(
char
*
command
)
{
{
#if 0
#if 0
int i;
int i;
...
@@ -42,7 +44,7 @@ void machine_restart(char *command)
...
@@ -42,7 +44,7 @@ void machine_restart(char *command)
#endif
#endif
#if 0
#if 0
for (i = 0; i < numnodes; i++)
for (i = 0; i < numnodes; i++)
REMOTE_HUB_S(COMPACT_TO_NASID_NODEID(i), PROMOP_REG,
REMOTE_HUB_S(COMPACT_TO_NASID_NODEID(i), PROMOP_REG,
PROMOP_REBOOT);
PROMOP_REBOOT);
#else
#else
LOCAL_HUB_S
(
NI_PORT_RESET
,
NPR_PORTRESET
|
NPR_LOCALRESET
);
LOCAL_HUB_S
(
NI_PORT_RESET
,
NPR_PORTRESET
|
NPR_LOCALRESET
);
...
@@ -50,7 +52,7 @@ void machine_restart(char *command)
...
@@ -50,7 +52,7 @@ void machine_restart(char *command)
noreturn
;
noreturn
;
}
}
void
machine_halt
(
void
)
static
void
ip27_
machine_halt
(
void
)
{
{
int
i
;
int
i
;
...
@@ -58,13 +60,13 @@ void machine_halt(void)
...
@@ -58,13 +60,13 @@ void machine_halt(void)
smp_send_stop
();
smp_send_stop
();
#endif
#endif
for
(
i
=
0
;
i
<
numnodes
;
i
++
)
for
(
i
=
0
;
i
<
numnodes
;
i
++
)
REMOTE_HUB_S
(
COMPACT_TO_NASID_NODEID
(
i
),
PROMOP_REG
,
REMOTE_HUB_S
(
COMPACT_TO_NASID_NODEID
(
i
),
PROMOP_REG
,
PROMOP_RESTART
);
PROMOP_RESTART
);
LOCAL_HUB_S
(
NI_PORT_RESET
,
NPR_PORTRESET
|
NPR_LOCALRESET
);
LOCAL_HUB_S
(
NI_PORT_RESET
,
NPR_PORTRESET
|
NPR_LOCALRESET
);
noreturn
;
noreturn
;
}
}
void
machine_power_off
(
void
)
static
void
ip27_
machine_power_off
(
void
)
{
{
/* To do ... */
/* To do ... */
noreturn
;
noreturn
;
...
@@ -72,5 +74,7 @@ void machine_power_off(void)
...
@@ -72,5 +74,7 @@ void machine_power_off(void)
void
ip27_reboot_setup
(
void
)
void
ip27_reboot_setup
(
void
)
{
{
/* Nothing to do on IP27. */
_machine_restart
=
ip27_machine_restart
;
_machine_halt
=
ip27_machine_halt
;
_machine_power_off
=
ip27_machine_power_off
;
}
}
arch/mips
64
/sgi-ip27/ip27-setup.c
→
arch/mips/sgi-ip27/ip27-setup.c
View file @
d3791f47
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
#include <linux/spinlock.h>
#include <linux/spinlock.h>
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/smp.h>
#include <linux/smp.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/sn/types.h>
#include <asm/sn/types.h>
#include <asm/sn/sn0/addrs.h>
#include <asm/sn/sn0/addrs.h>
...
@@ -21,12 +22,14 @@
...
@@ -21,12 +22,14 @@
#include <asm/sn/sn0/hubio.h>
#include <asm/sn/sn0/hubio.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/klconfig.h>
#include <asm/sn/ioc3.h>
#include <asm/sn/ioc3.h>
#include <asm/time.h>
#include <asm/mipsregs.h>
#include <asm/mipsregs.h>
#include <asm/sn/arch.h>
#include <asm/sn/arch.h>
#include <asm/sn/sn_private.h>
#include <asm/sn/sn_private.h>
#include <asm/pci/bridge.h>
#include <asm/pci/bridge.h>
#include <asm/paccess.h>
#include <asm/paccess.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/sn/sn0/ip27.h>
#include <asm/traps.h>
/* Check against user dumbness. */
/* Check against user dumbness. */
#ifdef CONFIG_VT
#ifdef CONFIG_VT
...
@@ -40,7 +43,7 @@
...
@@ -40,7 +43,7 @@
#define DBG(x...)
#define DBG(x...)
#endif
#endif
unsigned
long
mips_io_port_base
=
IO_BASE
;
extern
void
ip27_be_init
(
void
)
__init
;
/*
/*
* get_nasid() returns the physical node id number of the caller.
* get_nasid() returns the physical node id number of the caller.
...
@@ -112,7 +115,7 @@ void __init pcibr_setup(cnodeid_t nid)
...
@@ -112,7 +115,7 @@ void __init pcibr_setup(cnodeid_t nid)
{
{
int
i
,
start
,
num
;
int
i
,
start
,
num
;
unsigned
long
masterwid
;
unsigned
long
masterwid
;
bridge_t
*
bridge
;
bridge_t
*
bridge
;
volatile
u64
hubreg
;
volatile
u64
hubreg
;
nasid_t
nasid
,
masternasid
;
nasid_t
nasid
,
masternasid
;
xwidget_part_num_t
partnum
;
xwidget_part_num_t
partnum
;
...
@@ -122,8 +125,8 @@ void __init pcibr_setup(cnodeid_t nid)
...
@@ -122,8 +125,8 @@ void __init pcibr_setup(cnodeid_t nid)
/*
/*
* If the master is doing this for headless node, nothing to do.
* If the master is doing this for headless node, nothing to do.
* This is because currently we require at least one of the hubs
* This is because currently we require at least one of the hubs
* (master hub) connected to the xbow to have at least one enabled
* (master hub) connected to the xbow to have at least one enabled
* cpu to receive intrs. Else we need an array bus_to_intrnasid[]
* cpu to receive intrs. Else we need an array bus_to_intrnasid[]
* that bridge_startup() needs to use to target intrs. All dma is
* that bridge_startup() needs to use to target intrs. All dma is
* routed thru the widget of the master hub. The master hub wid
* routed thru the widget of the master hub. The master hub wid
* is selectable by WIDGET_A below.
* is selectable by WIDGET_A below.
...
@@ -174,8 +177,8 @@ void __init pcibr_setup(cnodeid_t nid)
...
@@ -174,8 +177,8 @@ void __init pcibr_setup(cnodeid_t nid)
else
{
else
{
/*
/*
* Okay, here's a xbow. Lets arbitrate and find
* Okay, here's a xbow. Lets arbitrate and find
* out if we should initialize it. Set enabled
* out if we should initialize it. Set enabled
* hub connected at highest or lowest widget as
* hub connected at highest or lowest widget as
* master.
* master.
*/
*/
#ifdef WIDGET_A
#ifdef WIDGET_A
...
@@ -213,7 +216,7 @@ void __init pcibr_setup(cnodeid_t nid)
...
@@ -213,7 +216,7 @@ void __init pcibr_setup(cnodeid_t nid)
}
}
}
else
if
(
partnum
==
XXBOW_WIDGET_PART_NUM
)
{
}
else
if
(
partnum
==
XXBOW_WIDGET_PART_NUM
)
{
/*
/*
* found xbridge, assume ibrick for now
* found xbridge, assume ibrick for now
*/
*/
printk
(
"...is xbridge
\n
"
);
printk
(
"...is xbridge
\n
"
);
bus_to_wid
[
0
]
=
0xb
;
bus_to_wid
[
0
]
=
0xb
;
...
@@ -261,7 +264,7 @@ void __init pcibr_setup(cnodeid_t nid)
...
@@ -261,7 +264,7 @@ void __init pcibr_setup(cnodeid_t nid)
bridge
->
b_wid_control
|=
BRIDGE_CTRL_MEM_SWAP
;
bridge
->
b_wid_control
|=
BRIDGE_CTRL_MEM_SWAP
;
/*
/*
* Hmm... IRIX sets additional bits in the address which
* Hmm... IRIX sets additional bits in the address which
* are documented as reserved in the bridge docs.
* are documented as reserved in the bridge docs.
*/
*/
bridge
->
b_int_mode
=
0x0
;
/* Don't clear ints */
bridge
->
b_int_mode
=
0x0
;
/* Don't clear ints */
...
@@ -275,6 +278,8 @@ void __init pcibr_setup(cnodeid_t nid)
...
@@ -275,6 +278,8 @@ void __init pcibr_setup(cnodeid_t nid)
}
}
extern
void
ip27_setup_console
(
void
);
extern
void
ip27_setup_console
(
void
);
extern
void
ip27_time_init
(
void
);
extern
void
ip27_reboot_setup
(
void
);
void
__init
ip27_setup
(
void
)
void
__init
ip27_setup
(
void
)
{
{
...
@@ -282,6 +287,7 @@ void __init ip27_setup(void)
...
@@ -282,6 +287,7 @@ void __init ip27_setup(void)
hubreg_t
p
,
e
;
hubreg_t
p
,
e
;
ip27_setup_console
();
ip27_setup_console
();
ip27_reboot_setup
();
num_bridges
=
0
;
num_bridges
=
0
;
/*
/*
...
@@ -307,4 +313,7 @@ void __init ip27_setup(void)
...
@@ -307,4 +313,7 @@ void __init ip27_setup(void)
ioc3_sio_init
();
ioc3_sio_init
();
ioc3_eth_init
();
ioc3_eth_init
();
per_cpu_init
();
per_cpu_init
();
mips_io_port_base
=
IO_BASE
;
board_time_init
=
ip27_time_init
;
}
}
arch/mips
64
/sgi-ip27/ip27-timer.c
→
arch/mips/sgi-ip27/ip27-timer.c
View file @
d3791f47
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
* Copytight (C) 1999, 2000 Ralf Baechle (ralf@gnu.org)
* Copytight (C) 1999, 2000 Ralf Baechle (ralf@gnu.org)
* Copytight (C) 1999, 2000 Silicon Graphics, Inc.
* Copytight (C) 1999, 2000 Silicon Graphics, Inc.
*/
*/
#include <linux/bcd.h>
#include <linux/config.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/kernel.h>
...
@@ -11,9 +12,10 @@
...
@@ -11,9 +12,10 @@
#include <linux/param.h>
#include <linux/param.h>
#include <linux/time.h>
#include <linux/time.h>
#include <linux/timex.h>
#include <linux/timex.h>
#include <linux/mm.h>
#include <linux/mm.h>
#include <linux/bcd.h>
#include <linux/bcd.h>
#include <asm/time.h>
#include <asm/pgtable.h>
#include <asm/pgtable.h>
#include <asm/sgialib.h>
#include <asm/sgialib.h>
#include <asm/sn/ioc3.h>
#include <asm/sn/ioc3.h>
...
@@ -27,17 +29,18 @@
...
@@ -27,17 +29,18 @@
/*
/*
* This is a hack; we really need to figure these values out dynamically
* This is a hack; we really need to figure these values out dynamically
*
*
* Since 800 ns works very well with various HUB frequencies, such as
* Since 800 ns works very well with various HUB frequencies, such as
* 360, 380, 390 and 400 MHZ, we use 800 ns rtc cycle time.
* 360, 380, 390 and 400 MHZ, we use 800 ns rtc cycle time.
*
*
* Ralf: which clock rate is used to feed the counter?
* Ralf: which clock rate is used to feed the counter?
*/
*/
#define NSEC_PER_CYCLE 800
#define NSEC_PER_CYCLE 800
#define NSEC_PER_SEC 1000000000
#define CYCLES_PER_SEC (NSEC_PER_SEC/NSEC_PER_CYCLE)
#define CYCLES_PER_SEC (NSEC_PER_SEC/NSEC_PER_CYCLE)
#define CYCLES_PER_JIFFY (CYCLES_PER_SEC/HZ)
#define CYCLES_PER_JIFFY (CYCLES_PER_SEC/HZ)
#define TICK_SIZE (tick_nsec / 1000)
static
unsigned
long
ct_cur
[
NR_CPUS
];
/* What counter should be at next timer irq */
static
unsigned
long
ct_cur
[
NR_CPUS
];
/* What counter should be at next timer irq */
static
long
last_rtc_update
;
/* Last time the rtc clock got updated */
static
long
last_rtc_update
;
/* Last time the rtc clock got updated */
...
@@ -52,12 +55,11 @@ static int set_rtc_mmss(unsigned long nowtime)
...
@@ -52,12 +55,11 @@ static int set_rtc_mmss(unsigned long nowtime)
nasid_t
nid
;
nasid_t
nid
;
nid
=
get_nasid
();
nid
=
get_nasid
();
rtc
=
(
struct
m48t35_rtc
*
)(
KL_CONFIG_CH_CONS_INFO
(
nid
)
->
memory_base
+
rtc
=
(
struct
m48t35_rtc
*
)(
KL_CONFIG_CH_CONS_INFO
(
nid
)
->
memory_base
+
IOC3_BYTEBUS_DEV0
);
IOC3_BYTEBUS_DEV0
);
rtc
->
control
|=
M48T35_RTC_READ
;
rtc
->
control
|=
M48T35_RTC_READ
;
cmos_minutes
=
rtc
->
min
;
cmos_minutes
=
BCD2BIN
(
rtc
->
min
);
BCD_TO_BIN
(
cmos_minutes
);
rtc
->
control
&=
~
M48T35_RTC_READ
;
rtc
->
control
&=
~
M48T35_RTC_READ
;
/*
/*
...
@@ -72,8 +74,8 @@ static int set_rtc_mmss(unsigned long nowtime)
...
@@ -72,8 +74,8 @@ static int set_rtc_mmss(unsigned long nowtime)
real_minutes
%=
60
;
real_minutes
%=
60
;
if
(
abs
(
real_minutes
-
cmos_minutes
)
<
30
)
{
if
(
abs
(
real_minutes
-
cmos_minutes
)
<
30
)
{
BIN_TO_
BCD
(
real_seconds
);
real_seconds
=
BIN2
BCD
(
real_seconds
);
BIN_TO_
BCD
(
real_minutes
);
real_minutes
=
BIN2
BCD
(
real_minutes
);
rtc
->
control
|=
M48T35_RTC_SET
;
rtc
->
control
|=
M48T35_RTC_SET
;
rtc
->
sec
=
real_seconds
;
rtc
->
sec
=
real_seconds
;
rtc
->
min
=
real_minutes
;
rtc
->
min
=
real_minutes
;
...
@@ -92,8 +94,9 @@ void rt_timer_interrupt(struct pt_regs *regs)
...
@@ -92,8 +94,9 @@ void rt_timer_interrupt(struct pt_regs *regs)
{
{
int
cpu
=
smp_processor_id
();
int
cpu
=
smp_processor_id
();
int
cpuA
=
((
cputoslice
(
cpu
))
==
0
);
int
cpuA
=
((
cputoslice
(
cpu
))
==
0
);
int
irq
=
7
;
/* XXX Assign number */
int
irq
=
9
;
/* XXX Assign number */
irq_enter
();
write_seqlock
(
&
xtime_lock
);
write_seqlock
(
&
xtime_lock
);
again:
again:
...
@@ -110,101 +113,40 @@ void rt_timer_interrupt(struct pt_regs *regs)
...
@@ -110,101 +113,40 @@ void rt_timer_interrupt(struct pt_regs *regs)
do_timer
(
regs
);
do_timer
(
regs
);
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
{
update_process_times
(
user_mode
(
regs
));
int
user
=
user_mode
(
regs
);
/*
* update_process_times() expects us to have done irq_enter().
* Besides, if we don't timer interrupts ignore the global
* interrupt lock, which is the WrongThing (tm) to do.
* Picked from i386 code.
*/
irq_enter
(
cpu
,
0
);
update_process_times
(
user
);
irq_exit
(
cpu
,
0
);
}
#endif
/* CONFIG_SMP */
#endif
/* CONFIG_SMP */
/*
/*
* If we have an externally synchronized Linux clock, then update
* If we have an externally synchronized Linux clock, then update
* RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
* RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
* called as close as possible to when a second starts.
* called as close as possible to when a second starts.
*/
*/
if
((
time_status
&
STA_UNSYNC
)
==
0
&&
if
((
time_status
&
STA_UNSYNC
)
==
0
&&
xtime
.
tv_sec
>
last_rtc_update
+
660
)
{
xtime
.
tv_sec
>
last_rtc_update
+
660
&&
if
(
xtime
.
tv_usec
>=
1000000
-
((
unsigned
)
tick
)
/
2
)
{
(
xtime
.
tv_nsec
/
1000
)
>=
500000
-
((
unsigned
)
TICK_SIZE
)
/
2
&&
if
(
set_rtc_mmss
(
xtime
.
tv_sec
+
1
)
==
0
)
(
xtime
.
tv_nsec
/
1000
)
<=
500000
+
((
unsigned
)
TICK_SIZE
)
/
2
)
{
last_rtc_update
=
xtime
.
tv_sec
;
if
(
rtc_set_time
(
xtime
.
tv_sec
)
==
0
)
{
else
last_rtc_update
=
xtime
.
tv_sec
;
last_rtc_update
=
xtime
.
tv_sec
-
600
;
}
else
{
}
else
if
(
xtime
.
tv_usec
<=
((
unsigned
)
tick
)
/
2
)
{
last_rtc_update
=
xtime
.
tv_sec
-
600
;
if
(
set_rtc_mmss
(
xtime
.
tv_sec
)
==
0
)
/* do it again in 60 s */
last_rtc_update
=
xtime
.
tv_sec
;
else
last_rtc_update
=
xtime
.
tv_sec
-
600
;
}
}
}
}
write_sequnlock
(
&
xtime_lock
);
write_sequnlock
(
&
xtime_lock
);
irq_exit
();
if
(
softirq_pending
(
cpu
))
if
(
softirq_pending
(
cpu
))
do_softirq
();
do_softirq
();
}
}
unsigned
long
i
nline
do_gettimeoffset
(
void
)
unsigned
long
i
p27_
do_gettimeoffset
(
void
)
{
{
unsigned
long
ct_cur1
;
unsigned
long
ct_cur1
;
ct_cur1
=
REMOTE_HUB_L
(
cputonasid
(
0
),
PI_RT_COUNT
)
+
CYCLES_PER_JIFFY
;
ct_cur1
=
REMOTE_HUB_L
(
cputonasid
(
0
),
PI_RT_COUNT
)
+
CYCLES_PER_JIFFY
;
return
(
ct_cur1
-
ct_cur
[
0
])
*
NSEC_PER_CYCLE
/
1000
;
return
(
ct_cur1
-
ct_cur
[
0
])
*
NSEC_PER_CYCLE
/
1000
;
}
}
void
do_gettimeofday
(
struct
timeval
*
tv
)
{
unsigned
long
flags
;
unsigned
long
usec
,
sec
;
unsigned
long
seq
;
do
{
seq
=
read_seqbegin_irqsave
(
&
xtime_lock
,
flags
);
usec
=
do_gettimeoffset
();
{
unsigned
long
lost
=
jiffies
-
wall_jiffies
;
if
(
lost
)
usec
+=
lost
*
(
1000000
/
HZ
);
}
sec
=
xtime
.
tv_sec
;
usec
+=
xtime
.
tv_usec
;
}
while
(
read_seqretry_irqrestore
(
&
xtime_lock
,
seq
,
flags
));
while
(
usec
>=
1000000
)
{
usec
-=
1000000
;
sec
++
;
}
tv
->
tv_sec
=
sec
;
tv
->
tv_usec
=
usec
;
}
void
do_settimeofday
(
struct
timeval
*
tv
)
{
write_seqlock_irq
(
&
xtime_lock
);
tv
->
tv_usec
-=
do_gettimeoffset
();
tv
->
tv_usec
-=
(
jiffies
-
wall_jiffies
)
*
(
1000000
/
HZ
);
while
(
tv
->
tv_usec
<
0
)
{
tv
->
tv_usec
+=
1000000
;
tv
->
tv_sec
--
;
}
xtime
=
*
tv
;
time_adjust
=
0
;
/* stop active adjtime() */
time_status
|=
STA_UNSYNC
;
time_maxerror
=
NTP_PHASE_LIMIT
;
time_esterror
=
NTP_PHASE_LIMIT
;
write_sequnlock_irq
(
&
xtime_lock
);
}
/* Includes for ioc3_init(). */
/* Includes for ioc3_init(). */
#include <asm/sn/types.h>
#include <asm/sn/types.h>
#include <asm/sn/sn0/addrs.h>
#include <asm/sn/sn0/addrs.h>
...
@@ -219,7 +161,7 @@ static __init unsigned long get_m48t35_time(void)
...
@@ -219,7 +161,7 @@ static __init unsigned long get_m48t35_time(void)
nasid_t
nid
;
nasid_t
nid
;
nid
=
get_nasid
();
nid
=
get_nasid
();
rtc
=
(
struct
m48t35_rtc
*
)(
KL_CONFIG_CH_CONS_INFO
(
nid
)
->
memory_base
+
rtc
=
(
struct
m48t35_rtc
*
)(
KL_CONFIG_CH_CONS_INFO
(
nid
)
->
memory_base
+
IOC3_BYTEBUS_DEV0
);
IOC3_BYTEBUS_DEV0
);
rtc
->
control
|=
M48T35_RTC_READ
;
rtc
->
control
|=
M48T35_RTC_READ
;
...
@@ -231,22 +173,24 @@ static __init unsigned long get_m48t35_time(void)
...
@@ -231,22 +173,24 @@ static __init unsigned long get_m48t35_time(void)
year
=
rtc
->
year
;
year
=
rtc
->
year
;
rtc
->
control
&=
~
M48T35_RTC_READ
;
rtc
->
control
&=
~
M48T35_RTC_READ
;
BCD_TO_
BIN
(
sec
);
sec
=
BCD2
BIN
(
sec
);
BCD_TO_
BIN
(
min
);
min
=
BCD2
BIN
(
min
);
BCD_TO_
BIN
(
hour
);
hour
=
BCD2
BIN
(
hour
);
BCD_TO_
BIN
(
date
);
date
=
BCD2
BIN
(
date
);
BCD_TO_
BIN
(
month
);
month
=
BCD2
BIN
(
month
);
BCD_TO_
BIN
(
year
);
year
=
BCD2
BIN
(
year
);
year
+=
1970
;
year
+=
1970
;
return
mktime
(
year
,
month
,
date
,
hour
,
min
,
sec
);
return
mktime
(
year
,
month
,
date
,
hour
,
min
,
sec
);
}
}
void
__init
time_init
(
void
)
void
__init
ip27_
time_init
(
void
)
{
{
xtime
.
tv_sec
=
get_m48t35_time
();
xtime
.
tv_sec
=
get_m48t35_time
();
xtime
.
tv_usec
=
0
;
xtime
.
tv_nsec
=
0
;
do_gettimeoffset
=
ip27_do_gettimeoffset
;
}
}
void
__init
cpu_time_init
(
void
)
void
__init
cpu_time_init
(
void
)
...
@@ -267,7 +211,7 @@ void __init cpu_time_init(void)
...
@@ -267,7 +211,7 @@ void __init cpu_time_init(void)
printk
(
"CPU %d clock is %dMHz.
\n
"
,
smp_processor_id
(),
cpu
->
cpu_speed
);
printk
(
"CPU %d clock is %dMHz.
\n
"
,
smp_processor_id
(),
cpu
->
cpu_speed
);
set_c
p0_status
(
SRB_TIMOCLK
,
SRB_TIMOCLK
);
set_c
0_status
(
SRB_TIMOCLK
);
}
}
void
__init
hub_rtc_init
(
cnodeid_t
cnode
)
void
__init
hub_rtc_init
(
cnodeid_t
cnode
)
...
...
arch/mips64/defconfig
View file @
d3791f47
#
#
# Automatically generated make config: don't edit
# Automatically generated make config: don't edit
#
#
CONFIG_MIPS=y
# CONFIG_MIPS32 is not set
CONFIG_MIPS64=y
#
#
# Code maturity level options
# Code maturity level options
#
#
# CONFIG_EXPERIMENTAL is not set
CONFIG_EXPERIMENTAL=y
#
# General setup
#
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=15
# CONFIG_EMBEDDED is not set
CONFIG_FUTEX=y
CONFIG_EPOLL=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
#
#
# Machine selection
# Machine selection
#
#
# CONFIG_ACER_PICA_61 is not set
# CONFIG_CASIO_E55 is not set
# CONFIG_MIPS_COBALT is not set
# CONFIG_DECSTATION is not set
# CONFIG_MIPS_EV64120 is not set
# CONFIG_MIPS_EV96100 is not set
# CONFIG_MIPS_IVR is not set
# CONFIG_LASAT is not set
# CONFIG_HP_LASERJET is not set
# CONFIG_IBM_WORKPAD is not set
# CONFIG_MIPS_ITE8172 is not set
# CONFIG_MIPS_ATLAS is not set
# CONFIG_MIPS_MAGNUM_4000 is not set
# CONFIG_MIPS_MALTA is not set
# CONFIG_MIPS_SEAD is not set
# CONFIG_MOMENCO_OCELOT is not set
# CONFIG_MOMENCO_OCELOT_G is not set
# CONFIG_MOMENCO_OCELOT_C is not set
# CONFIG_DDB5074 is not set
# CONFIG_DDB5476 is not set
# CONFIG_DDB5477 is not set
# CONFIG_NEC_OSPREY is not set
# CONFIG_NEC_EAGLE is not set
# CONFIG_OLIVETTI_M700 is not set
# CONFIG_SGI_IP22 is not set
# CONFIG_SGI_IP22 is not set
CONFIG_SGI_IP27=y
CONFIG_SGI_IP27=y
# CONFIG_SGI_SN0_N_MODE is not set
# CONFIG_SGI_SN0_N_MODE is not set
CONFIG_DISCONTIGMEM=y
# CONFIG_DISCONTIGMEM is not set
CONFIG_NUMA=y
# CONFIG_NUMA is not set
# CONFIG_MAPPED_KERNEL is not set
# CONFIG_MAPPED_KERNEL is not set
# CONFIG_REPLICATE_KTEXT is not set
# CONFIG_REPLICATE_KTEXT is not set
# CONFIG_REPLICATE_EXHANDLERS is not set
# CONFIG_REPLICATE_EXHANDLERS is not set
CONFIG_SMP=y
# CONFIG_SGI_IP32 is not set
# CONFIG_SIBYTE_SB1xxx_SOC is not set
# CONFIG_SNI_RM200_PCI is not set
# CONFIG_TANBAC_TB0226 is not set
# CONFIG_TANBAC_TB0229 is not set
# CONFIG_VICTOR_MPC30X is not set
# CONFIG_ZAO_CAPCELLA is not set
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
CONFIG_ARC=y
CONFIG_BOOT_ELF64=y
CONFIG_GENERIC_ISA_DMA=y
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_FB is not set
CONFIG_ARC64=y
CONFIG_ARC64=y
CONFIG_COHERENT_IO=y
CONFIG_BOOT_ELF64=y
CONFIG_MAPPED_PCI_IO=y
CONFIG_PCI=y
CONFIG_QL_ISP_A64=y
CONFIG_QL_ISP_A64=y
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_ISA is not set
# CONFIG_EISA is not set
# CONFIG_MCA is not set
# CONFIG_SBUS is not set
CONFIG_NR_CPUS=64
#
#
# CPU selection
# CPU selection
#
#
# CONFIG_CPU_MIPS32 is not set
# CONFIG_CPU_MIPS64 is not set
# CONFIG_CPU_R3000 is not set
# CONFIG_CPU_TX39XX is not set
# CONFIG_CPU_VR41XX is not set
# CONFIG_CPU_R4300 is not set
# CONFIG_CPU_R4300 is not set
# CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_TX49XX is not set
# CONFIG_CPU_R5000 is not set
# CONFIG_CPU_R5000 is not set
# CONFIG_CPU_R5432 is not set
# CONFIG_CPU_R6000 is not set
# CONFIG_CPU_NEVADA is not set
# CONFIG_CPU_NEVADA is not set
# CONFIG_CPU_R8000 is not set
# CONFIG_CPU_R8000 is not set
CONFIG_CPU_R10000=y
CONFIG_CPU_R10000=y
# CONFIG_CPU_RM7000 is not set
# CONFIG_CPU_SB1 is not set
CONFIG_CPU_HAS_LLSC=y
CONFIG_CPU_HAS_LLDSCD=y
CONFIG_CPU_HAS_SYNC=y
CONFIG_SMP=y
CONFIG_NR_CPUS=4
# CONFIG_PREEMPT is not set
CONFIG_KALLSYMS=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_MIPS_INSANE_LARGE is not set
#
#
#
General setup
#
Bus options (PCI, PCMCIA, EISA, ISA, TC)
#
#
# CONFIG_MIPS_INSANE_LARGE is not set
CONFIG_PCI=y
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_PCI_LEGACY_PROC=y
CONFIG_NET=y
CONFIG_PCI_NAMES=y
CONFIG_PCI_NAMES=y
CONFIG_MMU=y
# CONFIG_HOTPLUG is not set
# CONFIG_HOTPLUG is not set
# CONFIG_PCMCIA is not set
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_BINFMT_ELF=y
CONFIG_MIPS32_COMPAT=y
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_MISC is not set
#
#
#
Loadable module support
#
Executable file formats
#
#
# CONFIG_MODULES is not set
CONFIG_KCORE_ELF=y
CONFIG_PCI_NAMES=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
CONFIG_MIPS32_COMPAT=y
CONFIG_COMPAT=y
CONFIG_MIPS32_O32=y
# CONFIG_MIPS32_N32 is not set
CONFIG_BINFMT_ELF32=y
#
#
# Memory Technology Devices (MTD)
# Memory Technology Devices (MTD)
...
@@ -77,84 +139,36 @@ CONFIG_PCI_NAMES=y
...
@@ -77,84 +139,36 @@ CONFIG_PCI_NAMES=y
#
#
# CONFIG_PARPORT is not set
# CONFIG_PARPORT is not set
#
# Plug and Play support
#
# CONFIG_PNP is not set
#
# Generic Driver Options
#
# CONFIG_FW_LOADER is not set
#
#
# Block devices
# Block devices
#
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BLK_DEV_INITRD is not set
#
#
# Multi-device support (RAID and LVM)
# ATA/ATAPI/MFM/RLL support
#
# CONFIG_MD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
# CONFIG_BLK_DEV_LVM is not set
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK=y
CONFIG_RTNETLINK=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
# CONFIG_PHONE_IXJ is not set
# CONFIG_PHONE_IXJ_PCMCIA is not set
#
# ATA/IDE/MFM/RLL support
#
#
# CONFIG_IDE is not set
# CONFIG_IDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
#
#
# SCSI support
# SCSI
device
support
#
#
CONFIG_SCSI=y
CONFIG_SCSI=y
...
@@ -162,7 +176,6 @@ CONFIG_SCSI=y
...
@@ -162,7 +176,6 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM)
# SCSI support type (disk, tape, CD-ROM)
#
#
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y
CONFIG_CHR_DEV_ST=y
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
# CONFIG_BLK_DEV_SR is not set
...
@@ -171,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
...
@@ -171,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
#
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
#
# CONFIG_SCSI_DEBUG_QUEUES is not set
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_REPORT_LUNS is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_LOGGING=y
...
@@ -180,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
...
@@ -180,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
# SCSI low-level drivers
# SCSI low-level drivers
#
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR_D700 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
CONFIG_SCSI_QLOGIC_ISP=y
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_DEBUG is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support (EXPERIMENTAL)
#
# CONFIG_IEEE1394 is not set
#
# I2O device support
#
# CONFIG_I2O is not set
#
# Networking support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
CONFIG_UNIX=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_IPV6 is not set
# CONFIG_XFRM_USER is not set
#
#
#
Network device support
#
SCTP Configuration (EXPERIMENTAL)
#
#
CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_LLC is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y
CONFIG_NETDEVICES=y
#
#
...
@@ -236,39 +313,44 @@ CONFIG_NETDEVICES=y
...
@@ -236,39 +313,44 @@ CONFIG_NETDEVICES=y
# CONFIG_BONDING is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
#
#
# Ethernet (10 or 100Mbit)
# Ethernet (10 or 100Mbit)
#
#
CONFIG_NET_ETHERNET=y
CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
CONFIG_SGI_IOC3_ETH=y
CONFIG_SGI_IOC3_ETH=y
# CONFIG_SUNLANCE is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNLANCE is not set
# CONFIG_SUNGEM is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
#
# CONFIG_NET_VENDOR_RACAL is not set
# Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
# CONFIG_HP100 is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
#
#
# Ethernet (1000 Mbit)
# Ethernet (1000 Mbit)
#
#
# CONFIG_ACENIC is not set
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_DL2K is not set
# CONFIG_
MYRI_SBUS
is not set
# CONFIG_
E1000
is not set
# CONFIG_NS83820 is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SK98LIN is not set
# CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_IXGB is not set
# CONFIG_FDDI is not set
# CONFIG_FDDI is not set
# CONFIG_
PLIP
is not set
# CONFIG_
HIPPI
is not set
# CONFIG_PPP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_SLIP is not set
...
@@ -278,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
...
@@ -278,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
# CONFIG_NET_RADIO is not set
# CONFIG_NET_RADIO is not set
#
#
# Token Ring devices
# Token Ring devices
(depends on LLC=y)
#
#
# CONFIG_TR is not set
# CONFIG_NET_FC is not set
# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set
#
#
# Wan interfaces
# Wan interfaces
...
@@ -301,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
...
@@ -301,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
#
#
# ISDN subsystem
# ISDN subsystem
#
#
# CONFIG_ISDN is not set
# CONFIG_ISDN_BOOL is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
#
# Input device support
#
CONFIG_INPUT=y
#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
# CONFIG_SERIO_I8042 is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
#
#
#
Old CD-ROM drivers (not SCSI, not IDE)
#
Input Device Drivers
#
#
# CONFIG_CD_NO_IDESCSI is not set
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
#
# Character devices
# Character devices
#
#
# CONFIG_VT is not set
# CONFIG_VT is not set
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_UNIX98_PTY_COUNT=256
...
@@ -325,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
...
@@ -325,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_I2C is not set
# CONFIG_I2C is not set
#
#
#
Mice
#
I2C Hardware Sensors Mainboard support
#
#
# CONFIG_BUSMOUSE is not set
# CONFIG_MOUSE is not set
#
#
#
Joysticks
#
I2C Hardware Sensors Chip support
#
#
# CONFIG_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
# Watchdog Cards
#
#
# CONFIG_WATCHDOG is not set
# CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
CONFIG_SGI_IP27_RTC=y
# CONFIG_DTLK is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_APPLICOM is not set
...
@@ -361,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
...
@@ -361,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set
# CONFIG_FTAPE is not set
# CONFIG_AGP is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HANGCHECK_TIMER is not set
#
#
# Multimedia devices
# Multimedia devices
#
#
# CONFIG_VIDEO_DEV is not set
# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
#
#
# File systems
# File systems
#
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
CONFIG_JBD_DEBUG=y
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_QUOTA is not set
# CONFIG_QUOTA is not set
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set
#
# CONFIG_REISERFS_PROC_INFO is not set
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
# CONFIG_FAT_FS is not set
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS=y
CONFIG_DEVPTS_FS_XATTR=y
CONFIG_DEVPTS_FS_SECURITY=y
# CONFIG_TMPFS is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_CMS_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_FREEVXFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
# CONFIG_UFS_FS is not set
# CONFIG_UFS_FS_WRITE is not set
#
#
# Network File Systems
# Network File Systems
#
#
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
CONFIG_ROOT_NFS=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=y
# CONFIG_SUNRPC_GSS is not set
# CONFIG_SMB_FS is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_CODA_FS is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_NCPFS_STRONG is not set
# CONFIG_AFS_FS is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not set
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
#
#
# Partition Types
# Partition Types
...
@@ -457,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
...
@@ -457,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_NEC98_PARTITION is not set
CONFIG_SGI_PARTITION=y
CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_SMB_NLS is not set
# CONFIG_EFI_PARTITION is not set
# CONFIG_NLS is not set
CONFIG_KCORE_ELF=y
#
# Graphics support
#
#
#
# Sound
# Sound
...
@@ -473,113 +623,30 @@ CONFIG_KCORE_ELF=y
...
@@ -473,113 +623,30 @@ CONFIG_KCORE_ELF=y
# USB support
# USB support
#
#
# CONFIG_USB is not set
# CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
#
#
#
USB Controllers
#
Bluetooth support
#
#
# CONFIG_USB_UHCI is not set
# CONFIG_BT is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
#
#
# USB Device Class drivers
# Kernel hacking
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH is not set
# CONFIG_USB_STORAGE is not set
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# USB Human Interface Devices (HID)
#
#
# Input core support is needed for USB HID
#
#
# USB Imaging devices
#
# CONFIG_USB_DC2XX is not set
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
#
#
# Video4Linux support is needed for USB Multimedia device support
#
# CONFIG_USB_DABUSB is not set
#
# USB Network adaptors
#
# CONFIG_USB_PLUSB is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_USBNET is not set
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
#
#
# CONFIG_USB_SERIAL is not set
CONFIG_CROSSCOMPILE=y
# CONFIG_USB_SERIAL_GENERIC is not set
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_OMNINET is not set
#
#
#
Miscellaneous USB driver
s
#
Security option
s
#
#
# CONFIG_USB_RIO500 is not set
# CONFIG_SECURITY is not set
# CONFIG_USB_ID75 is not set
#
#
#
Input core support
#
Cryptographic options
#
#
# CONFIG_INPUT is not set
# CONFIG_CRYPTO is not set
# CONFIG_INPUT_KEYBDEV is not set
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
#
#
#
Kernel hacking
#
Library routines
#
#
CONFIG_CROSSCOMPILE=y
# CONFIG_CRC32 is not set
# CONFIG_REMOTE_DEBUG is not set
# CONFIG_MAGIC_SYSRQ is not set
arch/mips64/defconfig-ip27
View file @
d3791f47
#
#
# Automatically generated make config: don't edit
# Automatically generated make config: don't edit
#
#
CONFIG_MIPS=y
# CONFIG_MIPS32 is not set
CONFIG_MIPS64=y
#
#
# Code maturity level options
# Code maturity level options
#
#
# CONFIG_EXPERIMENTAL is not set
CONFIG_EXPERIMENTAL=y
#
# General setup
#
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=15
# CONFIG_EMBEDDED is not set
CONFIG_FUTEX=y
CONFIG_EPOLL=y
#
# Loadable module support
#
# CONFIG_MODULES is not set
#
#
# Machine selection
# Machine selection
#
#
# CONFIG_ACER_PICA_61 is not set
# CONFIG_CASIO_E55 is not set
# CONFIG_MIPS_COBALT is not set
# CONFIG_DECSTATION is not set
# CONFIG_MIPS_EV64120 is not set
# CONFIG_MIPS_EV96100 is not set
# CONFIG_MIPS_IVR is not set
# CONFIG_LASAT is not set
# CONFIG_HP_LASERJET is not set
# CONFIG_IBM_WORKPAD is not set
# CONFIG_MIPS_ITE8172 is not set
# CONFIG_MIPS_ATLAS is not set
# CONFIG_MIPS_MAGNUM_4000 is not set
# CONFIG_MIPS_MALTA is not set
# CONFIG_MIPS_SEAD is not set
# CONFIG_MOMENCO_OCELOT is not set
# CONFIG_MOMENCO_OCELOT_G is not set
# CONFIG_MOMENCO_OCELOT_C is not set
# CONFIG_DDB5074 is not set
# CONFIG_DDB5476 is not set
# CONFIG_DDB5477 is not set
# CONFIG_NEC_OSPREY is not set
# CONFIG_NEC_EAGLE is not set
# CONFIG_OLIVETTI_M700 is not set
# CONFIG_SGI_IP22 is not set
# CONFIG_SGI_IP22 is not set
CONFIG_SGI_IP27=y
CONFIG_SGI_IP27=y
# CONFIG_SGI_SN0_N_MODE is not set
# CONFIG_SGI_SN0_N_MODE is not set
CONFIG_DISCONTIGMEM=y
# CONFIG_DISCONTIGMEM is not set
CONFIG_NUMA=y
# CONFIG_NUMA is not set
# CONFIG_MAPPED_KERNEL is not set
# CONFIG_MAPPED_KERNEL is not set
# CONFIG_REPLICATE_KTEXT is not set
# CONFIG_REPLICATE_KTEXT is not set
# CONFIG_REPLICATE_EXHANDLERS is not set
# CONFIG_REPLICATE_EXHANDLERS is not set
CONFIG_SMP=y
# CONFIG_SGI_IP32 is not set
# CONFIG_SIBYTE_SB1xxx_SOC is not set
# CONFIG_SNI_RM200_PCI is not set
# CONFIG_TANBAC_TB0226 is not set
# CONFIG_TANBAC_TB0229 is not set
# CONFIG_VICTOR_MPC30X is not set
# CONFIG_ZAO_CAPCELLA is not set
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
CONFIG_ARC=y
CONFIG_BOOT_ELF64=y
CONFIG_GENERIC_ISA_DMA=y
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_FB is not set
CONFIG_ARC64=y
CONFIG_ARC64=y
CONFIG_COHERENT_IO=y
CONFIG_BOOT_ELF64=y
CONFIG_MAPPED_PCI_IO=y
CONFIG_PCI=y
CONFIG_QL_ISP_A64=y
CONFIG_QL_ISP_A64=y
CONFIG_L1_CACHE_SHIFT=7
# CONFIG_ISA is not set
# CONFIG_EISA is not set
# CONFIG_MCA is not set
# CONFIG_SBUS is not set
#
#
# CPU selection
# CPU selection
#
#
# CONFIG_CPU_MIPS32 is not set
# CONFIG_CPU_MIPS64 is not set
# CONFIG_CPU_R3000 is not set
# CONFIG_CPU_TX39XX is not set
# CONFIG_CPU_VR41XX is not set
# CONFIG_CPU_R4300 is not set
# CONFIG_CPU_R4300 is not set
# CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_R4X00 is not set
# CONFIG_CPU_TX49XX is not set
# CONFIG_CPU_R5000 is not set
# CONFIG_CPU_R5000 is not set
# CONFIG_CPU_R5432 is not set
# CONFIG_CPU_R6000 is not set
# CONFIG_CPU_NEVADA is not set
# CONFIG_CPU_NEVADA is not set
# CONFIG_CPU_R8000 is not set
# CONFIG_CPU_R8000 is not set
CONFIG_CPU_R10000=y
CONFIG_CPU_R10000=y
# CONFIG_CPU_RM7000 is not set
# CONFIG_CPU_SB1 is not set
CONFIG_CPU_HAS_LLSC=y
CONFIG_CPU_HAS_LLDSCD=y
CONFIG_CPU_HAS_SYNC=y
CONFIG_SMP=y
CONFIG_NR_CPUS=4
# CONFIG_PREEMPT is not set
CONFIG_KALLSYMS=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_MIPS_INSANE_LARGE is not set
#
#
#
General setup
#
Bus options (PCI, PCMCIA, EISA, ISA, TC)
#
#
# CONFIG_MIPS_INSANE_LARGE is not set
CONFIG_PCI=y
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_PCI_LEGACY_PROC=y
CONFIG_NET=y
CONFIG_PCI_NAMES=y
CONFIG_PCI_NAMES=y
CONFIG_MMU=y
# CONFIG_HOTPLUG is not set
# CONFIG_HOTPLUG is not set
# CONFIG_PCMCIA is not set
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_BINFMT_ELF=y
CONFIG_MIPS32_COMPAT=y
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_MISC is not set
#
#
#
Loadable module support
#
Executable file formats
#
#
# CONFIG_MODULES is not set
CONFIG_KCORE_ELF=y
CONFIG_PCI_NAMES=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
CONFIG_MIPS32_COMPAT=y
CONFIG_COMPAT=y
CONFIG_MIPS32_O32=y
# CONFIG_MIPS32_N32 is not set
CONFIG_BINFMT_ELF32=y
#
#
# Memory Technology Devices (MTD)
# Memory Technology Devices (MTD)
...
@@ -76,84 +139,36 @@ CONFIG_PCI_NAMES=y
...
@@ -76,84 +139,36 @@ CONFIG_PCI_NAMES=y
#
#
# CONFIG_PARPORT is not set
# CONFIG_PARPORT is not set
#
# Plug and Play support
#
# CONFIG_PNP is not set
#
# Generic Driver Options
#
# CONFIG_FW_LOADER is not set
#
#
# Block devices
# Block devices
#
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BLK_DEV_INITRD is not set
#
#
# Multi-device support (RAID and LVM)
# ATA/ATAPI/MFM/RLL support
#
# CONFIG_MD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
# CONFIG_BLK_DEV_LVM is not set
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK=y
CONFIG_RTNETLINK=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
# CONFIG_PHONE_IXJ is not set
# CONFIG_PHONE_IXJ_PCMCIA is not set
#
# ATA/IDE/MFM/RLL support
#
#
# CONFIG_IDE is not set
# CONFIG_IDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
#
#
# SCSI support
# SCSI
device
support
#
#
CONFIG_SCSI=y
CONFIG_SCSI=y
...
@@ -161,7 +176,6 @@ CONFIG_SCSI=y
...
@@ -161,7 +176,6 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM)
# SCSI support type (disk, tape, CD-ROM)
#
#
CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y
CONFIG_CHR_DEV_ST=y
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
# CONFIG_BLK_DEV_SR is not set
...
@@ -170,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
...
@@ -170,8 +184,8 @@ CONFIG_CHR_DEV_ST=y
#
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
#
# CONFIG_SCSI_DEBUG_QUEUES is not set
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_REPORT_LUNS is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_LOGGING=y
...
@@ -179,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
...
@@ -179,52 +193,116 @@ CONFIG_SCSI_LOGGING=y
# SCSI low-level drivers
# SCSI low-level drivers
#
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR_D700 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
CONFIG_SCSI_QLOGIC_ISP=y
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_DEBUG is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support (EXPERIMENTAL)
#
# CONFIG_IEEE1394 is not set
#
# I2O device support
#
# CONFIG_I2O is not set
#
# Networking support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set
CONFIG_UNIX=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_IPV6 is not set
# CONFIG_XFRM_USER is not set
#
#
#
Network device support
#
SCTP Configuration (EXPERIMENTAL)
#
#
CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_LLC is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y
CONFIG_NETDEVICES=y
#
#
...
@@ -235,39 +313,44 @@ CONFIG_NETDEVICES=y
...
@@ -235,39 +313,44 @@ CONFIG_NETDEVICES=y
# CONFIG_BONDING is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
#
#
# Ethernet (10 or 100Mbit)
# Ethernet (10 or 100Mbit)
#
#
CONFIG_NET_ETHERNET=y
CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
CONFIG_SGI_IOC3_ETH=y
CONFIG_SGI_IOC3_ETH=y
# CONFIG_SUNLANCE is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNLANCE is not set
# CONFIG_SUNGEM is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
#
# CONFIG_NET_VENDOR_RACAL is not set
# Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
# CONFIG_HP100 is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_PCI is not set
# CONFIG_NET_POCKET is not set
#
#
# Ethernet (1000 Mbit)
# Ethernet (1000 Mbit)
#
#
# CONFIG_ACENIC is not set
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_DL2K is not set
# CONFIG_
MYRI_SBUS
is not set
# CONFIG_
E1000
is not set
# CONFIG_NS83820 is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SK98LIN is not set
# CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_IXGB is not set
# CONFIG_FDDI is not set
# CONFIG_FDDI is not set
# CONFIG_
PLIP
is not set
# CONFIG_
HIPPI
is not set
# CONFIG_PPP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_SLIP is not set
...
@@ -277,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
...
@@ -277,10 +360,11 @@ CONFIG_SGI_IOC3_ETH=y
# CONFIG_NET_RADIO is not set
# CONFIG_NET_RADIO is not set
#
#
# Token Ring devices
# Token Ring devices
(depends on LLC=y)
#
#
# CONFIG_TR is not set
# CONFIG_NET_FC is not set
# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set
#
#
# Wan interfaces
# Wan interfaces
...
@@ -300,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
...
@@ -300,21 +384,69 @@ CONFIG_SGI_IOC3_ETH=y
#
#
# ISDN subsystem
# ISDN subsystem
#
#
# CONFIG_ISDN is not set
# CONFIG_ISDN_BOOL is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
#
# Input device support
#
CONFIG_INPUT=y
#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
# CONFIG_SERIO_I8042 is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
#
#
#
Old CD-ROM drivers (not SCSI, not IDE)
#
Input Device Drivers
#
#
# CONFIG_CD_NO_IDESCSI is not set
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
#
# Character devices
# Character devices
#
#
# CONFIG_VT is not set
# CONFIG_VT is not set
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_UNIX98_PTY_COUNT=256
...
@@ -324,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
...
@@ -324,32 +456,33 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_I2C is not set
# CONFIG_I2C is not set
#
#
#
Mice
#
I2C Hardware Sensors Mainboard support
#
#
# CONFIG_BUSMOUSE is not set
# CONFIG_MOUSE is not set
#
#
#
Joysticks
#
I2C Hardware Sensors Chip support
#
#
# CONFIG_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
# Watchdog Cards
#
#
# CONFIG_WATCHDOG is not set
# CONFIG_WATCHDOG is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
CONFIG_SGI_IP27_RTC=y
# CONFIG_DTLK is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_APPLICOM is not set
...
@@ -360,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
...
@@ -360,86 +493,101 @@ CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_FTAPE is not set
# CONFIG_FTAPE is not set
# CONFIG_AGP is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HANGCHECK_TIMER is not set
#
#
# Multimedia devices
# Multimedia devices
#
#
# CONFIG_VIDEO_DEV is not set
# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
#
#
# File systems
# File systems
#
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
CONFIG_JBD_DEBUG=y
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_QUOTA is not set
# CONFIG_QUOTA is not set
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set
#
# CONFIG_REISERFS_PROC_INFO is not set
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
# CONFIG_FAT_FS is not set
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS=y
CONFIG_DEVPTS_FS_XATTR=y
CONFIG_DEVPTS_FS_SECURITY=y
# CONFIG_TMPFS is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_CMS_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
# CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_FREEVXFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
# CONFIG_UFS_FS is not set
# CONFIG_UFS_FS_WRITE is not set
#
#
# Network File Systems
# Network File Systems
#
#
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y
# CONFIG_NFS_V4 is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
CONFIG_ROOT_NFS=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_LOCKD_V4=y
# CONFIG_EXPORTFS is not set
CONFIG_SUNRPC=y
# CONFIG_SUNRPC_GSS is not set
# CONFIG_SMB_FS is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_CODA_FS is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_NCPFS_STRONG is not set
# CONFIG_AFS_FS is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not set
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
#
#
# Partition Types
# Partition Types
...
@@ -456,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
...
@@ -456,12 +604,15 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_NEC98_PARTITION is not set
CONFIG_SGI_PARTITION=y
CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_SMB_NLS is not set
# CONFIG_EFI_PARTITION is not set
# CONFIG_NLS is not set
CONFIG_KCORE_ELF=y
#
# Graphics support
#
#
#
# Sound
# Sound
...
@@ -472,113 +623,30 @@ CONFIG_KCORE_ELF=y
...
@@ -472,113 +623,30 @@ CONFIG_KCORE_ELF=y
# USB support
# USB support
#
#
# CONFIG_USB is not set
# CONFIG_USB is not set
# CONFIG_USB_GADGET is not set
#
#
#
USB Controllers
#
Bluetooth support
#
#
# CONFIG_USB_UHCI is not set
# CONFIG_BT is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
#
#
# USB Device Class drivers
# Kernel hacking
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH is not set
# CONFIG_USB_STORAGE is not set
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# USB Human Interface Devices (HID)
#
#
# Input core support is needed for USB HID
#
#
# USB Imaging devices
#
# CONFIG_USB_DC2XX is not set
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
#
#
# Video4Linux support is needed for USB Multimedia device support
#
# CONFIG_USB_DABUSB is not set
#
# USB Network adaptors
#
# CONFIG_USB_PLUSB is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_USBNET is not set
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
#
#
# CONFIG_USB_SERIAL is not set
CONFIG_CROSSCOMPILE=y
# CONFIG_USB_SERIAL_GENERIC is not set
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_OMNINET is not set
#
#
#
Miscellaneous USB driver
s
#
Security option
s
#
#
# CONFIG_USB_RIO500 is not set
# CONFIG_SECURITY is not set
# CONFIG_USB_ID75 is not set
#
#
#
Input core support
#
Cryptographic options
#
#
# CONFIG_INPUT is not set
# CONFIG_CRYPTO is not set
# CONFIG_INPUT_KEYBDEV is not set
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
#
#
#
Kernel hacking
#
Library routines
#
#
CONFIG_CROSSCOMPILE=y
# CONFIG_CRC32 is not set
# CONFIG_REMOTE_DEBUG is not set
# CONFIG_MAGIC_SYSRQ is not set
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 @@
...
@@ -41,7 +41,7 @@
* Bridge address map
* Bridge address map
*/
*/
#if
defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#if
ndef __ASSEMBLY__
/*
/*
* All accesses to bridge hardware registers must be done
* All accesses to bridge hardware registers must be done
...
@@ -283,7 +283,7 @@ typedef struct bridge_err_cmdword_s {
...
@@ -283,7 +283,7 @@ typedef struct bridge_err_cmdword_s {
}
bridge_err_cmdword_t
;
}
bridge_err_cmdword_t
;
#define berr_field berr_un.berr_st
#define berr_field berr_un.berr_st
#endif
/* LANGUAGE_C
*/
#endif
/* !__ASSEMBLY__
*/
/*
/*
* The values of these macros can and should be crosschecked
* The values of these macros can and should be crosschecked
...
@@ -612,7 +612,7 @@ typedef struct bridge_err_cmdword_s {
...
@@ -612,7 +612,7 @@ typedef struct bridge_err_cmdword_s {
/* Bridge INT_DEV register bits definition */
/* Bridge INT_DEV register bits definition */
#define BRIDGE_INT_DEV_SHFT(n) ((n)*3)
#define BRIDGE_INT_DEV_SHFT(n) ((n)*3)
#define BRIDGE_INT_DEV_MASK(n) (0x7 << BRIDGE_INT_DEV_SHFT(n))
#define BRIDGE_INT_DEV_MASK(n) (0x7 << BRIDGE_INT_DEV_SHFT(n))
#define BRIDGE_INT_DEV_SET(_dev, _line) (_dev << BRIDGE_INT_DEV_SHFT(_line))
#define BRIDGE_INT_DEV_SET(_dev, _line) (_dev << BRIDGE_INT_DEV_SHFT(_line))
/* Bridge interrupt(x) register bits definition */
/* Bridge interrupt(x) register bits definition */
#define BRIDGE_INT_ADDR_HOST 0x0003FF00
#define BRIDGE_INT_ADDR_HOST 0x0003FF00
...
@@ -793,7 +793,7 @@ typedef struct bridge_err_cmdword_s {
...
@@ -793,7 +793,7 @@ typedef struct bridge_err_cmdword_s {
#define PCI64_ATTR_RMF_MASK 0x00ff000000000000
#define PCI64_ATTR_RMF_MASK 0x00ff000000000000
#define PCI64_ATTR_RMF_SHFT 48
#define PCI64_ATTR_RMF_SHFT 48
#if
LANGUAGE_C
#if
ndef __ASSEMBLY__
/* Address translation entry for mapped pci32 accesses */
/* Address translation entry for mapped pci32 accesses */
typedef
union
ate_u
{
typedef
union
ate_u
{
u64
ent
;
u64
ent
;
...
@@ -809,7 +809,7 @@ typedef union ate_u {
...
@@ -809,7 +809,7 @@ typedef union ate_u {
u64
valid
:
1
;
u64
valid
:
1
;
}
field
;
}
field
;
}
ate_t
;
}
ate_t
;
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define ATE_V 0x01
#define ATE_V 0x01
#define ATE_CO 0x02
#define ATE_CO 0x02
...
...
include/asm-mips64/sn/addrs.h
View file @
d3791f47
...
@@ -11,9 +11,9 @@
...
@@ -11,9 +11,9 @@
#include <linux/config.h>
#include <linux/config.h>
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <linux/types.h>
#include <linux/types.h>
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#include <asm/addrspace.h>
#include <asm/addrspace.h>
#include <asm/reg.h>
#include <asm/reg.h>
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
#endif
#endif
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#if defined(CONFIG_SGI_IO)
/* FIXME */
#if defined(CONFIG_SGI_IO)
/* FIXME */
#define PS_UINT_CAST (__psunsigned_t)
#define PS_UINT_CAST (__psunsigned_t)
...
@@ -38,13 +38,13 @@
...
@@ -38,13 +38,13 @@
#define HUBREG_CAST (volatile hubreg_t *)
#define HUBREG_CAST (volatile hubreg_t *)
#el
if _LANGUAGE_ASSEMBLY
#el
se
/* __ASSEMBLY__ */
#define PS_UINT_CAST
#define PS_UINT_CAST
#define UINT64_CAST
#define UINT64_CAST
#define HUBREG_CAST
#define HUBREG_CAST
#endif
#endif
/* __ASSEMBLY__ */
#define NASID_GET_META(_n) ((_n) >> NASID_LOCAL_BITS)
#define NASID_GET_META(_n) ((_n) >> NASID_LOCAL_BITS)
...
@@ -278,7 +278,7 @@
...
@@ -278,7 +278,7 @@
0x800000 + (_x)))
0x800000 + (_x)))
#endif
/* CONFIG_SGI_IP27 */
#endif
/* CONFIG_SGI_IP27 */
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define HUB_L(_a) *(_a)
#define HUB_L(_a) *(_a)
#define HUB_S(_a, _d) *(_a) = (_d)
#define HUB_S(_a, _d) *(_a) = (_d)
...
@@ -290,7 +290,7 @@
...
@@ -290,7 +290,7 @@
#define REMOTE_HUB_PI_L(_n, _sn, _r) HUB_L(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)))
#define REMOTE_HUB_PI_L(_n, _sn, _r) HUB_L(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)))
#define REMOTE_HUB_PI_S(_n, _sn, _r, _d) HUB_S(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)), (_d))
#define REMOTE_HUB_PI_S(_n, _sn, _r, _d) HUB_S(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)), (_d))
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
/*
* The following macros are used to get to a hub/bridge register, given
* The following macros are used to get to a hub/bridge register, given
...
@@ -367,7 +367,7 @@
...
@@ -367,7 +367,7 @@
#define KLI_KERN_XP 8
#define KLI_KERN_XP 8
#define KLI_KERN_PARTID 9
#define KLI_KERN_PARTID 9
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define KLD_BASE(nasid) ((kldir_ent_t *) KLDIR_ADDR(nasid))
#define KLD_BASE(nasid) ((kldir_ent_t *) KLDIR_ADDR(nasid))
#define KLD_LAUNCH(nasid) (KLD_BASE(nasid) + KLI_LAUNCH)
#define KLD_LAUNCH(nasid) (KLD_BASE(nasid) + KLI_LAUNCH)
...
@@ -453,7 +453,7 @@
...
@@ -453,7 +453,7 @@
#define GPDA_ADDR(nasid) TO_NODE_CAC(nasid, GPDA_OFFSET)
#define GPDA_ADDR(nasid) TO_NODE_CAC(nasid, GPDA_OFFSET)
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* _ASM_SN_ADDRS_H */
#endif
/* _ASM_SN_ADDRS_H */
include/asm-mips64/sn/arch.h
View file @
d3791f47
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
#endif
#endif
#if
defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#if
ndef __ASSEMBLY__
#if !defined(CONFIG_SGI_IO)
#if !defined(CONFIG_SGI_IO)
typedef
u64
hubreg_t
;
typedef
u64
hubreg_t
;
typedef
u64
nic_t
;
typedef
u64
nic_t
;
...
@@ -44,7 +44,7 @@ typedef u64 nic_t;
...
@@ -44,7 +44,7 @@ typedef u64 nic_t;
#define makespnum(_nasid, _slice) \
#define makespnum(_nasid, _slice) \
(((_nasid) << CPUS_PER_NODE_SHFT) | (_slice))
(((_nasid) << CPUS_PER_NODE_SHFT) | (_slice))
#if
defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#if
ndef __ASSEMBLY__
#define INVALID_NASID (nasid_t)-1
#define INVALID_NASID (nasid_t)-1
#define INVALID_CNODEID (cnodeid_t)-1
#define INVALID_CNODEID (cnodeid_t)-1
...
@@ -102,7 +102,7 @@ nasid_t compact_to_nasid_nodeid(cnodeid_t cnode);
...
@@ -102,7 +102,7 @@ nasid_t compact_to_nasid_nodeid(cnodeid_t cnode);
extern
int
node_getlastslot
(
cnodeid_t
);
extern
int
node_getlastslot
(
cnodeid_t
);
#endif
/*
_LANGUAGE_C || _LANGUAGE_C_PLUS_PLUS
*/
#endif
/*
!__ASSEMBLY__
*/
#define SLOT_BITMASK (MAX_MEM_SLOTS - 1)
#define SLOT_BITMASK (MAX_MEM_SLOTS - 1)
#define SLOT_SIZE (1LL<<SLOT_SHIFT)
#define SLOT_SIZE (1LL<<SLOT_SHIFT)
...
...
include/asm-mips64/sn/gda.h
View file @
d3791f47
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
*
*
* gda.h -- Contains the data structure for the global data area,
* gda.h -- Contains the data structure for the global data area,
* The GDA contains information communicated between the
* The GDA contains information communicated between the
* PROM, SYMMON, and the kernel.
* PROM, SYMMON, and the kernel.
*/
*/
#ifndef _ASM_SN_GDA_H
#ifndef _ASM_SN_GDA_H
#define _ASM_SN_GDA_H
#define _ASM_SN_GDA_H
...
@@ -23,9 +23,9 @@
...
@@ -23,9 +23,9 @@
*
*
* Version # | Change
* Version # | Change
* -------------+-------------------------------------------------------
* -------------+-------------------------------------------------------
* 1 | Initial SN0 version
* 1 | Initial SN0 version
* 2 | Prom sets g_partid field to the partition number. 0 IS
* 2 | Prom sets g_partid field to the partition number. 0 IS
* | a valid partition #.
* | a valid partition #.
*/
*/
#define GDA_VERSION 2
/* Current GDA version # */
#define GDA_VERSION 2
/* Current GDA version # */
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
#define G_PARTIDOFF 40
#define G_PARTIDOFF 40
#define G_TABLEOFF 128
#define G_TABLEOFF 128
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
struct
gda
{
typedef
struct
gda
{
u32
g_magic
;
/* GDA magic number */
u32
g_magic
;
/* GDA magic number */
...
@@ -67,10 +67,10 @@ typedef struct gda {
...
@@ -67,10 +67,10 @@ typedef struct gda {
#define GDA ((gda_t*) GDA_ADDR(get_nasid()))
#define GDA ((gda_t*) GDA_ADDR(get_nasid()))
#endif
/*
__LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
/*
* Define: PART_GDA_VERSION
* Define: PART_GDA_VERSION
* Purpose: Define the minimum version of the GDA required, lower
* Purpose: Define the minimum version of the GDA required, lower
* revisions assume GDA is NOT set up, and read partition
* revisions assume GDA is NOT set up, and read partition
* information from the board info.
* information from the board info.
*/
*/
...
...
include/asm-mips64/sn/intr.h
View file @
d3791f47
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
#include <asm/sn/intr_public.h>
#include <asm/sn/intr_public.h>
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
/*
/*
* Macros to manipulate the interrupt register on the calling hub chip.
* Macros to manipulate the interrupt register on the calling hub chip.
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
REMOTE_HUB_S((_hub), PI_INT_PEND_MOD, (0x100|(_level)))
REMOTE_HUB_S((_hub), PI_INT_PEND_MOD, (0x100|(_level)))
/*
/*
* When clearing the interrupt, make sure this clear does make it
* When clearing the interrupt, make sure this clear does make it
* to the hub. Otherwise we could end up losing interrupts.
* to the hub. Otherwise we could end up losing interrupts.
* We do an uncached load of the int_pend0 register to ensure this.
* We do an uncached load of the int_pend0 register to ensure this.
*/
*/
...
@@ -43,9 +43,9 @@
...
@@ -43,9 +43,9 @@
REMOTE_HUB_S((_hub), PI_INT_PEND_MOD, (_level)), \
REMOTE_HUB_S((_hub), PI_INT_PEND_MOD, (_level)), \
REMOTE_HUB_L((_hub), PI_INT_PEND0)
REMOTE_HUB_L((_hub), PI_INT_PEND0)
#else
/*
LANGUAGE_ASSEMBLY
*/
#else
/*
__ASSEMBLY__
*/
#endif
/*
LANGUAGE_C
*/
#endif
/*
__ASSEMBLY__
*/
/*
/*
* Hard-coded interrupt levels:
* Hard-coded interrupt levels:
...
...
include/asm-mips64/sn/intr_public.h
View file @
d3791f47
/*
/*
* This file is subject to the terms and conditions of the GNU General Public
* 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
* License. See the file "COPYING" in the main directory of this archive
* for more details.
* for more details.
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
#define INTPEND0_MAXMASK (N_INTPEND0_MASKS - 1)
#define INTPEND0_MAXMASK (N_INTPEND0_MASKS - 1)
#define INTPEND1_MAXMASK (N_INTPEND1_MASKS - 1)
#define INTPEND1_MAXMASK (N_INTPEND1_MASKS - 1)
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <asm/sn/arch.h>
#include <asm/sn/arch.h>
struct
intr_vecblk_s
;
/* defined in asm/sn/intr.h */
struct
intr_vecblk_s
;
/* defined in asm/sn/intr.h */
...
@@ -40,14 +40,14 @@ typedef struct hub_intmasks_s {
...
@@ -40,14 +40,14 @@ typedef struct hub_intmasks_s {
* in the lowest-numbered masks (i.e., 0, 1, 2...).
* in the lowest-numbered masks (i.e., 0, 1, 2...).
*/
*/
/* INT_PEND0: */
/* INT_PEND0: */
hubreg_t
intpend0_masks
[
N_INTPEND0_MASKS
];
hubreg_t
intpend0_masks
[
N_INTPEND0_MASKS
];
/* INT_PEND1: */
/* INT_PEND1: */
hubreg_t
intpend1_masks
[
N_INTPEND1_MASKS
];
hubreg_t
intpend1_masks
[
N_INTPEND1_MASKS
];
/* INT_PEND0: */
/* INT_PEND0: */
struct
intr_vecblk_s
*
dispatch0
;
struct
intr_vecblk_s
*
dispatch0
;
/* INT_PEND1: */
/* INT_PEND1: */
struct
intr_vecblk_s
*
dispatch1
;
struct
intr_vecblk_s
*
dispatch1
;
}
hub_intmasks_t
;
}
hub_intmasks_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* __ASM_SN_INTR_PUBLIC_H */
#endif
/* __ASM_SN_INTR_PUBLIC_H */
include/asm-mips64/sn/io.h
View file @
d3791f47
...
@@ -11,19 +11,9 @@
...
@@ -11,19 +11,9 @@
#include <linux/config.h>
#include <linux/config.h>
#if !defined(CONFIG_SGI_IO)
#ifdef CONFIG_SGI_IO
#include <asm/sn/sn0/addrs.h>
#define IO_SPACE_BASE IO_BASE
/* Because we only have PCI I/O ports. */
#define IO_SPACE_LIMIT 0xffffffff
/* No isa_* versions, the Origin doesn't have ISA / EISA bridges. */
#else
/* CONFIG_SGI_IO */
#define IIO_ITTE_BASE 0x400160
/* base of translation table entries */
#define IIO_ITTE_BASE 0x400160
/* base of translation table entries */
#define IIO_ITTE(bigwin) (IIO_ITTE_BASE + 8*(bigwin))
#define IIO_ITTE(bigwin) (IIO_ITTE_BASE + 8*(bigwin))
#define IIO_ITTE_OFFSET_BITS 5
/* size of offset field */
#define IIO_ITTE_OFFSET_BITS 5
/* size of offset field */
...
@@ -56,9 +46,9 @@
...
@@ -56,9 +46,9 @@
#define IIO_ITTE_GET(nasid, bigwin) REMOTE_HUB_ADDR((nasid), IIO_ITTE(bigwin))
#define IIO_ITTE_GET(nasid, bigwin) REMOTE_HUB_ADDR((nasid), IIO_ITTE(bigwin))
/*
/*
* Macro which takes the widget number, and returns the
* Macro which takes the widget number, and returns the
* IO PRB address of that widget.
* IO PRB address of that widget.
* value _x is expected to be a widget number in the range
* value _x is expected to be a widget number in the range
* 0, 8 - 0xF
* 0, 8 - 0xF
*/
*/
#define IIO_IOPRB(_x) (IIO_IOPRB_0 + ( ( (_x) < HUB_WIDGET_ID_MIN ? \
#define IIO_IOPRB(_x) (IIO_IOPRB_0 + ( ( (_x) < HUB_WIDGET_ID_MIN ? \
...
@@ -69,6 +59,17 @@
...
@@ -69,6 +59,17 @@
#include <asm/sn/sn0/hubio.h>
#include <asm/sn/sn0/hubio.h>
#endif
#endif
#else
/* CONFIG_SGI_IO */
#include <asm/sn/sn0/addrs.h>
#define IO_SPACE_BASE IO_BASE
/* Because we only have PCI I/O ports. */
#define IO_SPACE_LIMIT 0xffffffff
/* No isa_* versions, the Origin doesn't have ISA / EISA bridges. */
#endif
/* CONFIG_SGI_IO */
#endif
/* CONFIG_SGI_IO */
#endif
/* _ASM_SN_IO_H */
#endif
/* _ASM_SN_IO_H */
include/asm-mips64/sn/klconfig.h
View file @
d3791f47
...
@@ -19,9 +19,9 @@
...
@@ -19,9 +19,9 @@
/*
/*
* WARNING:
* WARNING:
* Certain assembly language routines (notably xxxxx.s) in the IP27PROM
* Certain assembly language routines (notably xxxxx.s) in the IP27PROM
* will depend on the format of the data structures in this file. In
* will depend on the format of the data structures in this file. In
* most cases, rearranging the fields can seriously break things.
* most cases, rearranging the fields can seriously break things.
* Adding fields in the beginning or middle can also break things.
* Adding fields in the beginning or middle can also break things.
* Add fields if necessary, to the end of a struct in such a way
* Add fields if necessary, to the end of a struct in such a way
* that offsets of existing fields do not change.
* that offsets of existing fields do not change.
...
@@ -76,11 +76,11 @@ typedef s32 klconf_off_t;
...
@@ -76,11 +76,11 @@ typedef s32 klconf_off_t;
#define MAX_MODULE_ID 255
#define MAX_MODULE_ID 255
#define SIZE_PAD 4096
/* 4k padding for structures */
#define SIZE_PAD 4096
/* 4k padding for structures */
/*
/*
* 1 NODE brd, 2 Router brd (1 8p, 1 meta), 6 Widgets,
* 1 NODE brd, 2 Router brd (1 8p, 1 meta), 6 Widgets,
* 2 Midplanes assuming no pci card cages
* 2 Midplanes assuming no pci card cages
*/
*/
#define MAX_SLOTS_PER_NODE (1 + 2 + 6 + 2)
#define MAX_SLOTS_PER_NODE (1 + 2 + 6 + 2)
/* XXX if each node is guranteed to have some memory */
/* XXX if each node is guranteed to have some memory */
...
@@ -117,7 +117,7 @@ typedef s32 klconf_off_t;
...
@@ -117,7 +117,7 @@ typedef s32 klconf_off_t;
/* Structures to manage various data storage areas */
/* Structures to manage various data storage areas */
/* The numbers must be contiguous since the array index i
/* The numbers must be contiguous since the array index i
is used in the code to allocate various areas.
is used in the code to allocate various areas.
*/
*/
#define BOARD_STRUCT 0
#define BOARD_STRUCT 0
...
@@ -240,7 +240,7 @@ typedef struct kl_config_hdr {
...
@@ -240,7 +240,7 @@ typedef struct kl_config_hdr {
/*
/*
* The KLCONFIG area is organized as a LINKED LIST of BOARDs. A BOARD
* The KLCONFIG area is organized as a LINKED LIST of BOARDs. A BOARD
* can be either 'LOCAL' or 'REMOTE'. LOCAL means it is attached to
* can be either 'LOCAL' or 'REMOTE'. LOCAL means it is attached to
* the LOCAL/current NODE. REMOTE means it is attached to a different
* the LOCAL/current NODE. REMOTE means it is attached to a different
* node.(TBD - Need a way to treat ROUTER boards.)
* node.(TBD - Need a way to treat ROUTER boards.)
*
*
...
@@ -250,20 +250,20 @@ typedef struct kl_config_hdr {
...
@@ -250,20 +250,20 @@ typedef struct kl_config_hdr {
* Figure below). The first byte of the rboard or lboard structure
* Figure below). The first byte of the rboard or lboard structure
* is used to find out its type - no unions are used.
* is used to find out its type - no unions are used.
* If it is a lboard, then the config info of this board will be found
* If it is a lboard, then the config info of this board will be found
* on the local node. (LOCAL NODE BASE + offset value gives pointer to
* on the local node. (LOCAL NODE BASE + offset value gives pointer to
* the structure.
* the structure.
* If it is a rboard, the local structure contains the node number
* If it is a rboard, the local structure contains the node number
* and the offset of the beginning of the LINKED LIST on the remote node.
* and the offset of the beginning of the LINKED LIST on the remote node.
* The details of the hardware on a remote node can be built locally,
* The details of the hardware on a remote node can be built locally,
* if required, by reading the LINKED LIST on the remote node and
* if required, by reading the LINKED LIST on the remote node and
* ignoring all the rboards on that node.
* ignoring all the rboards on that node.
*
*
* The local node uses the REMOTE NODE NUMBER + OFFSET to point to the
* The local node uses the REMOTE NODE NUMBER + OFFSET to point to the
* First board info on the remote node. The remote node list is
* First board info on the remote node. The remote node list is
* traversed as the local list, using the REMOTE BASE ADDRESS and not
* traversed as the local list, using the REMOTE BASE ADDRESS and not
* the local base address and ignoring all rboard values.
* the local base address and ignoring all rboard values.
*
*
*
*
KLCONFIG
KLCONFIG
+------------+ +------------+ +------------+ +------------+
+------------+ +------------+ +------------+ +------------+
...
@@ -290,7 +290,7 @@ typedef struct kl_config_hdr {
...
@@ -290,7 +290,7 @@ typedef struct kl_config_hdr {
+--------------------------------+
+--------------------------------+
*
*
* Each BOARD consists of COMPONENTs and the BOARD structure has
* Each BOARD consists of COMPONENTs and the BOARD structure has
* pointers (offsets) to its COMPONENT structure.
* pointers (offsets) to its COMPONENT structure.
* The COMPONENT structure has version info, size and speed info, revision,
* The COMPONENT structure has version info, size and speed info, revision,
* error info and the NIC info. This structure can accommodate any
* error info and the NIC info. This structure can accommodate any
...
@@ -298,19 +298,19 @@ typedef struct kl_config_hdr {
...
@@ -298,19 +298,19 @@ typedef struct kl_config_hdr {
*
*
* The ERRORINFO part of each BOARD has error information
* The ERRORINFO part of each BOARD has error information
* that describes errors about the BOARD itself. It also has flags to
* that describes errors about the BOARD itself. It also has flags to
* indicate the COMPONENT(s) on the board that have errors. The error
* indicate the COMPONENT(s) on the board that have errors. The error
* information specific to the COMPONENT is present in the respective
* information specific to the COMPONENT is present in the respective
* COMPONENT structure.
* COMPONENT structure.
*
*
* The ERRORINFO structure is also treated like a COMPONENT, ie. the
* The ERRORINFO structure is also treated like a COMPONENT, ie. the
* BOARD has pointers(offset) to the ERRORINFO structure. The rboard
* BOARD has pointers(offset) to the ERRORINFO structure. The rboard
* structure also has a pointer to the ERRORINFO structure. This is
* structure also has a pointer to the ERRORINFO structure. This is
* the place to store ERRORINFO about a REMOTE NODE, if the HUB on
* the place to store ERRORINFO about a REMOTE NODE, if the HUB on
* that NODE is not working or if the REMOTE MEMORY is BAD. In cases where
* that NODE is not working or if the REMOTE MEMORY is BAD. In cases where
* only the CPU of the REMOTE NODE is disabled, the ERRORINFO pointer can
* only the CPU of the REMOTE NODE is disabled, the ERRORINFO pointer can
* be a NODE NUMBER, REMOTE OFFSET combination, pointing to error info
* be a NODE NUMBER, REMOTE OFFSET combination, pointing to error info
* which is present on the REMOTE NODE.(TBD)
* which is present on the REMOTE NODE.(TBD)
* REMOTE ERRINFO can be stored on any of the nearest nodes
* REMOTE ERRINFO can be stored on any of the nearest nodes
* or on all the nearest nodes.(TBD)
* or on all the nearest nodes.(TBD)
* Like BOARD structures, REMOTE ERRINFO structures can be built locally
* Like BOARD structures, REMOTE ERRINFO structures can be built locally
* using the rboard errinfo pointer.
* using the rboard errinfo pointer.
...
@@ -319,9 +319,9 @@ typedef struct kl_config_hdr {
...
@@ -319,9 +319,9 @@ typedef struct kl_config_hdr {
* interface routines are provided (TBD). The important thing to remember while
* interface routines are provided (TBD). The important thing to remember while
* manipulating the structures, is that, the NODE number information should
* manipulating the structures, is that, the NODE number information should
* be used. If the NODE is non-zero (remote) then each offset should
* be used. If the NODE is non-zero (remote) then each offset should
* be added to the REMOTE BASE ADDR else it should be added to the LOCAL BASE ADDR.
* be added to the REMOTE BASE ADDR else it should be added to the LOCAL BASE ADDR.
* This includes offsets for BOARDS, COMPONENTS and ERRORINFO.
* This includes offsets for BOARDS, COMPONENTS and ERRORINFO.
*
*
* Note that these structures do not provide much info about connectivity.
* Note that these structures do not provide much info about connectivity.
* That info will be part of HWGRAPH, which is an extension of the cfg_t
* That info will be part of HWGRAPH, which is an extension of the cfg_t
* data structure. (ref IP27prom/cfg.h) It has to be extended to include
* data structure. (ref IP27prom/cfg.h) It has to be extended to include
...
@@ -342,11 +342,11 @@ typedef struct kl_config_hdr {
...
@@ -342,11 +342,11 @@ typedef struct kl_config_hdr {
* IP27 BOARD classes
* IP27 BOARD classes
*/
*/
#define KLCLASS_MASK 0xf0
#define KLCLASS_MASK 0xf0
#define KLCLASS_NONE 0x00
#define KLCLASS_NONE 0x00
#define KLCLASS_NODE 0x10
/* CPU, Memory and HUB board */
#define KLCLASS_NODE 0x10
/* CPU, Memory and HUB board */
#define KLCLASS_CPU KLCLASS_NODE
#define KLCLASS_CPU KLCLASS_NODE
#define KLCLASS_IO 0x20
/* BaseIO, 4 ch SCSI, ethernet, FDDI
#define KLCLASS_IO 0x20
/* BaseIO, 4 ch SCSI, ethernet, FDDI
and the non-graphics widget boards */
and the non-graphics widget boards */
#define KLCLASS_ROUTER 0x30
/* Router board */
#define KLCLASS_ROUTER 0x30
/* Router board */
#define KLCLASS_MIDPLANE 0x40
/* We need to treat this as a board
#define KLCLASS_MIDPLANE 0x40
/* We need to treat this as a board
...
@@ -420,7 +420,7 @@ typedef struct kl_config_hdr {
...
@@ -420,7 +420,7 @@ typedef struct kl_config_hdr {
* out the board name from the NIC string. For values less than
* out the board name from the NIC string. For values less than
* 8 the name of the board needs to be hard coded in a few places.
* 8 the name of the board needs to be hard coded in a few places.
* When bringup started nic names had not standardized and so we
* When bringup started nic names had not standardized and so we
* had to hard code. (For people interested in history.)
* had to hard code. (For people interested in history.)
*/
*/
#define KLTYPE_XTHD (KLCLASS_PSEUDO_GFX | 0x9)
#define KLTYPE_XTHD (KLCLASS_PSEUDO_GFX | 0x9)
...
@@ -431,7 +431,7 @@ typedef struct kl_config_hdr {
...
@@ -431,7 +431,7 @@ typedef struct kl_config_hdr {
(l->brd_flags & SECOND_NIC_PRESENT))
(l->brd_flags & SECOND_NIC_PRESENT))
#define IS_MIO_IOC3(l,n) (IS_MIO_PRESENT(l) && (n > 2))
#define IS_MIO_IOC3(l,n) (IS_MIO_PRESENT(l) && (n > 2))
/*
/*
* board structures
* board structures
*/
*/
...
@@ -511,10 +511,10 @@ typedef struct lboard_s {
...
@@ -511,10 +511,10 @@ typedef struct lboard_s {
/*
/*
* Generic info structure. This stores common info about a
* Generic info structure. This stores common info about a
* component.
* component.
*/
*/
typedef
struct
klinfo_s
{
/* Generic info */
typedef
struct
klinfo_s
{
/* Generic info */
unsigned
char
struct_type
;
/* type of this structure */
unsigned
char
struct_type
;
/* type of this structure */
unsigned
char
struct_version
;
/* version of this structure */
unsigned
char
struct_version
;
/* version of this structure */
...
@@ -540,9 +540,9 @@ typedef struct klinfo_s { /* Generic info */
...
@@ -540,9 +540,9 @@ typedef struct klinfo_s { /* Generic info */
/*
/*
* Component structures.
* Component structures.
* Following are the currently identified components:
* Following are the currently identified components:
* CPU, HUB, MEM_BANK,
* CPU, HUB, MEM_BANK,
* XBOW(consists of 16 WIDGETs, each of which can be HUB or GRAPHICS or BRIDGE)
* XBOW(consists of 16 WIDGETs, each of which can be HUB or GRAPHICS or BRIDGE)
* BRIDGE, IOC3, SuperIO, SCSI, FDDI
* BRIDGE, IOC3, SuperIO, SCSI, FDDI
* ROUTER
* ROUTER
* GRAPHICS
* GRAPHICS
*/
*/
...
@@ -614,9 +614,9 @@ typedef u64 *graphics_t;
...
@@ -614,9 +614,9 @@ typedef u64 *graphics_t;
typedef
u64
*
router_t
;
typedef
u64
*
router_t
;
/*
/*
* The port info in ip27_cfg area translates to a lboart_t in the
* The port info in ip27_cfg area translates to a lboart_t in the
* KLCONFIG area. But since KLCONFIG does not use pointers, lboart_t
* KLCONFIG area. But since KLCONFIG does not use pointers, lboart_t
* is stored in terms of a nasid and a offset from start of KLCONFIG
* is stored in terms of a nasid and a offset from start of KLCONFIG
* area on that nasid.
* area on that nasid.
*/
*/
typedef
struct
klport_s
{
typedef
struct
klport_s
{
...
@@ -692,7 +692,7 @@ typedef struct klmod_serial_num_s {
...
@@ -692,7 +692,7 @@ typedef struct klmod_serial_num_s {
}
klmod_serial_num_t
;
}
klmod_serial_num_t
;
/* Macros needed to access serial number structure in lboard_t.
/* Macros needed to access serial number structure in lboard_t.
Hard coded values are necessary since we cannot treat
Hard coded values are necessary since we cannot treat
serial number struct as a component without losing compatibility
serial number struct as a component without losing compatibility
between prom versions. */
between prom versions. */
...
@@ -789,7 +789,7 @@ typedef struct klgfx_s { /* GRAPHICS Device */
...
@@ -789,7 +789,7 @@ typedef struct klgfx_s { /* GRAPHICS Device */
klconf_off_t
gfx_mfg_nic
;
klconf_off_t
gfx_mfg_nic
;
}
klgfx_t
;
}
klgfx_t
;
typedef
struct
klxthd_s
{
typedef
struct
klxthd_s
{
klinfo_t
xthd_info
;
klinfo_t
xthd_info
;
klconf_off_t
xthd_mfg_nic
;
/* MFG NIC string */
klconf_off_t
xthd_mfg_nic
;
/* MFG NIC string */
}
klxthd_t
;
}
klxthd_t
;
...
@@ -815,9 +815,9 @@ typedef struct klgsn_s { /* GSN board */
...
@@ -815,9 +815,9 @@ typedef struct klgsn_s { /* GSN board */
typedef
struct
klscsi_s
{
/* SCSI Controller */
typedef
struct
klscsi_s
{
/* SCSI Controller */
klinfo_t
scsi_info
;
klinfo_t
scsi_info
;
scsi_t
scsi_specific
;
scsi_t
scsi_specific
;
unsigned
char
scsi_numdevs
;
unsigned
char
scsi_numdevs
;
klconf_off_t
scsi_devinfo
[
MAX_SCSI_DEVS
]
;
klconf_off_t
scsi_devinfo
[
MAX_SCSI_DEVS
]
;
}
klscsi_t
;
}
klscsi_t
;
typedef
struct
klscdev_s
{
/* SCSI device */
typedef
struct
klscdev_s
{
/* SCSI device */
...
@@ -842,20 +842,20 @@ typedef struct klkbddev_s { /* KBD device */
...
@@ -842,20 +842,20 @@ typedef struct klkbddev_s { /* KBD device */
typedef
struct
klmsdev_s
{
/* mouse device */
typedef
struct
klmsdev_s
{
/* mouse device */
klinfo_t
msdev_info
;
klinfo_t
msdev_info
;
void
*
msdev_cfg
;
void
*
msdev_cfg
;
}
klmsdev_t
;
}
klmsdev_t
;
#define MAX_FDDI_DEVS 10
/* XXX Is this true */
#define MAX_FDDI_DEVS 10
/* XXX Is this true */
typedef
struct
klfddi_s
{
/* FDDI */
typedef
struct
klfddi_s
{
/* FDDI */
klinfo_t
fddi_info
;
klinfo_t
fddi_info
;
fddi_t
fddi_specific
;
fddi_t
fddi_specific
;
klconf_off_t
fddi_devinfo
[
MAX_FDDI_DEVS
]
;
klconf_off_t
fddi_devinfo
[
MAX_FDDI_DEVS
]
;
}
klfddi_t
;
}
klfddi_t
;
typedef
struct
klmio_s
{
/* MIO */
typedef
struct
klmio_s
{
/* MIO */
klinfo_t
mio_info
;
klinfo_t
mio_info
;
mio_t
mio_specific
;
mio_t
mio_specific
;
}
klmio_t
;
}
klmio_t
;
...
@@ -890,17 +890,17 @@ typedef union kldev_s { /* for device structure allocation */
...
@@ -890,17 +890,17 @@ typedef union kldev_s { /* for device structure allocation */
/*
/*
* TBD - Can the ARCS and device driver related info also be included in the
* TBD - Can the ARCS and device driver related info also be included in the
* KLCONFIG area. On the IO4PROM, prom device driver info is part of cfgnode_t
* KLCONFIG area. On the IO4PROM, prom device driver info is part of cfgnode_t
* structure, viz private to the IO4prom.
* structure, viz private to the IO4prom.
*/
*/
/*
/*
* TBD - Allocation issues.
* TBD - Allocation issues.
*
*
* Do we need to Mark off sepatate heaps for lboard_t, rboard_t, component,
* Do we need to Mark off sepatate heaps for lboard_t, rboard_t, component,
* errinfo and allocate from them, or have a single heap and allocate all
* errinfo and allocate from them, or have a single heap and allocate all
* structures from it. Debug is easier in the former method since we can
* structures from it. Debug is easier in the former method since we can
* dump all similar structs in one command, but there will be lots of holes,
* dump all similar structs in one command, but there will be lots of holes,
* in memory and max limits are needed for number of structures.
* in memory and max limits are needed for number of structures.
* Another way to make it organized, is to have a union of all components
* Another way to make it organized, is to have a union of all components
* and allocate a aligned chunk of memory greater than the biggest
* and allocate a aligned chunk of memory greater than the biggest
...
...
include/asm-mips64/sn/kldir.h
View file @
d3791f47
...
@@ -127,14 +127,14 @@
...
@@ -127,14 +127,14 @@
* 0x0 (0K) +-----------------------------------------+
* 0x0 (0K) +-----------------------------------------+
*/
*/
#ifdef
LANGUAGE_ASSEMBLY
#ifdef
__ASSEMBLY__
#define KLDIR_OFF_MAGIC 0x00
#define KLDIR_OFF_MAGIC 0x00
#define KLDIR_OFF_OFFSET 0x08
#define KLDIR_OFF_OFFSET 0x08
#define KLDIR_OFF_POINTER 0x10
#define KLDIR_OFF_POINTER 0x10
#define KLDIR_OFF_SIZE 0x18
#define KLDIR_OFF_SIZE 0x18
#define KLDIR_OFF_COUNT 0x20
#define KLDIR_OFF_COUNT 0x20
#define KLDIR_OFF_STRIDE 0x28
#define KLDIR_OFF_STRIDE 0x28
#endif
/*
LANGUAGE_ASSEMBLY
*/
#endif
/*
__ASSEMBLY__
*/
#if !defined(CONFIG_SGI_IO)
#if !defined(CONFIG_SGI_IO)
...
@@ -199,7 +199,7 @@
...
@@ -199,7 +199,7 @@
#define IP27_NMI_KREGS_OFFSET 0x11400
#define IP27_NMI_KREGS_OFFSET 0x11400
#define IP27_NMI_KREGS_CPU_SIZE 0x200
#define IP27_NMI_KREGS_CPU_SIZE 0x200
/*
/*
* save area of kernel nmi regs in eframe format
* save area of kernel nmi regs in eframe format
*/
*/
#define IP27_NMI_EFRAME_OFFSET 0x11800
#define IP27_NMI_EFRAME_OFFSET 0x11800
#define IP27_NMI_EFRAME_SIZE 0x200
#define IP27_NMI_EFRAME_SIZE 0x200
...
@@ -209,7 +209,7 @@
...
@@ -209,7 +209,7 @@
#endif
/* !CONFIG_SGI_IO */
#endif
/* !CONFIG_SGI_IO */
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
struct
kldir_ent_s
{
typedef
struct
kldir_ent_s
{
u64
magic
;
/* Indicates validity of entry */
u64
magic
;
/* Indicates validity of entry */
off_t
offset
;
/* Offset from start of node space */
off_t
offset
;
/* Offset from start of node space */
...
@@ -225,7 +225,7 @@ typedef struct kldir_ent_s {
...
@@ -225,7 +225,7 @@ typedef struct kldir_ent_s {
/* NOTE: These 16 bytes are used in the Partition KLDIR
/* NOTE: These 16 bytes are used in the Partition KLDIR
entry to store partition info. Refer to klpart.h for this. */
entry to store partition info. Refer to klpart.h for this. */
}
kldir_ent_t
;
}
kldir_ent_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#if defined(CONFIG_SGI_IO)
#if defined(CONFIG_SGI_IO)
...
...
include/asm-mips64/sn/klkernvars.h
View file @
d3791f47
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
#define KV_MAGIC 0x5f4b565f
#define KV_MAGIC 0x5f4b565f
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <asm/sn/types.h>
#include <asm/sn/types.h>
...
@@ -23,7 +23,7 @@ typedef struct kern_vars_s {
...
@@ -23,7 +23,7 @@ typedef struct kern_vars_s {
unsigned
long
kv_rw_baseaddr
;
unsigned
long
kv_rw_baseaddr
;
}
kern_vars_t
;
}
kern_vars_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* __ASM_SN_KLKERNVARS_H */
#endif
/* __ASM_SN_KLKERNVARS_H */
include/asm-mips64/sn/launch.h
View file @
d3791f47
...
@@ -60,7 +60,7 @@
...
@@ -60,7 +60,7 @@
* clears the BUSY flag after control is returned to it.
* clears the BUSY flag after control is returned to it.
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
int
launch_state_t
;
typedef
int
launch_state_t
;
typedef
void
(
*
launch_proc_t
)(
u64
call_parm
);
typedef
void
(
*
launch_proc_t
)(
u64
call_parm
);
...
@@ -102,21 +102,6 @@ typedef struct launch_s {
...
@@ -102,21 +102,6 @@ typedef struct launch_s {
#define LAUNCH_FLASH (*(void (*)(void)) \
#define LAUNCH_FLASH (*(void (*)(void)) \
IP27PROM_FLASHLEDS)
IP27PROM_FLASHLEDS)
#ifdef _STANDALONE
#endif
/* !__ASSEMBLY__ */
launch_t
*
launch_get
(
int
nasid
,
int
cpu
);
launch_t
*
launch_get_current
(
void
);
void
launch_loop
(
void
);
void
launch_slave
(
int
nasid
,
int
cpu
,
launch_proc_t
call_addr
,
__int64_t
call_parm
,
void
*
stack_addr
,
void
*
gp_addr
);
int
launch_wait
(
int
nasid
,
int
cpu
,
int
timeout_msec
);
launch_state_t
launch_poll
(
int
nasid
,
int
cpu
);
#endif
/* _STANDALONE */
#endif
/* _LANGUAGE_C */
#endif
/* _ASM_SN_LAUNCH_H */
#endif
/* _ASM_SN_LAUNCH_H */
include/asm-mips64/sn/mapped_kernel.h
View file @
d3791f47
...
@@ -6,18 +6,18 @@
...
@@ -6,18 +6,18 @@
#define __ASM_SN_MAPPED_KERNEL_H
#define __ASM_SN_MAPPED_KERNEL_H
/*
/*
* Note on how mapped kernels work: the text and data section is
* Note on how mapped kernels work: the text and data section is
* compiled at cksseg segment (LOADADDR = 0xc001c000), and the
* compiled at cksseg segment (LOADADDR = 0xc001c000), and the
* init/setup/data section gets a 16M virtual address bump in the
* init/setup/data section gets a 16M virtual address bump in the
* ld.script file (so that tlblo0 and tlblo1 maps the sections).
* ld.script file (so that tlblo0 and tlblo1 maps the sections).
* The vmlinux.64 section addresses are put in the xkseg range
* The vmlinux.64 section addresses are put in the xkseg range
* using the change-addresses makefile option. Use elfdump -of
* using the change-addresses makefile option. Use elfdump -of
* on IRIX to see where the sections go. The Origin loader loads
* on IRIX to see where the sections go. The Origin loader loads
* the two sections contiguously in physical memory. The loader
* the two sections contiguously in physical memory. The loader
* sets the entry point into kernel_entry using a xkphys address,
* sets the entry point into kernel_entry using a xkphys address,
* but instead of using 0xa800000001160000, it uses the address
* but instead of using 0xa800000001160000, it uses the address
* 0xa800000000160000, which is where it physically loaded that
* 0xa800000000160000, which is where it physically loaded that
* code. So no jumps can be done before we have switched to using
* code. So no jumps can be done before we have switched to using
* cksseg addresses.
* cksseg addresses.
*/
*/
#include <linux/config.h>
#include <linux/config.h>
...
...
include/asm-mips64/sn/nmi.h
View file @
d3791f47
/*
/*
* This file is subject to the terms and conditions of the GNU General Public
* 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
* License. See the file "COPYING" in the main directory of this archive
* for more details.
* for more details.
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
#ifndef __ASM_SN_NMI_H
#ifndef __ASM_SN_NMI_H
#define __ASM_SN_NMI_H
#define __ASM_SN_NMI_H
#ident "$Revision: 1.
2
$"
#ident "$Revision: 1.
5
$"
#include <asm/sn/addrs.h>
#include <asm/sn/addrs.h>
...
@@ -48,7 +48,7 @@
...
@@ -48,7 +48,7 @@
*
*
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
struct
nmi_s
{
typedef
struct
nmi_s
{
volatile
unsigned
long
magic
;
/* Magic number */
volatile
unsigned
long
magic
;
/* Magic number */
...
@@ -59,13 +59,13 @@ typedef struct nmi_s {
...
@@ -59,13 +59,13 @@ typedef struct nmi_s {
volatile
unsigned
long
gmaster
;
/* Flag true only on global master*/
volatile
unsigned
long
gmaster
;
/* Flag true only on global master*/
}
nmi_t
;
}
nmi_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/* Following definitions are needed both in the prom & the kernel
/* Following definitions are needed both in the prom & the kernel
* to identify the format of the nmi cpu register save area in the
* to identify the format of the nmi cpu register save area in the
* low memory on each node.
* low memory on each node.
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
struct
reg_struct
{
struct
reg_struct
{
unsigned
long
gpr
[
32
];
unsigned
long
gpr
[
32
];
...
@@ -78,7 +78,7 @@ struct reg_struct {
...
@@ -78,7 +78,7 @@ struct reg_struct {
unsigned
long
nmi_sr
;
unsigned
long
nmi_sr
;
};
};
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/* These are the assembly language offsets into the reg_struct structure */
/* These are the assembly language offsets into the reg_struct structure */
...
...
include/asm-mips64/sn/sn0/addrs.h
View file @
d3791f47
...
@@ -99,14 +99,15 @@
...
@@ -99,14 +99,15 @@
#define NASID_GET(_pa) (int) ((UINT64_CAST (_pa) >> \
#define NASID_GET(_pa) (int) ((UINT64_CAST (_pa) >> \
NASID_SHFT) & NASID_BITMASK)
NASID_SHFT) & NASID_BITMASK)
#if _LANGUAGE_C && !defined(_STANDALONE)
#if !defined(__ASSEMBLY__) && !defined(_STANDALONE)
#define NODE_SWIN_BASE(nasid, widget) \
#define NODE_SWIN_BASE(nasid, widget) \
((widget == 0) ? NODE_BWIN_BASE((nasid), SWIN0_BIGWIN) \
((widget == 0) ? NODE_BWIN_BASE((nasid), SWIN0_BIGWIN) \
: RAW_NODE_SWIN_BASE(nasid, widget))
: RAW_NODE_SWIN_BASE(nasid, widget))
#else
#else
/* __ASSEMBLY__ || _STANDALONE */
#define NODE_SWIN_BASE(nasid, widget) \
#define NODE_SWIN_BASE(nasid, widget) \
(NODE_IO_BASE(nasid) + (UINT64_CAST (widget) << SWIN_SIZE_BITS))
(NODE_IO_BASE(nasid) + (UINT64_CAST (widget) << SWIN_SIZE_BITS))
#endif
/* _
LANGUAGE_C
*/
#endif
/* _
_ASSEMBLY__ || _STANDALONE
*/
/*
/*
* The following definitions pertain to the IO special address
* The following definitions pertain to the IO special address
...
@@ -163,11 +164,11 @@
...
@@ -163,11 +164,11 @@
#define SABLE_LOG_TRIGGER(_map)
#define SABLE_LOG_TRIGGER(_map)
#endif
/* SABLE */
#endif
/* SABLE */
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define KERN_NMI_ADDR(nasid, slice) \
#define KERN_NMI_ADDR(nasid, slice) \
TO_NODE_UNCAC((nasid), IP27_NMI_KREGS_OFFSET + \
TO_NODE_UNCAC((nasid), IP27_NMI_KREGS_OFFSET + \
(IP27_NMI_KREGS_CPU_SIZE * (slice)))
(IP27_NMI_KREGS_CPU_SIZE * (slice)))
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#ifdef PROM
#ifdef PROM
...
@@ -272,7 +273,8 @@
...
@@ -272,7 +273,8 @@
#define KL_UART_DATA LOCAL_HUB_ADDR(MD_UREG0_1)
/* UART data reg */
#define KL_UART_DATA LOCAL_HUB_ADDR(MD_UREG0_1)
/* UART data reg */
#define KL_I2C_REG MD_UREG0_0
/* I2C reg */
#define KL_I2C_REG MD_UREG0_0
/* I2C reg */
#if !_LANGUAGE_ASSEMBLY
#ifndef __ASSEMBLY__
/* Address 0x400 to 0x1000 ualias points to cache error eframe + misc
/* Address 0x400 to 0x1000 ualias points to cache error eframe + misc
* CACHE_ERR_SP_PTR could either contain an address to the stack, or
* CACHE_ERR_SP_PTR could either contain an address to the stack, or
* the stack could start at CACHE_ERR_SP_PTR
* the stack could start at CACHE_ERR_SP_PTR
...
@@ -289,7 +291,7 @@
...
@@ -289,7 +291,7 @@
#define CACHE_ERR_SP (CACHE_ERR_SP_PTR - 16)
#define CACHE_ERR_SP (CACHE_ERR_SP_PTR - 16)
#define CACHE_ERR_AREA_SIZE (ARCS_SPB_OFFSET - CACHE_ERR_EFRAME)
#define CACHE_ERR_AREA_SIZE (ARCS_SPB_OFFSET - CACHE_ERR_EFRAME)
#endif
/* !_
LANGUAGE_ASSEMBLY
*/
#endif
/* !_
_ASSEMBLY__
*/
#define _ARCSPROM
#define _ARCSPROM
...
@@ -314,7 +316,7 @@
...
@@ -314,7 +316,7 @@
* is in place.
* is in place.
*/
*/
#if
_LANGUAGE_C
#if
ndef __ASSEMBLY__
#define uchar unsigned char
#define uchar unsigned char
...
@@ -359,7 +361,7 @@
...
@@ -359,7 +361,7 @@
#define PUT_INSTALL_STATUS(c,s) c->Revision = s
#define PUT_INSTALL_STATUS(c,s) c->Revision = s
#define GET_INSTALL_STATUS(c) c->Revision
#define GET_INSTALL_STATUS(c) c->Revision
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* _STANDALONE */
#endif
/* _STANDALONE */
...
...
include/asm-mips64/sn/sn0/arch.h
View file @
d3791f47
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,7 @@
#define MAX_PREMIUM_REGIONS MAX_REGIONS
#define MAX_PREMIUM_REGIONS MAX_REGIONS
/*
/*
* MAX_PARITIONS refers to the maximum number of logically defined
* MAX_PARITIONS refers to the maximum number of logically defined
* partitions the system can support.
* partitions the system can support.
*/
*/
#define MAX_PARTITIONS MAX_REGIONS
#define MAX_PARTITIONS MAX_REGIONS
...
...
include/asm-mips64/sn/sn0/hubio.h
View file @
d3791f47
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
* In general, the longer software name should be used when available.
* In general, the longer software name should be used when available.
*/
*/
/*
/*
* Slightly friendlier names for some common registers.
* Slightly friendlier names for some common registers.
* The hardware definitions follow.
* The hardware definitions follow.
*/
*/
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
#define IIO_WIDGET_STAT IIO_WSTAT
/* Widget status register */
#define IIO_WIDGET_STAT IIO_WSTAT
/* Widget status register */
#define IIO_WIDGET_CTRL IIO_WCR
/* Widget control register */
#define IIO_WIDGET_CTRL IIO_WCR
/* Widget control register */
#define IIO_WIDGET_TOUT IIO_WRTO
/* Widget request timeout */
#define IIO_WIDGET_TOUT IIO_WRTO
/* Widget request timeout */
#define IIO_WIDGET_FLUSH IIO_WTFR
/* Widget target flush */
#define IIO_WIDGET_FLUSH IIO_WTFR
/* Widget target flush */
#define IIO_PROTECT IIO_ILAPR
/* IO interface protection */
#define IIO_PROTECT IIO_ILAPR
/* IO interface protection */
#define IIO_PROTECT_OVRRD IIO_ILAPO
/* IO protect override */
#define IIO_PROTECT_OVRRD IIO_ILAPO
/* IO protect override */
#define IIO_OUTWIDGET_ACCESS IIO_IOWA
/* Outbound widget access */
#define IIO_OUTWIDGET_ACCESS IIO_IOWA
/* Outbound widget access */
...
@@ -67,7 +67,7 @@
...
@@ -67,7 +67,7 @@
/*
/*
* The following definitions use the names defined in the IO interface
* The following definitions use the names defined in the IO interface
* document for ease of reference. When possible, software should
* document for ease of reference. When possible, software should
* generally use the longer but clearer names defined above.
* generally use the longer but clearer names defined above.
*/
*/
...
@@ -169,7 +169,7 @@
...
@@ -169,7 +169,7 @@
/*
/*
* The IO LLP control status register and widget control register
* The IO LLP control status register and widget control register
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
hubii_wid_u
{
typedef
union
hubii_wid_u
{
u64
wid_reg_value
;
u64
wid_reg_value
;
...
@@ -198,7 +198,7 @@ typedef union hubii_wcr_u {
...
@@ -198,7 +198,7 @@ typedef union hubii_wcr_u {
}
hubii_wcr_t
;
}
hubii_wcr_t
;
#define iwcr_dir_con wcr_fields_s.wcr_dir_con
#define iwcr_dir_con wcr_fields_s.wcr_dir_con
typedef
union
hubii_wstat_u
{
typedef
union
hubii_wstat_u
{
u64
reg_value
;
u64
reg_value
;
struct
{
struct
{
...
@@ -215,13 +215,13 @@ typedef union hubii_wstat_u {
...
@@ -215,13 +215,13 @@ typedef union hubii_wstat_u {
}
wstat_fields_s
;
}
wstat_fields_s
;
}
hubii_wstat_t
;
}
hubii_wstat_t
;
typedef
union
hubii_ilcsr_u
{
typedef
union
hubii_ilcsr_u
{
u64
icsr_reg_value
;
u64
icsr_reg_value
;
struct
{
struct
{
u64
icsr_rsvd
:
22
,
/* unused */
u64
icsr_rsvd
:
22
,
/* unused */
icsr_max_burst:
10
,
/* max burst */
icsr_max_burst:
10
,
/* max burst */
icsr_rsvd4:
6
,
/* reserved */
icsr_rsvd4:
6
,
/* reserved */
icsr_max_retry:
10
,
/* max retry */
icsr_max_retry:
10
,
/* max retry */
icsr_rsvd3:
2
,
/* reserved */
icsr_rsvd3:
2
,
/* reserved */
icsr_lnk_stat:
2
,
/* link status */
icsr_lnk_stat:
2
,
/* link status */
...
@@ -285,23 +285,23 @@ typedef union io_perf_sel {
...
@@ -285,23 +285,23 @@ typedef union io_perf_sel {
typedef
union
io_perf_cnt
{
typedef
union
io_perf_cnt
{
u64
perf_cnt
;
u64
perf_cnt
;
struct
{
struct
{
u64
perf_rsvd1
:
32
,
u64
perf_rsvd1
:
32
,
perf_rsvd2
:
12
,
perf_rsvd2
:
12
,
perf_cnt
:
20
;
perf_cnt
:
20
;
}
perf_cnt_bits
;
}
perf_cnt_bits
;
}
io_perf_cnt_t
;
}
io_perf_cnt_t
;
#endif
#endif
/* !__ASSEMBLY__ */
#define LNK_STAT_WORKING 0x2
#define LNK_STAT_WORKING 0x2
#define IIO_LLP_CB_MAX 0xffff
#define IIO_LLP_CB_MAX 0xffff
#define IIO_LLP_SN_MAX 0xffff
#define IIO_LLP_SN_MAX 0xffff
/* IO PRB Entries */
/* IO PRB Entries */
#define IIO_NUM_IPRBS (9)
#define IIO_NUM_IPRBS (9)
#define IIO_IOPRB_0 0x400198
/* PRB entry 0 */
#define IIO_IOPRB_0 0x400198
/* PRB entry 0 */
#define IIO_IOPRB_8 0x4001a0
/* PRB entry 8 */
#define IIO_IOPRB_8 0x4001a0
/* PRB entry 8 */
#define IIO_IOPRB_9 0x4001a8
/* PRB entry 9 */
#define IIO_IOPRB_9 0x4001a8
/* PRB entry 9 */
...
@@ -320,7 +320,7 @@ typedef union io_perf_cnt {
...
@@ -320,7 +320,7 @@ typedef union io_perf_cnt {
#define IIO_IECLR 0x4001f8
/* IO error clear */
#define IIO_IECLR 0x4001f8
/* IO error clear */
#define IIO_IBCN 0x400200
/* IO BTE CRB count */
#define IIO_IBCN 0x400200
/* IO BTE CRB count */
/*
/*
* IIO_IMEM Register fields.
* IIO_IMEM Register fields.
*/
*/
#define IIO_IMEM_W0ESD 0x1
/* Widget 0 shut down due to error */
#define IIO_IMEM_W0ESD 0x1
/* Widget 0 shut down due to error */
...
@@ -366,7 +366,7 @@ typedef union io_perf_cnt {
...
@@ -366,7 +366,7 @@ typedef union io_perf_cnt {
#define IIO_ICMR_CLR_RPPD (1UL << 13)
#define IIO_ICMR_CLR_RPPD (1UL << 13)
#define IIO_ICMR_CLR_RQPD (1UL << 12)
#define IIO_ICMR_CLR_RQPD (1UL << 12)
/*
/*
* IIO PIO Deallocation register field masks : (IIO_IPDR)
* IIO PIO Deallocation register field masks : (IIO_IPDR)
*/
*/
#define IIO_IPDR_PND (1 << 4)
#define IIO_IPDR_PND (1 << 4)
...
@@ -377,7 +377,7 @@ typedef union io_perf_cnt {
...
@@ -377,7 +377,7 @@ typedef union io_perf_cnt {
#define IIO_ICDR_PND (1 << 4)
#define IIO_ICDR_PND (1 << 4)
/*
/*
* IIO CRB control register Fields: IIO_ICCR
* IIO CRB control register Fields: IIO_ICCR
*/
*/
#define IIO_ICCR_PENDING (0x10000)
#define IIO_ICCR_PENDING (0x10000)
#define IIO_ICCR_CMD_MASK (0xFF)
#define IIO_ICCR_CMD_MASK (0xFF)
...
@@ -385,7 +385,7 @@ typedef union io_perf_cnt {
...
@@ -385,7 +385,7 @@ typedef union io_perf_cnt {
#define IIO_ICCR_CMD_NOP (0x0)
/* No Op */
#define IIO_ICCR_CMD_NOP (0x0)
/* No Op */
#define IIO_ICCR_CMD_WAKE (0x100)
/* Reactivate CRB entry and process */
#define IIO_ICCR_CMD_WAKE (0x100)
/* Reactivate CRB entry and process */
#define IIO_ICCR_CMD_TIMEOUT (0x200)
/* Make CRB timeout & mark invalid */
#define IIO_ICCR_CMD_TIMEOUT (0x200)
/* Make CRB timeout & mark invalid */
#define IIO_ICCR_CMD_EJECT (0x400)
/* Contents of entry written to memory
#define IIO_ICCR_CMD_EJECT (0x400)
/* Contents of entry written to memory
* via a WB
* via a WB
*/
*/
#define IIO_ICCR_CMD_FLUSH (0x800)
#define IIO_ICCR_CMD_FLUSH (0x800)
...
@@ -423,15 +423,15 @@ typedef union io_perf_cnt {
...
@@ -423,15 +423,15 @@ typedef union io_perf_cnt {
*
*
* Many of the fields in CRB are status bits used by hardware
* Many of the fields in CRB are status bits used by hardware
* for implementation of the protocol. It's very dangerous to
* for implementation of the protocol. It's very dangerous to
* mess around with the CRB registers.
* mess around with the CRB registers.
*
*
* It's OK to read the CRB registers and try to make sense out of the
* It's OK to read the CRB registers and try to make sense out of the
* fields in CRB.
* fields in CRB.
*
*
* Updating CRB requires all activities in Hub IIO to be quiesced.
* Updating CRB requires all activities in Hub IIO to be quiesced.
* otherwise, a write to CRB could corrupt other CRB entries.
* otherwise, a write to CRB could corrupt other CRB entries.
* CRBs are here only as a back door peek to hub IIO's status.
* CRBs are here only as a back door peek to hub IIO's status.
* Quiescing implies no dmas no PIOs
* Quiescing implies no dmas no PIOs
* either directly from the cpu or from sn0net.
* either directly from the cpu or from sn0net.
* this is not something that can be done easily. So, AVOID updating
* this is not something that can be done easily. So, AVOID updating
* CRBs.
* CRBs.
...
@@ -440,7 +440,7 @@ typedef union io_perf_cnt {
...
@@ -440,7 +440,7 @@ typedef union io_perf_cnt {
/*
/*
* Fields in CRB Register A
* Fields in CRB Register A
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrba_u
{
typedef
union
icrba_u
{
u64
reg_value
;
u64
reg_value
;
struct
{
struct
{
...
@@ -465,7 +465,7 @@ typedef union icrba_u {
...
@@ -465,7 +465,7 @@ typedef union icrba_u {
NI_STATUS_REV_ID register. */
NI_STATUS_REV_ID register. */
typedef
union
h1_icrba_u
{
typedef
union
h1_icrba_u
{
u64
reg_value
;
u64
reg_value
;
struct
{
struct
{
u64
resvd
:
6
,
u64
resvd
:
6
,
unused:
1
,
/* Unused but RW!! */
unused:
1
,
/* Unused but RW!! */
...
@@ -500,16 +500,16 @@ typedef union h1_icrba_u {
...
@@ -500,16 +500,16 @@ typedef union h1_icrba_u {
#define a_valid icrba_fields_s.valid
#define a_valid icrba_fields_s.valid
#define a_iow icrba_fields_s.iow
#define a_iow icrba_fields_s.iow
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define IIO_ICRB_ADDR_SHFT 2
/* Shift to get proper address */
#define IIO_ICRB_ADDR_SHFT 2
/* Shift to get proper address */
/*
/*
* values for "ecode" field
* values for "ecode" field
*/
*/
#define IIO_ICRB_ECODE_DERR 0
/* Directory error due to IIO access */
#define IIO_ICRB_ECODE_DERR 0
/* Directory error due to IIO access */
#define IIO_ICRB_ECODE_PERR 1
/* Poison error on IO access */
#define IIO_ICRB_ECODE_PERR 1
/* Poison error on IO access */
#define IIO_ICRB_ECODE_WERR 2
/* Write error by IIO access
#define IIO_ICRB_ECODE_WERR 2
/* Write error by IIO access
* e.g. WINV to a Read only line.
* e.g. WINV to a Read only line.
*/
*/
#define IIO_ICRB_ECODE_AERR 3
/* Access error caused by IIO access */
#define IIO_ICRB_ECODE_AERR 3
/* Access error caused by IIO access */
...
@@ -523,7 +523,7 @@ typedef union h1_icrba_u {
...
@@ -523,7 +523,7 @@ typedef union h1_icrba_u {
/*
/*
* Fields in CRB Register B
* Fields in CRB Register B
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbb_u
{
typedef
union
icrbb_u
{
u64
reg_value
;
u64
reg_value
;
struct
{
struct
{
...
@@ -537,15 +537,15 @@ typedef union icrbb_u {
...
@@ -537,15 +537,15 @@ typedef union icrbb_u {
* 3: Reserved.
* 3: Reserved.
*/
*/
srcnode:
9
,
/* Source Node ID */
srcnode:
9
,
/* Source Node ID */
srcinit:
2
,
/* Source Initiator:
srcinit:
2
,
/* Source Initiator:
* See below for field values.
* See below for field values.
*/
*/
useold:
1
,
/* Use OLD command for processing */
useold:
1
,
/* Use OLD command for processing */
imsgtype:
2
,
/* Incoming message type
imsgtype:
2
,
/* Incoming message type
* see below for field values
* see below for field values
*/
*/
imsg:
8
,
/* Incoming message */
imsg:
8
,
/* Incoming message */
initator:
3
,
/* Initiator of original request
initator:
3
,
/* Initiator of original request
* See below for field values.
* See below for field values.
*/
*/
reqtype:
5
,
/* Identifies type of request
reqtype:
5
,
/* Identifies type of request
...
@@ -579,18 +579,18 @@ typedef union h1_icrbb_u {
...
@@ -579,18 +579,18 @@ typedef union h1_icrbb_u {
* 3: Reserved.
* 3: Reserved.
*/
*/
srcnode:
9
,
/* Source Node ID */
srcnode:
9
,
/* Source Node ID */
srcinit:
2
,
/* Source Initiator:
srcinit:
2
,
/* Source Initiator:
* See below for field values.
* See below for field values.
*/
*/
useold:
1
,
/* Use OLD command for processing */
useold:
1
,
/* Use OLD command for processing */
imsgtype:
2
,
/* Incoming message type
imsgtype:
2
,
/* Incoming message type
* see below for field values
* see below for field values
*/
*/
imsg:
8
,
/* Incoming message */
imsg:
8
,
/* Incoming message */
initator:
3
,
/* Initiator of original request
initator:
3
,
/* Initiator of original request
* See below for field values.
* See below for field values.
*/
*/
rsvd2:
1
,
rsvd2:
1
,
pcache:
1
,
/* entry belongs to partial cache */
pcache:
1
,
/* entry belongs to partial cache */
reqtype:
5
,
/* Identifies type of request
reqtype:
5
,
/* Identifies type of request
* See below for field values.
* See below for field values.
...
@@ -622,7 +622,7 @@ typedef union h1_icrbb_u {
...
@@ -622,7 +622,7 @@ typedef union h1_icrbb_u {
#define b_imsg icrbb_field_s.imsg
#define b_imsg icrbb_field_s.imsg
#define b_initiator icrbb_field_s.initiator
#define b_initiator icrbb_field_s.initiator
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
/*
* values for field xtsize
* values for field xtsize
...
@@ -676,11 +676,11 @@ typedef union h1_icrbb_u {
...
@@ -676,11 +676,11 @@ typedef union h1_icrbb_u {
#define IIO_ICRB_REQ_WB 16
/* Request is Write back */
#define IIO_ICRB_REQ_WB 16
/* Request is Write back */
#define IIO_ICRB_REQ_DEX 17
/* Retained DEX Cache line */
#define IIO_ICRB_REQ_DEX 17
/* Retained DEX Cache line */
/*
/*
* Fields in CRB Register C
* Fields in CRB Register C
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbc_s
{
typedef
union
icrbc_s
{
u64
reg_value
;
u64
reg_value
;
...
@@ -690,7 +690,7 @@ typedef union icrbc_s {
...
@@ -690,7 +690,7 @@ typedef union icrbc_s {
pricnt:
4
,
/* Priority count sent with Read req */
pricnt:
4
,
/* Priority count sent with Read req */
pripsc:
4
,
/* Priority Pre scalar */
pripsc:
4
,
/* Priority Pre scalar */
bteop:
1
,
/* BTE Operation */
bteop:
1
,
/* BTE Operation */
push_be:
34
,
/* Push address Byte enable
push_be:
34
,
/* Push address Byte enable
* Holds push addr, if CRB is for BTE
* Holds push addr, if CRB is for BTE
* If CRB belongs to Partial cache,
* If CRB belongs to Partial cache,
* this contains byte enables bits
* this contains byte enables bits
...
@@ -712,20 +712,20 @@ typedef union icrbc_s {
...
@@ -712,20 +712,20 @@ typedef union icrbc_s {
#define c_barrop icrbc_field_s.barrop
#define c_barrop icrbc_field_s.barrop
#define c_doresp icrbc_field_s.doresp
#define c_doresp icrbc_field_s.doresp
#define c_gbr icrbc_field_s.gbr
#define c_gbr icrbc_field_s.gbr
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
/*
* Fields in CRB Register D
* Fields in CRB Register D
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbd_s
{
typedef
union
icrbd_s
{
u64
reg_value
;
u64
reg_value
;
struct
{
struct
{
u64
rsvd
:
38
,
u64
rsvd
:
38
,
toutvld:
1
,
/* Timeout in progress for this CRB */
toutvld:
1
,
/* Timeout in progress for this CRB */
ctxtvld:
1
,
/* Context field below is valid */
ctxtvld:
1
,
/* Context field below is valid */
rsvd2:
1
,
rsvd2:
1
,
context:
15
,
/* Bit vector:
context:
15
,
/* Bit vector:
* Has a bit set for each CRB entry
* Has a bit set for each CRB entry
* which needs to be deallocated
* which needs to be deallocated
...
@@ -751,7 +751,7 @@ typedef union hubii_ifdr_u {
...
@@ -751,7 +751,7 @@ typedef union hubii_ifdr_u {
}
hi_ifdr_fields
;
}
hi_ifdr_fields
;
}
hubii_ifdr_t
;
}
hubii_ifdr_t
;
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
/*
* Hardware designed names for the BTE control registers.
* Hardware designed names for the BTE control registers.
...
@@ -762,7 +762,7 @@ typedef union hubii_ifdr_u {
...
@@ -762,7 +762,7 @@ typedef union hubii_ifdr_u {
#define IIO_IBCT_0 0x410018
/* BTE control/terminate 0 */
#define IIO_IBCT_0 0x410018
/* BTE control/terminate 0 */
#define IIO_IBNA_0 0x410020
/* BTE notification address 0 */
#define IIO_IBNA_0 0x410020
/* BTE notification address 0 */
#define IIO_IBNR_0 IIO_IBNA_0
#define IIO_IBNR_0 IIO_IBNA_0
#define IIO_IBIA_0 0x410028
/* BTE interrupt address 0 */
#define IIO_IBIA_0 0x410028
/* BTE interrupt address 0 */
#define IIO_IBLS_1 0x420000
/* BTE length/status 1 */
#define IIO_IBLS_1 0x420000
/* BTE length/status 1 */
#define IIO_IBSA_1 0x420008
/* BTE source address 1 */
#define IIO_IBSA_1 0x420008
/* BTE source address 1 */
...
@@ -770,7 +770,7 @@ typedef union hubii_ifdr_u {
...
@@ -770,7 +770,7 @@ typedef union hubii_ifdr_u {
#define IIO_IBCT_1 0x420018
/* BTE control/terminate 1 */
#define IIO_IBCT_1 0x420018
/* BTE control/terminate 1 */
#define IIO_IBNA_1 0x420020
/* BTE notification address 1 */
#define IIO_IBNA_1 0x420020
/* BTE notification address 1 */
#define IIO_IBNR_1 IIO_IBNA_1
#define IIO_IBNR_1 IIO_IBNA_1
#define IIO_IBIA_1 0x420028
/* BTE interrupt address 1 */
#define IIO_IBIA_1 0x420028
/* BTE interrupt address 1 */
/*
/*
* More miscellaneous registers
* More miscellaneous registers
...
@@ -795,10 +795,10 @@ typedef union hubii_ifdr_u {
...
@@ -795,10 +795,10 @@ typedef union hubii_ifdr_u {
#define IECLR_PRB_0 (1 << 0)
/* clear err bit in PRB_0 reg */
#define IECLR_PRB_0 (1 << 0)
/* clear err bit in PRB_0 reg */
/*
/*
* IO PIO Read Table Entry format
* IO PIO Read Table Entry format
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
iprte_a
{
typedef
union
iprte_a
{
u64
entry
;
u64
entry
;
...
@@ -820,7 +820,7 @@ typedef union iprte_a {
...
@@ -820,7 +820,7 @@ typedef union iprte_a {
#define iprte_init iprte_fields.initiator
#define iprte_init iprte_fields.initiator
#define iprte_addr iprte_fields.addr
#define iprte_addr iprte_fields.addr
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define IPRTE_ADDRSHFT 3
#define IPRTE_ADDRSHFT 3
...
@@ -828,9 +828,9 @@ typedef union iprte_a {
...
@@ -828,9 +828,9 @@ typedef union iprte_a {
* Hub IIO PRB Register format.
* Hub IIO PRB Register format.
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
/*
/*
* Note: Fields bnakctr, anakctr, xtalkctrmode, ovflow fields are
* Note: Fields bnakctr, anakctr, xtalkctrmode, ovflow fields are
* "Status" fields, and should only be used in case of clean up after errors.
* "Status" fields, and should only be used in case of clean up after errors.
*/
*/
...
@@ -860,7 +860,7 @@ typedef union iprb_u {
...
@@ -860,7 +860,7 @@ typedef union iprb_u {
#define iprb_anakctr iprb_fields_s.anakctr
#define iprb_anakctr iprb_fields_s.anakctr
#define iprb_xtalkctr iprb_fields_s.xtalkctr
#define iprb_xtalkctr iprb_fields_s.xtalkctr
#endif
/* _LANGUAGE_C
*/
#endif
/* !__ASSEMBLY__
*/
/*
/*
* values for mode field in iprb_t.
* values for mode field in iprb_t.
...
@@ -875,7 +875,7 @@ typedef union iprb_u {
...
@@ -875,7 +875,7 @@ typedef union iprb_u {
/*
/*
* IO CRB entry C_A to E_A : Partial (cache) CRBS
* IO CRB entry C_A to E_A : Partial (cache) CRBS
*/
*/
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
icrbp_a
{
typedef
union
icrbp_a
{
u64
ip_reg
;
/* the entire register value */
u64
ip_reg
;
/* the entire register value */
struct
{
struct
{
...
@@ -909,7 +909,7 @@ typedef union icrbp_a {
...
@@ -909,7 +909,7 @@ typedef union icrbp_a {
}
ip_fmt
;
}
ip_fmt
;
}
icrbp_a_t
;
}
icrbp_a_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
/*
* A couple of defines to go with the above structure.
* A couple of defines to go with the above structure.
...
@@ -917,7 +917,7 @@ typedef union icrbp_a {
...
@@ -917,7 +917,7 @@ typedef union icrbp_a {
#define ICRBP_A_CERR_SHFT 54
#define ICRBP_A_CERR_SHFT 54
#define ICRBP_A_ERR_MASK 0x3ff
#define ICRBP_A_ERR_MASK 0x3ff
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
hubii_idsr
{
typedef
union
hubii_idsr
{
u64
iin_reg
;
u64
iin_reg
;
struct
{
struct
{
...
@@ -931,9 +931,9 @@ typedef union hubii_idsr {
...
@@ -931,9 +931,9 @@ typedef union hubii_idsr {
level
:
7
;
level
:
7
;
}
iin_fmt
;
}
iin_fmt
;
}
hubii_idsr_t
;
}
hubii_idsr_t
;
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/*
/*
* IO BTE Length/Status (IIO_IBLS) register bit field definitions
* IO BTE Length/Status (IIO_IBLS) register bit field definitions
*/
*/
#define IBLS_BUSY (0x1 << 20)
#define IBLS_BUSY (0x1 << 20)
...
@@ -965,18 +965,18 @@ typedef union hubii_idsr {
...
@@ -965,18 +965,18 @@ typedef union hubii_idsr {
#define HUB_WIDGET_ID_MIN 0x8
#define HUB_WIDGET_ID_MIN 0x8
#define HUB_WIDGET_ID_MAX 0xf
#define HUB_WIDGET_ID_MAX 0xf
#define HUB_WIDGET_PART_NUM 0xc101
#define HUB_WIDGET_PART_NUM 0xc101
#define MAX_HUBS_PER_XBOW 2
#define MAX_HUBS_PER_XBOW 2
/*
/*
* Get a hub's widget id from widget control register
* Get a hub's widget id from widget control register
*/
*/
#define IIO_WCR_WID_GET(nasid) (REMOTE_HUB_L(nasid, III_WCR) & 0xf)
#define IIO_WCR_WID_GET(nasid) (REMOTE_HUB_L(nasid, III_WCR) & 0xf)
#define IIO_WST_ERROR_MASK (UINT64_CAST 1 << 32)
/* Widget status error */
#define IIO_WST_ERROR_MASK (UINT64_CAST 1 << 32)
/* Widget status error */
/*
/*
* Number of credits Hub widget has while sending req/response to
* Number of credits Hub widget has while sending req/response to
* xbow.
* xbow.
* Value of 3 is required by Xbow 1.1
* Value of 3 is required by Xbow 1.1
* We may be able to increase this to 4 with Xbow 1.2.
* We may be able to increase this to 4 with Xbow 1.2.
*/
*/
...
...
include/asm-mips64/sn/sn0/hubmd.h
View file @
d3791f47
...
@@ -228,7 +228,7 @@
...
@@ -228,7 +228,7 @@
#define MSU_SN0_SLOTID_MASK (UINT64_CAST 7)
#define MSU_SN0_SLOTID_MASK (UINT64_CAST 7)
#define MSU_SN00_SLOTID_SHFT 7
#define MSU_SN00_SLOTID_SHFT 7
#define MSU_SN00_SLOTID_MASK (UINT64_CAST 0x80)
#define MSU_SN00_SLOTID_MASK (UINT64_CAST 0x80)
#define MSU_PIMM_PSC_SHFT 4
#define MSU_PIMM_PSC_SHFT 4
#define MSU_PIMM_PSC_MASK (0xf << MSU_PIMM_PSC_SHFT)
#define MSU_PIMM_PSC_MASK (0xf << MSU_PIMM_PSC_SHFT)
...
@@ -424,8 +424,7 @@
...
@@ -424,8 +424,7 @@
* Operations on page migration threshold register
* Operations on page migration threshold register
*/
*/
#if _LANGUAGE_C
#ifndef __ASSEMBLY__
#ifndef _STANDALONE
/*
/*
* LED register macros
* LED register macros
...
@@ -538,8 +537,6 @@
...
@@ -538,8 +537,6 @@
#define MD_SPROT_MIGMD_GET(value) ( \
#define MD_SPROT_MIGMD_GET(value) ( \
((value) & MD_SPROT_MIGMD_MASK) >> MD_SPROT_MIGMD_SHFT)
((value) & MD_SPROT_MIGMD_MASK) >> MD_SPROT_MIGMD_SHFT)
#endif
/* _STANDALONE */
/*
/*
* Format of dir_error, mem_error, protocol_error and misc_error registers
* Format of dir_error, mem_error, protocol_error and misc_error registers
*/
*/
...
@@ -739,7 +736,7 @@ typedef union md_perf_cnt {
...
@@ -739,7 +736,7 @@ typedef union md_perf_cnt {
}
md_perf_cnt_t
;
}
md_perf_cnt_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#define DIR_ERROR_VALID_MASK 0xe000000000000000
#define DIR_ERROR_VALID_MASK 0xe000000000000000
...
...
include/asm-mips64/sn/sn0/hubni.h
View file @
d3791f47
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
#ifndef _ASM_SGI_SN0_HUBNI_H
#ifndef _ASM_SGI_SN0_HUBNI_H
#define _ASM_SGI_SN0_HUBNI_H
#define _ASM_SGI_SN0_HUBNI_H
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
#include <linux/types.h>
#include <linux/types.h>
#endif
#endif
...
@@ -226,7 +226,7 @@
...
@@ -226,7 +226,7 @@
#define NLT_EXIT_PORT_MASK (UINT64_CAST 0xf)
#define NLT_EXIT_PORT_MASK (UINT64_CAST 0xf)
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
typedef
union
hubni_port_error_u
{
typedef
union
hubni_port_error_u
{
u64
nipe_reg_value
;
u64
nipe_reg_value
;
...
@@ -250,6 +250,6 @@ typedef union hubni_port_error_u {
...
@@ -250,6 +250,6 @@ typedef union hubni_port_error_u {
#define NI_LLP_CB_MAX 0xff
#define NI_LLP_CB_MAX 0xff
#define NI_LLP_SN_MAX 0xff
#define NI_LLP_SN_MAX 0xff
#endif
/*
LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
#endif
/* _ASM_SGI_SN0_HUBNI_H */
#endif
/* _ASM_SGI_SN0_HUBNI_H */
include/asm-mips64/sn/sn0/hubpi.h
View file @
d3791f47
...
@@ -136,8 +136,8 @@
...
@@ -136,8 +136,8 @@
#define PI_ERR_INT_PEND 0x000400
/* Error Interrupt Pending */
#define PI_ERR_INT_PEND 0x000400
/* Error Interrupt Pending */
#define PI_ERR_INT_MASK_A 0x000408
/* Error Interrupt mask for CPU A */
#define PI_ERR_INT_MASK_A 0x000408
/* Error Interrupt mask for CPU A */
#define PI_ERR_INT_MASK_B 0x000410
/* Error Interrupt mask for CPU B */
#define PI_ERR_INT_MASK_B 0x000410
/* Error Interrupt mask for CPU B */
#define PI_ERR_STACK_ADDR_A 0x000418
/* Error stack address for CPU A */
#define PI_ERR_STACK_ADDR_A 0x000418
/* Error stack address for CPU A */
#define PI_ERR_STACK_ADDR_B 0x000420
/* Error stack address for CPU B */
#define PI_ERR_STACK_ADDR_B 0x000420
/* Error stack address for CPU B */
#define PI_ERR_STACK_SIZE 0x000428
/* Error Stack Size */
#define PI_ERR_STACK_SIZE 0x000428
/* Error Stack Size */
#define PI_ERR_STATUS0_A 0x000430
/* Error Status 0A */
#define PI_ERR_STATUS0_A 0x000430
/* Error Status 0A */
#define PI_ERR_STATUS0_A_RCLR 0x000438
/* Error Status 0A clear on read */
#define PI_ERR_STATUS0_A_RCLR 0x000438
/* Error Status 0A clear on read */
...
@@ -193,7 +193,7 @@
...
@@ -193,7 +193,7 @@
/*
/*
* The following three macros define all possible error int pends.
* The following three macros define all possible error int pends.
*/
*/
#define PI_FATAL_ERR_CPU_A (PI_ERR_SYSSTATE_TAG_A | \
#define PI_FATAL_ERR_CPU_A (PI_ERR_SYSSTATE_TAG_A | \
...
@@ -306,7 +306,7 @@
...
@@ -306,7 +306,7 @@
#define ERR_STACK_SIZE_BYTES(_sz) \
#define ERR_STACK_SIZE_BYTES(_sz) \
((_sz) ? (PI_MIN_STACK_SIZE << ((_sz) - 1)) : 0)
((_sz) ? (PI_MIN_STACK_SIZE << ((_sz) - 1)) : 0)
#if
def _LANGUAGE_C
#if
ndef __ASSEMBLY__
/*
/*
* format of error stack and error status registers.
* format of error stack and error status registers.
*/
*/
...
@@ -359,7 +359,7 @@ typedef union pi_err_stat1 {
...
@@ -359,7 +359,7 @@ typedef union pi_err_stat1 {
typedef
u64
rtc_time_t
;
typedef
u64
rtc_time_t
;
#endif
/*
_LANGUAGE_C
*/
#endif
/*
!__ASSEMBLY__
*/
/* Bits in PI_SYSAD_ERRCHK_EN */
/* Bits in PI_SYSAD_ERRCHK_EN */
...
...
include/asm-mips64/sn/sn0/ip27.h
View file @
d3791f47
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
#define TLBLO_HWBITSHIFT 0
/* Shift value, for masking */
#define TLBLO_HWBITSHIFT 0
/* Shift value, for masking */
#if
!_LANGUAGE_ASSEMBLY
#if
ndef __ASSEMBLY__
#define CAUSE_BERRINTR IE_IRQ5
#define CAUSE_BERRINTR IE_IRQ5
...
@@ -30,9 +30,9 @@
...
@@ -30,9 +30,9 @@
#define ECCF_PADDR 4
#define ECCF_PADDR 4
#define ECCF_SIZE (5 * sizeof(long))
#define ECCF_SIZE (5 * sizeof(long))
#endif
/* !_
LANGUAGE_ASSEMBLY
*/
#endif
/* !_
_ASSEMBLY__
*/
#if
_LANGUAGE_ASSEMBLY
#if
def __ASSEMBLY__
/*
/*
* KL_GET_CPUNUM (similar to EV_GET_SPNUM for EVEREST platform) reads
* KL_GET_CPUNUM (similar to EV_GET_SPNUM for EVEREST platform) reads
...
@@ -43,7 +43,7 @@
...
@@ -43,7 +43,7 @@
dli proc, LOCAL_HUB(0); \
dli proc, LOCAL_HUB(0); \
ld proc, PI_CPU_NUM(proc)
ld proc, PI_CPU_NUM(proc)
#endif
/* _
LANGUAGE_ASSEMBLY
*/
#endif
/* _
_ASSEMBLY__
*/
/*
/*
* R10000 status register interrupt bit mask usage for IP27.
* R10000 status register interrupt bit mask usage for IP27.
...
...
include/asm-mips64/sn/sn0/sn0_fru.h
View file @
d3791f47
...
@@ -17,11 +17,11 @@
...
@@ -17,11 +17,11 @@
typedef
unsigned
char
confidence_t
;
typedef
unsigned
char
confidence_t
;
typedef
struct
kf_mem_s
{
typedef
struct
kf_mem_s
{
confidence_t
km_confidence
;
/* confidence level that the memory is bad
confidence_t
km_confidence
;
/* confidence level that the memory is bad
* is this necessary ?
* is this necessary ?
*/
*/
confidence_t
km_dimm
[
MAX_DIMMS
];
confidence_t
km_dimm
[
MAX_DIMMS
];
/* confidence level that dimm[i] is bad
/* confidence level that dimm[i] is bad
*I think this is the right number
*I think this is the right number
*/
*/
...
...
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