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 */