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 2006 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 glvc driver.
  30 */
  31 
  32 #include <sys/asm_linkage.h>
  33 #include <sys/hypervisor_api.h>
  34 #include <sys/glvc.h>
  35 
  36 #if defined(lint) || defined(__lint)
  37 
  38 /*ARGSUSED*/
  39 uint64_t
  40 hv_service_recv(uint64_t s_id, uint64_t buf_pa, uint64_t size,
  41     uint64_t *recv_bytes)
  42 { return (0); }
  43 
  44 /*ARGSUSED*/
  45 uint64_t
  46 hv_service_send(uint64_t s_id, uint64_t buf_pa, uint64_t size,
  47     uint64_t *send_bytes)
  48 { return (0); }
  49 
  50 /*ARGSUSED*/
  51 uint64_t
  52 hv_service_getstatus(uint64_t s_id, uint64_t *vreg)
  53 { return (0); }
  54 
  55 /*ARGSUSED*/
  56 uint64_t
  57 hv_service_setstatus(uint64_t s_id, uint64_t bits)
  58 { return (0); }
  59 
  60 /*ARGSUSED*/
  61 uint64_t
  62 hv_service_clrstatus(uint64_t s_id, uint64_t bits)
  63 { return (0); }
  64 
  65 #else   /* lint || __lint */
  66 
  67         /*
  68          * hv_service_recv(uint64_t s_id, uint64_t buf_pa,
  69          *     uint64_t size, uint64_t *recv_bytes);
  70          */
  71         ENTRY(hv_service_recv)
  72         save    %sp, -SA(MINFRAME), %sp
  73         mov     %i0, %o0
  74         mov     %i1, %o1
  75         mov     %i2, %o2
  76         mov     %i3, %o3
  77         mov     SVC_RECV, %o5
  78         ta      FAST_TRAP
  79         brnz    %o0, 1f
  80         mov     %o0, %i0
  81         stx     %o1, [%i3]
  82 1:
  83         ret
  84         restore
  85         SET_SIZE(hv_service_recv)
  86 
  87         /*
  88          * hv_service_send(uint64_t s_id, uint64_t buf_pa,
  89          *     uint64_t size, uint64_t *recv_bytes);
  90          */
  91         ENTRY(hv_service_send)
  92         save    %sp, -SA(MINFRAME), %sp
  93         mov     %i0, %o0
  94         mov     %i1, %o1
  95         mov     %i2, %o2
  96         mov     %i3, %o3
  97         mov     SVC_SEND, %o5
  98         ta      FAST_TRAP
  99         brnz    %o0, 1f
 100         mov     %o0, %i0
 101         stx     %o1, [%i3]
 102 1:
 103         ret
 104         restore 
 105         SET_SIZE(hv_service_send)
 106         
 107         /*
 108          * hv_service_getstatus(uint64_t s_id, uint64_t *vreg);
 109          */
 110         ENTRY(hv_service_getstatus)
 111         mov     %o1, %o4                        ! save datap
 112         mov     SVC_GETSTATUS, %o5
 113         ta      FAST_TRAP
 114         brz,a   %o0, 1f
 115         stx     %o1, [%o4]
 116 1:
 117         retl
 118         nop
 119         SET_SIZE(hv_service_getstatus)
 120         
 121         /*
 122          * hv_service_setstatus(uint64_t s_id, uint64_t bits);
 123          */
 124         ENTRY(hv_service_setstatus)
 125         mov     SVC_SETSTATUS, %o5
 126         ta      FAST_TRAP
 127         retl
 128         nop
 129         SET_SIZE(hv_service_setstatus)
 130 
 131         /*
 132          * hv_service_clrstatus(uint64_t s_id, uint64_t bits);
 133          */
 134         ENTRY(hv_service_clrstatus)
 135         mov     SVC_CLRSTATUS, %o5
 136         ta      FAST_TRAP
 137         retl
 138         nop
 139         SET_SIZE(hv_service_clrstatus)
 140 
 141 #endif  /* lint || __lint */