root/dev/acpi/acpireg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: acpireg.h,v 1.12 2006/12/12 18:07:25 mk Exp $ */
    2 /*
    3  * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
    4  * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org>
    5  *
    6  * Permission to use, copy, modify, and distribute this software for any
    7  * purpose with or without fee is hereby granted, provided that the above
    8  * copyright notice and this permission notice appear in all copies.
    9  *
   10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   17  */
   18 
   19 #ifndef _DEV_ACPI_ACPIREG_H_
   20 #define _DEV_ACPI_ACPIREG_H_
   21 
   22 /*      Root System Descriptor Pointer */
   23 struct acpi_rsdp1 {
   24         u_int8_t        signature[8];
   25 #define RSDP_SIG        "RSD PTR "
   26 #define rsdp_signaturee rsdp1.signature
   27         u_int8_t        checksum;       /* make sum == 0 */
   28 #define rsdp_checksum   rsdp1.checksum
   29         u_int8_t        oemid[6];
   30 #define rsdp_oemid      rsdp1.oemid
   31         u_int8_t        revision;       /* 0 for 1, 2 for 2 */
   32 #define rsdp_revision   rsdp1.revision
   33         u_int32_t       rsdt;           /* physical */
   34 #define rsdp_rsdt       rsdp1.rsdt
   35 } __packed;
   36 
   37 struct acpi_rsdp {
   38         struct acpi_rsdp1 rsdp1;
   39         /*
   40          * The following values are only valid
   41          * when rsdp_revision == 2
   42          */
   43         u_int32_t       rsdp_length;            /* length of rsdp */
   44         u_int64_t       rsdp_xsdt;              /* physical */
   45         u_int8_t        rsdp_extchecksum;       /* entire table */
   46         u_int8_t        rsdp_reserved[3];       /* must be zero */
   47 } __packed;
   48 
   49 struct acpi_table_header {
   50         u_int8_t        signature[4];
   51 #define hdr_signature           hdr.signature
   52         u_int32_t       length;
   53 #define hdr_length              hdr.length
   54         u_int8_t        revision;
   55 #define hdr_revision            hdr.revision
   56         u_int8_t        checksum;
   57 #define hdr_checksum            hdr.checksum
   58         u_int8_t        oemid[6];
   59 #define hdr_oemid               hdr.oemid
   60         u_int8_t        oemtableid[8];
   61 #define hdr_oemtableid          hdr.oemtableid
   62         u_int32_t       oemrevision;
   63 #define hdr_oemrevision         hdr.oemrevision
   64         u_int8_t        aslcompilerid[4];
   65 #define hdr_aslcompilerid       hdr.aslcompilerid
   66         u_int32_t       aslcompilerrevision;
   67 #define hdr_aslcompilerrevision hdr.aslcompilerrevision
   68 } __packed;
   69 
   70 struct acpi_rsdt {
   71         struct acpi_table_header        hdr;
   72 #define RSDT_SIG        "RSDT"
   73         u_int32_t                       table_offsets[1];
   74 } __packed;
   75 
   76 struct acpi_xsdt {
   77         struct acpi_table_header        hdr;
   78 #define XSDT_SIG        "XSDT"
   79         u_int64_t                       table_offsets[1];
   80 } __packed;
   81 
   82 struct acpi_gas {
   83         u_int8_t        address_space_id;
   84 #define GAS_SYSTEM_MEMORY       0
   85 #define GAS_SYSTEM_IOSPACE      1
   86 #define GAS_PCI_CFG_SPACE       2
   87 #define GAS_EMBEDDED            3
   88 #define GAS_SMBUS               4
   89 #define GAS_FUNCTIONAL_FIXED    127
   90         u_int8_t        register_bit_width;
   91         u_int8_t        register_bit_offset;
   92         u_int8_t        access_size;
   93 #define GAS_ACCESS_UNDEFINED    0
   94 #define GAS_ACCESS_BYTE         1
   95 #define GAS_ACCESS_WORD         2
   96 #define GAS_ACCESS_DWORD        3
   97 #define GAS_ACCESS_QWORD        4
   98         u_int64_t       address;
   99 } __packed;
  100 
  101 struct acpi_fadt {
  102         struct acpi_table_header        hdr;
  103 #define FADT_SIG        "FACP"
  104         u_int32_t       firmware_ctl;   /* phys addr FACS */
  105         u_int32_t       dsdt;           /* phys addr DSDT */
  106         u_int8_t        int_model;      /* interrupt model (hdr_revision < 3) */
  107 #define FADT_INT_DUAL_PIC       0
  108 #define FADT_INT_MULTI_APIC     1
  109         u_int8_t        pm_profile;     /* power mgmt profile */
  110 #define FADT_PM_UNSPEC          0
  111 #define FADT_PM_DESKTOP         1
  112 #define FADT_PM_MOBILE          2
  113 #define FADT_PM_WORKSTATION     3
  114 #define FADT_PM_ENT_SERVER      4
  115 #define FADT_PM_SOHO_SERVER     5
  116 #define FADT_PM_APPLIANCE       6
  117 #define FADT_PM_PERF_SERVER     7
  118         u_int16_t       sci_int;        /* SCI interrupt */
  119         u_int32_t       smi_cmd;        /* SMI command port */
  120         u_int8_t        acpi_enable;    /* value to enable */
  121         u_int8_t        acpi_disable;   /* value to disable */
  122         u_int8_t        s4bios_req;     /* value for S4 */
  123         u_int8_t        pstate_cnt;     /* value for performance (hdr_revision > 2) */
  124         u_int32_t       pm1a_evt_blk;   /* power management 1a */
  125         u_int32_t       pm1b_evt_blk;   /* power mangement 1b */
  126         u_int32_t       pm1a_cnt_blk;   /* pm control 1a */
  127         u_int32_t       pm1b_cnt_blk;   /* pm control 1b */
  128         u_int32_t       pm2_cnt_blk;    /* pm control 2 */
  129         u_int32_t       pm_tmr_blk;
  130         u_int32_t       gpe0_blk;
  131         u_int32_t       gpe1_blk;
  132         u_int8_t        pm1_evt_len;
  133         u_int8_t        pm1_cnt_len;
  134         u_int8_t        pm2_cnt_len;
  135         u_int8_t        pm_tmr_len;
  136         u_int8_t        gpe0_blk_len;
  137         u_int8_t        gpe1_blk_len;
  138         u_int8_t        gpe1_base;
  139         u_int8_t        cst_cnt;        /* (hdr_revision > 2) */
  140         u_int16_t       p_lvl2_lat;
  141         u_int16_t       p_lvl3_lat;
  142         u_int16_t       flush_size;
  143         u_int16_t       flush_stride;
  144         u_int8_t        duty_offset;
  145         u_int8_t        duty_width;
  146         u_int8_t        day_alrm;
  147         u_int8_t        mon_alrm;
  148         u_int8_t        century;
  149         u_int16_t       iapc_boot_arch; /* (hdr_revision > 2) */
  150 #define FADT_LEGACY_DEVICES             0x0001  /* Legacy devices supported */
  151 #define FADT_i8042                      0x0002  /* Keyboard controller present */
  152 #define FADT_NO_VGA                     0x0004  /* Do not probe VGA */
  153         u_int8_t        reserved1;
  154         u_int32_t       flags;
  155 #define FADT_WBINVD                     0x00000001
  156 #define FADT_WBINVD_FLUSH               0x00000002
  157 #define FADT_PROC_C1                    0x00000004
  158 #define FADT_P_LVL2_UP                  0x00000008
  159 #define FADT_PWR_BUTTON                 0x00000010
  160 #define FADT_SLP_BUTTON                 0x00000020
  161 #define FADT_FIX_RTC                    0x00000040
  162 #define FADT_RTC_S4                     0x00000080
  163 #define FADT_TMR_VAL_EXT                0x00000100
  164 #define FADT_DCK_CAP                    0x00000200
  165 #define FADT_RESET_REG_SUP              0x00000400
  166 #define FADT_SEALED_CASE                0x00000800
  167 #define FADT_HEADLESS                   0x00001000
  168 #define FADT_CPU_SW_SLP                 0x00002000
  169 #define FADT_PCI_EXP_WAK                0x00004000
  170 #define FADT_USE_PLATFORM_CLOCK         0x00008000
  171 #define FADT_S4_RTC_STS_VALID           0x00010000
  172 #define FADT_REMOTE_POWER_ON_CAPABLE    0x00020000
  173 #define FADT_FORCE_APIC_CLUSTER_MODEL   0x00040000
  174 #define FADT_FORCE_APIC_PHYS_DEST_MODE  0x00080000
  175         /*
  176          * Following values only exist when rev > 1
  177          * If the extended addresses exists, they
  178          * must be used in preferense to the non-
  179          * extended values above
  180          */
  181         struct acpi_gas reset_reg;
  182         u_int8_t        reset_value;
  183         u_int8_t        reserved2a;
  184         u_int8_t        reserved2b;
  185         u_int8_t        reserved2c;
  186         u_int64_t       x_firmware_ctl;
  187         u_int64_t       x_dsdt;
  188         struct acpi_gas x_pm1a_evt_blk;
  189         struct acpi_gas x_pm1b_evt_blk;
  190         struct acpi_gas x_pm1a_cnt_blk;
  191         struct acpi_gas x_pm1b_cnt_blk;
  192         struct acpi_gas x_pm2_cnt_blk;
  193         struct acpi_gas x_pm_tmr_blk;
  194         struct acpi_gas x_gpe0_blk;
  195         struct acpi_gas x_gpe1_blk;
  196 } __packed;
  197 
  198 struct acpi_dsdt {
  199         struct acpi_table_header        hdr;
  200 #define DSDT_SIG        "DSDT"
  201         u_int8_t        aml[1];
  202 } __packed;
  203 
  204 struct acpi_ssdt {
  205         struct acpi_table_header        hdr;
  206 #define SSDT_SIG        "SSDT"
  207         u_int8_t        aml[1];
  208 } __packed;
  209 
  210 /*
  211  * Table deprecated by ACPI 2.0
  212  */
  213 struct acpi_psdt {
  214         struct acpi_table_header        hdr;
  215 #define PSDT_SIG        "PSDT"
  216 } __packed;
  217 
  218 struct acpi_madt {
  219         struct acpi_table_header        hdr;
  220 #define MADT_SIG        "APIC"
  221         u_int32_t       local_apic_address;
  222         u_int32_t       flags;
  223 #define ACPI_APIC_PCAT_COMPAT   0x00000001
  224 } __packed;
  225 
  226 struct acpi_madt_lapic {
  227         u_int8_t        apic_type;
  228 #define ACPI_MADT_LAPIC         0
  229         u_int8_t        length;
  230         u_int8_t        acpi_proc_id;
  231         u_int8_t        apic_id;
  232         u_int32_t       flags;
  233 #define ACPI_PROC_ENABLE        0x00000001
  234 } __packed;
  235 
  236 struct acpi_madt_ioapic {
  237         u_int8_t        apic_type;
  238 #define ACPI_MADT_IOAPIC        1
  239         u_int8_t        length;
  240         u_int8_t        acpi_ioapic_id;
  241         u_int8_t        reserved;
  242         u_int32_t       address;
  243         u_int32_t       global_int_base;
  244 } __packed;
  245 
  246 struct acpi_madt_override {
  247         u_int8_t        apic_type;
  248 #define ACPI_MADT_OVERRIDE      2
  249         u_int8_t        length;
  250         u_int8_t        bus;
  251 #define ACPI_OVERRIDE_BUS_ISA   0
  252         u_int8_t        source;
  253         u_int32_t       global_int;
  254         u_int16_t       flags;
  255 #define ACPI_OVERRIDE_POLARITY_BITS     0x3
  256 #define ACPI_OVERRIDE_POLARITY_BUS              0x0
  257 #define ACPI_OVERRIDE_POLARITY_HIGH             0x1
  258 #define ACPI_OVERRIDE_POLARITY_LOW              0x3
  259 #define ACPI_OVERRIDE_TRIGGER_BITS      0xc
  260 #define ACPI_OVERRIDE_TRIGGER_BUS               0x0
  261 #define ACPI_OVERRIDE_TRIGGER_EDGE              0x4
  262 #define ACPI_OVERRIDE_TRIGGER_LEVEL             0xc
  263 } __packed;
  264 
  265 struct acpi_madt_nmi {
  266         u_int8_t        apic_type;
  267 #define ACPI_MADT_NMI           3
  268         u_int8_t        length;
  269         u_int16_t       flags;          /* Same flags as acpi_madt_override */
  270         u_int32_t       global_int;
  271 } __packed;
  272 
  273 struct acpi_madt_lapic_nmi {
  274         u_int8_t        apic_type;
  275 #define ACPI_MADT_LAPIC_NMI     4
  276         u_int8_t        length;
  277         u_int8_t        acpi_proc_id;
  278         u_int16_t       flags;          /* Same flags as acpi_madt_override */
  279         u_int8_t        local_apic_lint;
  280 } __packed;
  281 
  282 struct acpi_madt_lapic_override {
  283         u_int8_t        apic_type;
  284 #define ACPI_MADT_LAPIC_OVERRIDE        5
  285         u_int8_t        length;
  286         u_int16_t       reserved;
  287         u_int64_t       lapic_address;
  288 } __packed;
  289 
  290 struct acpi_madt_io_sapic {
  291         u_int8_t        apic_type;
  292 #define ACPI_MADT_IO_SAPIC      6
  293         u_int8_t        length;
  294         u_int8_t        iosapic_id;
  295         u_int8_t        reserved;
  296         u_int32_t       global_int_base;
  297         u_int64_t       iosapic_address;
  298 } __packed;
  299 
  300 struct acpi_madt_local_sapic {
  301         u_int8_t        apic_type;
  302 #define ACPI_MADT_LOCAL_SAPIC   7
  303         u_int8_t        length;
  304         u_int8_t        acpi_proc_id;
  305         u_int8_t        local_sapic_id;
  306         u_int8_t        local_sapic_eid;
  307         u_int8_t        reserved[3];
  308         u_int32_t       flags;          /* Same flags as acpi_madt_lapic */
  309         u_int32_t       acpi_proc_uid;
  310         u_int8_t        acpi_proc_uid_string[1];
  311 } __packed;
  312 
  313 struct acpi_madt_platform_int {
  314         u_int8_t        apic_type;
  315 #define ACPI_MADT_PLATFORM_INT  8
  316         u_int8_t        length;
  317         u_int16_t       flags;          /* Same flags as acpi_madt_override */
  318         u_int8_t        int_type;
  319 #define ACPI_MADT_PLATFORM_PMI          1
  320 #define ACPI_MADT_PLATFORM_INIT         2
  321 #define ACPI_MADT_PLATFORM_CORR_ERROR   3
  322         u_int8_t        proc_id;
  323         u_int8_t        proc_eid;
  324         u_int8_t        io_sapic_vec;
  325         u_int32_t       global_int;
  326         u_int32_t       platform_int_flags;
  327 #define ACPI_MADT_PLATFORM_CPEI         0x00000001
  328 } __packed;
  329 
  330 union acpi_madt_entry {
  331         struct acpi_madt_lapic          madt_lapic;
  332         struct acpi_madt_ioapic         madt_ioapic;
  333         struct acpi_madt_override       madt_override;
  334         struct acpi_madt_nmi            madt_nmi;
  335         struct acpi_madt_lapic_nmi      madt_lapic_nmi;
  336         struct acpi_madt_lapic_override madt_lapic_override;
  337         struct acpi_madt_io_sapic       madt_io_sapic;
  338         struct acpi_madt_local_sapic    madt_local_sapic;
  339         struct acpi_madt_platform_int   madt_platform_int;
  340 } __packed;
  341 
  342 struct acpi_sbst {
  343         struct acpi_table_header        hdr;
  344 #define SBST_SIG        "SBST"
  345         u_int32_t       warning_energy_level;
  346         u_int32_t       low_energy_level;
  347         u_int32_t       critical_energy_level;
  348 } __packed;
  349 
  350 struct acpi_ecdt {
  351         struct acpi_table_header        hdr;
  352 #define ECDT_SIG        "ECDT"
  353         struct acpi_gas ec_control;
  354         struct acpi_gas ec_data;
  355         u_int32_t       uid;
  356         u_int8_t        gpe_bit;
  357         u_int8_t        ec_id[1];
  358 } __packed;
  359 
  360 struct acpi_srat {
  361         struct acpi_table_header        hdr;
  362 #define SRAT_SIG        "SRAT"
  363         u_int32_t       reserved1;
  364         u_int64_t       reserved2;
  365 } __packed;
  366 
  367 struct acpi_slit {
  368         struct acpi_table_header        hdr;
  369 #define SLIT_SIG        "SLIT"
  370         u_int64_t       number_of_localities;
  371 } __packed;
  372 
  373 struct acpi_hpet {
  374         struct acpi_table_header        hdr;
  375 #define HPET_SIG        "HPET"
  376         u_int32_t       event_timer_block_id;
  377         struct acpi_gas base_address;
  378         u_int8_t        hpet_number;
  379         u_int16_t       main_counter_min_clock_tick;
  380         u_int8_t        page_protection;
  381 } __packed;
  382 
  383 struct acpi_facs {
  384         u_int8_t        signature[4];
  385 #define FACS_SIG        "FACS"
  386         u_int32_t       length;
  387         u_int32_t       hardware_signature;
  388         u_int32_t       wakeup_vector;
  389         u_int32_t       global_lock;
  390 #define FACS_LOCK_PENDING       0x00000001
  391 #define FACS_LOCK_OWNED         0x00000002
  392         u_int32_t       flags;
  393 #define FACS_S4BIOS_F           0x00000001      /* S4BIOS_REQ supported */
  394         struct acpi_gas x_wakeup_vector;
  395         u_int8_t        version;
  396         u_int8_t        reserved[31];
  397 } __packed;
  398 
  399 #define ACPI_FREQUENCY  3579545         /* Per ACPI spec */
  400 
  401 /*
  402  * PCI Configuration space
  403  */
  404 #define ACPI_PCI_BUS(addr) (u_int16_t)((addr) >> 48)
  405 #define ACPI_PCI_DEV(addr) (u_int16_t)((addr) >> 32)
  406 #define ACPI_PCI_FN(addr)  (u_int16_t)((addr) >> 16)
  407 #define ACPI_PCI_REG(addr) (u_int16_t)(addr)
  408 #define ACPI_PCI_ADDR(b,d,f,r) ((u_int64_t)(b)<<48LL | (u_int64_t)(d)<<32LL | (f)<<16LL | (r))
  409 
  410 /*
  411  * PM1 Status Registers Fixed Hardware Feature Status Bits
  412  */
  413 #define ACPI_PM1_STATUS                 0x00
  414 #define         ACPI_PM1_TMR_STS                0x0001
  415 #define         ACPI_PM1_BM_STS                 0x0010
  416 #define         ACPI_PM1_GBL_STS                0x0020
  417 #define         ACPI_PM1_PWRBTN_STS             0x0100
  418 #define         ACPI_PM1_SLPBTN_STS             0x0200
  419 #define         ACPI_PM1_RTC_STS                0x0400
  420 #define         ACPI_PM1_PCIEXP_WAKE_STS        0x4000
  421 #define         ACPI_PM1_WAK_STS                0x8000
  422 
  423 /*
  424  * PM1 Enable Registers
  425  */
  426 #define ACPI_PM1_ENABLE                 0x02
  427 #define         ACPI_PM1_TMR_EN                 0x0001
  428 #define         ACPI_PM1_GBL_EN                 0x0020
  429 #define         ACPI_PM1_PWRBTN_EN              0x0100
  430 #define         ACPI_PM1_SLPBTN_EN              0x0200
  431 #define         ACPI_PM1_RTC_EN                 0x0400
  432 #define         ACPI_PM1_PCIEXP_WAKE_DIS        0x4000
  433 
  434 /*
  435  * PM1 Control Registers
  436  */
  437 #define ACPI_PM1_CONTROL                0x00
  438 #define         ACPI_PM1_SCI_EN                 0x0001
  439 #define         ACPI_PM1_BM_RLD                 0x0002
  440 #define         ACPI_PM1_GBL_RLS                0x0004
  441 #define         ACPI_PM1_SLP_TYPX(x)            ((x) << 10)
  442 #define         ACPI_PM1_SLP_TYPX_MASK          0x1c00
  443 #define         ACPI_PM1_SLP_EN                 0x2000
  444 
  445 /*
  446  * Sleeping States
  447  */
  448 #define ACPI_STATE_S0           0
  449 #define ACPI_STATE_S1           1
  450 #define ACPI_STATE_S2           2
  451 #define ACPI_STATE_S3           3
  452 #define ACPI_STATE_S4           4
  453 #define ACPI_STATE_S5           5
  454 
  455 /*
  456  * ACPI Device IDs
  457  */
  458 #define ACPI_DEV_TIM    "PNP0100"       /* System timer */
  459 #define ACPI_DEV_ACPI   "PNP0C08"       /* ACPI device */
  460 #define ACPI_DEV_PCIB   "PNP0A03"       /* PCI bus */
  461 #define ACPI_DEV_GISAB  "PNP0A05"       /* Generic ISA Bus */
  462 #define ACPI_DEV_EIOB   "PNP0A06"       /* Extended I/O Bus */
  463 #define ACPI_DEV_MR     "PNP0C02"       /* Motherboard resources */
  464 #define ACPI_DEV_NPROC  "PNP0C04"       /* Numeric data processor */
  465 #define ACPI_DEV_CS     "PNP0C08"       /* ACPI-Compliant System */
  466 #define ACPI_DEV_ECD    "PNP0C09"       /* Embedded Controller Device */
  467 #define ACPI_DEV_CMB    "PNP0C0A"       /* Control Method Battery */
  468 #define ACPI_DEV_FAN    "PNP0C0B"       /* Fan Device */
  469 #define ACPI_DEV_PBD    "PNP0C0C"       /* Power Button Device */
  470 #define ACPI_DEV_LD     "PNP0C0D"       /* Lid Device */
  471 #define ACPI_DEV_SBD    "PNP0C0E"       /* Sleep Button Device */
  472 #define ACPI_DEV_PILD   "PNP0C0F"       /* PCI Interrupt Link Device */
  473 #define ACPI_DEV_MEMD   "PNP0C80"       /* Memory Device */
  474 #define ACPI_DEV_SHC    "ACPI0001"      /* SMBus 1.0 Host Controller */
  475 #define ACPI_DEV_SMS1   "ACPI0002"      /* Smart Battery Subsystem */
  476 #define ACPI_DEV_AC     "ACPI0003"      /* AC Device */
  477 #define ACPI_DEV_MD     "ACPI0004"      /* Module Device */
  478 #define ACPI_DEV_SMS2   "ACPI0005"      /* SMBus 2.0 Host Controller */
  479 #define ACPI_DEV_GBD    "ACPI0006"      /* GPE Block Device */
  480 #define ACPI_DEV_PD     "ACPI0007"      /* Processor Device */
  481 #define ACPI_DEV_ALSD   "ACPI0008"      /* Ambient Light Sensor Device */
  482 #define ACPI_DEV_IOXA   "ACPI0009"      /* IO x APIC Device */
  483 #define ACPI_DEV_IOA    "ACPI000A"      /* IO APIC Device */
  484 #define ACPI_DEV_IOSA   "ACPI000B"      /* IO SAPIC Device */
  485 #define ACPI_DEV_THZ    "THERMALZONE"   /* Thermal Zone */
  486 #define ACPI_DEV_FFB    "FIXEDBUTTON"   /* Fixed Feature Button */
  487 
  488 #endif  /* !_DEV_ACPI_ACPIREG_H_ */

/* [<][>][^][v][top][bottom][index][help] */