1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 #pragma ident "%Z%%M% %I% %E% SMI"
27
28 /*
29 * Hypervisor calls called by ncp driver.
30 */
31
32 #include <sys/asm_linkage.h>
33 #include <sys/hypervisor_api.h>
34 #include <sys/n2rng.h>
35
36 #if defined(lint) || defined(__lint)
37
38 /*ARGSUSED*/
39 uint64_t
40 hv_rng_get_diag_control()
41 { return (0); }
42
43 /*ARGSUSED*/
44 uint64_t
45 hv_rng_ctl_read(uint64_t ctlregsptr_ra, uint64_t *rstate, uint64_t *tdelta)
46 { return (0); }
47
48 /*ARGSUSED*/
49 uint64_t
50 hv_rng_ctl_read_v2(uint64_t ctlregsptr_ra, uint64_t rngid, uint64_t *rstate,
51 uint64_t *tdelta, uint64_t *wdelta, uint64_t *wstate)
52 { return (0); }
53
54 /*ARGSUSED*/
55 uint64_t
56 hv_rng_ctl_write(uint64_t ctlregsptr_ra, uint64_t nstate, uint64_t wtimeout,
57 uint64_t *tdelta)
58 { return (0); }
59
60 /*ARGSUSED*/
61 uint64_t
62 hv_rng_ctl_write_v2(uint64_t ctlregsptr_ra, uint64_t nstate, uint64_t wtimeout,
63 uint64_t rngid)
64 { return (0); }
65
66 /*ARGSUSED*/
67 uint64_t
68 hv_rng_data_read_diag(uint64_t buffer_ra, uint64_t sz, uint64_t *tdelta)
69 { return (0); }
70
71 /*ARGSUSED*/
72 uint64_t
73 hv_rng_data_read_diag_v2(uint64_t buffer_ra, uint64_t sz, uint64_t rngid,
74 uint64_t *tdelta)
75 { return (0); }
76
77 /*ARGSUSED*/
78 uint64_t
79 hv_rng_data_read(uint64_t buffer_ra, uint64_t *tdelta)
80 { return (0); }
81
82 #else /* lint || __lint */
83
84 /*
85 * hv_rng_get_diag_control()
86 */
87 ENTRY(hv_rng_get_diag_control)
88 mov HV_RNG_GET_DIAG_CONTROL, %o5
89 ta FAST_TRAP
90 retl
91 nop
92 SET_SIZE(hv_rng_get_diag_control)
93
94 /*
95 * hv_rng_ctl_read(uint64_t ctlregsptr_ra, uint64_t *rstate,
96 * uint64_t *tdelta)
97 */
98 ENTRY(hv_rng_ctl_read)
99 mov %o1, %o3
100 mov %o2, %o4
101 mov HV_RNG_CTL_READ, %o5
102 ta FAST_TRAP
103 stx %o1, [%o3]
104 retl
105 stx %o2, [%o4]
106 SET_SIZE(hv_rng_ctl_read)
107
108 /*
109 * hv_rng_ctl_read_v2(uint64_t ctlregsptr_ra, uint64_t rngid,
110 * uint64_t *rstate, uint64_t *tdelta, uint64_t *wdelta,
111 * uint64_t *wstatus)
112 */
113 ENTRY(hv_rng_ctl_read_v2)
114 save %sp, -SA(MINFRAME64), %sp
115 mov %i0, %o0
116 mov %i1, %o1
117 mov HV_RNG_CTL_READ, %o5
118 ta FAST_TRAP
119 mov %o0, %i0 ! trap status
120 stx %o1, [%i2] ! save status
121 stx %o2, [%i3] ! save delta
122 stx %o3, [%i4] ! save watchdog
123 stx %o4, [%i5] ! save write status
124 ret
125 restore
126 SET_SIZE(hv_rng_ctl_read_v2)
127
128 /*
129 * hv_rng_ctl_write(uint64_t ctlregsptr_ra, uint64_t nstate,
130 * uint64_t wtimeout, uint64_t *tdelta)
131 */
132 ENTRY(hv_rng_ctl_write)
133 mov %o3, %o4
134 mov HV_RNG_CTL_WRITE, %o5
135 ta FAST_TRAP
136 retl
137 stx %o1, [%o4]
138 SET_SIZE(hv_rng_ctl_write)
139
140 /*
141 * hv_rng_ctl_write_v2(uint64_t ctlregsptr_ra, uint64_t nstate,
142 * uint64_t wtimeout, uint64_t rngid)
143 */
144 ENTRY(hv_rng_ctl_write_v2)
145 mov HV_RNG_CTL_WRITE, %o5
146 ta FAST_TRAP
147 retl
148 nop
149 SET_SIZE(hv_rng_ctl_write_v2)
150
151 /*
152 * hv_rng_data_read_diag(uint64_t buffer_ra, uint64_t sz,
153 * uint64_t *tdelta)
154 */
155 ENTRY(hv_rng_data_read_diag)
156 mov %o2, %o4
157 mov HV_RNG_DATA_READ_DIAG, %o5
158 ta FAST_TRAP
159 retl
160 stx %o1, [%o4]
161 SET_SIZE(hv_rng_data_read_diag)
162
163 /*
164 * hv_rng_data_read_diag_v2(uint64_t buffer_ra, uint64_t sz,
165 * uint64_t rngid, uint64_t *tdelta)
166 */
167 ENTRY(hv_rng_data_read_diag_v2)
168 mov %o3, %o4
169 mov HV_RNG_DATA_READ_DIAG, %o5
170 ta FAST_TRAP
171 retl
172 stx %o1, [%o4]
173 SET_SIZE(hv_rng_data_read_diag_v2)
174
175 /*
176 * hv_rng_data_read(uint64_t buffer_ra, uint64_t *tdelta)
177 */
178 ENTRY(hv_rng_data_read)
179 mov %o1, %o4
180 mov HV_RNG_DATA_READ, %o5
181 ta FAST_TRAP
182 retl
183 stx %o1, [%o4]
184 SET_SIZE(hv_rng_data_read)
185
186 #endif /* lint || __lint */