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
dbbe3cb8
Commit
dbbe3cb8
authored
May 30, 2007
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC64]: Add missing NCS and SVC hypervisor interfaces.
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
3f0a6766
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
240 additions
and
0 deletions
+240
-0
arch/sparc64/kernel/entry.S
arch/sparc64/kernel/entry.S
+72
-0
include/asm-sparc64/hypervisor.h
include/asm-sparc64/hypervisor.h
+168
-0
No files found.
arch/sparc64/kernel/entry.S
View file @
dbbe3cb8
...
@@ -2498,3 +2498,75 @@ sun4v_vintr_set_target:
...
@@ -2498,3 +2498,75 @@ sun4v_vintr_set_target:
retl
retl
nop
nop
.
size
sun4v_vintr_set_target
,
.
-
sun4v_vintr_set_target
.
size
sun4v_vintr_set_target
,
.
-
sun4v_vintr_set_target
/
*
%
o0
:
NCS
sub
-
function
*
%
o1
:
sub
-
function
arg
real
-
address
*
%
o2
:
sub
-
function
arg
size
*
*
returns
%
o0
:
status
*/
.
globl
sun4v_ncs_request
.
type
sun4v_ncs_request
,#
function
sun4v_ncs_request
:
mov
HV_FAST_NCS_REQUEST
,
%
o5
ta
HV_FAST_TRAP
retl
nop
.
size
sun4v_ncs_request
,
.
-
sun4v_ncs_request
.
globl
sun4v_scv_send
.
type
sun4v_scv_send
,#
function
sun4v_scv_send
:
save
%
sp
,
-
192
,
%
sp
mov
%
i0
,
%
o0
mov
%
i1
,
%
o1
mov
%
i2
,
%
o2
mov
HV_FAST_SVC_SEND
,
%
o5
ta
HV_FAST_TRAP
stx
%
o1
,
[%
i3
]
ret
restore
.
size
sun4v_scv_send
,
.
-
sun4v_scv_send
.
globl
sun4v_scv_recv
.
type
sun4v_scv_recv
,#
function
sun4v_scv_recv
:
save
%
sp
,
-
192
,
%
sp
mov
%
i0
,
%
o0
mov
%
i1
,
%
o1
mov
%
i2
,
%
o2
mov
HV_FAST_SVC_RECV
,
%
o5
ta
HV_FAST_TRAP
stx
%
o1
,
[%
i3
]
ret
restore
.
size
sun4v_scv_recv
,
.
-
sun4v_scv_recv
.
globl
sun4v_scv_getstatus
.
type
sun4v_scv_getstatus
,#
function
sun4v_scv_getstatus
:
mov
HV_FAST_SVC_GETSTATUS
,
%
o5
mov
%
o1
,
%
o4
ta
HV_FAST_TRAP
stx
%
o1
,
[%
o4
]
retl
nop
.
size
sun4v_scv_getstatus
,
.
-
sun4v_scv_getstatus
.
globl
sun4v_scv_setstatus
.
type
sun4v_scv_setstatus
,#
function
sun4v_scv_setstatus
:
mov
HV_FAST_SVC_SETSTATUS
,
%
o5
ta
HV_FAST_TRAP
retl
nop
.
size
sun4v_scv_setstatus
,
.
-
sun4v_scv_setstatus
.
globl
sun4v_scv_clrstatus
.
type
sun4v_scv_clrstatus
,#
function
sun4v_scv_clrstatus
:
mov
HV_FAST_SVC_CLRSTATUS
,
%
o5
ta
HV_FAST_TRAP
retl
nop
.
size
sun4v_scv_clrstatus
,
.
-
sun4v_scv_clrstatus
include/asm-sparc64/hypervisor.h
View file @
dbbe3cb8
...
@@ -1097,6 +1097,80 @@ extern unsigned long sun4v_mach_set_soft_state(unsigned long soft_state,
...
@@ -1097,6 +1097,80 @@ extern unsigned long sun4v_mach_set_soft_state(unsigned long soft_state,
*/
*/
#define HV_FAST_MACH_GET_SOFT_STATE 0x71
#define HV_FAST_MACH_GET_SOFT_STATE 0x71
/* svc_send()
* TRAP: HV_FAST_TRAP
* FUNCTION: HV_FAST_SVC_SEND
* ARG0: service ID
* ARG1: buffer real address
* ARG2: buffer size
* RET0: STATUS
* RET1: sent_bytes
*
* Be careful, all output registers are clobbered by this operation,
* so for example it is not possible to save away a value in %o4
* across the trap.
*/
#define HV_FAST_SVC_SEND 0x80
/* svc_recv()
* TRAP: HV_FAST_TRAP
* FUNCTION: HV_FAST_SVC_RECV
* ARG0: service ID
* ARG1: buffer real address
* ARG2: buffer size
* RET0: STATUS
* RET1: recv_bytes
*
* Be careful, all output registers are clobbered by this operation,
* so for example it is not possible to save away a value in %o4
* across the trap.
*/
#define HV_FAST_SVC_RECV 0x81
/* svc_getstatus()
* TRAP: HV_FAST_TRAP
* FUNCTION: HV_FAST_SVC_GETSTATUS
* ARG0: service ID
* RET0: STATUS
* RET1: status bits
*/
#define HV_FAST_SVC_GETSTATUS 0x82
/* svc_setstatus()
* TRAP: HV_FAST_TRAP
* FUNCTION: HV_FAST_SVC_SETSTATUS
* ARG0: service ID
* ARG1: bits to set
* RET0: STATUS
*/
#define HV_FAST_SVC_SETSTATUS 0x83
/* svc_clrstatus()
* TRAP: HV_FAST_TRAP
* FUNCTION: HV_FAST_SVC_CLRSTATUS
* ARG0: service ID
* ARG1: bits to clear
* RET0: STATUS
*/
#define HV_FAST_SVC_CLRSTATUS 0x84
#ifndef __ASSEMBLY__
extern
unsigned
long
sun4v_svc_send
(
unsigned
long
svc_id
,
unsigned
long
buffer
,
unsigned
long
buffer_size
,
unsigned
long
*
sent_bytes
);
extern
unsigned
long
sun4v_svc_recv
(
unsigned
long
svc_id
,
unsigned
long
buffer
,
unsigned
long
buffer_size
,
unsigned
long
*
recv_bytes
);
extern
unsigned
long
sun4v_svc_getstatus
(
unsigned
long
svc_id
,
unsigned
long
*
status_bits
);
extern
unsigned
long
sun4v_svc_setstatus
(
unsigned
long
svc_id
,
unsigned
long
status_bits
);
extern
unsigned
long
sun4v_svc_clrstatus
(
unsigned
long
svc_id
,
unsigned
long
status_bits
);
#endif
/* Trap trace services.
/* Trap trace services.
*
*
* The hypervisor provides a trap tracing capability for privileged
* The hypervisor provides a trap tracing capability for privileged
...
@@ -2724,6 +2798,100 @@ struct hv_mmu_statistics {
...
@@ -2724,6 +2798,100 @@ struct hv_mmu_statistics {
*/
*/
#define HV_FAST_MMUSTAT_INFO 0x103
#define HV_FAST_MMUSTAT_INFO 0x103
/* NCS crypto services */
/* ncs_request() sub-function numbers */
#define HV_NCS_QCONF 0x01
#define HV_NCS_QTAIL_UPDATE 0x02
#ifndef __ASSEMBLY__
struct
hv_ncs_queue_entry
{
/* MAU Control Register */
unsigned
long
mau_control
;
#define MAU_CONTROL_INV_PARITY 0x0000000000002000
#define MAU_CONTROL_STRAND 0x0000000000001800
#define MAU_CONTROL_BUSY 0x0000000000000400
#define MAU_CONTROL_INT 0x0000000000000200
#define MAU_CONTROL_OP 0x00000000000001c0
#define MAU_CONTROL_OP_SHIFT 6
#define MAU_OP_LOAD_MA_MEMORY 0x0
#define MAU_OP_STORE_MA_MEMORY 0x1
#define MAU_OP_MODULAR_MULT 0x2
#define MAU_OP_MODULAR_REDUCE 0x3
#define MAU_OP_MODULAR_EXP_LOOP 0x4
#define MAU_CONTROL_LEN 0x000000000000003f
#define MAU_CONTROL_LEN_SHIFT 0
/* Real address of bytes to load or store bytes
* into/out-of the MAU.
*/
unsigned
long
mau_mpa
;
/* Modular Arithmetic MA Offset Register. */
unsigned
long
mau_ma
;
/* Modular Arithmetic N Prime Register. */
unsigned
long
mau_np
;
};
struct
hv_ncs_qconf_arg
{
unsigned
long
mid
;
/* MAU ID, 1 per core on Niagara */
unsigned
long
base
;
/* Real address base of queue */
unsigned
long
end
;
/* Real address end of queue */
unsigned
long
num_ents
;
/* Number of entries in queue */
};
struct
hv_ncs_qtail_update_arg
{
unsigned
long
mid
;
/* MAU ID, 1 per core on Niagara */
unsigned
long
tail
;
/* New tail index to use */
unsigned
long
syncflag
;
/* only SYNCFLAG_SYNC is implemented */
#define HV_NCS_SYNCFLAG_SYNC 0x00
#define HV_NCS_SYNCFLAG_ASYNC 0x01
};
#endif
/* ncs_request()
* TRAP: HV_FAST_TRAP
* FUNCTION: HV_FAST_NCS_REQUEST
* ARG0: NCS sub-function
* ARG1: sub-function argument real address
* ARG2: size in bytes of sub-function argument
* RET0: status
*
* The MAU chip of the Niagara processor is not directly accessible
* to privileged code, instead it is programmed indirectly via this
* hypervisor API.
*
* The interfaces defines a queue of MAU operations to perform.
* Privileged code registers a queue with the hypervisor by invoking
* this HVAPI with the HV_NCS_QCONF sub-function, which defines the
* base, end, and number of entries of the queue. Each queue entry
* contains a MAU register struct block.
*
* The privileged code then proceeds to add entries to the queue and
* then invoke the HV_NCS_QTAIL_UPDATE sub-function. Since only
* synchronous operations are supported by the current hypervisor,
* HV_NCS_QTAIL_UPDATE will run all the pending queue entries to
* completion and return HV_EOK, or return an error code.
*
* The real address of the sub-function argument must be aligned on at
* least an 8-byte boundary.
*
* The tail argument of HV_NCS_QTAIL_UPDATE is an index, not a byte
* offset, into the queue and must be less than or equal the 'num_ents'
* argument given in the HV_NCS_QCONF call.
*/
#define HV_FAST_NCS_REQUEST 0x110
#ifndef __ASSEMBLY__
extern
unsigned
long
sun4v_ncs_request
(
unsigned
long
request
,
unsigned
long
arg_ra
,
unsigned
long
arg_size
);
#endif
#define HV_FAST_FIRE_GET_PERFREG 0x120
#define HV_FAST_FIRE_SET_PERFREG 0x121
/* Function numbers for HV_CORE_TRAP. */
/* Function numbers for HV_CORE_TRAP. */
#define HV_CORE_SET_VER 0x00
#define HV_CORE_SET_VER 0x00
#define HV_CORE_PUTCHAR 0x01
#define HV_CORE_PUTCHAR 0x01
...
...
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