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 2009 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  */
  25 
  26 /*
  27  * Routines for manipulating the UltraSPARC performance
  28  * counter registers (%pcr and %pic)
  29  */
  30 
  31 #include <sys/asm_linkage.h>
  32 
  33 #if defined(lint) || defined(__lint)
  34 
  35 #include <sys/cpc_ultra.h>
  36 
  37 /*ARGSUSED*/
  38 void
  39 ultra_setpcr(uint64_t pcr)
  40 {}
  41 
  42 /*ARGSUSED*/
  43 uint64_t
  44 ultra_getpcr(void)
  45 { return (0); }
  46 
  47 /*ARGSUSED*/
  48 void
  49 ultra_setpic(uint64_t pic)
  50 {}
  51 
  52 uint64_t
  53 ultra_getpic(void)
  54 { return (0); }
  55 
  56 #else   /* lint || __lint */
  57 
  58         ENTRY(ultra_setpcr)
  59         retl
  60         wr      %o0, %pcr
  61         SET_SIZE(ultra_setpcr)
  62 
  63         ENTRY(ultra_getpcr)
  64         retl
  65         rd      %pcr, %o0
  66         SET_SIZE(ultra_getpcr)
  67 
  68         ENTRY(ultra_setpic)
  69 #if defined(BB_ERRATA_1)        /* Writes to %pic may fail */
  70         ba      1f
  71         nop
  72         .align  16
  73 1:      wr      %o0, %pic
  74         rd      %pic, %g0
  75         retl
  76         nop
  77 #else
  78         retl
  79         wr      %o0, %pic
  80 #endif  /* BB_ERRATA_1 */
  81         SET_SIZE(ultra_setpic)
  82 
  83         ENTRY(ultra_getpic)
  84         retl
  85         rd      %pic, %o0
  86         SET_SIZE(ultra_getpic)
  87 
  88 #endif  /* lint || __lint */