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
nexedi
linux
Commits
225b563b
Commit
225b563b
authored
Sep 13, 2002
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge nuts.ninka.net:/home/davem/src/BK/zaitcev-2.5
into nuts.ninka.net:/home/davem/src/BK/sparc-2.5
parents
cc8a6820
23340580
Changes
26
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
333 additions
and
462 deletions
+333
-462
arch/sparc/config.in
arch/sparc/config.in
+5
-0
arch/sparc/defconfig
arch/sparc/defconfig
+127
-178
arch/sparc/kernel/Makefile
arch/sparc/kernel/Makefile
+1
-1
arch/sparc/kernel/ebus.c
arch/sparc/kernel/ebus.c
+0
-4
arch/sparc/kernel/entry.S
arch/sparc/kernel/entry.S
+2
-1
arch/sparc/kernel/pcic.c
arch/sparc/kernel/pcic.c
+82
-73
arch/sparc/kernel/process.c
arch/sparc/kernel/process.c
+2
-4
arch/sparc/kernel/setup.c
arch/sparc/kernel/setup.c
+44
-84
arch/sparc/kernel/sparc-stub.c
arch/sparc/kernel/sparc-stub.c
+3
-11
arch/sparc/kernel/tadpole.c
arch/sparc/kernel/tadpole.c
+8
-5
arch/sparc/kernel/tick14.c
arch/sparc/kernel/tick14.c
+5
-7
arch/sparc/kernel/unaligned.c
arch/sparc/kernel/unaligned.c
+9
-0
arch/sparc/mm/srmmu.c
arch/sparc/mm/srmmu.c
+0
-8
arch/sparc/mm/sun4c.c
arch/sparc/mm/sun4c.c
+0
-7
arch/sparc/prom/misc.c
arch/sparc/prom/misc.c
+4
-6
arch/sparc64/kernel/power.c
arch/sparc64/kernel/power.c
+1
-2
arch/sparc64/kernel/process.c
arch/sparc64/kernel/process.c
+0
-1
arch/sparc64/kernel/setup.c
arch/sparc64/kernel/setup.c
+1
-29
arch/sparc64/mm/init.c
arch/sparc64/mm/init.c
+0
-8
arch/sparc64/prom/misc.c
arch/sparc64/prom/misc.c
+1
-1
drivers/serial/sunsu.c
drivers/serial/sunsu.c
+3
-0
drivers/serial/sunzilog.c
drivers/serial/sunzilog.c
+18
-28
include/asm-sparc/hardirq.h
include/asm-sparc/hardirq.h
+1
-1
include/asm-sparc/irq.h
include/asm-sparc/irq.h
+2
-0
include/asm-sparc/kmap_types.h
include/asm-sparc/kmap_types.h
+2
-0
include/asm-sparc/system.h
include/asm-sparc/system.h
+12
-3
No files found.
arch/sparc/config.in
View file @
225b563b
...
@@ -59,6 +59,9 @@ endmenu
...
@@ -59,6 +59,9 @@ endmenu
mainmenu_option next_comment
mainmenu_option next_comment
comment 'Console drivers'
comment 'Console drivers'
bool 'PROM console' CONFIG_PROM_CONSOLE
bool 'PROM console' CONFIG_PROM_CONSOLE
if [ "$CONFIG_PROM_CONSOLE" != "y" ]; then
define_bool CONFIG_DUMMY_CONSOLE y
fi
source drivers/video/Config.in
source drivers/video/Config.in
endmenu
endmenu
...
@@ -214,6 +217,8 @@ if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
...
@@ -214,6 +217,8 @@ if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
fi
fi
endmenu
endmenu
source drivers/input/Config.in
source fs/Config.in
source fs/Config.in
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
...
...
arch/sparc/defconfig
View file @
225b563b
This diff is collapsed.
Click to expand it.
arch/sparc/kernel/Makefile
View file @
225b563b
...
@@ -13,7 +13,7 @@ export-objs := sparc_ksyms.o
...
@@ -13,7 +13,7 @@ export-objs := sparc_ksyms.o
IRQ_OBJS
:=
irq.o sun4m_irq.o sun4c_irq.o sun4d_irq.o
IRQ_OBJS
:=
irq.o sun4m_irq.o sun4c_irq.o sun4d_irq.o
obj-y
:=
entry.o wof.o wuf.o etrap.o rtrap.o traps.o
${IRQ_OBJS}
\
obj-y
:=
entry.o wof.o wuf.o etrap.o rtrap.o traps.o
${IRQ_OBJS}
\
process.o signal.o ioport.o setup.o idprom.o
\
process.o signal.o ioport.o setup.o idprom.o
\
sys_sparc.o sunos_asm.o s
parc-stub.o s
ystbls.o
\
sys_sparc.o sunos_asm.o systbls.o
\
time.o windows.o cpu.o devices.o sclow.o
\
time.o windows.o cpu.o devices.o sclow.o
\
tadpole.o tick14.o ptrace.o sys_solaris.o
\
tadpole.o tick14.o ptrace.o sys_solaris.o
\
unaligned.o muldiv.o pcic.o semaphore.o sparc_ksyms.o
unaligned.o muldiv.o pcic.o semaphore.o sparc_ksyms.o
...
...
arch/sparc/kernel/ebus.c
View file @
225b563b
...
@@ -24,8 +24,6 @@
...
@@ -24,8 +24,6 @@
struct
linux_ebus
*
ebus_chain
=
0
;
struct
linux_ebus
*
ebus_chain
=
0
;
extern
void
rs_init
(
void
);
/* We are together with pcic.c under CONFIG_PCI. */
/* We are together with pcic.c under CONFIG_PCI. */
extern
unsigned
int
pcic_pin_to_irq
(
unsigned
int
,
char
*
name
);
extern
unsigned
int
pcic_pin_to_irq
(
unsigned
int
,
char
*
name
);
...
@@ -361,6 +359,4 @@ void __init ebus_init(void)
...
@@ -361,6 +359,4 @@ void __init ebus_init(void)
ebus
->
next
=
0
;
ebus
->
next
=
0
;
++
num_ebus
;
++
num_ebus
;
}
}
rs_init
();
}
}
arch/sparc/kernel/entry.S
View file @
225b563b
...
@@ -53,6 +53,7 @@ in_trap_handler:
...
@@ -53,6 +53,7 @@ in_trap_handler:
.
text
.
text
.
align
4
.
align
4
#if 0 /* kgdb is dropped from 2.5.33 */
!
This
function
is
called
when
any
SPARC
trap
(
except
window
overflow
or
!
This
function
is
called
when
any
SPARC
trap
(
except
window
overflow
or
!
underflow
)
occurs
.
It
makes
sure
that
the
invalid
register
window
is
still
!
underflow
)
occurs
.
It
makes
sure
that
the
invalid
register
window
is
still
!
available
before
jumping
into
C
code
.
It
will
also
restore
the
world
if
you
!
available
before
jumping
into
C
code
.
It
will
also
restore
the
world
if
you
...
@@ -119,7 +120,7 @@ C_LABEL(trap_low):
...
@@ -119,7 +120,7 @@ C_LABEL(trap_low):
STORE_PT_PRIV
(
sp
,
l0
,
l1
,
l2
)
STORE_PT_PRIV
(
sp
,
l0
,
l1
,
l2
)
RESTORE_ALL
RESTORE_ALL
#endif
#ifdef CONFIG_BLK_DEV_FD
#ifdef CONFIG_BLK_DEV_FD
.
text
.
text
...
...
arch/sparc/kernel/pcic.c
View file @
225b563b
/*
$Id: pcic.c,v 1.23 2002/01/23 14:33:55 davem Exp $
/*
* pcic.c:
Sparc/
PCI controller support
* pcic.c:
MicroSPARC-IIep
PCI controller support
*
*
* Copyright (C) 1998 V. Roganov and G. Raiko
* Copyright (C) 1998 V. Roganov and G. Raiko
*
*
...
@@ -193,48 +193,26 @@ static void pci_do_settimeofday(struct timeval *tv);
...
@@ -193,48 +193,26 @@ static void pci_do_settimeofday(struct timeval *tv);
#define CONFIG_CMD(bus, device_fn, where) (0x80000000 | (((unsigned int)bus) << 16) | (((unsigned int)device_fn) << 8) | (where & ~3))
#define CONFIG_CMD(bus, device_fn, where) (0x80000000 | (((unsigned int)bus) << 16) | (((unsigned int)device_fn) << 8) | (where & ~3))
static
int
pcic_read_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
static
int
pcic_read_config
_dword
(
unsigned
int
busno
,
unsigned
int
devfn
,
int
where
,
int
siz
e
,
u32
*
value
)
int
wher
e
,
u32
*
value
)
{
{
unsigned
int
v
;
unsigned
char
busnum
=
bus
->
number
;
struct
linux_pcic
*
pcic
;
struct
linux_pcic
*
pcic
;
unsigned
long
flags
;
unsigned
long
flags
;
/* unsigned char where; */
switch
(
size
)
{
case
1
:
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
*
value
=
0xff
&
(
v
>>
(
8
*
(
where
&
3
)));
return
PCIBIOS_SUCCESSFUL
;
break
;
case
2
:
if
(
where
&
1
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
*
value
=
0xffff
&
(
v
>>
(
8
*
(
where
&
3
)));
return
PCIBIOS_SUCCESSFUL
;
break
;
}
/* size == 4, i.e. dword */
if
(
where
&
3
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
if
(
busnum
!=
0
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
pcic
=
&
pcic0
;
pcic
=
&
pcic0
;
save_and_cli
(
flags
);
local_irq_save
(
flags
);
#if 0 /* does not fail here */
#if 0 /* does not fail here */
pcic_speculative = 1;
pcic_speculative = 1;
pcic_trapped = 0;
pcic_trapped = 0;
#endif
#endif
writel
(
CONFIG_CMD
(
busn
um
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
writel
(
CONFIG_CMD
(
busn
o
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
#if 0 /* does not fail here */
#if 0 /* does not fail here */
nop();
nop();
if (pcic_trapped) {
if (pcic_trapped) {
restore_flags
(flags);
local_irq_restore
(flags);
*value = ~0;
*value = ~0;
return
PCIBIOS_SUCCESSFUL
;
return
0
;
}
}
#endif
#endif
pcic_speculative
=
2
;
pcic_speculative
=
2
;
...
@@ -243,50 +221,77 @@ static int pcic_read_config(struct pci_bus *bus, unsigned int devfn,
...
@@ -243,50 +221,77 @@ static int pcic_read_config(struct pci_bus *bus, unsigned int devfn,
nop
();
nop
();
if
(
pcic_trapped
)
{
if
(
pcic_trapped
)
{
pcic_speculative
=
0
;
pcic_speculative
=
0
;
restore_flags
(
flags
);
local_irq_restore
(
flags
);
*
value
=
~
0
;
*
value
=
~
0
;
return
PCIBIOS_SUCCESSFUL
;
return
0
;
}
}
pcic_speculative
=
0
;
pcic_speculative
=
0
;
restore_flags
(
flags
);
local_irq_restore
(
flags
);
return
PCIBIOS_SUCCESSFUL
;
return
0
;
}
}
static
int
pcic_
write
_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
static
int
pcic_
read
_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
value
)
int
where
,
int
size
,
u32
*
val
)
{
{
unsigned
int
v
;
unsigned
int
v
;
unsigned
char
busnum
=
bus
->
number
;
struct
linux_pcic
*
pcic
;
unsigned
long
flags
;
if
(
bus
->
number
!=
0
)
return
-
EINVAL
;
switch
(
size
)
{
switch
(
size
)
{
case
1
:
case
1
:
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
v
=
(
v
&
~
(
0xff
<<
(
8
*
(
where
&
3
))))
|
*
val
=
0xff
&
(
v
>>
(
8
*
(
where
&
3
)));
((
0xff
&
(
unsigned
)
value
)
<<
(
8
*
(
where
&
3
)));
return
0
;
return
pcic_write_config
(
bus
,
devfn
,
where
&~
3
,
4
,
v
);
break
;
case
2
:
case
2
:
if
(
where
&
1
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
if
(
where
&
1
)
return
-
EINVAL
;
pcic_read_config
(
bus
,
devfn
,
where
&~
3
,
4
,
&
v
);
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
v
=
(
v
&
~
(
0xffff
<<
(
8
*
(
where
&
3
))))
|
*
val
=
0xffff
&
(
v
>>
(
8
*
(
where
&
3
)));
((
0xffff
&
(
unsigned
)
value
)
<<
(
8
*
(
where
&
3
)));
return
0
;
return
pcic_write_config
(
bus
,
devfn
,
where
&~
3
,
4
,
v
);
case
4
:
break
;
if
(
where
&
3
)
return
-
EINVAL
;
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
val
);
return
0
;
}
}
return
-
EINVAL
;
}
static
int
pcic_write_config_dword
(
unsigned
int
busno
,
unsigned
int
devfn
,
int
where
,
u32
value
)
{
struct
linux_pcic
*
pcic
;
unsigned
long
flags
;
/* size == 4, i.e. dword */
if
(
where
&
3
)
return
PCIBIOS_BAD_REGISTER_NUMBER
;
if
(
busnum
!=
0
)
return
PCIBIOS_DEVICE_NOT_FOUND
;
pcic
=
&
pcic0
;
pcic
=
&
pcic0
;
save_and_cli
(
flags
);
local_irq_save
(
flags
);
writel
(
CONFIG_CMD
(
busn
um
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
writel
(
CONFIG_CMD
(
busn
o
,
devfn
,
where
),
pcic
->
pcic_config_space_addr
);
writel
(
value
,
pcic
->
pcic_config_space_data
+
(
where
&
4
));
writel
(
value
,
pcic
->
pcic_config_space_data
+
(
where
&
4
));
restore_flags
(
flags
);
local_irq_restore
(
flags
);
return
PCIBIOS_SUCCESSFUL
;
return
0
;
}
static
int
pcic_write_config
(
struct
pci_bus
*
bus
,
unsigned
int
devfn
,
int
where
,
int
size
,
u32
val
)
{
unsigned
int
v
;
if
(
bus
->
number
!=
0
)
return
-
EINVAL
;
switch
(
size
)
{
case
1
:
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
v
=
(
v
&
~
(
0xff
<<
(
8
*
(
where
&
3
))))
|
((
0xff
&
val
)
<<
(
8
*
(
where
&
3
)));
return
pcic_write_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
v
);
case
2
:
if
(
where
&
1
)
return
-
EINVAL
;
pcic_read_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
&
v
);
v
=
(
v
&
~
(
0xffff
<<
(
8
*
(
where
&
3
))))
|
((
0xffff
&
val
)
<<
(
8
*
(
where
&
3
)));
return
pcic_write_config_dword
(
bus
->
number
,
devfn
,
where
&~
3
,
v
);
case
4
:
if
(
where
&
3
)
return
-
EINVAL
;
return
pcic_write_config_dword
(
bus
->
number
,
devfn
,
where
,
val
);
}
return
-
EINVAL
;
}
}
static
struct
pci_ops
pcic_ops
=
{
static
struct
pci_ops
pcic_ops
=
{
...
@@ -420,7 +425,7 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
...
@@ -420,7 +425,7 @@ static void __init pcic_pbm_scan_bus(struct linux_pcic *pcic)
/*
/*
* Main entry point from the PCI subsystem.
* Main entry point from the PCI subsystem.
*/
*/
static
int
__init
pci
bios
_init
(
void
)
static
int
__init
pci
c
_init
(
void
)
{
{
struct
linux_pcic
*
pcic
;
struct
linux_pcic
*
pcic
;
...
@@ -623,7 +628,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
...
@@ -623,7 +628,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
{
{
struct
list_head
*
walk
;
struct
list_head
*
walk
;
int
i
,
has_io
,
has_mem
;
int
i
,
has_io
,
has_mem
;
unsigned
shor
t
cmd
;
unsigned
in
t
cmd
;
struct
linux_pcic
*
pcic
;
struct
linux_pcic
*
pcic
;
/* struct linux_pbm_info* pbm = &pcic->pbm; */
/* struct linux_pbm_info* pbm = &pcic->pbm; */
int
node
;
int
node
;
...
@@ -663,18 +668,20 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
...
@@ -663,18 +668,20 @@ void __init pcibios_fixup_bus(struct pci_bus *bus)
}
else
if
(
f
&
IORESOURCE_MEM
)
}
else
if
(
f
&
IORESOURCE_MEM
)
has_mem
=
1
;
has_mem
=
1
;
}
}
pcic_read_config
_word
(
dev
,
PCI_COMMAND
,
&
cmd
);
pcic_read_config
(
dev
->
bus
,
dev
->
devfn
,
PCI_COMMAND
,
2
,
&
cmd
);
if
(
has_io
&&
!
(
cmd
&
PCI_COMMAND_IO
))
{
if
(
has_io
&&
!
(
cmd
&
PCI_COMMAND_IO
))
{
printk
(
"PCIC: Enabling I/O for device %02x:%02x
\n
"
,
printk
(
"PCIC: Enabling I/O for device %02x:%02x
\n
"
,
dev
->
bus
->
number
,
dev
->
devfn
);
dev
->
bus
->
number
,
dev
->
devfn
);
cmd
|=
PCI_COMMAND_IO
;
cmd
|=
PCI_COMMAND_IO
;
pcic_write_config_word
(
dev
,
PCI_COMMAND
,
cmd
);
pcic_write_config
(
dev
->
bus
,
dev
->
devfn
,
PCI_COMMAND
,
2
,
cmd
);
}
}
if
(
has_mem
&&
!
(
cmd
&
PCI_COMMAND_MEMORY
))
{
if
(
has_mem
&&
!
(
cmd
&
PCI_COMMAND_MEMORY
))
{
printk
(
"PCIC: Enabling memory for device %02x:%02x
\n
"
,
printk
(
"PCIC: Enabling memory for device %02x:%02x
\n
"
,
dev
->
bus
->
number
,
dev
->
devfn
);
dev
->
bus
->
number
,
dev
->
devfn
);
cmd
|=
PCI_COMMAND_MEMORY
;
cmd
|=
PCI_COMMAND_MEMORY
;
pcic_write_config_word
(
dev
,
PCI_COMMAND
,
cmd
);
pcic_write_config
(
dev
->
bus
,
dev
->
devfn
,
PCI_COMMAND
,
2
,
cmd
);
}
}
node
=
pdev_to_pnode
(
&
pcic
->
pbm
,
dev
);
node
=
pdev_to_pnode
(
&
pcic
->
pbm
,
dev
);
...
@@ -791,7 +798,7 @@ static void pci_do_gettimeofday(struct timeval *tv)
...
@@ -791,7 +798,7 @@ static void pci_do_gettimeofday(struct timeval *tv)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
save_and_cli
(
flags
);
local_irq_save
(
flags
);
*
tv
=
xtime
;
*
tv
=
xtime
;
tv
->
tv_usec
+=
do_gettimeoffset
();
tv
->
tv_usec
+=
do_gettimeoffset
();
...
@@ -803,7 +810,7 @@ static void pci_do_gettimeofday(struct timeval *tv)
...
@@ -803,7 +810,7 @@ static void pci_do_gettimeofday(struct timeval *tv)
if
((
jiffies
-
wall_jiffies
)
!=
0
)
if
((
jiffies
-
wall_jiffies
)
!=
0
)
tv
->
tv_usec
+=
USECS_PER_JIFFY
;
tv
->
tv_usec
+=
USECS_PER_JIFFY
;
restore_flags
(
flags
);
local_irq_restore
(
flags
);
if
(
tv
->
tv_usec
>=
1000000
)
{
if
(
tv
->
tv_usec
>=
1000000
)
{
tv
->
tv_usec
-=
1000000
;
tv
->
tv_usec
-=
1000000
;
...
@@ -813,7 +820,9 @@ static void pci_do_gettimeofday(struct timeval *tv)
...
@@ -813,7 +820,9 @@ static void pci_do_gettimeofday(struct timeval *tv)
static
void
pci_do_settimeofday
(
struct
timeval
*
tv
)
static
void
pci_do_settimeofday
(
struct
timeval
*
tv
)
{
{
cli
();
unsigned
long
flags
;
local_irq_save
(
flags
);
tv
->
tv_usec
-=
do_gettimeoffset
();
tv
->
tv_usec
-=
do_gettimeoffset
();
if
(
tv
->
tv_usec
<
0
)
{
if
(
tv
->
tv_usec
<
0
)
{
tv
->
tv_usec
+=
1000000
;
tv
->
tv_usec
+=
1000000
;
...
@@ -824,7 +833,7 @@ static void pci_do_settimeofday(struct timeval *tv)
...
@@ -824,7 +833,7 @@ static void pci_do_settimeofday(struct timeval *tv)
time_status
|=
STA_UNSYNC
;
time_status
|=
STA_UNSYNC
;
time_maxerror
=
NTP_PHASE_LIMIT
;
time_maxerror
=
NTP_PHASE_LIMIT
;
time_esterror
=
NTP_PHASE_LIMIT
;
time_esterror
=
NTP_PHASE_LIMIT
;
sti
(
);
local_irq_restore
(
flags
);
}
}
#if 0
#if 0
...
@@ -898,9 +907,9 @@ static void pcic_disable_irq(unsigned int irq_nr)
...
@@ -898,9 +907,9 @@ static void pcic_disable_irq(unsigned int irq_nr)
unsigned
long
mask
,
flags
;
unsigned
long
mask
,
flags
;
mask
=
get_irqmask
(
irq_nr
);
mask
=
get_irqmask
(
irq_nr
);
save_and_cli
(
flags
);
local_irq_save
(
flags
);
writel
(
mask
,
pcic0
.
pcic_regs
+
PCI_SYS_INT_TARGET_MASK_SET
);
writel
(
mask
,
pcic0
.
pcic_regs
+
PCI_SYS_INT_TARGET_MASK_SET
);
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
}
static
void
pcic_enable_irq
(
unsigned
int
irq_nr
)
static
void
pcic_enable_irq
(
unsigned
int
irq_nr
)
...
@@ -908,9 +917,9 @@ static void pcic_enable_irq(unsigned int irq_nr)
...
@@ -908,9 +917,9 @@ static void pcic_enable_irq(unsigned int irq_nr)
unsigned
long
mask
,
flags
;
unsigned
long
mask
,
flags
;
mask
=
get_irqmask
(
irq_nr
);
mask
=
get_irqmask
(
irq_nr
);
save_and_cli
(
flags
);
local_irq_save
(
flags
);
writel
(
mask
,
pcic0
.
pcic_regs
+
PCI_SYS_INT_TARGET_MASK_CLEAR
);
writel
(
mask
,
pcic0
.
pcic_regs
+
PCI_SYS_INT_TARGET_MASK_CLEAR
);
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
}
static
void
pcic_clear_profile_irq
(
int
cpu
)
static
void
pcic_clear_profile_irq
(
int
cpu
)
...
@@ -1021,4 +1030,4 @@ void insl(unsigned long addr, void *dst, unsigned long count) {
...
@@ -1021,4 +1030,4 @@ void insl(unsigned long addr, void *dst, unsigned long count) {
#endif
#endif
subsys_initcall
(
pci
bios
_init
);
subsys_initcall
(
pci
c
_init
);
arch/sparc/kernel/process.c
View file @
225b563b
...
@@ -94,7 +94,7 @@ int cpu_idle(void)
...
@@ -94,7 +94,7 @@ int cpu_idle(void)
extern
unsigned
long
sun4c_kernel_faults
;
extern
unsigned
long
sun4c_kernel_faults
;
extern
void
sun4c_grow_kernel_ring
(
void
);
extern
void
sun4c_grow_kernel_ring
(
void
);
save_and_cli
(
flags
);
local_irq_save
(
flags
);
now
=
jiffies
;
now
=
jiffies
;
count
-=
(
now
-
last_jiffies
);
count
-=
(
now
-
last_jiffies
);
last_jiffies
=
now
;
last_jiffies
=
now
;
...
@@ -110,7 +110,7 @@ int cpu_idle(void)
...
@@ -110,7 +110,7 @@ int cpu_idle(void)
sun4c_grow_kernel_ring
();
sun4c_grow_kernel_ring
();
}
}
}
}
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
}
while
((
!
need_resched
())
&&
pm_idle
)
{
while
((
!
need_resched
())
&&
pm_idle
)
{
...
@@ -144,8 +144,6 @@ int cpu_idle(void)
...
@@ -144,8 +144,6 @@ int cpu_idle(void)
extern
char
reboot_command
[];
extern
char
reboot_command
[];
extern
int
serial_console
;
extern
void
(
*
prom_palette
)(
int
);
extern
void
(
*
prom_palette
)(
int
);
void
machine_halt
(
void
)
void
machine_halt
(
void
)
...
...
arch/sparc/kernel/setup.c
View file @
225b563b
...
@@ -34,7 +34,6 @@
...
@@ -34,7 +34,6 @@
#include <asm/segment.h>
#include <asm/segment.h>
#include <asm/system.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/kgdb.h>
#include <asm/processor.h>
#include <asm/processor.h>
#include <asm/oplib.h>
#include <asm/oplib.h>
#include <asm/page.h>
#include <asm/page.h>
...
@@ -67,8 +66,6 @@ struct screen_info screen_info = {
...
@@ -67,8 +66,6 @@ struct screen_info screen_info = {
*/
*/
extern
unsigned
long
trapbase
;
extern
unsigned
long
trapbase
;
extern
int
serial_console
;
extern
void
breakpoint
(
void
);
void
(
*
prom_palette
)(
int
);
void
(
*
prom_palette
)(
int
);
asmlinkage
void
sys_sync
(
void
);
/* it's really int */
asmlinkage
void
sys_sync
(
void
);
/* it's really int */
...
@@ -105,28 +102,15 @@ void prom_sync_me(void)
...
@@ -105,28 +102,15 @@ void prom_sync_me(void)
return
;
return
;
}
}
extern
void
rs_kgdb_hook
(
int
tty_num
);
/* sparc/serial.c */
unsigned
int
boot_flags
__initdata
=
0
;
unsigned
int
boot_flags
__initdata
=
0
;
#define BOOTME_DEBUG 0x1
#define BOOTME_DEBUG 0x1
#define BOOTME_SINGLE 0x2
#define BOOTME_SINGLE 0x2
#define BOOTME_KGDBA 0x4
#define BOOTME_KGDBB 0x8
#define BOOTME_KGDB 0xc
static
int
console_fb
__initdata
=
0
;
static
int
console_fb
__initdata
=
0
;
/* Exported for mm/init.c:paging_init. */
/* Exported for mm/init.c:paging_init. */
unsigned
long
cmdline_memory_size
__initdata
=
0
;
unsigned
long
cmdline_memory_size
__initdata
=
0
;
void
kernel_enter_debugger
(
void
)
{
if
(
boot_flags
&
BOOTME_KGDB
)
{
printk
(
"KGDB: Entered
\n
"
);
breakpoint
();
}
}
static
void
static
void
prom_console_write
(
struct
console
*
con
,
const
char
*
s
,
unsigned
n
)
prom_console_write
(
struct
console
*
con
,
const
char
*
s
,
unsigned
n
)
{
{
...
@@ -142,11 +126,6 @@ static struct console prom_debug_console = {
...
@@ -142,11 +126,6 @@ static struct console prom_debug_console = {
int
obp_system_intr
(
void
)
int
obp_system_intr
(
void
)
{
{
if
(
boot_flags
&
BOOTME_KGDB
)
{
printk
(
"KGDB: system interrupted
\n
"
);
breakpoint
();
return
1
;
}
if
(
boot_flags
&
BOOTME_DEBUG
)
{
if
(
boot_flags
&
BOOTME_DEBUG
)
{
printk
(
"OBP: system interrupted
\n
"
);
printk
(
"OBP: system interrupted
\n
"
);
prom_halt
();
prom_halt
();
...
@@ -196,24 +175,6 @@ static void __init boot_flags_init(char *commands)
...
@@ -196,24 +175,6 @@ static void __init boot_flags_init(char *commands)
commands
++
;
commands
++
;
while
(
*
commands
&&
*
commands
!=
' '
)
while
(
*
commands
&&
*
commands
!=
' '
)
process_switch
(
*
commands
++
);
process_switch
(
*
commands
++
);
}
else
if
(
strlen
(
commands
)
>=
9
&&
!
strncmp
(
commands
,
"kgdb=tty"
,
8
))
{
switch
(
commands
[
8
])
{
#ifdef CONFIG_SUN_SERIAL
case
'a'
:
boot_flags
|=
BOOTME_KGDBA
;
prom_printf
(
"KGDB: Using serial line /dev/ttya.
\n
"
);
break
;
case
'b'
:
boot_flags
|=
BOOTME_KGDBB
;
prom_printf
(
"KGDB: Using serial line /dev/ttyb.
\n
"
);
break
;
#endif
default:
printk
(
"KGDB: Unknown tty line.
\n
"
);
break
;
}
commands
+=
9
;
}
else
{
}
else
{
if
(
!
strncmp
(
commands
,
"console="
,
8
))
{
if
(
!
strncmp
(
commands
,
"console="
,
8
))
{
commands
+=
8
;
commands
+=
8
;
...
@@ -378,8 +339,7 @@ void __init setup_arch(char **cmdline_p)
...
@@ -378,8 +339,7 @@ void __init setup_arch(char **cmdline_p)
prom_setsync
(
prom_sync_me
);
prom_setsync
(
prom_sync_me
);
{
#ifndef CONFIG_SERIAL_CONSOLE
/* Not CONFIG_SERIAL_SUNCORE: to be gone. */
#if !CONFIG_SUN_SERIAL
serial_console
=
0
;
serial_console
=
0
;
#else
#else
switch
(
console_fb
)
{
switch
(
console_fb
)
{
...
@@ -411,32 +371,16 @@ void __init setup_arch(char **cmdline_p)
...
@@ -411,32 +371,16 @@ void __init setup_arch(char **cmdline_p)
case
3
:
serial_console
=
2
;
break
;
/* Force ttyb as console */
case
3
:
serial_console
=
2
;
break
;
/* Force ttyb as console */
}
}
#endif
#endif
}
if
((
boot_flags
&
BOOTME_KGDBA
))
{
rs_kgdb_hook
(
0
);
}
if
((
boot_flags
&
BOOTME_KGDBB
))
{
rs_kgdb_hook
(
1
);
}
if
((
boot_flags
&
BOOTME_DEBUG
)
&&
(
linux_dbvec
!=
0
)
&&
if
((
boot_flags
&
BOOTME_DEBUG
)
&&
(
linux_dbvec
!=
0
)
&&
((
*
(
short
*
)
linux_dbvec
)
!=
-
1
))
{
((
*
(
short
*
)
linux_dbvec
)
!=
-
1
))
{
printk
(
"Booted under KADB. Syncing trap table.
\n
"
);
printk
(
"Booted under KADB. Syncing trap table.
\n
"
);
(
*
(
linux_dbvec
->
teach_debugger
))();
(
*
(
linux_dbvec
->
teach_debugger
))();
}
}
if
((
boot_flags
&
BOOTME_KGDB
))
{
set_debug_traps
();
prom_printf
(
"Breakpoint!
\n
"
);
breakpoint
();
}
init_mm
.
context
=
(
unsigned
long
)
NO_CONTEXT
;
init_mm
.
context
=
(
unsigned
long
)
NO_CONTEXT
;
init_task
.
thread
.
kregs
=
&
fake_swapper_regs
;
init_task
.
thread
.
kregs
=
&
fake_swapper_regs
;
if
(
serial_console
)
conswitchp
=
NULL
;
paging_init
();
paging_init
();
}
}
...
@@ -514,3 +458,19 @@ struct seq_operations cpuinfo_op = {
...
@@ -514,3 +458,19 @@ struct seq_operations cpuinfo_op = {
.
stop
=
c_stop
,
.
stop
=
c_stop
,
.
show
=
show_cpuinfo
,
.
show
=
show_cpuinfo
,
};
};
extern
int
stop_a_enabled
;
void
sun_do_break
(
void
)
{
if
(
!
stop_a_enabled
)
return
;
printk
(
"
\n
"
);
flush_user_windows
();
prom_cmdline
();
}
int
serial_console
;
int
stop_a_enabled
=
1
;
arch/sparc/kernel/sparc-stub.c
View file @
225b563b
...
@@ -188,22 +188,16 @@ static inline void copy_ttentry(struct tt_entry *src, struct tt_entry *dest)
...
@@ -188,22 +188,16 @@ static inline void copy_ttentry(struct tt_entry *src, struct tt_entry *dest)
/* Initialize the kgdb_savettable so that debugging can commence */
/* Initialize the kgdb_savettable so that debugging can commence */
static
void
eh_init
(
void
)
static
void
eh_init
(
void
)
{
{
int
i
,
flags
;
int
i
;
save_and_cli
(
flags
);
for
(
i
=
0
;
i
<
256
;
i
++
)
for
(
i
=
0
;
i
<
256
;
i
++
)
copy_ttentry
(
&
sparc_ttable
[
i
],
&
kgdb_savettable
[
i
]);
copy_ttentry
(
&
sparc_ttable
[
i
],
&
kgdb_savettable
[
i
]);
restore_flags
(
flags
);
}
}
/* Install an exception handler for kgdb */
/* Install an exception handler for kgdb */
static
void
exceptionHandler
(
int
tnum
,
trapfunc_t
trap_entry
)
static
void
exceptionHandler
(
int
tnum
,
trapfunc_t
trap_entry
)
{
{
unsigned
long
te_addr
=
(
unsigned
long
)
trap_entry
;
unsigned
long
te_addr
=
(
unsigned
long
)
trap_entry
;
int
flags
;
/* We are dorking with a live trap table, all irqs off */
save_and_cli
(
flags
);
/* Make new vector */
/* Make new vector */
sparc_ttable
[
tnum
].
inst_one
=
sparc_ttable
[
tnum
].
inst_one
=
...
@@ -212,8 +206,6 @@ static void exceptionHandler(int tnum, trapfunc_t trap_entry)
...
@@ -212,8 +206,6 @@ static void exceptionHandler(int tnum, trapfunc_t trap_entry)
sparc_ttable
[
tnum
].
inst_two
=
SPARC_RD_PSR_L0
;
sparc_ttable
[
tnum
].
inst_two
=
SPARC_RD_PSR_L0
;
sparc_ttable
[
tnum
].
inst_three
=
SPARC_NOP
;
sparc_ttable
[
tnum
].
inst_three
=
SPARC_NOP
;
sparc_ttable
[
tnum
].
inst_four
=
SPARC_NOP
;
sparc_ttable
[
tnum
].
inst_four
=
SPARC_NOP
;
restore_flags
(
flags
);
}
}
/* Convert ch from a hex digit to an int */
/* Convert ch from a hex digit to an int */
...
@@ -406,7 +398,7 @@ set_debug_traps(void)
...
@@ -406,7 +398,7 @@ set_debug_traps(void)
struct
hard_trap_info
*
ht
;
struct
hard_trap_info
*
ht
;
unsigned
long
flags
;
unsigned
long
flags
;
save_and_cli
(
flags
);
local_irq_save
(
flags
);
#if 0
#if 0
/* Have to sort this out. This cannot be done after initialization. */
/* Have to sort this out. This cannot be done after initialization. */
BTFIXUPSET_CALL(flush_cache_all, flush_cache_all_nop, BTFIXUPCALL_NOP);
BTFIXUPSET_CALL(flush_cache_all, flush_cache_all_nop, BTFIXUPCALL_NOP);
...
@@ -438,7 +430,7 @@ set_debug_traps(void)
...
@@ -438,7 +430,7 @@ set_debug_traps(void)
#endif
#endif
initialized
=
1
;
/* connect! */
initialized
=
1
;
/* connect! */
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
}
/* Convert the SPARC hardware trap type code to a unix signal number. */
/* Convert the SPARC hardware trap type code to a unix signal number. */
...
...
arch/sparc/kernel/tadpole.c
View file @
225b563b
...
@@ -56,6 +56,9 @@ static void clk_slow(void)
...
@@ -56,6 +56,9 @@ static void clk_slow(void)
"g2"
,
"g3"
,
"g4"
,
"g5"
);
"g2"
,
"g3"
,
"g4"
,
"g5"
);
}
}
/*
* Tadpole is guaranteed to be UP, using local_irq_save.
*/
static
void
tsu_clockstop
(
void
)
static
void
tsu_clockstop
(
void
)
{
{
unsigned
int
mcsr
;
unsigned
int
mcsr
;
...
@@ -64,28 +67,28 @@ static void tsu_clockstop(void)
...
@@ -64,28 +67,28 @@ static void tsu_clockstop(void)
if
(
!
clk_ctrl
)
if
(
!
clk_ctrl
)
return
;
return
;
if
(
!
(
clk_state
&
CLOCK_INIT_DONE
))
{
if
(
!
(
clk_state
&
CLOCK_INIT_DONE
))
{
save_and_cli
(
flags
);
local_irq_save
(
flags
);
clk_init
();
clk_init
();
clk_state
|=
CLOCK_INIT_DONE
;
/* all done */
clk_state
|=
CLOCK_INIT_DONE
;
/* all done */
restore_flags
(
flags
);
local_irq_restore
(
flags
);
return
;
return
;
}
}
if
(
!
(
clk_ctrl
[
2
]
&
1
))
if
(
!
(
clk_ctrl
[
2
]
&
1
))
return
;
/* no speed up yet */
return
;
/* no speed up yet */
save_and_cli
(
flags
);
local_irq_save
(
flags
);
/* if SCSI DMA in progress, don't slow clock */
/* if SCSI DMA in progress, don't slow clock */
mcsr
=
ldphys
(
MACIO_SCSI_CSR_ADDR
);
mcsr
=
ldphys
(
MACIO_SCSI_CSR_ADDR
);
if
((
mcsr
&
MACIO_EN_DMA
)
!=
0
)
{
if
((
mcsr
&
MACIO_EN_DMA
)
!=
0
)
{
restore_flags
(
flags
);
local_irq_restore
(
flags
);
return
;
return
;
}
}
/* TODO... the minimum clock setting ought to increase the
/* TODO... the minimum clock setting ought to increase the
* memory refresh interval..
* memory refresh interval..
*/
*/
clk_slow
();
clk_slow
();
restore_flags
(
flags
);
local_irq_restore
(
flags
);
}
}
static
void
swift_clockstop
(
void
)
static
void
swift_clockstop
(
void
)
...
...
arch/sparc/kernel/tick14.c
View file @
225b563b
...
@@ -29,32 +29,30 @@ extern unsigned long lvl14_save[5];
...
@@ -29,32 +29,30 @@ extern unsigned long lvl14_save[5];
static
unsigned
long
*
linux_lvl14
=
NULL
;
static
unsigned
long
*
linux_lvl14
=
NULL
;
static
unsigned
long
obp_lvl14
[
4
];
static
unsigned
long
obp_lvl14
[
4
];
/*
* Call with timer IRQ closed.
* First time we do it with disable_irq, later prom code uses spin_lock_irq().
*/
void
install_linux_ticker
(
void
)
void
install_linux_ticker
(
void
)
{
{
unsigned
long
flags
;
if
(
!
linux_lvl14
)
if
(
!
linux_lvl14
)
return
;
return
;
save_and_cli
(
flags
);
linux_lvl14
[
0
]
=
lvl14_save
[
0
];
linux_lvl14
[
0
]
=
lvl14_save
[
0
];
linux_lvl14
[
1
]
=
lvl14_save
[
1
];
linux_lvl14
[
1
]
=
lvl14_save
[
1
];
linux_lvl14
[
2
]
=
lvl14_save
[
2
];
linux_lvl14
[
2
]
=
lvl14_save
[
2
];
linux_lvl14
[
3
]
=
lvl14_save
[
3
];
linux_lvl14
[
3
]
=
lvl14_save
[
3
];
restore_flags
(
flags
);
}
}
void
install_obp_ticker
(
void
)
void
install_obp_ticker
(
void
)
{
{
unsigned
long
flags
;
if
(
!
linux_lvl14
)
if
(
!
linux_lvl14
)
return
;
return
;
save_and_cli
(
flags
);
linux_lvl14
[
0
]
=
obp_lvl14
[
0
];
linux_lvl14
[
0
]
=
obp_lvl14
[
0
];
linux_lvl14
[
1
]
=
obp_lvl14
[
1
];
linux_lvl14
[
1
]
=
obp_lvl14
[
1
];
linux_lvl14
[
2
]
=
obp_lvl14
[
2
];
linux_lvl14
[
2
]
=
obp_lvl14
[
2
];
linux_lvl14
[
3
]
=
obp_lvl14
[
3
];
linux_lvl14
[
3
]
=
obp_lvl14
[
3
];
restore_flags
(
flags
);
}
}
void
claim_ticker14
(
void
(
*
handler
)(
int
,
void
*
,
struct
pt_regs
*
),
void
claim_ticker14
(
void
(
*
handler
)(
int
,
void
*
,
struct
pt_regs
*
),
...
...
arch/sparc/kernel/unaligned.c
View file @
225b563b
...
@@ -506,9 +506,18 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn)
...
@@ -506,9 +506,18 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn)
break
;
break
;
case
both
:
case
both
:
#if 0 /* unsupported */
do_atomic(fetch_reg_addr(((insn>>25)&0x1f), regs),
do_atomic(fetch_reg_addr(((insn>>25)&0x1f), regs),
(unsigned long *) addr,
(unsigned long *) addr,
user_unaligned_trap_fault);
user_unaligned_trap_fault);
#else
/*
* This was supported in 2.4. However, we question
* the value of SWAP instruction across word boundaries.
*/
printk
(
"Unaligned SWAP unsupported.
\n
"
);
goto
kill_user
;
#endif
break
;
break
;
default:
default:
...
...
arch/sparc/mm/srmmu.c
View file @
225b563b
...
@@ -1212,7 +1212,6 @@ extern int linux_num_cpus;
...
@@ -1212,7 +1212,6 @@ extern int linux_num_cpus;
void
(
*
poke_srmmu
)(
void
)
__initdata
=
NULL
;
void
(
*
poke_srmmu
)(
void
)
__initdata
=
NULL
;
extern
unsigned
long
bootmem_init
(
unsigned
long
*
pages_avail
);
extern
unsigned
long
bootmem_init
(
unsigned
long
*
pages_avail
);
extern
void
sun_serial_setup
(
void
);
void
__init
srmmu_paging_init
(
void
)
void
__init
srmmu_paging_init
(
void
)
{
{
...
@@ -1281,13 +1280,6 @@ void __init srmmu_paging_init(void)
...
@@ -1281,13 +1280,6 @@ void __init srmmu_paging_init(void)
flush_cache_all
();
flush_cache_all
();
flush_tlb_all
();
flush_tlb_all
();
/*
* This does not logically belong here, but we need to
* call it at the moment we are able to use the bootmem
* allocator.
*/
sun_serial_setup
();
sparc_context_init
(
num_contexts
);
sparc_context_init
(
num_contexts
);
kmap_init
();
kmap_init
();
...
...
arch/sparc/mm/sun4c.c
View file @
225b563b
...
@@ -2001,7 +2001,6 @@ extern void sparc_context_init(int);
...
@@ -2001,7 +2001,6 @@ extern void sparc_context_init(int);
extern
unsigned
long
end
;
extern
unsigned
long
end
;
extern
unsigned
long
bootmem_init
(
unsigned
long
*
pages_avail
);
extern
unsigned
long
bootmem_init
(
unsigned
long
*
pages_avail
);
extern
unsigned
long
last_valid_pfn
;
extern
unsigned
long
last_valid_pfn
;
extern
void
sun_serial_setup
(
void
);
void
__init
sun4c_paging_init
(
void
)
void
__init
sun4c_paging_init
(
void
)
{
{
...
@@ -2018,12 +2017,6 @@ void __init sun4c_paging_init(void)
...
@@ -2018,12 +2017,6 @@ void __init sun4c_paging_init(void)
last_valid_pfn
=
bootmem_init
(
&
pages_avail
);
last_valid_pfn
=
bootmem_init
(
&
pages_avail
);
end_pfn
=
last_valid_pfn
;
end_pfn
=
last_valid_pfn
;
/* This does not logically belong here, but we need to
* call it at the moment we are able to use the bootmem
* allocator.
*/
sun_serial_setup
();
sun4c_probe_mmu
();
sun4c_probe_mmu
();
invalid_segment
=
(
num_segmaps
-
1
);
invalid_segment
=
(
num_segmaps
-
1
);
sun4c_init_mmu_entry_pool
();
sun4c_init_mmu_entry_pool
();
...
...
arch/sparc/prom/misc.c
View file @
225b563b
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
#include <asm/openprom.h>
#include <asm/openprom.h>
#include <asm/oplib.h>
#include <asm/oplib.h>
#include <asm/auxio.h>
#include <asm/auxio.h>
#include <asm/system.h>
extern
void
restore_current
(
void
);
extern
void
restore_current
(
void
);
...
@@ -47,7 +48,6 @@ prom_feval(char *fstring)
...
@@ -47,7 +48,6 @@ prom_feval(char *fstring)
/* We want to do this more nicely some day. */
/* We want to do this more nicely some day. */
extern
void
(
*
prom_palette
)(
int
);
extern
void
(
*
prom_palette
)(
int
);
extern
int
serial_console
;
/* Drop into the prom, with the chance to continue with the 'go'
/* Drop into the prom, with the chance to continue with the 'go'
* prom command.
* prom command.
...
@@ -55,20 +55,18 @@ extern int serial_console;
...
@@ -55,20 +55,18 @@ extern int serial_console;
void
void
prom_cmdline
(
void
)
prom_cmdline
(
void
)
{
{
extern
void
kernel_enter_debugger
(
void
);
extern
void
install_obp_ticker
(
void
);
extern
void
install_obp_ticker
(
void
);
extern
void
install_linux_ticker
(
void
);
extern
void
install_linux_ticker
(
void
);
unsigned
long
flags
;
unsigned
long
flags
;
kernel_enter_debugger
();
if
(
!
serial_console
&&
prom_palette
)
if
(
!
serial_console
&&
prom_palette
)
prom_palette
(
1
);
prom_palette
(
1
);
install_obp_ticker
();
spin_lock_irqsave
(
&
prom_lock
,
flags
);
spin_lock_irqsave
(
&
prom_lock
,
flags
);
install_obp_ticker
();
(
*
(
romvec
->
pv_abort
))();
(
*
(
romvec
->
pv_abort
))();
restore_current
();
restore_current
();
spin_unlock_irqrestore
(
&
prom_lock
,
flags
);
install_linux_ticker
();
install_linux_ticker
();
spin_unlock_irqrestore
(
&
prom_lock
,
flags
);
#ifdef CONFIG_SUN_AUXIO
#ifdef CONFIG_SUN_AUXIO
TURN_ON_LED
;
TURN_ON_LED
;
#endif
#endif
...
...
arch/sparc64/kernel/power.c
View file @
225b563b
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
#include <linux/signal.h>
#include <linux/signal.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <asm/system.h>
#include <asm/ebus.h>
#include <asm/ebus.h>
#define __KERNEL_SYSCALLS__
#define __KERNEL_SYSCALLS__
...
@@ -37,8 +38,6 @@ extern void machine_halt(void);
...
@@ -37,8 +38,6 @@ extern void machine_halt(void);
extern
void
machine_alt_power_off
(
void
);
extern
void
machine_alt_power_off
(
void
);
static
void
(
*
poweroff_method
)(
void
)
=
machine_alt_power_off
;
static
void
(
*
poweroff_method
)(
void
)
=
machine_alt_power_off
;
extern
int
serial_console
;
void
machine_power_off
(
void
)
void
machine_power_off
(
void
)
{
{
if
(
!
serial_console
)
{
if
(
!
serial_console
)
{
...
...
arch/sparc64/kernel/process.c
View file @
225b563b
...
@@ -110,7 +110,6 @@ int cpu_idle(void)
...
@@ -110,7 +110,6 @@ int cpu_idle(void)
extern
char
reboot_command
[];
extern
char
reboot_command
[];
extern
void
(
*
prom_palette
)(
int
);
extern
void
(
*
prom_palette
)(
int
);
extern
int
serial_console
;
extern
void
(
*
prom_keyboard
)(
void
);
extern
void
(
*
prom_keyboard
)(
void
);
void
machine_halt
(
void
)
void
machine_halt
(
void
)
...
...
arch/sparc64/kernel/setup.c
View file @
225b563b
...
@@ -314,12 +314,9 @@ int prom_callback(long *args)
...
@@ -314,12 +314,9 @@ int prom_callback(long *args)
return
0
;
return
0
;
}
}
extern
void
rs_kgdb_hook
(
int
tty_num
);
/* sparc/serial.c */
unsigned
int
boot_flags
=
0
;
unsigned
int
boot_flags
=
0
;
#define BOOTME_DEBUG 0x1
#define BOOTME_DEBUG 0x1
#define BOOTME_SINGLE 0x2
#define BOOTME_SINGLE 0x2
#define BOOTME_KGDB 0x4
static
int
console_fb
__initdata
=
0
;
static
int
console_fb
__initdata
=
0
;
...
@@ -389,26 +386,6 @@ static void __init boot_flags_init(char *commands)
...
@@ -389,26 +386,6 @@ static void __init boot_flags_init(char *commands)
commands
++
;
commands
++
;
while
(
*
commands
&&
*
commands
!=
' '
)
while
(
*
commands
&&
*
commands
!=
' '
)
process_switch
(
*
commands
++
);
process_switch
(
*
commands
++
);
}
else
if
(
strlen
(
commands
)
>=
9
&&
!
strncmp
(
commands
,
"kgdb=tty"
,
8
))
{
boot_flags
|=
BOOTME_KGDB
;
switch
(
commands
[
8
])
{
#ifdef CONFIG_SUN_SERIAL
case
'a'
:
rs_kgdb_hook
(
0
);
prom_printf
(
"KGDB: Using serial line /dev/ttya.
\n
"
);
break
;
case
'b'
:
rs_kgdb_hook
(
1
);
prom_printf
(
"KGDB: Using serial line /dev/ttyb.
\n
"
);
break
;
#endif
default:
printk
(
"KGDB: Unknown tty line.
\n
"
);
boot_flags
&=
~
BOOTME_KGDB
;
break
;
}
commands
+=
9
;
}
else
{
}
else
{
if
(
!
strncmp
(
commands
,
"console="
,
8
))
{
if
(
!
strncmp
(
commands
,
"console="
,
8
))
{
commands
+=
8
;
commands
+=
8
;
...
@@ -484,7 +461,6 @@ extern void paging_init(void);
...
@@ -484,7 +461,6 @@ extern void paging_init(void);
void
__init
setup_arch
(
char
**
cmdline_p
)
void
__init
setup_arch
(
char
**
cmdline_p
)
{
{
extern
int
serial_console
;
/* in console.c, of course */
unsigned
long
highest_paddr
;
unsigned
long
highest_paddr
;
int
i
;
int
i
;
...
@@ -568,7 +544,6 @@ void __init setup_arch(char **cmdline_p)
...
@@ -568,7 +544,6 @@ void __init setup_arch(char **cmdline_p)
}
}
#endif
#endif
#ifdef CONFIG_SUN_SERIAL
switch
(
console_fb
)
{
switch
(
console_fb
)
{
case
0
:
/* Let's get our io devices from prom */
case
0
:
/* Let's get our io devices from prom */
{
{
...
@@ -597,10 +572,7 @@ void __init setup_arch(char **cmdline_p)
...
@@ -597,10 +572,7 @@ void __init setup_arch(char **cmdline_p)
case
3
:
/* Force ttyb as console */
case
3
:
/* Force ttyb as console */
serial_console
=
2
;
serial_console
=
2
;
break
;
break
;
}
};
#else
serial_console
=
0
;
#endif
if
(
serial_console
)
if
(
serial_console
)
conswitchp
=
NULL
;
conswitchp
=
NULL
;
...
...
arch/sparc64/mm/init.c
View file @
225b563b
...
@@ -1515,14 +1515,6 @@ void __init paging_init(void)
...
@@ -1515,14 +1515,6 @@ void __init paging_init(void)
pages_avail
=
0
;
pages_avail
=
0
;
last_valid_pfn
=
end_pfn
=
bootmem_init
(
&
pages_avail
);
last_valid_pfn
=
end_pfn
=
bootmem_init
(
&
pages_avail
);
#ifdef CONFIG_SUN_SERIAL
/* This does not logically belong here, but we need to
* call it at the moment we are able to use the bootmem
* allocator.
*/
sun_serial_setup
();
#endif
/* Inherit non-locked OBP mappings. */
/* Inherit non-locked OBP mappings. */
inherit_prom_mappings
();
inherit_prom_mappings
();
...
...
arch/sparc64/prom/misc.c
View file @
225b563b
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
#include <linux/delay.h>
#include <linux/delay.h>
#include <asm/openprom.h>
#include <asm/openprom.h>
#include <asm/oplib.h>
#include <asm/oplib.h>
#include <asm/system.h>
/* Reset and reboot the machine with the command 'bcommand'. */
/* Reset and reboot the machine with the command 'bcommand'. */
void
prom_reboot
(
char
*
bcommand
)
void
prom_reboot
(
char
*
bcommand
)
...
@@ -33,7 +34,6 @@ void prom_feval(char *fstring)
...
@@ -33,7 +34,6 @@ void prom_feval(char *fstring)
/* We want to do this more nicely some day. */
/* We want to do this more nicely some day. */
extern
void
(
*
prom_palette
)(
int
);
extern
void
(
*
prom_palette
)(
int
);
extern
int
serial_console
;
#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
extern
void
smp_capture
(
void
);
extern
void
smp_capture
(
void
);
...
...
drivers/serial/sunsu.c
View file @
225b563b
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#include <linux/serio.h>
#include <linux/serio.h>
#endif
#endif
#include <linux/init.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
...
@@ -1019,6 +1020,8 @@ static void sunsu_autoconfig(struct uart_sunsu_port *up)
...
@@ -1019,6 +1020,8 @@ static void sunsu_autoconfig(struct uart_sunsu_port *up)
if
(
!
up
->
port_node
||
!
up
->
su_type
)
if
(
!
up
->
port_node
||
!
up
->
su_type
)
return
;
return
;
up
->
port
.
iotype
=
SERIAL_IO_MEM
;
/*
/*
* First we look for Ebus-bases su's
* First we look for Ebus-bases su's
*/
*/
...
...
drivers/serial/sunzilog.c
View file @
225b563b
...
@@ -382,13 +382,6 @@ static void sunzilog_receive_chars(struct uart_sunzilog_port *up,
...
@@ -382,13 +382,6 @@ static void sunzilog_receive_chars(struct uart_sunzilog_port *up,
sun_do_break
();
sun_do_break
();
return
;
return
;
}
}
#ifndef CONFIG_SPARC64
/* Look for kgdb 'stop' character. */
if
(
ZS_IS_KGDB
(
up
)
&&
(
ch
==
'\003'
))
{
breakpoint
();
return
;
}
#endif
/* A real serial line, record the character and status. */
/* A real serial line, record the character and status. */
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
char_buf_ptr
=
ch
;
...
@@ -1152,11 +1145,11 @@ static struct zilog_layout * __init get_zs_sun4u(int chip)
...
@@ -1152,11 +1145,11 @@ static struct zilog_layout * __init get_zs_sun4u(int chip)
static
struct
zilog_layout
*
__init
get_zs_sun4cmd
(
int
chip
)
static
struct
zilog_layout
*
__init
get_zs_sun4cmd
(
int
chip
)
{
{
struct
linux_prom_irqs
irq_info
[
2
];
struct
linux_prom_irqs
irq_info
[
2
];
unsigned
long
mapped_addr
;
unsigned
long
mapped_addr
=
0
;
int
zsnode
,
chipid
,
cpunode
;
int
zsnode
,
chipid
,
cpunode
,
bbnode
;
if
(
sparc_cpu_model
==
sun4d
)
{
if
(
sparc_cpu_model
==
sun4d
)
{
int
bbnode
,
walk
,
no
;
int
walk
,
no
;
zsnode
=
0
;
zsnode
=
0
;
bbnode
=
0
;
bbnode
=
0
;
...
@@ -1249,7 +1242,7 @@ static struct zilog_layout * __init get_zs_sun4cmd(int chip)
...
@@ -1249,7 +1242,7 @@ static struct zilog_layout * __init get_zs_sun4cmd(int chip)
}
else
if
(
zilog_irq
!=
irq_info
[
0
].
pri
)
{
}
else
if
(
zilog_irq
!=
irq_info
[
0
].
pri
)
{
prom_printf
(
"SunZilog: Inconsistent IRQ layout for Zilog %d.
\n
"
,
prom_printf
(
"SunZilog: Inconsistent IRQ layout for Zilog %d.
\n
"
,
chip
);
chip
);
prom
t
_halt
();
prom_halt
();
}
}
break
;
break
;
}
}
...
@@ -1290,7 +1283,7 @@ static struct zilog_layout * __init get_zs(int chip)
...
@@ -1290,7 +1283,7 @@ static struct zilog_layout * __init get_zs(int chip)
zilog_irq
=
12
;
zilog_irq
=
12
;
res
.
end
=
(
res
.
start
+
(
8
-
1
));
res
.
end
=
(
res
.
start
+
(
8
-
1
));
res
.
flags
=
IORESOURCE_IO
;
res
.
flags
=
IORESOURCE_IO
;
return
sbus_ioremap
(
&
res
,
0
,
8
,
"SunZilog"
);
return
(
struct
zilog_layout
*
)
sbus_ioremap
(
&
res
,
0
,
8
,
"SunZilog"
);
}
}
return
get_zs_sun4cmd
(
chip
);
return
get_zs_sun4cmd
(
chip
);
...
@@ -1649,13 +1642,10 @@ static int __init sunzilog_init(void)
...
@@ -1649,13 +1642,10 @@ static int __init sunzilog_init(void)
/* Sun4 Zilog setup is hard coded, no probing to do. */
/* Sun4 Zilog setup is hard coded, no probing to do. */
if
(
sparc_cpu_model
==
sun4
)
{
if
(
sparc_cpu_model
==
sun4
)
{
NUM_SUNZILOG
=
2
;
NUM_SUNZILOG
=
2
;
goto
no_probe
;
}
else
if
(
sparc_cpu_model
==
sun4d
)
{
}
node
=
prom_getchild
(
prom_root_node
);
if
(
sparc_cpu_model
==
sun4d
)
{
int
bbnode
;
int
bbnode
;
node
=
prom_getchild
(
prom_root_node
);
NUM_SUNZILOG
=
0
;
NUM_SUNZILOG
=
0
;
while
(
node
&&
while
(
node
&&
(
node
=
prom_searchsiblings
(
node
,
"cpu-unit"
)))
{
(
node
=
prom_searchsiblings
(
node
,
"cpu-unit"
)))
{
...
@@ -1664,7 +1654,6 @@ static int __init sunzilog_init(void)
...
@@ -1664,7 +1654,6 @@ static int __init sunzilog_init(void)
NUM_SUNZILOG
+=
2
;
NUM_SUNZILOG
+=
2
;
node
=
prom_getsibling
(
node
);
node
=
prom_getsibling
(
node
);
}
}
goto
no_probe
;
}
else
if
(
sparc_cpu_model
==
sun4u
)
{
}
else
if
(
sparc_cpu_model
==
sun4u
)
{
int
central_node
;
int
central_node
;
...
@@ -1675,26 +1664,27 @@ static int __init sunzilog_init(void)
...
@@ -1675,26 +1664,27 @@ static int __init sunzilog_init(void)
if
(
central_node
!=
0
&&
central_node
!=
-
1
)
if
(
central_node
!=
0
&&
central_node
!=
-
1
)
node
=
prom_searchsiblings
(
prom_getchild
(
central_node
),
"fhc"
);
node
=
prom_searchsiblings
(
prom_getchild
(
central_node
),
"fhc"
);
else
else
node
=
prom_searchsiblings
(
node
,
"sbus"
);
node
=
prom_searchsiblings
(
prom_getchild
(
prom_root_node
)
,
"sbus"
);
if
(
node
!=
0
&&
node
!=
-
1
)
if
(
node
!=
0
&&
node
!=
-
1
)
node
=
prom_getchild
(
node
);
node
=
prom_getchild
(
node
);
if
(
node
==
0
||
node
==
-
1
)
if
(
node
==
0
||
node
==
-
1
)
return
-
ENODEV
;
return
-
ENODEV
;
node
=
prom_searchsiblings
(
node
,
"zs"
);
if
(
!
node
)
return
-
ENODEV
;
NUM_SUNZILOG
=
2
;
}
else
{
}
else
{
node
=
prom_getchild
(
prom_root_node
);
node
=
prom_searchsiblings
(
node
,
"obio"
);
node
=
prom_searchsiblings
(
node
,
"obio"
);
if
(
node
)
if
(
node
)
node
=
prom_getchild
(
node
);
node
=
prom_getchild
(
node
);
NUM_SUNZILOG
=
2
;
goto
no_probe
;
}
node
=
prom_searchsiblings
(
node
,
"zs"
);
if
(
!
node
)
if
(
!
node
)
return
-
ENODEV
;
return
-
ENODEV
;
NUM_SUNZILOG
=
2
;
NUM_SUNZILOG
=
2
;
}
no_probe:
sunzilog_alloc_tables
();
sunzilog_alloc_tables
();
...
...
include/asm-sparc/hardirq.h
View file @
225b563b
...
@@ -121,7 +121,7 @@ do { \
...
@@ -121,7 +121,7 @@ do { \
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
#define synchronize_irq() barrier()
#define synchronize_irq(
irq
) barrier()
#else
/* (CONFIG_SMP) */
#else
/* (CONFIG_SMP) */
...
...
include/asm-sparc/irq.h
View file @
225b563b
...
@@ -21,6 +21,8 @@ BTFIXUPDEF_CALL(char *, __irq_itoa, unsigned int)
...
@@ -21,6 +21,8 @@ BTFIXUPDEF_CALL(char *, __irq_itoa, unsigned int)
#define NR_IRQS 15
#define NR_IRQS 15
#define irq_cannonicalize(irq) (irq)
/* Dave Redman (djhr@tadpole.co.uk)
/* Dave Redman (djhr@tadpole.co.uk)
* changed these to function pointers.. it saves cycles and will allow
* changed these to function pointers.. it saves cycles and will allow
* the irq dependencies to be split into different files at a later date
* the irq dependencies to be split into different files at a later date
...
...
include/asm-sparc/kmap_types.h
View file @
225b563b
...
@@ -11,6 +11,8 @@ enum km_type {
...
@@ -11,6 +11,8 @@ enum km_type {
KM_BIO_DST_IRQ
,
KM_BIO_DST_IRQ
,
KM_PTE0
,
KM_PTE0
,
KM_PTE1
,
KM_PTE1
,
KM_IRQ0
,
KM_IRQ1
,
KM_TYPE_NR
KM_TYPE_NR
};
};
...
...
include/asm-sparc/system.h
View file @
225b563b
...
@@ -56,6 +56,17 @@ extern unsigned long empty_zero_page;
...
@@ -56,6 +56,17 @@ extern unsigned long empty_zero_page;
extern
struct
linux_romvec
*
romvec
;
extern
struct
linux_romvec
*
romvec
;
#define halt() romvec->pv_halt()
#define halt() romvec->pv_halt()
extern
void
sun_do_break
(
void
);
extern
int
serial_console
;
extern
int
stop_a_enabled
;
static
__inline__
int
con_is_present
(
void
)
{
return
serial_console
?
0
:
1
;
}
extern
struct
pt_regs
*
kbd_pt_regs
;
/* When a context switch happens we must flush all user windows so that
/* When a context switch happens we must flush all user windows so that
* the windows of the current process are flushed onto its stack. This
* the windows of the current process are flushed onto its stack. This
* way the windows are all clean for the next process and the stack
* way the windows are all clean for the next process and the stack
...
@@ -113,6 +124,7 @@ extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
...
@@ -113,6 +124,7 @@ extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
"restore; restore; restore; restore; restore; restore; restore"); \
"restore; restore; restore; restore; restore; restore; restore"); \
} while(0)
} while(0)
#define finish_arch_switch(rq, next) do{ }while(0)
#define finish_arch_switch(rq, next) do{ }while(0)
#define task_running(rq, p) ((rq)->curr == (p))
/* Much care has gone into this code, do not touch it.
/* Much care has gone into this code, do not touch it.
*
*
...
@@ -282,9 +294,6 @@ extern void __global_restore_flags(unsigned long flags);
...
@@ -282,9 +294,6 @@ extern void __global_restore_flags(unsigned long flags);
#define cli() local_irq_disable()
#define cli() local_irq_disable()
#define sti() local_irq_enable()
#define sti() local_irq_enable()
#define save_flags(x) local_save_flags(x)
#define restore_flags(x) local_irq_restore(x)
#define save_and_cli(x) local_irq_save(x)
#endif
#endif
...
...
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