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
6a55e5aa
Commit
6a55e5aa
authored
Feb 10, 2003
by
David Mosberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge tiger.hpl.hp.com:/data1/bk/vanilla/linux-2.5
into tiger.hpl.hp.com:/data1/bk/lia64/to-linus-2.5
parents
498b9cb8
15a0c0ef
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
362 additions
and
386 deletions
+362
-386
arch/ia64/kernel/entry.S
arch/ia64/kernel/entry.S
+8
-6
arch/ia64/kernel/gate.S
arch/ia64/kernel/gate.S
+9
-16
arch/ia64/kernel/sigframe.h
arch/ia64/kernel/sigframe.h
+1
-1
arch/ia64/kernel/signal.c
arch/ia64/kernel/signal.c
+14
-2
arch/ia64/tools/print_offsets.c
arch/ia64/tools/print_offsets.c
+1
-1
include/asm-ia64/sal.h
include/asm-ia64/sal.h
+329
-360
No files found.
arch/ia64/kernel/entry.S
View file @
6a55e5aa
...
@@ -701,7 +701,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
...
@@ -701,7 +701,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
*
NOTE
:
alloc
,
loadrs
,
and
cover
can
't be predicated.
*
NOTE
:
alloc
,
loadrs
,
and
cover
can
't be predicated.
*/
*/
(
pNonSys
)
br.cond.dpnt
dont_preserve_current_frame
(
pNonSys
)
br.cond.dpnt
dont_preserve_current_frame
cover
//
add
current
frame
into
dirty
partition
cover
//
add
current
frame
into
dirty
partition
and
set
cr
.
ifs
;;
;;
mov
r19
=
ar
.
bsp
//
get
new
backing
store
pointer
mov
r19
=
ar
.
bsp
//
get
new
backing
store
pointer
sub
r16
=
r16
,
r18
//
krbs
=
old
bsp
-
size
of
dirty
partition
sub
r16
=
r16
,
r18
//
krbs
=
old
bsp
-
size
of
dirty
partition
...
@@ -727,7 +727,7 @@ dont_preserve_current_frame:
...
@@ -727,7 +727,7 @@ dont_preserve_current_frame:
# define Nregs 14
# define Nregs 14
#endif
#endif
alloc
loc0
=
ar
.
pfs
,
2
,
Nregs
-
2
,
2
,
0
alloc
loc0
=
ar
.
pfs
,
2
,
Nregs
-
2
,
2
,
0
shr.u
loc1
=
r18
,
9
//
RNaTslots
<=
dirtySize
/
(
64
*
8
)
+
1
shr.u
loc1
=
r18
,
9
//
RNaTslots
<=
floor
(
dirtySize
/
(
64
*
8
))
sub
r17
=
r17
,
r18
//
r17
=
(
physStackedSize
+
8
)
-
dirtySize
sub
r17
=
r17
,
r18
//
r17
=
(
physStackedSize
+
8
)
-
dirtySize
;;
;;
mov
ar
.
rsc
=
r19
//
load
ar
.
rsc
to
be
used
for
"loadrs"
mov
ar
.
rsc
=
r19
//
load
ar
.
rsc
to
be
used
for
"loadrs"
...
@@ -774,13 +774,13 @@ rse_clear_invalid:
...
@@ -774,13 +774,13 @@ rse_clear_invalid:
;;
;;
mov
loc3
=
0
mov
loc3
=
0
mov
loc4
=
0
mov
loc4
=
0
mov
loc9
=
0
mov
loc5
=
0
mov
loc5
=
0
mov
loc6
=
0
mov
loc6
=
0
mov
loc7
=
0
(
pRecurse
)
br.call.sptk.many
b6
=
rse_clear_invalid
(
pRecurse
)
br.call.sptk.many
b6
=
rse_clear_invalid
;;
;;
mov
loc7
=
0
mov
loc8
=
0
mov
loc8
=
0
mov
loc9
=
0
cmp.ne
pReturn
,
p0
=
r0
,
in1
//
if
recursion
count
!=
0
,
we
need
to
do
a
br
.
ret
cmp.ne
pReturn
,
p0
=
r0
,
in1
//
if
recursion
count
!=
0
,
we
need
to
do
a
br
.
ret
mov
loc10
=
0
mov
loc10
=
0
mov
loc11
=
0
mov
loc11
=
0
...
@@ -904,13 +904,14 @@ ENTRY(notify_resume_user)
...
@@ -904,13 +904,14 @@ ENTRY(notify_resume_user)
mov
r9
=
ar
.
unat
mov
r9
=
ar
.
unat
mov
loc0
=
rp
//
save
return
address
mov
loc0
=
rp
//
save
return
address
mov
out0
=
0
//
there
is
no
"oldset"
mov
out0
=
0
//
there
is
no
"oldset"
adds
out1
=
0
,
sp
//
out1
=&
sigscratch
adds
out1
=
8
,
sp
//
out1
=&
sigscratch
->
ar_pfs
(
pSys
)
mov
out2
=
1
//
out2
==
1
=>
we
're in a syscall
(
pSys
)
mov
out2
=
1
//
out2
==
1
=>
we
're in a syscall
;;
;;
(
pNonSys
)
mov
out2
=
0
//
out2
==
0
=>
not
a
syscall
(
pNonSys
)
mov
out2
=
0
//
out2
==
0
=>
not
a
syscall
.
fframe
16
.
fframe
16
.
spillpsp
ar
.
unat
,
16
//
(
note
that
offset
is
relative
to
psp
+
0x10
!)
.
spillpsp
ar
.
unat
,
16
//
(
note
that
offset
is
relative
to
psp
+
0x10
!)
st8
[
sp
]=
r9
,-
16
//
allocate
space
for
ar
.
unat
and
save
it
st8
[
sp
]=
r9
,-
16
//
allocate
space
for
ar
.
unat
and
save
it
st8
[
out1
]=
loc1
,-
8
//
save
ar
.
pfs
,
out1
=&
sigscratch
.
body
.
body
br.call.sptk.many
rp
=
do_notify_resume_user
br.call.sptk.many
rp
=
do_notify_resume_user
.
ret15
:
.
restore
sp
.
ret15
:
.
restore
sp
...
@@ -931,11 +932,12 @@ GLOBAL_ENTRY(sys_rt_sigsuspend)
...
@@ -931,11 +932,12 @@ GLOBAL_ENTRY(sys_rt_sigsuspend)
mov
loc0
=
rp
//
save
return
address
mov
loc0
=
rp
//
save
return
address
mov
out0
=
in0
//
mask
mov
out0
=
in0
//
mask
mov
out1
=
in1
//
sigsetsize
mov
out1
=
in1
//
sigsetsize
adds
out2
=
0
,
sp
//
out2
=&
sigscratch
adds
out2
=
8
,
sp
//
out2
=&
sigscratch
->
ar_pfs
;;
;;
.
fframe
16
.
fframe
16
.
spillpsp
ar
.
unat
,
16
//
(
note
that
offset
is
relative
to
psp
+
0x10
!)
.
spillpsp
ar
.
unat
,
16
//
(
note
that
offset
is
relative
to
psp
+
0x10
!)
st8
[
sp
]=
r9
,-
16
//
allocate
space
for
ar
.
unat
and
save
it
st8
[
sp
]=
r9
,-
16
//
allocate
space
for
ar
.
unat
and
save
it
st8
[
out2
]=
loc1
,-
8
//
save
ar
.
pfs
,
out2
=&
sigscratch
.
body
.
body
br.call.sptk.many
rp
=
ia64_rt_sigsuspend
br.call.sptk.many
rp
=
ia64_rt_sigsuspend
.
ret17
:
.
restore
sp
.
ret17
:
.
restore
sp
...
...
arch/ia64/kernel/gate.S
View file @
6a55e5aa
...
@@ -145,11 +145,12 @@ END(fsys_fallback_syscall)
...
@@ -145,11 +145,12 @@ END(fsys_fallback_syscall)
*/
*/
#define SIGTRAMP_SAVES \
#define SIGTRAMP_SAVES \
.
unwabi
@
svr4
,
's'
//
mark
this
as
a
sigtramp
handler
(
saves
scratch
regs
)
\
.
unwabi
@
svr4
,
's'
; /* mark this as a sigtramp handler (saves scratch regs) */ \
.
savesp
ar
.
unat
,
UNAT_OFF
+
SIGCONTEXT_OFF
\
.
savesp
ar
.
unat
,
UNAT_OFF
+
SIGCONTEXT_OFF
; \
.
savesp
ar
.
fpsr
,
FPSR_OFF
+
SIGCONTEXT_OFF
\
.
savesp
ar
.
fpsr
,
FPSR_OFF
+
SIGCONTEXT_OFF
; \
.
savesp
pr
,
PR_OFF
+
SIGCONTEXT_OFF
\
.
savesp
pr
,
PR_OFF
+
SIGCONTEXT_OFF
; \
.
savesp
rp
,
RP_OFF
+
SIGCONTEXT_OFF
\
.
savesp
rp
,
RP_OFF
+
SIGCONTEXT_OFF
; \
.
savesp
ar
.
pfs
,
CFM_OFF
+
SIGCONTEXT_OFF
; \
.
vframesp
SP_OFF
+
SIGCONTEXT_OFF
.
vframesp
SP_OFF
+
SIGCONTEXT_OFF
GLOBAL_ENTRY
(
ia64_sigtramp
)
GLOBAL_ENTRY
(
ia64_sigtramp
)
...
@@ -173,9 +174,7 @@ GLOBAL_ENTRY(ia64_sigtramp)
...
@@ -173,9 +174,7 @@ GLOBAL_ENTRY(ia64_sigtramp)
.
spillsp.p
p8
,
ar
.
rnat
,
RNAT_OFF
+
SIGCONTEXT_OFF
.
spillsp.p
p8
,
ar
.
rnat
,
RNAT_OFF
+
SIGCONTEXT_OFF
(
p8
)
br.cond.spnt
setup_rbs
//
yup
->
(
clobbers
r14
,
r15
,
and
r16
)
(
p8
)
br.cond.spnt
setup_rbs
//
yup
->
(
clobbers
r14
,
r15
,
and
r16
)
back_from_setup_rbs
:
back_from_setup_rbs
:
alloc
r8
=
ar
.
pfs
,
0
,
0
,
3
,
0
.
spillreg
ar
.
pfs
,
r8
alloc
r8
=
ar
.
pfs
,
0
,
0
,
3
,
0
//
get
CFM0
,
EC0
,
and
CPL0
into
r8
ld8
out0
=[
base0
],
16
//
load
arg0
(
signum
)
ld8
out0
=[
base0
],
16
//
load
arg0
(
signum
)
adds
base1
=(
ARG1_OFF
-(
RBS_BASE_OFF
+
SIGCONTEXT_OFF
)),
base1
adds
base1
=(
ARG1_OFF
-(
RBS_BASE_OFF
+
SIGCONTEXT_OFF
)),
base1
;;
;;
...
@@ -184,17 +183,12 @@ back_from_setup_rbs:
...
@@ -184,17 +183,12 @@ back_from_setup_rbs:
;;
;;
ld8
out2
=[
base0
]
//
load
arg2
(
sigcontextp
)
ld8
out2
=[
base0
]
//
load
arg2
(
sigcontextp
)
ld8
gp
=[
r17
]
//
get
signal
handler
's global pointer
ld8
gp
=[
r17
]
//
get
signal
handler
's global pointer
adds
base0
=(
BSP_OFF
+
SIGCONTEXT_OFF
),
sp
adds
base0
=(
BSP_OFF
+
SIGCONTEXT_OFF
),
sp
;;
;;
.
spillsp
ar
.
bsp
,
BSP_OFF
+
SIGCONTEXT_OFF
.
spillsp
ar
.
bsp
,
BSP_OFF
+
SIGCONTEXT_OFF
st8
[
base0
]=
r9
,(
CFM_OFF
-
BSP_OFF
)
//
save
sc_ar_bsp
st8
[
base0
]=
r9
//
save
sc_ar_bsp
dep
r8
=
0
,
r8
,
38
,
26
//
clear
EC0
,
CPL0
and
reserved
bits
adds
base1
=(
FR6_OFF
+
16
+
SIGCONTEXT_OFF
),
sp
;;
.
spillsp
ar
.
pfs
,
CFM_OFF
+
SIGCONTEXT_OFF
st8
[
base0
]=
r8
//
save
CFM0
adds
base0
=(
FR6_OFF
+
SIGCONTEXT_OFF
),
sp
adds
base0
=(
FR6_OFF
+
SIGCONTEXT_OFF
),
sp
adds
base1
=(
FR6_OFF
+
16
+
SIGCONTEXT_OFF
),
sp
;;
;;
stf.spill
[
base0
]=
f6
,
32
stf.spill
[
base0
]=
f6
,
32
stf.spill
[
base1
]=
f7
,
32
stf.spill
[
base1
]=
f7
,
32
...
@@ -217,7 +211,6 @@ back_from_setup_rbs:
...
@@ -217,7 +211,6 @@ back_from_setup_rbs:
ld8
r15
=[
base0
],(
CFM_OFF
-
BSP_OFF
)
//
fetch
sc_ar_bsp
and
advance
to
CFM_OFF
ld8
r15
=[
base0
],(
CFM_OFF
-
BSP_OFF
)
//
fetch
sc_ar_bsp
and
advance
to
CFM_OFF
mov
r14
=
ar
.
bsp
mov
r14
=
ar
.
bsp
;;
;;
ld8
r8
=[
base0
]
//
restore
(
perhaps
modified
)
CFM0
,
EC0
,
and
CPL0
cmp.ne
p8
,
p0
=
r14
,
r15
//
do
we
need
to
restore
the
rbs
?
cmp.ne
p8
,
p0
=
r14
,
r15
//
do
we
need
to
restore
the
rbs
?
(
p8
)
br.cond.spnt
restore_rbs
//
yup
->
(
clobbers
r14
-
r18
,
f6
&
f7
)
(
p8
)
br.cond.spnt
restore_rbs
//
yup
->
(
clobbers
r14
-
r18
,
f6
&
f7
)
;;
;;
...
...
arch/ia64/kernel/sigframe.h
View file @
6a55e5aa
struct
sigscratch
{
struct
sigscratch
{
unsigned
long
scratch_unat
;
/* ar.unat for the general registers saved in pt */
unsigned
long
scratch_unat
;
/* ar.unat for the general registers saved in pt */
unsigned
long
pad
;
unsigned
long
ar_pfs
;
/* for syscalls, the user-level function-state */
struct
pt_regs
pt
;
struct
pt_regs
pt
;
};
};
...
...
arch/ia64/kernel/signal.c
View file @
6a55e5aa
...
@@ -315,7 +315,7 @@ ia64_rt_sigreturn (struct sigscratch *scr)
...
@@ -315,7 +315,7 @@ ia64_rt_sigreturn (struct sigscratch *scr)
static
long
static
long
setup_sigcontext
(
struct
sigcontext
*
sc
,
sigset_t
*
mask
,
struct
sigscratch
*
scr
)
setup_sigcontext
(
struct
sigcontext
*
sc
,
sigset_t
*
mask
,
struct
sigscratch
*
scr
)
{
{
unsigned
long
flags
=
0
,
ifs
,
nat
;
unsigned
long
flags
=
0
,
ifs
,
cfm
,
nat
;
long
err
;
long
err
;
ifs
=
scr
->
pt
.
cr_ifs
;
ifs
=
scr
->
pt
.
cr_ifs
;
...
@@ -325,7 +325,9 @@ setup_sigcontext (struct sigcontext *sc, sigset_t *mask, struct sigscratch *scr)
...
@@ -325,7 +325,9 @@ setup_sigcontext (struct sigcontext *sc, sigset_t *mask, struct sigscratch *scr)
if
((
ifs
&
(
1UL
<<
63
))
==
0
)
{
if
((
ifs
&
(
1UL
<<
63
))
==
0
)
{
/* if cr_ifs isn't valid, we got here through a syscall */
/* if cr_ifs isn't valid, we got here through a syscall */
flags
|=
IA64_SC_FLAG_IN_SYSCALL
;
flags
|=
IA64_SC_FLAG_IN_SYSCALL
;
}
cfm
=
scr
->
ar_pfs
&
((
1UL
<<
38
)
-
1
);
}
else
cfm
=
ifs
&
((
1UL
<<
38
)
-
1
);
ia64_flush_fph
(
current
);
ia64_flush_fph
(
current
);
if
((
current
->
thread
.
flags
&
IA64_THREAD_FPH_VALID
))
{
if
((
current
->
thread
.
flags
&
IA64_THREAD_FPH_VALID
))
{
flags
|=
IA64_SC_FLAG_FPH_VALID
;
flags
|=
IA64_SC_FLAG_FPH_VALID
;
...
@@ -344,6 +346,7 @@ setup_sigcontext (struct sigcontext *sc, sigset_t *mask, struct sigscratch *scr)
...
@@ -344,6 +346,7 @@ setup_sigcontext (struct sigcontext *sc, sigset_t *mask, struct sigscratch *scr)
err
|=
__put_user
(
nat
,
&
sc
->
sc_nat
);
err
|=
__put_user
(
nat
,
&
sc
->
sc_nat
);
err
|=
PUT_SIGSET
(
mask
,
&
sc
->
sc_mask
);
err
|=
PUT_SIGSET
(
mask
,
&
sc
->
sc_mask
);
err
|=
__put_user
(
cfm
,
&
sc
->
sc_cfm
);
err
|=
__put_user
(
scr
->
pt
.
cr_ipsr
&
IA64_PSR_UM
,
&
sc
->
sc_um
);
err
|=
__put_user
(
scr
->
pt
.
cr_ipsr
&
IA64_PSR_UM
,
&
sc
->
sc_um
);
err
|=
__put_user
(
scr
->
pt
.
ar_rsc
,
&
sc
->
sc_ar_rsc
);
err
|=
__put_user
(
scr
->
pt
.
ar_rsc
,
&
sc
->
sc_ar_rsc
);
err
|=
__put_user
(
scr
->
pt
.
ar_ccv
,
&
sc
->
sc_ar_ccv
);
err
|=
__put_user
(
scr
->
pt
.
ar_ccv
,
&
sc
->
sc_ar_ccv
);
...
@@ -422,6 +425,15 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *set,
...
@@ -422,6 +425,15 @@ setup_frame (int sig, struct k_sigaction *ka, siginfo_t *info, sigset_t *set,
scr
->
pt
.
ar_fpsr
=
FPSR_DEFAULT
;
/* reset fpsr for signal handler */
scr
->
pt
.
ar_fpsr
=
FPSR_DEFAULT
;
/* reset fpsr for signal handler */
scr
->
pt
.
cr_iip
=
tramp_addr
;
scr
->
pt
.
cr_iip
=
tramp_addr
;
ia64_psr
(
&
scr
->
pt
)
->
ri
=
0
;
/* start executing in first slot */
ia64_psr
(
&
scr
->
pt
)
->
ri
=
0
;
/* start executing in first slot */
/*
* Force the interruption function mask to zero. This has no effect when a
* system-call got interrupted by a signal (since, in that case, scr->pt_cr_ifs is
* ignored), but it has the desirable effect of making it possible to deliver a
* signal with an incomplete register frame (which happens when a mandatory RSE
* load faults). Furthermore, it has no negative effect on the getting the user's
* dirty partition preserved, because that's governed by scr->pt.loadrs.
*/
scr
->
pt
.
cr_ifs
=
(
1UL
<<
63
);
/*
/*
* Note: this affects only the NaT bits of the scratch regs (the ones saved in
* Note: this affects only the NaT bits of the scratch regs (the ones saved in
...
...
arch/ia64/tools/print_offsets.c
View file @
6a55e5aa
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
* gets translated into an assembly file which, in turn, is processed
* gets translated into an assembly file which, in turn, is processed
* by awk to generate offsets.h. So if you make any changes to this
* by awk to generate offsets.h. So if you make any changes to this
* file, be sure to verify that the awk procedure still works (see
* file, be sure to verify that the awk procedure still works (see
* prin_offsets.awk).
* prin
t
_offsets.awk).
*/
*/
#include <linux/config.h>
#include <linux/config.h>
...
...
include/asm-ia64/sal.h
View file @
6a55e5aa
...
@@ -10,8 +10,8 @@
...
@@ -10,8 +10,8 @@
* Copyright (C) 2001 Intel
* Copyright (C) 2001 Intel
* Copyright (C) 2002 Jenna Hall <jenna.s.hall@intel.com>
* Copyright (C) 2002 Jenna Hall <jenna.s.hall@intel.com>
* Copyright (C) 2001 Fred Lewis <frederick.v.lewis@intel.com>
* Copyright (C) 2001 Fred Lewis <frederick.v.lewis@intel.com>
* Copyright (C) 1998, 1999, 2001 Hewlett-Packard Co
* Copyright (C) 1998, 1999, 2001
, 2003
Hewlett-Packard Co
*
Copyright (C) 1998, 1999, 2001
David Mosberger-Tang <davidm@hpl.hp.com>
*
David Mosberger-Tang <davidm@hpl.hp.com>
* Copyright (C) 1999 Srinivasa Prasad Thirumalachar <sprasad@sprasad.engr.sgi.com>
* Copyright (C) 1999 Srinivasa Prasad Thirumalachar <sprasad@sprasad.engr.sgi.com>
*
*
* 02/01/04 J. Hall Updated Error Record Structures to conform to July 2001
* 02/01/04 J. Hall Updated Error Record Structures to conform to July 2001
...
@@ -239,52 +239,41 @@ enum {
...
@@ -239,52 +239,41 @@ enum {
#define SAL_MC_PARAM_BINIT_ESCALATE 0x10
#define SAL_MC_PARAM_BINIT_ESCALATE 0x10
/*
/*
*
* Definition of the SAL Error Log from the SAL spec
* Definition of the SAL Error Log from the SAL spec
*/
*/
/* SAL Error Record Section GUID Definitions */
/* SAL Error Record Section GUID Definitions */
#define SAL_PROC_DEV_ERR_SECT_GUID \
#define SAL_PROC_DEV_ERR_SECT_GUID \
EFI_GUID ( 0xe429faf1, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf1, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_MEM_DEV_ERR_SECT_GUID \
#define SAL_PLAT_MEM_DEV_ERR_SECT_GUID \
EFI_GUID( 0xe429faf2, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf2, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_SEL_DEV_ERR_SECT_GUID \
#define SAL_PLAT_SEL_DEV_ERR_SECT_GUID \
EFI_GUID( 0xe429faf3, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf3, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_PCI_BUS_ERR_SECT_GUID \
#define SAL_PLAT_PCI_BUS_ERR_SECT_GUID \
EFI_GUID( 0xe429faf4, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf4, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_SMBIOS_DEV_ERR_SECT_GUID \
#define SAL_PLAT_SMBIOS_DEV_ERR_SECT_GUID \
EFI_GUID( 0xe429faf5, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf5, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_PCI_COMP_ERR_SECT_GUID \
#define SAL_PLAT_PCI_COMP_ERR_SECT_GUID \
EFI_GUID( 0xe429faf6, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf6, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_SPECIFIC_ERR_SECT_GUID \
#define SAL_PLAT_SPECIFIC_ERR_SECT_GUID \
EFI_GUID( 0xe429faf7, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf7, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_HOST_CTLR_ERR_SECT_GUID \
#define SAL_PLAT_HOST_CTLR_ERR_SECT_GUID \
EFI_GUID( 0xe429faf8, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf8, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define SAL_PLAT_BUS_ERR_SECT_GUID \
#define SAL_PLAT_BUS_ERR_SECT_GUID \
EFI_GUID( 0xe429faf9, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, \
EFI_GUID(0xe429faf9, 0x3cb7, 0x11d4, 0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81)
0xc7, 0x3c, 0x88, 0x81 )
#define MAX_CACHE_ERRORS 6
#define MAX_CACHE_ERRORS 6
#define MAX_TLB_ERRORS 6
#define MAX_TLB_ERRORS 6
#define MAX_BUS_ERRORS 1
#define MAX_BUS_ERRORS 1
/* Definition of version according to SAL spec for logging purposes */
/* Definition of version according to SAL spec for logging purposes */
typedef
struct
sal_log_revision
typedef
struct
sal_log_revision
{
{
u8
minor
;
/* BCD (0..99) */
u8
minor
;
/* BCD (0..99) */
u8
major
;
/* BCD (0..99) */
u8
major
;
/* BCD (0..99) */
}
sal_log_revision_t
;
}
sal_log_revision_t
;
/* Definition of timestamp according to SAL spec for logging purposes */
/* Definition of timestamp according to SAL spec for logging purposes */
typedef
struct
sal_log_timestamp
typedef
struct
sal_log_timestamp
{
{
u8
slh_second
;
/* Second (0..59) */
u8
slh_second
;
/* Second (0..59) */
u8
slh_minute
;
/* Minute (0..59) */
u8
slh_minute
;
/* Minute (0..59) */
u8
slh_hour
;
/* Hour (0..23) */
u8
slh_hour
;
/* Hour (0..23) */
...
@@ -296,8 +285,7 @@ typedef struct sal_log_timestamp
...
@@ -296,8 +285,7 @@ typedef struct sal_log_timestamp
}
sal_log_timestamp_t
;
}
sal_log_timestamp_t
;
/* Definition of log record header structures */
/* Definition of log record header structures */
typedef
struct
sal_log_record_header
typedef
struct
sal_log_record_header
{
{
u64
id
;
/* Unique monotonically increasing ID */
u64
id
;
/* Unique monotonically increasing ID */
sal_log_revision_t
revision
;
/* Major and Minor revision of header */
sal_log_revision_t
revision
;
/* Major and Minor revision of header */
u16
severity
;
/* Error Severity */
u16
severity
;
/* Error Severity */
...
@@ -307,18 +295,15 @@ typedef struct sal_log_record_header
...
@@ -307,18 +295,15 @@ typedef struct sal_log_record_header
}
sal_log_record_header_t
;
}
sal_log_record_header_t
;
/* Definition of log section header structures */
/* Definition of log section header structures */
typedef
struct
sal_log_sec_header
typedef
struct
sal_log_sec_header
{
{
efi_guid_t
guid
;
/* Unique Section ID */
efi_guid_t
guid
;
/* Unique Section ID */
sal_log_revision_t
revision
;
/* Major and Minor revision of Section */
sal_log_revision_t
revision
;
/* Major and Minor revision of Section */
u16
reserved
;
u16
reserved
;
u32
len
;
/* Section length */
u32
len
;
/* Section length */
}
sal_log_section_hdr_t
;
}
sal_log_section_hdr_t
;
typedef
struct
sal_log_mod_error_info
typedef
struct
sal_log_mod_error_info
{
{
struct
{
struct
{
u64
check_info
:
1
,
u64
check_info
:
1
,
requestor_identifier
:
1
,
requestor_identifier
:
1
,
responder_identifier
:
1
,
responder_identifier
:
1
,
...
@@ -333,10 +318,8 @@ typedef struct sal_log_mod_error_info
...
@@ -333,10 +318,8 @@ typedef struct sal_log_mod_error_info
u64
precise_ip
;
u64
precise_ip
;
}
sal_log_mod_error_info_t
;
}
sal_log_mod_error_info_t
;
typedef
struct
sal_processor_static_info
typedef
struct
sal_processor_static_info
{
{
struct
{
struct
{
u64
minstate
:
1
,
u64
minstate
:
1
,
br
:
1
,
br
:
1
,
cr
:
1
,
cr
:
1
,
...
@@ -353,11 +336,9 @@ typedef struct sal_processor_static_info
...
@@ -353,11 +336,9 @@ typedef struct sal_processor_static_info
struct
ia64_fpreg
fr
[
128
];
struct
ia64_fpreg
fr
[
128
];
}
sal_processor_static_info_t
;
}
sal_processor_static_info_t
;
typedef
struct
sal_log_processor_info
typedef
struct
sal_log_processor_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
proc_error_map
:
1
,
u64
proc_error_map
:
1
,
proc_state_param
:
1
,
proc_state_param
:
1
,
proc_cr_lid
:
1
,
proc_cr_lid
:
1
,
...
@@ -378,8 +359,7 @@ typedef struct sal_log_processor_info
...
@@ -378,8 +359,7 @@ typedef struct sal_log_processor_info
sal_log_mod_error_info_t
bus_check_info
[
16
];
sal_log_mod_error_info_t
bus_check_info
[
16
];
sal_log_mod_error_info_t
reg_file_check_info
[
16
];
sal_log_mod_error_info_t
reg_file_check_info
[
16
];
sal_log_mod_error_info_t
ms_check_info
[
16
];
sal_log_mod_error_info_t
ms_check_info
[
16
];
struct
struct
{
{
u64
regs
[
5
];
u64
regs
[
5
];
u64
reserved
;
u64
reserved
;
}
cpuid_info
;
}
cpuid_info
;
...
@@ -388,11 +368,9 @@ typedef struct sal_log_processor_info
...
@@ -388,11 +368,9 @@ typedef struct sal_log_processor_info
/* platform error log structures */
/* platform error log structures */
typedef
struct
sal_log_mem_dev_err_info
typedef
struct
sal_log_mem_dev_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
error_status
:
1
,
u64
error_status
:
1
,
physical_addr
:
1
,
physical_addr
:
1
,
addr_mask
:
1
,
addr_mask
:
1
,
...
@@ -431,11 +409,9 @@ typedef struct sal_log_mem_dev_err_info
...
@@ -431,11 +409,9 @@ typedef struct sal_log_mem_dev_err_info
u8
oem_data
[
1
];
/* Variable length data */
u8
oem_data
[
1
];
/* Variable length data */
}
sal_log_mem_dev_err_info_t
;
}
sal_log_mem_dev_err_info_t
;
typedef
struct
sal_log_sel_dev_err_info
typedef
struct
sal_log_sel_dev_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
record_id
:
1
,
u64
record_id
:
1
,
record_type
:
1
,
record_type
:
1
,
generator_id
:
1
,
generator_id
:
1
,
...
@@ -461,11 +437,9 @@ typedef struct sal_log_sel_dev_err_info
...
@@ -461,11 +437,9 @@ typedef struct sal_log_sel_dev_err_info
u8
event_data3
;
u8
event_data3
;
}
sal_log_sel_dev_err_info_t
;
}
sal_log_sel_dev_err_info_t
;
typedef
struct
sal_log_pci_bus_err_info
typedef
struct
sal_log_pci_bus_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
err_status
:
1
,
u64
err_status
:
1
,
err_type
:
1
,
err_type
:
1
,
bus_id
:
1
,
bus_id
:
1
,
...
@@ -491,11 +465,9 @@ typedef struct sal_log_pci_bus_err_info
...
@@ -491,11 +465,9 @@ typedef struct sal_log_pci_bus_err_info
u8
oem_data
[
1
];
/* Variable length data */
u8
oem_data
[
1
];
/* Variable length data */
}
sal_log_pci_bus_err_info_t
;
}
sal_log_pci_bus_err_info_t
;
typedef
struct
sal_log_smbios_dev_err_info
typedef
struct
sal_log_smbios_dev_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
event_type
:
1
,
u64
event_type
:
1
,
length
:
1
,
length
:
1
,
time_stamp
:
1
,
time_stamp
:
1
,
...
@@ -505,14 +477,12 @@ typedef struct sal_log_smbios_dev_err_info
...
@@ -505,14 +477,12 @@ typedef struct sal_log_smbios_dev_err_info
u8
event_type
;
u8
event_type
;
u8
length
;
u8
length
;
u8
time_stamp
[
6
];
u8
time_stamp
[
6
];
u8
data
[
1
];
// data of variable length, length == slsmb_length
u8
data
[
1
];
/* data of variable length, length == slsmb_length */
}
sal_log_smbios_dev_err_info_t
;
}
sal_log_smbios_dev_err_info_t
;
typedef
struct
sal_log_pci_comp_err_info
typedef
struct
sal_log_pci_comp_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
err_status
:
1
,
u64
err_status
:
1
,
comp_info
:
1
,
comp_info
:
1
,
num_mem_regs
:
1
,
num_mem_regs
:
1
,
...
@@ -522,8 +492,7 @@ typedef struct sal_log_pci_comp_err_info
...
@@ -522,8 +492,7 @@ typedef struct sal_log_pci_comp_err_info
reserved
:
58
;
reserved
:
58
;
}
valid
;
}
valid
;
u64
err_status
;
u64
err_status
;
struct
struct
{
{
u16
vendor_id
;
u16
vendor_id
;
u16
device_id
;
u16
device_id
;
u8
class_code
[
3
];
u8
class_code
[
3
];
...
@@ -536,18 +505,17 @@ typedef struct sal_log_pci_comp_err_info
...
@@ -536,18 +505,17 @@ typedef struct sal_log_pci_comp_err_info
u32
num_mem_regs
;
u32
num_mem_regs
;
u32
num_io_regs
;
u32
num_io_regs
;
u64
reg_data_pairs
[
1
];
u64
reg_data_pairs
[
1
];
/* array of address/data register pairs is num_mem_regs + num_io_regs
/*
elements long. Each array element consists of a u64 address followed
* array of address/data register pairs is num_mem_regs + num_io_regs elements
by a u64 data value. The oem_data array immediately follows the
* long. Each array element consists of a u64 address followed by a u64 data
reg_data_pairs array */
* value. The oem_data array immediately follows the reg_data_pairs array
*/
u8
oem_data
[
1
];
/* Variable length data */
u8
oem_data
[
1
];
/* Variable length data */
}
sal_log_pci_comp_err_info_t
;
}
sal_log_pci_comp_err_info_t
;
typedef
struct
sal_log_plat_specific_err_info
typedef
struct
sal_log_plat_specific_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
err_status
:
1
,
u64
err_status
:
1
,
guid
:
1
,
guid
:
1
,
oem_data
:
1
,
oem_data
:
1
,
...
@@ -558,11 +526,9 @@ typedef struct sal_log_plat_specific_err_info
...
@@ -558,11 +526,9 @@ typedef struct sal_log_plat_specific_err_info
u8
oem_data
[
1
];
/* platform specific variable length data */
u8
oem_data
[
1
];
/* platform specific variable length data */
}
sal_log_plat_specific_err_info_t
;
}
sal_log_plat_specific_err_info_t
;
typedef
struct
sal_log_host_ctlr_err_info
typedef
struct
sal_log_host_ctlr_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
err_status
:
1
,
u64
err_status
:
1
,
requestor_id
:
1
,
requestor_id
:
1
,
responder_id
:
1
,
responder_id
:
1
,
...
@@ -579,11 +545,9 @@ typedef struct sal_log_host_ctlr_err_info
...
@@ -579,11 +545,9 @@ typedef struct sal_log_host_ctlr_err_info
u8
oem_data
[
1
];
/* Variable length OEM data */
u8
oem_data
[
1
];
/* Variable length OEM data */
}
sal_log_host_ctlr_err_info_t
;
}
sal_log_host_ctlr_err_info_t
;
typedef
struct
sal_log_plat_bus_err_info
typedef
struct
sal_log_plat_bus_err_info
{
{
sal_log_section_hdr_t
header
;
sal_log_section_hdr_t
header
;
struct
struct
{
{
u64
err_status
:
1
,
u64
err_status
:
1
,
requestor_id
:
1
,
requestor_id
:
1
,
responder_id
:
1
,
responder_id
:
1
,
...
@@ -601,8 +565,7 @@ typedef struct sal_log_plat_bus_err_info
...
@@ -601,8 +565,7 @@ typedef struct sal_log_plat_bus_err_info
}
sal_log_plat_bus_err_info_t
;
}
sal_log_plat_bus_err_info_t
;
/* Overall platform error section structure */
/* Overall platform error section structure */
typedef
union
sal_log_platform_err_info
typedef
union
sal_log_platform_err_info
{
{
sal_log_mem_dev_err_info_t
mem_dev_err
;
sal_log_mem_dev_err_info_t
mem_dev_err
;
sal_log_sel_dev_err_info_t
sel_dev_err
;
sal_log_sel_dev_err_info_t
sel_dev_err
;
sal_log_pci_bus_err_info_t
pci_bus_err
;
sal_log_pci_bus_err_info_t
pci_bus_err
;
...
@@ -614,8 +577,7 @@ typedef union sal_log_platform_err_info
...
@@ -614,8 +577,7 @@ typedef union sal_log_platform_err_info
}
sal_log_platform_err_info_t
;
}
sal_log_platform_err_info_t
;
/* SAL log over-all, multi-section error record structure (processor+platform) */
/* SAL log over-all, multi-section error record structure (processor+platform) */
typedef
struct
err_rec
typedef
struct
err_rec
{
{
sal_log_record_header_t
sal_elog_header
;
sal_log_record_header_t
sal_elog_header
;
sal_log_processor_info_t
proc_err
;
sal_log_processor_info_t
proc_err
;
sal_log_platform_err_info_t
plat_err
;
sal_log_platform_err_info_t
plat_err
;
...
@@ -648,7 +610,6 @@ ia64_sal_cache_flush (u64 cache_type)
...
@@ -648,7 +610,6 @@ ia64_sal_cache_flush (u64 cache_type)
}
}
/* Initialize all the processor and platform level instruction and data caches */
/* Initialize all the processor and platform level instruction and data caches */
static
inline
s64
static
inline
s64
ia64_sal_cache_init
(
void
)
ia64_sal_cache_init
(
void
)
...
@@ -658,8 +619,9 @@ ia64_sal_cache_init (void)
...
@@ -658,8 +619,9 @@ ia64_sal_cache_init (void)
return
isrv
.
status
;
return
isrv
.
status
;
}
}
/* Clear the processor and platform information logged by SAL with respect to the
/*
* machine state at the time of MCA's, INITs, CMCs, or CPEs.
* Clear the processor and platform information logged by SAL with respect to the machine
* state at the time of MCA's, INITs, CMCs, or CPEs.
*/
*/
static
inline
s64
static
inline
s64
ia64_sal_clear_state_info
(
u64
sal_info_type
)
ia64_sal_clear_state_info
(
u64
sal_info_type
)
...
@@ -685,8 +647,10 @@ ia64_sal_get_state_info (u64 sal_info_type, u64 *sal_info)
...
@@ -685,8 +647,10 @@ ia64_sal_get_state_info (u64 sal_info_type, u64 *sal_info)
return
isrv
.
v0
;
return
isrv
.
v0
;
}
}
/* Get the maximum size of the information logged by SAL with respect to the machine
* state at the time of MCAs, INITs, CMCs, or CPEs.
/*
* Get the maximum size of the information logged by SAL with respect to the machine state
* at the time of MCAs, INITs, CMCs, or CPEs.
*/
*/
static
inline
u64
static
inline
u64
ia64_sal_get_state_info_size
(
u64
sal_info_type
)
ia64_sal_get_state_info_size
(
u64
sal_info_type
)
...
@@ -699,8 +663,9 @@ ia64_sal_get_state_info_size (u64 sal_info_type)
...
@@ -699,8 +663,9 @@ ia64_sal_get_state_info_size (u64 sal_info_type)
return
isrv
.
v0
;
return
isrv
.
v0
;
}
}
/* Causes the processor to go into a spin loop within SAL where SAL awaits a wakeup
/*
* from the monarch processor.
* Causes the processor to go into a spin loop within SAL where SAL awaits a wakeup from
* the monarch processor.
*/
*/
static
inline
s64
static
inline
s64
ia64_sal_mc_rendez
(
void
)
ia64_sal_mc_rendez
(
void
)
...
@@ -710,7 +675,8 @@ ia64_sal_mc_rendez (void)
...
@@ -710,7 +675,8 @@ ia64_sal_mc_rendez (void)
return
isrv
.
status
;
return
isrv
.
status
;
}
}
/* Allow the OS to specify the interrupt number to be used by SAL to interrupt OS during
/*
* Allow the OS to specify the interrupt number to be used by SAL to interrupt OS during
* the machine check rendezvous sequence as well as the mechanism to wake up the
* the machine check rendezvous sequence as well as the mechanism to wake up the
* non-monarch processor at the end of machine check processing.
* non-monarch processor at the end of machine check processing.
*/
*/
...
@@ -718,7 +684,8 @@ static inline s64
...
@@ -718,7 +684,8 @@ static inline s64
ia64_sal_mc_set_params
(
u64
param_type
,
u64
i_or_m
,
u64
i_or_m_val
,
u64
timeout
,
u64
rz_always
)
ia64_sal_mc_set_params
(
u64
param_type
,
u64
i_or_m
,
u64
i_or_m_val
,
u64
timeout
,
u64
rz_always
)
{
{
struct
ia64_sal_retval
isrv
;
struct
ia64_sal_retval
isrv
;
SAL_CALL
(
isrv
,
SAL_MC_SET_PARAMS
,
param_type
,
i_or_m
,
i_or_m_val
,
timeout
,
rz_always
,
0
,
0
);
SAL_CALL
(
isrv
,
SAL_MC_SET_PARAMS
,
param_type
,
i_or_m
,
i_or_m_val
,
timeout
,
rz_always
,
0
,
0
);
return
isrv
.
status
;
return
isrv
.
status
;
}
}
...
@@ -744,8 +711,8 @@ ia64_sal_pci_config_write (u64 pci_config_addr, u64 size, u64 value)
...
@@ -744,8 +711,8 @@ ia64_sal_pci_config_write (u64 pci_config_addr, u64 size, u64 value)
}
}
/*
/*
* Register physical addresses of locations needed by SAL when SAL
* Register physical addresses of locations needed by SAL when SAL
procedures are invoked
*
procedures are invoked
in virtual mode.
* in virtual mode.
*/
*/
static
inline
s64
static
inline
s64
ia64_sal_register_physical_addr
(
u64
phys_entry
,
u64
phys_addr
)
ia64_sal_register_physical_addr
(
u64
phys_entry
,
u64
phys_addr
)
...
@@ -756,9 +723,10 @@ ia64_sal_register_physical_addr (u64 phys_entry, u64 phys_addr)
...
@@ -756,9 +723,10 @@ ia64_sal_register_physical_addr (u64 phys_entry, u64 phys_addr)
return
isrv
.
status
;
return
isrv
.
status
;
}
}
/* Register software dependent code locations within SAL. These locations are handlers
/*
* or entry points where SAL will pass control for the specified event. These event
* Register software dependent code locations within SAL. These locations are handlers or
* handlers are for the bott rendezvous, MCAs and INIT scenarios.
* entry points where SAL will pass control for the specified event. These event handlers
* are for the bott rendezvous, MCAs and INIT scenarios.
*/
*/
static
inline
s64
static
inline
s64
ia64_sal_set_vectors
(
u64
vector_type
,
ia64_sal_set_vectors
(
u64
vector_type
,
...
@@ -772,6 +740,7 @@ ia64_sal_set_vectors (u64 vector_type,
...
@@ -772,6 +740,7 @@ ia64_sal_set_vectors (u64 vector_type,
return
isrv
.
status
;
return
isrv
.
status
;
}
}
/* Update the contents of PAL block in the non-volatile storage device */
/* Update the contents of PAL block in the non-volatile storage device */
static
inline
s64
static
inline
s64
ia64_sal_update_pal
(
u64
param_buf
,
u64
scratch_buf
,
u64
scratch_buf_size
,
ia64_sal_update_pal
(
u64
param_buf
,
u64
scratch_buf
,
u64
scratch_buf_size
,
...
...
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