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 /*
  27  * Hypervisor calls called by ncp driver.
  28  */
  29 
  30 #include <sys/asm_linkage.h>
  31 #include <sys/hypervisor_api.h>
  32 #include <sys/n2rng.h>
  33 
  34         /*
  35          * hv_rng_get_diag_control()
  36          */
  37         ENTRY(hv_rng_get_diag_control)
  38         mov     HV_RNG_GET_DIAG_CONTROL, %o5
  39         ta      FAST_TRAP
  40         retl
  41         nop
  42         SET_SIZE(hv_rng_get_diag_control)
  43 
  44         /*
  45          * hv_rng_ctl_read(uint64_t ctlregsptr_ra, uint64_t *rstate,
  46          *         uint64_t *tdelta)
  47          */
  48         ENTRY(hv_rng_ctl_read)
  49         mov     %o1, %o3
  50         mov     %o2, %o4
  51         mov     HV_RNG_CTL_READ, %o5
  52         ta      FAST_TRAP
  53         stx     %o1, [%o3]
  54         retl
  55         stx     %o2, [%o4]
  56         SET_SIZE(hv_rng_ctl_read)
  57 
  58         /*
  59          * hv_rng_ctl_read_v2(uint64_t ctlregsptr_ra, uint64_t rngid,
  60          *         uint64_t *rstate, uint64_t *tdelta, uint64_t *wdelta,
  61          *         uint64_t *wstatus)
  62          */
  63         ENTRY(hv_rng_ctl_read_v2)
  64         save    %sp, -SA(MINFRAME64), %sp
  65         mov     %i0, %o0
  66         mov     %i1, %o1
  67         mov     HV_RNG_CTL_READ, %o5
  68         ta      FAST_TRAP
  69         mov     %o0, %i0        ! trap status
  70         stx     %o1, [%i2]      ! save status
  71         stx     %o2, [%i3]      ! save delta
  72         stx     %o3, [%i4]      ! save watchdog
  73         stx     %o4, [%i5]      ! save write status
  74         ret
  75         restore
  76         SET_SIZE(hv_rng_ctl_read_v2)
  77 
  78         /*
  79          * hv_rng_ctl_write(uint64_t ctlregsptr_ra, uint64_t nstate,
  80          *         uint64_t wtimeout, uint64_t *tdelta)
  81          */
  82         ENTRY(hv_rng_ctl_write)
  83         mov     %o3, %o4
  84         mov     HV_RNG_CTL_WRITE, %o5
  85         ta      FAST_TRAP
  86         retl
  87         stx     %o1, [%o4]
  88         SET_SIZE(hv_rng_ctl_write)
  89 
  90         /*
  91          * hv_rng_ctl_write_v2(uint64_t ctlregsptr_ra, uint64_t nstate,
  92          *         uint64_t wtimeout, uint64_t rngid)
  93          */
  94         ENTRY(hv_rng_ctl_write_v2)
  95         mov     HV_RNG_CTL_WRITE, %o5
  96         ta      FAST_TRAP
  97         retl
  98         nop
  99         SET_SIZE(hv_rng_ctl_write_v2)
 100 
 101         /*
 102          * hv_rng_data_read_diag(uint64_t buffer_ra, uint64_t sz,
 103          *         uint64_t *tdelta)
 104          */
 105         ENTRY(hv_rng_data_read_diag)
 106         mov     %o2, %o4
 107         mov     HV_RNG_DATA_READ_DIAG, %o5
 108         ta      FAST_TRAP
 109         retl
 110         stx     %o1, [%o4]
 111         SET_SIZE(hv_rng_data_read_diag)
 112 
 113         /*
 114          * hv_rng_data_read_diag_v2(uint64_t buffer_ra, uint64_t sz,
 115          *         uint64_t rngid, uint64_t *tdelta)
 116          */
 117         ENTRY(hv_rng_data_read_diag_v2)
 118         mov     %o3, %o4
 119         mov     HV_RNG_DATA_READ_DIAG, %o5
 120         ta      FAST_TRAP
 121         retl
 122         stx     %o1, [%o4]
 123         SET_SIZE(hv_rng_data_read_diag_v2)
 124 
 125         /*
 126          * hv_rng_data_read(uint64_t buffer_ra, uint64_t *tdelta)
 127          */
 128         ENTRY(hv_rng_data_read)
 129         mov     %o1, %o4
 130         mov     HV_RNG_DATA_READ, %o5
 131         ta      FAST_TRAP
 132         retl
 133         stx     %o1, [%o4]
 134         SET_SIZE(hv_rng_data_read)
 135