diff options
Diffstat (limited to 'usr.sbin/acpi')
-rw-r--r-- | usr.sbin/acpi/acpiconf/acpiconf.c | 46 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpi.c | 2 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpi_user.c | 2 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpidump.c | 5 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpidump.h | 135 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/aml_dump.c | 2 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/asl_dump.c | 2 |
7 files changed, 175 insertions, 19 deletions
diff --git a/usr.sbin/acpi/acpiconf/acpiconf.c b/usr.sbin/acpi/acpiconf/acpiconf.c index d4fac94..fd873bf 100644 --- a/usr.sbin/acpi/acpiconf/acpiconf.c +++ b/usr.sbin/acpi/acpiconf/acpiconf.c @@ -35,8 +35,10 @@ #include <sys/ioctl.h> #include <unistd.h> -#include <dev/acpi/acpiio.h> -#include <dev/acpi/acpireg.h> +#include <dev/acpica/acpiio.h> + +#include <contrib/dev/acpica/Subsystem/Include/acgcc.h> +#include <contrib/dev/acpica/Subsystem/Include/actypes.h> #define ACPIDEV "/dev/acpi" @@ -74,30 +76,58 @@ acpi_sleep(int sleep_type) return (0); } +static void +usage(const char* prog) +{ + printf("usage: %s [-deh] [-s [1|2|3|4|4b|5]]\n", prog); + exit(0); +} + int main(int argc, char *argv[]) { - char c; + char c, *prog; int sleep_type; + prog = argv[0]; sleep_type = -1; - while ((c = getopt(argc, argv, "eds:")) != -1) { + while ((c = getopt(argc, argv, "dehs:")) != -1) { switch (c) { + case 'd': + acpi_enable_disable(ACPIIO_DISABLE); + break; + case 'e': acpi_enable_disable(ACPIIO_ENABLE); break; - case 'd': - acpi_enable_disable(ACPIIO_DISABLE); + case 'h': + usage(prog); break; case 's': - sleep_type = *optarg - '0'; - if (sleep_type < ACPI_S_STATE_S0 || sleep_type > ACPI_S_STATE_S5) { + sleep_type = optarg[0] - '0'; + if (sleep_type < 0 || sleep_type > 5) { fprintf(stderr, "%s: invalid sleep type (%d)\n", argv[0], sleep_type); return -1; } + + /* convert sleep type value to ACPICA format */ + switch (sleep_type) { + case 4: + if (optarg[1] == 'b') { + sleep_type = ACPI_STATE_S4BIOS; + } + break; + + case 5: + sleep_type = ACPI_STATE_S5; + break; + + default: + break; + } break; default: argc -= optind; diff --git a/usr.sbin/acpi/acpidump/acpi.c b/usr.sbin/acpi/acpidump/acpi.c index ee798ac..1523b0e 100644 --- a/usr.sbin/acpi/acpidump/acpi.c +++ b/usr.sbin/acpi/acpidump/acpi.c @@ -37,8 +37,6 @@ #include <stdio.h> #include <unistd.h> -#include <dev/acpi/acpireg.h> - #include "acpidump.h" static void diff --git a/usr.sbin/acpi/acpidump/acpi_user.c b/usr.sbin/acpi/acpidump/acpi_user.c index 6aaef8a..4691247 100644 --- a/usr.sbin/acpi/acpidump/acpi_user.c +++ b/usr.sbin/acpi/acpidump/acpi_user.c @@ -39,8 +39,6 @@ #include <string.h> #include <unistd.h> -#include <dev/acpi/acpireg.h> - #include "acpidump.h" static int acpi_mem_fd = -1; diff --git a/usr.sbin/acpi/acpidump/acpidump.c b/usr.sbin/acpi/acpidump/acpidump.c index 19fd01b..765f4fe 100644 --- a/usr.sbin/acpi/acpidump/acpidump.c +++ b/usr.sbin/acpi/acpidump/acpidump.c @@ -34,8 +34,6 @@ #include <stdio.h> #include <unistd.h> -#include <dev/acpi/acpireg.h> - #include "acpidump.h" static void @@ -72,7 +70,8 @@ usage(const char *progname) { printf("usage:\t%s [-o dsdt_file_for_output]\n", progname); - printf("or\t%s [-f dsdt_file_for_input]\n", progname); + printf("\t%s [-f dsdt_file_for_input]\n", progname); + printf("\t%s [-h]\n", progname); exit(1); } diff --git a/usr.sbin/acpi/acpidump/acpidump.h b/usr.sbin/acpi/acpidump/acpidump.h index fab7e1a..37e3d6d 100644 --- a/usr.sbin/acpi/acpidump/acpidump.h +++ b/usr.sbin/acpi/acpidump/acpidump.h @@ -31,6 +31,141 @@ #ifndef _ACPIDUMP_H_ #define _ACPIDUMP_H_ +/* Generic Address structure */ +struct ACPIgas { + u_int8_t address_space_id; +#define ACPI_GAS_MEMORY 0 +#define ACPI_GAS_IO 1 +#define ACPI_GAS_PCI 2 +#define ACPI_GAS_EMBEDDED 3 +#define ACPI_GAS_SMBUS 4 +#define ACPI_GAS_FIXED 0x7f + u_int8_t register_bit_width; + u_int8_t register_bit_offset; + u_int8_t res; + u_int64_t address; +} __attribute__((packed)); + +/* Root System Description Pointer */ +struct ACPIrsdp { + u_char signature[8]; + u_char sum; + u_char oem[6]; + u_char res; + u_int32_t addr; +} __attribute__((packed)); + +/* System Description Table */ +struct ACPIsdt { + u_char signature[4]; + u_int32_t len; + u_char rev; + u_char check; + u_char oemid[6]; + u_char oemtblid[8]; + u_int32_t oemrev; + u_char creator[4]; + u_int32_t crerev; +#define SIZEOF_SDT_HDR 36 /* struct size except body */ + u_int32_t body[1];/* This member should be casted */ +} __attribute__((packed)); + +/* Fixed ACPI Description Table (body) */ +struct FACPbody { + u_int32_t facs_ptr; + u_int32_t dsdt_ptr; + u_int8_t int_model; +#define ACPI_FACP_INTMODEL_PIC 0 /* Standard PC-AT PIC */ +#define ACPI_FACP_INTMODEL_APIC 1 /* Multiple APIC */ + u_char reserved1; + u_int16_t sci_int; + u_int32_t smi_cmd; + u_int8_t acpi_enable; + u_int8_t acpi_disable; + u_int8_t s4biosreq; + u_int8_t reserved2; + u_int32_t pm1a_evt_blk; + u_int32_t pm1b_evt_blk; + u_int32_t pm1a_cnt_blk; + u_int32_t pm1b_cnt_blk; + u_int32_t pm2_cnt_blk; + u_int32_t pm_tmr_blk; + u_int32_t gpe0_blk; + u_int32_t gpe1_blk; + u_int8_t pm1_evt_len; + u_int8_t pm1_cnt_len; + u_int8_t pm2_cnt_len; + u_int8_t pm_tmr_len; + u_int8_t gpe0_len; + u_int8_t gpe1_len; + u_int8_t gpe1_base; + u_int8_t reserved3; + u_int16_t p_lvl2_lat; + u_int16_t p_lvl3_lat; + u_int16_t flush_size; + u_int16_t flush_stride; + u_int8_t duty_off; + u_int8_t duty_width; + u_int8_t day_alrm; + u_int8_t mon_alrm; + u_int8_t century; + u_int16_t iapc_boot_arch; + u_char reserved4[1]; + u_int32_t flags; +#define ACPI_FACP_FLAG_WBINVD 1 /* WBINVD is correctly supported */ +#define ACPI_FACP_FLAG_WBINVD_FLUSH 2 /* WBINVD flushes caches */ +#define ACPI_FACP_FLAG_PROC_C1 4 /* C1 power state supported */ +#define ACPI_FACP_FLAG_P_LVL2_UP 8 /* C2 power state works on SMP */ +#define ACPI_FACP_FLAG_PWR_BUTTON 16 /* Power button uses control method */ +#define ACPI_FACP_FLAG_SLP_BUTTON 32 /* Sleep button uses control method */ +#define ACPI_FACP_FLAG_FIX_RTC 64 /* RTC wakeup not supported */ +#define ACPI_FACP_FLAG_RTC_S4 128 /* RTC can wakeup from S4 state */ +#define ACPI_FACP_FLAG_TMR_VAL_EXT 256 /* TMR_VAL is 32bit */ +#define ACPI_FACP_FLAG_DCK_CAP 512 /* Can support docking */ + struct ACPIgas reset_reg; + u_int8_t reset_value; + u_int8_t reserved5[3]; + u_int64_t x_firmware_ctrl; + u_int64_t x_dsdt; + struct ACPIgas x_pm1a_evt_blk; + struct ACPIgas x_pm1b_evt_blk; + struct ACPIgas x_pm1a_cnt_blk; + struct ACPIgas x_pm1b_cnt_blk; + struct ACPIgas x_pm2_cnt_blk; + struct ACPIgas x_pm_tmr_blk; + struct ACPIgas x_gpe0_blk; + struct ACPIgas x_gpe1_blk; +} __attribute__((packed)); + +/* Firmware ACPI Control Structure */ +struct FACS { + u_char signature[4]; + u_int32_t len; + u_char hard_sig[4]; + /* + * NOTE This should be filled with physical address below 1MB!! + * sigh.... + */ + u_int32_t firm_wake_vec; + u_int32_t g_lock; /* bit field */ + /* 5.2.6.1 Global Lock */ +#define ACPI_GLOBAL_LOCK_PENDING 1 +#define ACPI_GLOBAL_LOCK_OWNED 2 + u_int32_t flags; /* bit field */ +#define ACPI_FACS_FLAG_S4BIOS_F 1 /* Supports S4BIOS_SEQ */ + char reserved[40]; +} __attribute__((packed)); + +void *acpi_map_physical(vm_offset_t, size_t); +struct ACPIrsdp *acpi_find_rsd_ptr(void); +int acpi_checksum(void *, size_t); +struct ACPIsdt *acpi_map_sdt(vm_offset_t); +void acpi_print_rsd_ptr(struct ACPIrsdp *); +void acpi_print_sdt(struct ACPIsdt *); +void acpi_print_rsdt(struct ACPIsdt *); +void acpi_print_facp(struct FACPbody *); +void acpi_print_dsdt(struct ACPIsdt *); + void asl_dump_termobj(u_int8_t **, int); void asl_dump_objectlist(u_int8_t **, u_int8_t *, int); diff --git a/usr.sbin/acpi/acpidump/aml_dump.c b/usr.sbin/acpi/acpidump/aml_dump.c index 57241f9..5901baa 100644 --- a/usr.sbin/acpi/acpidump/aml_dump.c +++ b/usr.sbin/acpi/acpidump/aml_dump.c @@ -34,8 +34,6 @@ #include <stdio.h> #include <unistd.h> -#include <dev/acpi/acpireg.h> - #include "acpidump.h" char *aml_dumpfile = NULL; diff --git a/usr.sbin/acpi/acpidump/asl_dump.c b/usr.sbin/acpi/acpidump/asl_dump.c index 1ff421e..9e7706b 100644 --- a/usr.sbin/acpi/acpidump/asl_dump.c +++ b/usr.sbin/acpi/acpidump/asl_dump.c @@ -34,8 +34,6 @@ #include <err.h> #include <stdio.h> -#include <dev/acpi/acpireg.h> - #include "acpidump.h" static u_int32_t |