Print this page
    
update to acpica-unix2-20140114
update to acpica-unix2-20131218
acpica-unix2-20130823
PANKOVs restructure
    
      
        | Split | Close | 
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/intel/sys/acpi/actbl1.h
          +++ new/usr/src/common/acpica/include/actbl1.h
   1    1  /******************************************************************************
   2    2   *
   3    3   * Name: actbl1.h - Additional ACPI table definitions
   4    4   *
   5    5   *****************************************************************************/
   6    6  
   7    7  /*
   8      - * Copyright (C) 2000 - 2011, Intel Corp.
        8 + * Copyright (C) 2000 - 2014, Intel Corp.
   9    9   * All rights reserved.
  10   10   *
  11   11   * Redistribution and use in source and binary forms, with or without
  12   12   * modification, are permitted provided that the following conditions
  13   13   * are met:
  14   14   * 1. Redistributions of source code must retain the above copyright
  15   15   *    notice, this list of conditions, and the following disclaimer,
  16   16   *    without modification.
  17   17   * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18   18   *    substantially similar to the "NO WARRANTY" disclaimer below
  19   19   *    ("Disclaimer") and any redistribution must be conditioned upon
  20   20   *    including a substantially similar Disclaimer requirement for further
  21   21   *    binary redistribution.
  22   22   * 3. Neither the names of the above-listed copyright holders nor the names
  23   23   *    of any contributors may be used to endorse or promote products derived
  24   24   *    from this software without specific prior written permission.
  25   25   *
  26   26   * Alternatively, this software may be distributed under the terms of the
  27   27   * GNU General Public License ("GPL") version 2 as published by the Free
  28   28   * Software Foundation.
  29   29   *
  30   30   * NO WARRANTY
  31   31   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  32   32   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  33   33   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  34   34   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  35   35   * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  36   36   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  37   37   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  38   38   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39   39   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  40   40   * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  41   41   * POSSIBILITY OF SUCH DAMAGES.
  42   42   */
  43   43  
  44   44  #ifndef __ACTBL1_H__
  45   45  #define __ACTBL1_H__
  46   46  
  47   47  
  48   48  /*******************************************************************************
  49   49   *
  50   50   * Additional ACPI Tables (1)
  51   51   *
  52   52   * These tables are not consumed directly by the ACPICA subsystem, but are
  53   53   * included here to support device drivers and the AML disassembler.
  54   54   *
  55   55   * The tables in this file are fully defined within the ACPI specification.
  56   56   *
  57   57   ******************************************************************************/
  58   58  
  59   59  
  60   60  /*
  61   61   * Values for description table header signatures for tables defined in this
  62   62   * file. Useful because they make it more difficult to inadvertently type in
  63   63   * the wrong signature.
  64   64   */
  65   65  #define ACPI_SIG_BERT           "BERT"      /* Boot Error Record Table */
  66   66  #define ACPI_SIG_CPEP           "CPEP"      /* Corrected Platform Error Polling table */
  67   67  #define ACPI_SIG_ECDT           "ECDT"      /* Embedded Controller Boot Resources Table */
  68   68  #define ACPI_SIG_EINJ           "EINJ"      /* Error Injection table */
  69   69  #define ACPI_SIG_ERST           "ERST"      /* Error Record Serialization Table */
  70   70  #define ACPI_SIG_HEST           "HEST"      /* Hardware Error Source Table */
  71   71  #define ACPI_SIG_MADT           "APIC"      /* Multiple APIC Description Table */
  72   72  #define ACPI_SIG_MSCT           "MSCT"      /* Maximum System Characteristics Table */
  73   73  #define ACPI_SIG_SBST           "SBST"      /* Smart Battery Specification Table */
  74   74  #define ACPI_SIG_SLIT           "SLIT"      /* System Locality Distance Information Table */
  
    | ↓ open down ↓ | 56 lines elided | ↑ open up ↑ | 
  75   75  #define ACPI_SIG_SRAT           "SRAT"      /* System Resource Affinity Table */
  76   76  
  77   77  
  78   78  /*
  79   79   * All tables must be byte-packed to match the ACPI specification, since
  80   80   * the tables are provided by the system BIOS.
  81   81   */
  82   82  #pragma pack(1)
  83   83  
  84   84  /*
  85      - * Note about bitfields: The UINT8 type is used for bitfields in ACPI tables.
  86      - * This is the only type that is even remotely portable. Anything else is not
  87      - * portable, so do not use any other bitfield types.
       85 + * Note: C bitfields are not used for this reason:
       86 + *
       87 + * "Bitfields are great and easy to read, but unfortunately the C language
       88 + * does not specify the layout of bitfields in memory, which means they are
       89 + * essentially useless for dealing with packed data in on-disk formats or
       90 + * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
       91 + * this decision was a design error in C. Ritchie could have picked an order
       92 + * and stuck with it." Norman Ramsey.
       93 + * See http://stackoverflow.com/a/1053662/41661
  88   94   */
  89   95  
  90   96  
  91   97  /*******************************************************************************
  92   98   *
  93   99   * Common subtable headers
  94  100   *
  95  101   ******************************************************************************/
  96  102  
  97  103  /* Generic subtable header (used in MADT, SRAT, etc.) */
  98  104  
  99  105  typedef struct acpi_subtable_header
 100  106  {
 101  107      UINT8                   Type;
 102  108      UINT8                   Length;
 103  109  
 104  110  } ACPI_SUBTABLE_HEADER;
 105  111  
 106  112  
 107  113  /* Subtable header for WHEA tables (EINJ, ERST, WDAT) */
 108  114  
 109  115  typedef struct acpi_whea_header
 110  116  {
 111  117      UINT8                   Action;
 112  118      UINT8                   Instruction;
 113  119      UINT8                   Flags;
 114  120      UINT8                   Reserved;
 115  121      ACPI_GENERIC_ADDRESS    RegisterRegion;
 116  122      UINT64                  Value;              /* Value used with Read/Write register */
 117  123      UINT64                  Mask;               /* Bitmask required for this register instruction */
 118  124  
 119  125  } ACPI_WHEA_HEADER;
 120  126  
 121  127  
 122  128  /*******************************************************************************
  
    | ↓ open down ↓ | 25 lines elided | ↑ open up ↑ | 
 123  129   *
 124  130   * BERT - Boot Error Record Table (ACPI 4.0)
 125  131   *        Version 1
 126  132   *
 127  133   ******************************************************************************/
 128  134  
 129  135  typedef struct acpi_table_bert
 130  136  {
 131  137      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 132  138      UINT32                  RegionLength;       /* Length of the boot error region */
 133      -    UINT64                  Address;            /* Physical addresss of the error region */
      139 +    UINT64                  Address;            /* Physical address of the error region */
 134  140  
 135  141  } ACPI_TABLE_BERT;
 136  142  
 137  143  
 138  144  /* Boot Error Region (not a subtable, pointed to by Address field above) */
 139  145  
 140  146  typedef struct acpi_bert_region
 141  147  {
 142  148      UINT32                  BlockStatus;        /* Type of error information */
 143  149      UINT32                  RawDataOffset;      /* Offset to raw error data */
 144  150      UINT32                  RawDataLength;      /* Length of raw error data */
 145  151      UINT32                  DataLength;         /* Length of generic error data */
 146  152      UINT32                  ErrorSeverity;      /* Severity code */
 147  153  
 148  154  } ACPI_BERT_REGION;
 149  155  
 150  156  /* Values for BlockStatus flags above */
 151  157  
 152  158  #define ACPI_BERT_UNCORRECTABLE             (1)
 153  159  #define ACPI_BERT_CORRECTABLE               (1<<1)
 154  160  #define ACPI_BERT_MULTIPLE_UNCORRECTABLE    (1<<2)
 155  161  #define ACPI_BERT_MULTIPLE_CORRECTABLE      (1<<3)
 156  162  #define ACPI_BERT_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
 157  163  
 158  164  /* Values for ErrorSeverity above */
 159  165  
 160  166  enum AcpiBertErrorSeverity
 161  167  {
 162  168      ACPI_BERT_ERROR_CORRECTABLE     = 0,
 163  169      ACPI_BERT_ERROR_FATAL           = 1,
 164  170      ACPI_BERT_ERROR_CORRECTED       = 2,
 165  171      ACPI_BERT_ERROR_NONE            = 3,
 166  172      ACPI_BERT_ERROR_RESERVED        = 4     /* 4 and greater are reserved */
 167  173  };
 168  174  
 169  175  /*
 170  176   * Note: The generic error data that follows the ErrorSeverity field above
 171  177   * uses the ACPI_HEST_GENERIC_DATA defined under the HEST table below
 172  178   */
 173  179  
 174  180  
 175  181  /*******************************************************************************
 176  182   *
 177  183   * CPEP - Corrected Platform Error Polling table (ACPI 4.0)
 178  184   *        Version 1
 179  185   *
 180  186   ******************************************************************************/
 181  187  
 182  188  typedef struct acpi_table_cpep
 183  189  {
 184  190      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 185  191      UINT64                  Reserved;
 186  192  
 187  193  } ACPI_TABLE_CPEP;
 188  194  
 189  195  
 190  196  /* Subtable */
 191  197  
 192  198  typedef struct acpi_cpep_polling
 193  199  {
 194  200      ACPI_SUBTABLE_HEADER    Header;
 195  201      UINT8                   Id;                 /* Processor ID */
 196  202      UINT8                   Eid;                /* Processor EID */
 197  203      UINT32                  Interval;           /* Polling interval (msec) */
 198  204  
 199  205  } ACPI_CPEP_POLLING;
 200  206  
 201  207  
 202  208  /*******************************************************************************
 203  209   *
 204  210   * ECDT - Embedded Controller Boot Resources Table
 205  211   *        Version 1
 206  212   *
 207  213   ******************************************************************************/
 208  214  
 209  215  typedef struct acpi_table_ecdt
 210  216  {
 211  217      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 212  218      ACPI_GENERIC_ADDRESS    Control;            /* Address of EC command/status register */
 213  219      ACPI_GENERIC_ADDRESS    Data;               /* Address of EC data register */
 214  220      UINT32                  Uid;                /* Unique ID - must be same as the EC _UID method */
 215  221      UINT8                   Gpe;                /* The GPE for the EC */
 216  222      UINT8                   Id[1];              /* Full namepath of the EC in the ACPI namespace */
 217  223  
 218  224  } ACPI_TABLE_ECDT;
 219  225  
 220  226  
 221  227  /*******************************************************************************
 222  228   *
 223  229   * EINJ - Error Injection Table (ACPI 4.0)
 224  230   *        Version 1
 225  231   *
 226  232   ******************************************************************************/
 227  233  
 228  234  typedef struct acpi_table_einj
 229  235  {
 230  236      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 231  237      UINT32                  HeaderLength;
 232  238      UINT8                   Flags;
 233  239      UINT8                   Reserved[3];
 234  240      UINT32                  Entries;
 235  241  
 236  242  } ACPI_TABLE_EINJ;
 237  243  
 238  244  
 239  245  /* EINJ Injection Instruction Entries (actions) */
 240  246  
 241  247  typedef struct acpi_einj_entry
 242  248  {
 243  249      ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
 244  250  
  
    | ↓ open down ↓ | 101 lines elided | ↑ open up ↑ | 
 245  251  } ACPI_EINJ_ENTRY;
 246  252  
 247  253  /* Masks for Flags field above */
 248  254  
 249  255  #define ACPI_EINJ_PRESERVE          (1)
 250  256  
 251  257  /* Values for Action field above */
 252  258  
 253  259  enum AcpiEinjActions
 254  260  {
 255      -    ACPI_EINJ_BEGIN_OPERATION       = 0,
 256      -    ACPI_EINJ_GET_TRIGGER_TABLE     = 1,
 257      -    ACPI_EINJ_SET_ERROR_TYPE        = 2,
 258      -    ACPI_EINJ_GET_ERROR_TYPE        = 3,
 259      -    ACPI_EINJ_END_OPERATION         = 4,
 260      -    ACPI_EINJ_EXECUTE_OPERATION     = 5,
 261      -    ACPI_EINJ_CHECK_BUSY_STATUS     = 6,
 262      -    ACPI_EINJ_GET_COMMAND_STATUS    = 7,
 263      -    ACPI_EINJ_ACTION_RESERVED       = 8,     /* 8 and greater are reserved */
 264      -    ACPI_EINJ_TRIGGER_ERROR         = 0xFF   /* Except for this value */
      261 +    ACPI_EINJ_BEGIN_OPERATION               = 0,
      262 +    ACPI_EINJ_GET_TRIGGER_TABLE             = 1,
      263 +    ACPI_EINJ_SET_ERROR_TYPE                = 2,
      264 +    ACPI_EINJ_GET_ERROR_TYPE                = 3,
      265 +    ACPI_EINJ_END_OPERATION                 = 4,
      266 +    ACPI_EINJ_EXECUTE_OPERATION             = 5,
      267 +    ACPI_EINJ_CHECK_BUSY_STATUS             = 6,
      268 +    ACPI_EINJ_GET_COMMAND_STATUS            = 7,
      269 +    ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS   = 8,
      270 +    ACPI_EINJ_ACTION_RESERVED               = 9,     /* 9 and greater are reserved */
      271 +    ACPI_EINJ_TRIGGER_ERROR                 = 0xFF   /* Except for this value */
 265  272  };
 266  273  
 267  274  /* Values for Instruction field above */
 268  275  
 269  276  enum AcpiEinjInstructions
 270  277  {
 271  278      ACPI_EINJ_READ_REGISTER         = 0,
 272  279      ACPI_EINJ_READ_REGISTER_VALUE   = 1,
 273  280      ACPI_EINJ_WRITE_REGISTER        = 2,
 274  281      ACPI_EINJ_WRITE_REGISTER_VALUE  = 3,
 275  282      ACPI_EINJ_NOOP                  = 4,
 276      -    ACPI_EINJ_INSTRUCTION_RESERVED  = 5     /* 5 and greater are reserved */
      283 +    ACPI_EINJ_FLUSH_CACHELINE       = 5,
      284 +    ACPI_EINJ_INSTRUCTION_RESERVED  = 6     /* 6 and greater are reserved */
 277  285  };
 278  286  
      287 +typedef struct acpi_einj_error_type_with_addr
      288 +{
      289 +    UINT32                  ErrorType;
      290 +    UINT32                  VendorStructOffset;
      291 +    UINT32                  Flags;
      292 +    UINT32                  ApicId;
      293 +    UINT64                  Address;
      294 +    UINT64                  Range;
      295 +    UINT32                  PcieId;
 279  296  
      297 +} ACPI_EINJ_ERROR_TYPE_WITH_ADDR;
      298 +
      299 +typedef struct acpi_einj_vendor
      300 +{
      301 +    UINT32                  Length;
      302 +    UINT32                  PcieId;
      303 +    UINT16                  VendorId;
      304 +    UINT16                  DeviceId;
      305 +    UINT8                   RevisionId;
      306 +    UINT8                   Reserved[3];
      307 +
      308 +} ACPI_EINJ_VENDOR;
      309 +
      310 +
 280  311  /* EINJ Trigger Error Action Table */
 281  312  
 282  313  typedef struct acpi_einj_trigger
 283  314  {
 284  315      UINT32                  HeaderSize;
 285  316      UINT32                  Revision;
 286  317      UINT32                  TableSize;
 287  318      UINT32                  EntryCount;
 288  319  
 289  320  } ACPI_EINJ_TRIGGER;
 290  321  
 291  322  /* Command status return values */
 292  323  
 293  324  enum AcpiEinjCommandStatus
 294  325  {
 295  326      ACPI_EINJ_SUCCESS               = 0,
 296  327      ACPI_EINJ_FAILURE               = 1,
 297  328      ACPI_EINJ_INVALID_ACCESS        = 2,
 298  329      ACPI_EINJ_STATUS_RESERVED       = 3     /* 3 and greater are reserved */
 299  330  };
 300  331  
 301  332  
 302  333  /* Error types returned from ACPI_EINJ_GET_ERROR_TYPE (bitfield) */
 303  334  
 304  335  #define ACPI_EINJ_PROCESSOR_CORRECTABLE     (1)
 305  336  #define ACPI_EINJ_PROCESSOR_UNCORRECTABLE   (1<<1)
  
    | ↓ open down ↓ | 16 lines elided | ↑ open up ↑ | 
 306  337  #define ACPI_EINJ_PROCESSOR_FATAL           (1<<2)
 307  338  #define ACPI_EINJ_MEMORY_CORRECTABLE        (1<<3)
 308  339  #define ACPI_EINJ_MEMORY_UNCORRECTABLE      (1<<4)
 309  340  #define ACPI_EINJ_MEMORY_FATAL              (1<<5)
 310  341  #define ACPI_EINJ_PCIX_CORRECTABLE          (1<<6)
 311  342  #define ACPI_EINJ_PCIX_UNCORRECTABLE        (1<<7)
 312  343  #define ACPI_EINJ_PCIX_FATAL                (1<<8)
 313  344  #define ACPI_EINJ_PLATFORM_CORRECTABLE      (1<<9)
 314  345  #define ACPI_EINJ_PLATFORM_UNCORRECTABLE    (1<<10)
 315  346  #define ACPI_EINJ_PLATFORM_FATAL            (1<<11)
      347 +#define ACPI_EINJ_VENDOR_DEFINED            (1<<31)
 316  348  
 317  349  
 318  350  /*******************************************************************************
 319  351   *
 320  352   * ERST - Error Record Serialization Table (ACPI 4.0)
 321  353   *        Version 1
 322  354   *
 323  355   ******************************************************************************/
 324  356  
 325  357  typedef struct acpi_table_erst
 326  358  {
 327  359      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 328  360      UINT32                  HeaderLength;
 329  361      UINT32                  Reserved;
 330  362      UINT32                  Entries;
 331  363  
 332  364  } ACPI_TABLE_ERST;
 333  365  
 334  366  
 335  367  /* ERST Serialization Entries (actions) */
 336  368  
 337  369  typedef struct acpi_erst_entry
 338  370  {
 339  371      ACPI_WHEA_HEADER        WheaHeader;         /* Common header for WHEA tables */
 340  372  
 341  373  } ACPI_ERST_ENTRY;
 342  374  
 343  375  /* Masks for Flags field above */
 344  376  
 345  377  #define ACPI_ERST_PRESERVE          (1)
 346  378  
 347  379  /* Values for Action field above */
 348  380  
 349  381  enum AcpiErstActions
 350  382  {
 351  383      ACPI_ERST_BEGIN_WRITE           = 0,
 352  384      ACPI_ERST_BEGIN_READ            = 1,
 353  385      ACPI_ERST_BEGIN_CLEAR           = 2,
 354  386      ACPI_ERST_END                   = 3,
 355  387      ACPI_ERST_SET_RECORD_OFFSET     = 4,
 356  388      ACPI_ERST_EXECUTE_OPERATION     = 5,
 357  389      ACPI_ERST_CHECK_BUSY_STATUS     = 6,
 358  390      ACPI_ERST_GET_COMMAND_STATUS    = 7,
 359  391      ACPI_ERST_GET_RECORD_ID         = 8,
 360  392      ACPI_ERST_SET_RECORD_ID         = 9,
 361  393      ACPI_ERST_GET_RECORD_COUNT      = 10,
 362  394      ACPI_ERST_BEGIN_DUMMY_WRIITE    = 11,
 363  395      ACPI_ERST_NOT_USED              = 12,
 364  396      ACPI_ERST_GET_ERROR_RANGE       = 13,
 365  397      ACPI_ERST_GET_ERROR_LENGTH      = 14,
 366  398      ACPI_ERST_GET_ERROR_ATTRIBUTES  = 15,
 367  399      ACPI_ERST_ACTION_RESERVED       = 16    /* 16 and greater are reserved */
 368  400  };
 369  401  
 370  402  /* Values for Instruction field above */
 371  403  
 372  404  enum AcpiErstInstructions
 373  405  {
 374  406      ACPI_ERST_READ_REGISTER         = 0,
 375  407      ACPI_ERST_READ_REGISTER_VALUE   = 1,
 376  408      ACPI_ERST_WRITE_REGISTER        = 2,
 377  409      ACPI_ERST_WRITE_REGISTER_VALUE  = 3,
 378  410      ACPI_ERST_NOOP                  = 4,
 379  411      ACPI_ERST_LOAD_VAR1             = 5,
 380  412      ACPI_ERST_LOAD_VAR2             = 6,
 381  413      ACPI_ERST_STORE_VAR1            = 7,
 382  414      ACPI_ERST_ADD                   = 8,
 383  415      ACPI_ERST_SUBTRACT              = 9,
 384  416      ACPI_ERST_ADD_VALUE             = 10,
 385  417      ACPI_ERST_SUBTRACT_VALUE        = 11,
 386  418      ACPI_ERST_STALL                 = 12,
 387  419      ACPI_ERST_STALL_WHILE_TRUE      = 13,
 388  420      ACPI_ERST_SKIP_NEXT_IF_TRUE     = 14,
 389  421      ACPI_ERST_GOTO                  = 15,
 390  422      ACPI_ERST_SET_SRC_ADDRESS_BASE  = 16,
 391  423      ACPI_ERST_SET_DST_ADDRESS_BASE  = 17,
 392  424      ACPI_ERST_MOVE_DATA             = 18,
 393  425      ACPI_ERST_INSTRUCTION_RESERVED  = 19    /* 19 and greater are reserved */
 394  426  };
 395  427  
 396  428  /* Command status return values */
 397  429  
 398  430  enum AcpiErstCommandStatus
 399  431  {
 400  432      ACPI_ERST_SUCESS                = 0,
 401  433      ACPI_ERST_NO_SPACE              = 1,
 402  434      ACPI_ERST_NOT_AVAILABLE         = 2,
 403  435      ACPI_ERST_FAILURE               = 3,
 404  436      ACPI_ERST_RECORD_EMPTY          = 4,
 405  437      ACPI_ERST_NOT_FOUND             = 5,
 406  438      ACPI_ERST_STATUS_RESERVED       = 6     /* 6 and greater are reserved */
 407  439  };
 408  440  
 409  441  
 410  442  /* Error Record Serialization Information */
 411  443  
 412  444  typedef struct acpi_erst_info
 413  445  {
 414  446      UINT16                  Signature;          /* Should be "ER" */
 415  447      UINT8                   Data[48];
 416  448  
 417  449  } ACPI_ERST_INFO;
 418  450  
 419  451  
 420  452  /*******************************************************************************
 421  453   *
 422  454   * HEST - Hardware Error Source Table (ACPI 4.0)
 423  455   *        Version 1
 424  456   *
 425  457   ******************************************************************************/
 426  458  
 427  459  typedef struct acpi_table_hest
 428  460  {
 429  461      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 430  462      UINT32                  ErrorSourceCount;
 431  463  
 432  464  } ACPI_TABLE_HEST;
 433  465  
 434  466  
 435  467  /* HEST subtable header */
 436  468  
 437  469  typedef struct acpi_hest_header
 438  470  {
 439  471      UINT16                  Type;
 440  472      UINT16                  SourceId;
 441  473  
 442  474  } ACPI_HEST_HEADER;
 443  475  
 444  476  
 445  477  /* Values for Type field above for subtables */
 446  478  
 447  479  enum AcpiHestTypes
 448  480  {
 449  481      ACPI_HEST_TYPE_IA32_CHECK           = 0,
 450  482      ACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,
 451  483      ACPI_HEST_TYPE_IA32_NMI             = 2,
 452  484      ACPI_HEST_TYPE_NOT_USED3            = 3,
 453  485      ACPI_HEST_TYPE_NOT_USED4            = 4,
 454  486      ACPI_HEST_TYPE_NOT_USED5            = 5,
 455  487      ACPI_HEST_TYPE_AER_ROOT_PORT        = 6,
 456  488      ACPI_HEST_TYPE_AER_ENDPOINT         = 7,
 457  489      ACPI_HEST_TYPE_AER_BRIDGE           = 8,
 458  490      ACPI_HEST_TYPE_GENERIC_ERROR        = 9,
 459  491      ACPI_HEST_TYPE_RESERVED             = 10    /* 10 and greater are reserved */
 460  492  };
 461  493  
 462  494  
 463  495  /*
 464  496   * HEST substructures contained in subtables
 465  497   */
 466  498  
 467  499  /*
 468  500   * IA32 Error Bank(s) - Follows the ACPI_HEST_IA_MACHINE_CHECK and
 469  501   * ACPI_HEST_IA_CORRECTED structures.
 470  502   */
 471  503  typedef struct acpi_hest_ia_error_bank
 472  504  {
 473  505      UINT8                   BankNumber;
 474  506      UINT8                   ClearStatusOnInit;
 475  507      UINT8                   StatusFormat;
 476  508      UINT8                   Reserved;
 477  509      UINT32                  ControlRegister;
 478  510      UINT64                  ControlData;
 479  511      UINT32                  StatusRegister;
 480  512      UINT32                  AddressRegister;
 481  513      UINT32                  MiscRegister;
 482  514  
 483  515  } ACPI_HEST_IA_ERROR_BANK;
 484  516  
  
    | ↓ open down ↓ | 159 lines elided | ↑ open up ↑ | 
 485  517  
 486  518  /* Common HEST sub-structure for PCI/AER structures below (6,7,8) */
 487  519  
 488  520  typedef struct acpi_hest_aer_common
 489  521  {
 490  522      UINT16                  Reserved1;
 491  523      UINT8                   Flags;
 492  524      UINT8                   Enabled;
 493  525      UINT32                  RecordsToPreallocate;
 494  526      UINT32                  MaxSectionsPerRecord;
 495      -    UINT32                  Bus;
      527 +    UINT32                  Bus;                    /* Bus and Segment numbers */
 496  528      UINT16                  Device;
 497  529      UINT16                  Function;
 498  530      UINT16                  DeviceControl;
 499  531      UINT16                  Reserved2;
 500  532      UINT32                  UncorrectableMask;
 501  533      UINT32                  UncorrectableSeverity;
 502  534      UINT32                  CorrectableMask;
 503  535      UINT32                  AdvancedCapabilities;
 504  536  
 505  537  } ACPI_HEST_AER_COMMON;
 506  538  
 507  539  /* Masks for HEST Flags fields */
 508  540  
 509  541  #define ACPI_HEST_FIRMWARE_FIRST        (1)
 510  542  #define ACPI_HEST_GLOBAL                (1<<1)
 511  543  
      544 +/*
      545 + * Macros to access the bus/segment numbers in Bus field above:
      546 + *  Bus number is encoded in bits 7:0
      547 + *  Segment number is encoded in bits 23:8
      548 + */
      549 +#define ACPI_HEST_BUS(Bus)              ((Bus) & 0xFF)
      550 +#define ACPI_HEST_SEGMENT(Bus)          (((Bus) >> 8) & 0xFFFF)
 512  551  
      552 +
 513  553  /* Hardware Error Notification */
 514  554  
 515  555  typedef struct acpi_hest_notify
 516  556  {
 517  557      UINT8                   Type;
 518  558      UINT8                   Length;
 519  559      UINT16                  ConfigWriteEnable;
 520  560      UINT32                  PollInterval;
 521  561      UINT32                  Vector;
 522  562      UINT32                  PollingThresholdValue;
 523  563      UINT32                  PollingThresholdWindow;
 524  564      UINT32                  ErrorThresholdValue;
 525  565      UINT32                  ErrorThresholdWindow;
 526  566  
 527  567  } ACPI_HEST_NOTIFY;
  
    | ↓ open down ↓ | 5 lines elided | ↑ open up ↑ | 
 528  568  
 529  569  /* Values for Notify Type field above */
 530  570  
 531  571  enum AcpiHestNotifyTypes
 532  572  {
 533  573      ACPI_HEST_NOTIFY_POLLED     = 0,
 534  574      ACPI_HEST_NOTIFY_EXTERNAL   = 1,
 535  575      ACPI_HEST_NOTIFY_LOCAL      = 2,
 536  576      ACPI_HEST_NOTIFY_SCI        = 3,
 537  577      ACPI_HEST_NOTIFY_NMI        = 4,
 538      -    ACPI_HEST_NOTIFY_RESERVED   = 5     /* 5 and greater are reserved */
      578 +    ACPI_HEST_NOTIFY_CMCI       = 5,    /* ACPI 5.0 */
      579 +    ACPI_HEST_NOTIFY_MCE        = 6,    /* ACPI 5.0 */
      580 +    ACPI_HEST_NOTIFY_RESERVED   = 7     /* 7 and greater are reserved */
 539  581  };
 540  582  
 541  583  /* Values for ConfigWriteEnable bitfield above */
 542  584  
 543  585  #define ACPI_HEST_TYPE                  (1)
 544  586  #define ACPI_HEST_POLL_INTERVAL         (1<<1)
 545  587  #define ACPI_HEST_POLL_THRESHOLD_VALUE  (1<<2)
 546  588  #define ACPI_HEST_POLL_THRESHOLD_WINDOW (1<<3)
 547  589  #define ACPI_HEST_ERR_THRESHOLD_VALUE   (1<<4)
 548  590  #define ACPI_HEST_ERR_THRESHOLD_WINDOW  (1<<5)
 549  591  
 550  592  
 551  593  /*
 552  594   * HEST subtables
 553  595   */
 554  596  
 555  597  /* 0: IA32 Machine Check Exception */
 556  598  
 557  599  typedef struct acpi_hest_ia_machine_check
 558  600  {
 559  601      ACPI_HEST_HEADER        Header;
 560  602      UINT16                  Reserved1;
 561  603      UINT8                   Flags;
 562  604      UINT8                   Enabled;
 563  605      UINT32                  RecordsToPreallocate;
 564  606      UINT32                  MaxSectionsPerRecord;
 565  607      UINT64                  GlobalCapabilityData;
 566  608      UINT64                  GlobalControlData;
 567  609      UINT8                   NumHardwareBanks;
 568  610      UINT8                   Reserved3[7];
 569  611  
 570  612  } ACPI_HEST_IA_MACHINE_CHECK;
 571  613  
 572  614  
 573  615  /* 1: IA32 Corrected Machine Check */
 574  616  
 575  617  typedef struct acpi_hest_ia_corrected
 576  618  {
 577  619      ACPI_HEST_HEADER        Header;
 578  620      UINT16                  Reserved1;
 579  621      UINT8                   Flags;
 580  622      UINT8                   Enabled;
 581  623      UINT32                  RecordsToPreallocate;
 582  624      UINT32                  MaxSectionsPerRecord;
 583  625      ACPI_HEST_NOTIFY        Notify;
 584  626      UINT8                   NumHardwareBanks;
 585  627      UINT8                   Reserved2[3];
 586  628  
 587  629  } ACPI_HEST_IA_CORRECTED;
 588  630  
 589  631  
 590  632  /* 2: IA32 Non-Maskable Interrupt */
 591  633  
 592  634  typedef struct acpi_hest_ia_nmi
 593  635  {
 594  636      ACPI_HEST_HEADER        Header;
 595  637      UINT32                  Reserved;
 596  638      UINT32                  RecordsToPreallocate;
 597  639      UINT32                  MaxSectionsPerRecord;
 598  640      UINT32                  MaxRawDataLength;
 599  641  
 600  642  } ACPI_HEST_IA_NMI;
 601  643  
 602  644  
 603  645  /* 3,4,5: Not used */
 604  646  
 605  647  /* 6: PCI Express Root Port AER */
 606  648  
 607  649  typedef struct acpi_hest_aer_root
 608  650  {
 609  651      ACPI_HEST_HEADER        Header;
 610  652      ACPI_HEST_AER_COMMON    Aer;
 611  653      UINT32                  RootErrorCommand;
 612  654  
 613  655  } ACPI_HEST_AER_ROOT;
 614  656  
 615  657  
 616  658  /* 7: PCI Express AER (AER Endpoint) */
 617  659  
 618  660  typedef struct acpi_hest_aer
 619  661  {
 620  662      ACPI_HEST_HEADER        Header;
 621  663      ACPI_HEST_AER_COMMON    Aer;
 622  664  
 623  665  } ACPI_HEST_AER;
 624  666  
 625  667  
 626  668  /* 8: PCI Express/PCI-X Bridge AER */
 627  669  
 628  670  typedef struct acpi_hest_aer_bridge
 629  671  {
 630  672      ACPI_HEST_HEADER        Header;
 631  673      ACPI_HEST_AER_COMMON    Aer;
 632  674      UINT32                  UncorrectableMask2;
 633  675      UINT32                  UncorrectableSeverity2;
 634  676      UINT32                  AdvancedCapabilities2;
 635  677  
 636  678  } ACPI_HEST_AER_BRIDGE;
 637  679  
 638  680  
 639  681  /* 9: Generic Hardware Error Source */
 640  682  
 641  683  typedef struct acpi_hest_generic
 642  684  {
 643  685      ACPI_HEST_HEADER        Header;
 644  686      UINT16                  RelatedSourceId;
 645  687      UINT8                   Reserved;
 646  688      UINT8                   Enabled;
 647  689      UINT32                  RecordsToPreallocate;
 648  690      UINT32                  MaxSectionsPerRecord;
 649  691      UINT32                  MaxRawDataLength;
 650  692      ACPI_GENERIC_ADDRESS    ErrorStatusAddress;
 651  693      ACPI_HEST_NOTIFY        Notify;
 652  694      UINT32                  ErrorBlockLength;
 653  695  
 654  696  } ACPI_HEST_GENERIC;
 655  697  
 656  698  
 657  699  /* Generic Error Status block */
 658  700  
 659  701  typedef struct acpi_hest_generic_status
 660  702  {
 661  703      UINT32                  BlockStatus;
 662  704      UINT32                  RawDataOffset;
 663  705      UINT32                  RawDataLength;
 664  706      UINT32                  DataLength;
 665  707      UINT32                  ErrorSeverity;
 666  708  
 667  709  } ACPI_HEST_GENERIC_STATUS;
 668  710  
 669  711  /* Values for BlockStatus flags above */
 670  712  
 671  713  #define ACPI_HEST_UNCORRECTABLE             (1)
 672  714  #define ACPI_HEST_CORRECTABLE               (1<<1)
 673  715  #define ACPI_HEST_MULTIPLE_UNCORRECTABLE    (1<<2)
 674  716  #define ACPI_HEST_MULTIPLE_CORRECTABLE      (1<<3)
 675  717  #define ACPI_HEST_ERROR_ENTRY_COUNT         (0xFF<<4) /* 8 bits, error count */
 676  718  
 677  719  
 678  720  /* Generic Error Data entry */
 679  721  
 680  722  typedef struct acpi_hest_generic_data
 681  723  {
 682  724      UINT8                   SectionType[16];
 683  725      UINT32                  ErrorSeverity;
 684  726      UINT16                  Revision;
 685  727      UINT8                   ValidationBits;
 686  728      UINT8                   Flags;
 687  729      UINT32                  ErrorDataLength;
 688  730      UINT8                   FruId[16];
 689  731      UINT8                   FruText[20];
 690  732  
 691  733  } ACPI_HEST_GENERIC_DATA;
 692  734  
 693  735  
 694  736  /*******************************************************************************
 695  737   *
 696  738   * MADT - Multiple APIC Description Table
 697  739   *        Version 3
 698  740   *
 699  741   ******************************************************************************/
 700  742  
 701  743  typedef struct acpi_table_madt
 702  744  {
 703  745      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 704  746      UINT32                  Address;            /* Physical address of local APIC */
 705  747      UINT32                  Flags;
 706  748  
 707  749  } ACPI_TABLE_MADT;
 708  750  
 709  751  /* Masks for Flags field above */
 710  752  
 711  753  #define ACPI_MADT_PCAT_COMPAT       (1)         /* 00: System also has dual 8259s */
 712  754  
 713  755  /* Values for PCATCompat flag */
 714  756  
 715  757  #define ACPI_MADT_DUAL_PIC          0
 716  758  #define ACPI_MADT_MULTIPLE_APIC     1
 717  759  
 718  760  
 719  761  /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
 720  762  
 721  763  enum AcpiMadtType
 722  764  {
 723  765      ACPI_MADT_TYPE_LOCAL_APIC           = 0,
  
    | ↓ open down ↓ | 175 lines elided | ↑ open up ↑ | 
 724  766      ACPI_MADT_TYPE_IO_APIC              = 1,
 725  767      ACPI_MADT_TYPE_INTERRUPT_OVERRIDE   = 2,
 726  768      ACPI_MADT_TYPE_NMI_SOURCE           = 3,
 727  769      ACPI_MADT_TYPE_LOCAL_APIC_NMI       = 4,
 728  770      ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE  = 5,
 729  771      ACPI_MADT_TYPE_IO_SAPIC             = 6,
 730  772      ACPI_MADT_TYPE_LOCAL_SAPIC          = 7,
 731  773      ACPI_MADT_TYPE_INTERRUPT_SOURCE     = 8,
 732  774      ACPI_MADT_TYPE_LOCAL_X2APIC         = 9,
 733  775      ACPI_MADT_TYPE_LOCAL_X2APIC_NMI     = 10,
 734      -    ACPI_MADT_TYPE_RESERVED             = 11    /* 11 and greater are reserved */
      776 +    ACPI_MADT_TYPE_GENERIC_INTERRUPT    = 11,
      777 +    ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR  = 12,
      778 +    ACPI_MADT_TYPE_RESERVED             = 13    /* 13 and greater are reserved */
 735  779  };
 736  780  
 737  781  
 738  782  /*
 739  783   * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
 740  784   */
 741  785  
 742  786  /* 0: Processor Local APIC */
 743  787  
 744  788  typedef struct acpi_madt_local_apic
 745  789  {
 746  790      ACPI_SUBTABLE_HEADER    Header;
 747  791      UINT8                   ProcessorId;        /* ACPI processor id */
 748  792      UINT8                   Id;                 /* Processor's local APIC id */
 749  793      UINT32                  LapicFlags;
 750  794  
 751  795  } ACPI_MADT_LOCAL_APIC;
 752  796  
 753  797  
 754  798  /* 1: IO APIC */
 755  799  
 756  800  typedef struct acpi_madt_io_apic
 757  801  {
 758  802      ACPI_SUBTABLE_HEADER    Header;
 759  803      UINT8                   Id;                 /* I/O APIC ID */
 760  804      UINT8                   Reserved;           /* Reserved - must be zero */
 761  805      UINT32                  Address;            /* APIC physical address */
 762  806      UINT32                  GlobalIrqBase;      /* Global system interrupt where INTI lines start */
 763  807  
 764  808  } ACPI_MADT_IO_APIC;
 765  809  
 766  810  
 767  811  /* 2: Interrupt Override */
 768  812  
 769  813  typedef struct acpi_madt_interrupt_override
 770  814  {
 771  815      ACPI_SUBTABLE_HEADER    Header;
 772  816      UINT8                   Bus;                /* 0 - ISA */
 773  817      UINT8                   SourceIrq;          /* Interrupt source (IRQ) */
 774  818      UINT32                  GlobalIrq;          /* Global system interrupt */
 775  819      UINT16                  IntiFlags;
 776  820  
 777  821  } ACPI_MADT_INTERRUPT_OVERRIDE;
 778  822  
 779  823  
 780  824  /* 3: NMI Source */
 781  825  
 782  826  typedef struct acpi_madt_nmi_source
 783  827  {
 784  828      ACPI_SUBTABLE_HEADER    Header;
 785  829      UINT16                  IntiFlags;
 786  830      UINT32                  GlobalIrq;          /* Global system interrupt */
 787  831  
 788  832  } ACPI_MADT_NMI_SOURCE;
 789  833  
 790  834  
 791  835  /* 4: Local APIC NMI */
 792  836  
 793  837  typedef struct acpi_madt_local_apic_nmi
 794  838  {
 795  839      ACPI_SUBTABLE_HEADER    Header;
 796  840      UINT8                   ProcessorId;        /* ACPI processor id */
 797  841      UINT16                  IntiFlags;
 798  842      UINT8                   Lint;               /* LINTn to which NMI is connected */
 799  843  
 800  844  } ACPI_MADT_LOCAL_APIC_NMI;
 801  845  
 802  846  
 803  847  /* 5: Address Override */
 804  848  
 805  849  typedef struct acpi_madt_local_apic_override
 806  850  {
 807  851      ACPI_SUBTABLE_HEADER    Header;
 808  852      UINT16                  Reserved;           /* Reserved, must be zero */
 809  853      UINT64                  Address;            /* APIC physical address */
 810  854  
 811  855  } ACPI_MADT_LOCAL_APIC_OVERRIDE;
 812  856  
 813  857  
 814  858  /* 6: I/O Sapic */
 815  859  
 816  860  typedef struct acpi_madt_io_sapic
 817  861  {
 818  862      ACPI_SUBTABLE_HEADER    Header;
 819  863      UINT8                   Id;                 /* I/O SAPIC ID */
 820  864      UINT8                   Reserved;           /* Reserved, must be zero */
 821  865      UINT32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
 822  866      UINT64                  Address;            /* SAPIC physical address */
 823  867  
 824  868  } ACPI_MADT_IO_SAPIC;
 825  869  
 826  870  
 827  871  /* 7: Local Sapic */
 828  872  
 829  873  typedef struct acpi_madt_local_sapic
 830  874  {
 831  875      ACPI_SUBTABLE_HEADER    Header;
 832  876      UINT8                   ProcessorId;        /* ACPI processor id */
 833  877      UINT8                   Id;                 /* SAPIC ID */
 834  878      UINT8                   Eid;                /* SAPIC EID */
 835  879      UINT8                   Reserved[3];        /* Reserved, must be zero */
 836  880      UINT32                  LapicFlags;
 837  881      UINT32                  Uid;                /* Numeric UID - ACPI 3.0 */
 838  882      char                    UidString[1];       /* String UID  - ACPI 3.0 */
 839  883  
 840  884  } ACPI_MADT_LOCAL_SAPIC;
 841  885  
 842  886  
 843  887  /* 8: Platform Interrupt Source */
 844  888  
 845  889  typedef struct acpi_madt_interrupt_source
 846  890  {
 847  891      ACPI_SUBTABLE_HEADER    Header;
 848  892      UINT16                  IntiFlags;
 849  893      UINT8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
 850  894      UINT8                   Id;                 /* Processor ID */
 851  895      UINT8                   Eid;                /* Processor EID */
 852  896      UINT8                   IoSapicVector;      /* Vector value for PMI interrupts */
 853  897      UINT32                  GlobalIrq;          /* Global system interrupt */
 854  898      UINT32                  Flags;              /* Interrupt Source Flags */
 855  899  
 856  900  } ACPI_MADT_INTERRUPT_SOURCE;
 857  901  
 858  902  /* Masks for Flags field above */
 859  903  
 860  904  #define ACPI_MADT_CPEI_OVERRIDE     (1)
 861  905  
 862  906  
 863  907  /* 9: Processor Local X2APIC (ACPI 4.0) */
 864  908  
 865  909  typedef struct acpi_madt_local_x2apic
 866  910  {
 867  911      ACPI_SUBTABLE_HEADER    Header;
 868  912      UINT16                  Reserved;           /* Reserved - must be zero */
 869  913      UINT32                  LocalApicId;        /* Processor x2APIC ID  */
 870  914      UINT32                  LapicFlags;
 871  915      UINT32                  Uid;                /* ACPI processor UID */
 872  916  
 873  917  } ACPI_MADT_LOCAL_X2APIC;
 874  918  
 875  919  
 876  920  /* 10: Local X2APIC NMI (ACPI 4.0) */
 877  921  
 878  922  typedef struct acpi_madt_local_x2apic_nmi
  
    | ↓ open down ↓ | 134 lines elided | ↑ open up ↑ | 
 879  923  {
 880  924      ACPI_SUBTABLE_HEADER    Header;
 881  925      UINT16                  IntiFlags;
 882  926      UINT32                  Uid;                /* ACPI processor UID */
 883  927      UINT8                   Lint;               /* LINTn to which NMI is connected */
 884  928      UINT8                   Reserved[3];        /* Reserved - must be zero */
 885  929  
 886  930  } ACPI_MADT_LOCAL_X2APIC_NMI;
 887  931  
 888  932  
      933 +/* 11: Generic Interrupt (ACPI 5.0) */
      934 +
      935 +typedef struct acpi_madt_generic_interrupt
      936 +{
      937 +    ACPI_SUBTABLE_HEADER    Header;
      938 +    UINT16                  Reserved;           /* Reserved - must be zero */
      939 +    UINT32                  GicId;
      940 +    UINT32                  Uid;
      941 +    UINT32                  Flags;
      942 +    UINT32                  ParkingVersion;
      943 +    UINT32                  PerformanceInterrupt;
      944 +    UINT64                  ParkedAddress;
      945 +    UINT64                  BaseAddress;
      946 +
      947 +} ACPI_MADT_GENERIC_INTERRUPT;
      948 +
      949 +
      950 +/* 12: Generic Distributor (ACPI 5.0) */
      951 +
      952 +typedef struct acpi_madt_generic_distributor
      953 +{
      954 +    ACPI_SUBTABLE_HEADER    Header;
      955 +    UINT16                  Reserved;           /* Reserved - must be zero */
      956 +    UINT32                  GicId;
      957 +    UINT64                  BaseAddress;
      958 +    UINT32                  GlobalIrqBase;
      959 +    UINT32                  Reserved2;          /* Reserved - must be zero */
      960 +
      961 +} ACPI_MADT_GENERIC_DISTRIBUTOR;
      962 +
      963 +
 889  964  /*
 890  965   * Common flags fields for MADT subtables
 891  966   */
 892  967  
 893      -/* MADT Local APIC flags (LapicFlags) */
      968 +/* MADT Local APIC flags (LapicFlags) and GIC flags */
 894  969  
 895  970  #define ACPI_MADT_ENABLED           (1)         /* 00: Processor is usable if set */
 896  971  
 897  972  /* MADT MPS INTI flags (IntiFlags) */
 898  973  
 899  974  #define ACPI_MADT_POLARITY_MASK     (3)         /* 00-01: Polarity of APIC I/O input signals */
 900  975  #define ACPI_MADT_TRIGGER_MASK      (3<<2)      /* 02-03: Trigger mode of APIC input signals */
 901  976  
 902  977  /* Values for MPS INTI flags */
 903  978  
 904  979  #define ACPI_MADT_POLARITY_CONFORMS       0
 905  980  #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
 906  981  #define ACPI_MADT_POLARITY_RESERVED       2
 907  982  #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
 908  983  
 909  984  #define ACPI_MADT_TRIGGER_CONFORMS        (0)
 910  985  #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
 911  986  #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
 912  987  #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
 913  988  
 914  989  
 915  990  /*******************************************************************************
 916  991   *
 917  992   * MSCT - Maximum System Characteristics Table (ACPI 4.0)
 918  993   *        Version 1
 919  994   *
 920  995   ******************************************************************************/
 921  996  
 922  997  typedef struct acpi_table_msct
 923  998  {
 924  999      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 925 1000      UINT32                  ProximityOffset;    /* Location of proximity info struct(s) */
 926 1001      UINT32                  MaxProximityDomains;/* Max number of proximity domains */
 927 1002      UINT32                  MaxClockDomains;    /* Max number of clock domains */
 928 1003      UINT64                  MaxAddress;         /* Max physical address in system */
 929 1004  
 930 1005  } ACPI_TABLE_MSCT;
 931 1006  
 932 1007  
 933 1008  /* Subtable - Maximum Proximity Domain Information. Version 1 */
 934 1009  
 935 1010  typedef struct acpi_msct_proximity
 936 1011  {
 937 1012      UINT8                   Revision;
 938 1013      UINT8                   Length;
 939 1014      UINT32                  RangeStart;         /* Start of domain range */
 940 1015      UINT32                  RangeEnd;           /* End of domain range */
 941 1016      UINT32                  ProcessorCapacity;
 942 1017      UINT64                  MemoryCapacity;     /* In bytes */
 943 1018  
 944 1019  } ACPI_MSCT_PROXIMITY;
 945 1020  
 946 1021  
 947 1022  /*******************************************************************************
 948 1023   *
 949 1024   * SBST - Smart Battery Specification Table
 950 1025   *        Version 1
 951 1026   *
 952 1027   ******************************************************************************/
 953 1028  
 954 1029  typedef struct acpi_table_sbst
 955 1030  {
 956 1031      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 957 1032      UINT32                  WarningLevel;
 958 1033      UINT32                  LowLevel;
 959 1034      UINT32                  CriticalLevel;
 960 1035  
 961 1036  } ACPI_TABLE_SBST;
 962 1037  
 963 1038  
 964 1039  /*******************************************************************************
 965 1040   *
 966 1041   * SLIT - System Locality Distance Information Table
 967 1042   *        Version 1
 968 1043   *
 969 1044   ******************************************************************************/
 970 1045  
 971 1046  typedef struct acpi_table_slit
 972 1047  {
 973 1048      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 974 1049      UINT64                  LocalityCount;
 975 1050      UINT8                   Entry[1];           /* Real size = localities^2 */
 976 1051  
 977 1052  } ACPI_TABLE_SLIT;
 978 1053  
 979 1054  
 980 1055  /*******************************************************************************
 981 1056   *
 982 1057   * SRAT - System Resource Affinity Table
 983 1058   *        Version 3
 984 1059   *
 985 1060   ******************************************************************************/
 986 1061  
 987 1062  typedef struct acpi_table_srat
 988 1063  {
 989 1064      ACPI_TABLE_HEADER       Header;             /* Common ACPI table header */
 990 1065      UINT32                  TableRevision;      /* Must be value '1' */
 991 1066      UINT64                  Reserved;           /* Reserved, must be zero */
 992 1067  
 993 1068  } ACPI_TABLE_SRAT;
 994 1069  
 995 1070  /* Values for subtable type in ACPI_SUBTABLE_HEADER */
 996 1071  
 997 1072  enum AcpiSratType
 998 1073  {
 999 1074      ACPI_SRAT_TYPE_CPU_AFFINITY         = 0,
1000 1075      ACPI_SRAT_TYPE_MEMORY_AFFINITY      = 1,
1001 1076      ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY  = 2,
1002 1077      ACPI_SRAT_TYPE_RESERVED             = 3     /* 3 and greater are reserved */
1003 1078  };
1004 1079  
1005 1080  /*
1006 1081   * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER
1007 1082   */
1008 1083  
1009 1084  /* 0: Processor Local APIC/SAPIC Affinity */
1010 1085  
1011 1086  typedef struct acpi_srat_cpu_affinity
1012 1087  {
1013 1088      ACPI_SUBTABLE_HEADER    Header;
1014 1089      UINT8                   ProximityDomainLo;
1015 1090      UINT8                   ApicId;
1016 1091      UINT32                  Flags;
1017 1092      UINT8                   LocalSapicEid;
1018 1093      UINT8                   ProximityDomainHi[3];
1019 1094      UINT32                  Reserved;           /* Reserved, must be zero */
1020 1095  
1021 1096  } ACPI_SRAT_CPU_AFFINITY;
1022 1097  
1023 1098  /* Flags */
1024 1099  
1025 1100  #define ACPI_SRAT_CPU_USE_AFFINITY  (1)         /* 00: Use affinity structure */
1026 1101  
1027 1102  
1028 1103  /* 1: Memory Affinity */
1029 1104  
1030 1105  typedef struct acpi_srat_mem_affinity
1031 1106  {
1032 1107      ACPI_SUBTABLE_HEADER    Header;
1033 1108      UINT32                  ProximityDomain;
1034 1109      UINT16                  Reserved;           /* Reserved, must be zero */
1035 1110      UINT64                  BaseAddress;
1036 1111      UINT64                  Length;
1037 1112      UINT32                  Reserved1;
1038 1113      UINT32                  Flags;
1039 1114      UINT64                  Reserved2;          /* Reserved, must be zero */
1040 1115  
1041 1116  } ACPI_SRAT_MEM_AFFINITY;
1042 1117  
1043 1118  /* Flags */
1044 1119  
1045 1120  #define ACPI_SRAT_MEM_ENABLED       (1)         /* 00: Use affinity structure */
1046 1121  #define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1)      /* 01: Memory region is hot pluggable */
1047 1122  #define ACPI_SRAT_MEM_NON_VOLATILE  (1<<2)      /* 02: Memory region is non-volatile */
1048 1123  
1049 1124  
1050 1125  /* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
1051 1126  
1052 1127  typedef struct acpi_srat_x2apic_cpu_affinity
1053 1128  {
1054 1129      ACPI_SUBTABLE_HEADER    Header;
1055 1130      UINT16                  Reserved;           /* Reserved, must be zero */
1056 1131      UINT32                  ProximityDomain;
1057 1132      UINT32                  ApicId;
1058 1133      UINT32                  Flags;
1059 1134      UINT32                  ClockDomain;
1060 1135      UINT32                  Reserved2;
1061 1136  
1062 1137  } ACPI_SRAT_X2APIC_CPU_AFFINITY;
1063 1138  
1064 1139  /* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */
1065 1140  
1066 1141  #define ACPI_SRAT_CPU_ENABLED       (1)         /* 00: Use affinity structure */
1067 1142  
1068 1143  
1069 1144  /* Reset to default packing */
1070 1145  
1071 1146  #pragma pack()
1072 1147  
1073 1148  #endif /* __ACTBL1_H__ */
  
    | ↓ open down ↓ | 170 lines elided | ↑ open up ↑ | 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX