Subversion Repositories HelenOS

Rev

Rev 3582 | Rev 3743 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (c) 2005 Jakub Jermar
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  * - Redistributions of source code must retain the above copyright
  10.  *   notice, this list of conditions and the following disclaimer.
  11.  * - Redistributions in binary form must reproduce the above copyright
  12.  *   notice, this list of conditions and the following disclaimer in the
  13.  *   documentation and/or other materials provided with the distribution.
  14.  * - The name of the author may not be used to endorse or promote products
  15.  *   derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. /** @addtogroup sparc64
  30.  * @{
  31.  */
  32. /** @file
  33.  */
  34.  
  35. #ifndef KERN_sparc64_REGISTER_H_
  36. #define KERN_sparc64_REGISTER_H_
  37.  
  38. #include <arch/regdef.h>
  39. #include <arch/types.h>
  40.  
  41. /** Version Register. */
  42. union ver_reg {
  43.     uint64_t value;
  44.     struct {
  45.         uint16_t manuf; /**< Manufacturer code. */
  46.         uint16_t impl;  /**< Implementation code. */
  47.         uint8_t mask;   /**< Mask set revision. */
  48.         unsigned : 8;
  49.         uint8_t maxtl;
  50.         unsigned : 3;
  51.         unsigned maxwin : 5;
  52.     } __attribute__ ((packed));
  53. };
  54. typedef union ver_reg ver_reg_t;
  55.  
  56. /** Processor State Register. */
  57. union pstate_reg {
  58.     uint64_t value;
  59.     struct {
  60.         uint64_t : 52;
  61.         unsigned ig : 1;    /**< Interrupt Globals. */
  62.         unsigned mg : 1;    /**< MMU Globals. */
  63.         unsigned cle : 1;   /**< Current Little Endian. */
  64.         unsigned tle : 1;   /**< Trap Little Endian. */
  65.         unsigned mm : 2;    /**< Memory Model. */
  66.         unsigned red : 1;   /**< RED state. */
  67.         unsigned pef : 1;   /**< Enable floating-point. */
  68.         unsigned am : 1;    /**< 32-bit Address Mask. */
  69.         unsigned priv : 1;  /**< Privileged Mode. */
  70.         unsigned ie : 1;    /**< Interrupt Enable. */
  71.         unsigned ag : 1;    /**< Alternate Globals*/
  72.     } __attribute__ ((packed));
  73. };
  74. typedef union pstate_reg pstate_reg_t;
  75.  
  76. /** TICK Register. */
  77. union tick_reg {
  78.     uint64_t value;
  79.     struct {
  80.         unsigned npt : 1;   /**< Non-privileged Trap enable. */
  81.         uint64_t counter : 63;  /**< Elapsed CPU clck cycle counter. */
  82.     } __attribute__ ((packed));
  83. };
  84. typedef union tick_reg tick_reg_t;
  85.  
  86. /** TICK_compare Register. */
  87. union tick_compare_reg {
  88.     uint64_t value;
  89.     struct {
  90.         unsigned int_dis : 1;       /**< TICK_INT interrupt disabled flag. */
  91.         uint64_t tick_cmpr : 63;    /**< Compare value for TICK interrupts. */
  92.     } __attribute__ ((packed));
  93. };
  94. typedef union tick_compare_reg tick_compare_reg_t;
  95.  
  96. /** SOFTINT Register. */
  97. union softint_reg {
  98.     uint64_t value;
  99.     struct {
  100.         uint64_t : 47;
  101.         unsigned stick_int : 1;
  102.         unsigned int_level : 15;
  103.         unsigned tick_int : 1;
  104.     } __attribute__ ((packed));
  105. };
  106. typedef union softint_reg softint_reg_t;
  107.  
  108. /** Floating-point Registers State Register. */
  109. union fprs_reg {
  110.     uint64_t value;
  111.     struct {
  112.         uint64_t : 61;
  113.         unsigned fef : 1;
  114.         unsigned du : 1;
  115.         unsigned dl : 1;
  116.     } __attribute__ ((packed));
  117. };
  118. typedef union fprs_reg fprs_reg_t;
  119.  
  120. /** UPA_CONFIG/FIREPLANE_CONFIG register.
  121.  *
  122.  * Note that format of this register differs significantly from
  123.  * processor version to version. The format defined here
  124.  * is the common subset for all supported processor versions.
  125.  */
  126. union icbus_config {
  127.     uint64_t value;
  128.     struct {
  129. #if defined (US)
  130.         uint64_t : 34;
  131.         unsigned pcon : 8;  /**< Processor configuration. */
  132.         unsigned mid : 5;   /**< Module (processor) ID register. */
  133.         unsigned pcap : 17; /**< Processor capabilities. */
  134. #elif defined (US3)
  135.         uint64_t : 37;
  136.         unsigned mid : 10;  /**< Agent ID in US-IV+ manual.*/
  137.         uint64_t : 17;
  138. #endif
  139.     } __attribute__ ((packed));
  140. };
  141. typedef union icbus_config icbus_config_t;
  142.  
  143. #endif
  144.  
  145. /** @}
  146.  */
  147.