 26428d4bc6
			
		
	
	
		26428d4bc6
		
	
	
	
	
		
			
			Use acpi poweroff if it's possible. Change-Id: I103cc288523bf63fa536750b1d408ac88bbe35fb Signed-off-by: Ben Gras <ben@minix3.org> Signed-off-by: Tomas Hruby <tom@minix3.org>
		
			
				
	
	
		
			163 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __ACPI_H__
 | |
| #define __ACPI_H__
 | |
| 
 | |
| #include "kernel/kernel.h"
 | |
| 
 | |
| /* ACPI root system description pointer */
 | |
| struct acpi_rsdp {
 | |
| 	char	signature[8]; /* must be "RSD PTR " */
 | |
| 	u8_t	checksum;
 | |
| 	char	oemid[6];
 | |
| 	u8_t	revision;
 | |
| 	u32_t	rsdt_addr;
 | |
| 	u32_t	length;
 | |
| }; 
 | |
| 
 | |
| #define ACPI_SDT_SIGNATURE_LEN	4
 | |
| 
 | |
| #define ACPI_SDT_SIGNATURE(name)	#name
 | |
| 
 | |
| /* header common to all system description tables */
 | |
| struct acpi_sdt_header {
 | |
| 	char	signature[ACPI_SDT_SIGNATURE_LEN];
 | |
| 	u32_t	length;
 | |
| 	u8_t	revision;
 | |
| 	u8_t	checksum;
 | |
| 	char	oemid[6];
 | |
| 	char	oem_table_id[8];
 | |
| 	u32_t	oem_revision;
 | |
| 	u32_t	creator_id;
 | |
| 	u32_t	creator_revision;
 | |
| };
 | |
| 
 | |
| struct acpi_generic_address {
 | |
| 	u8_t address_space_id;
 | |
| 	u8_t register_bit_width;
 | |
| 	u8_t register_bit_offset;
 | |
| 	u8_t access_size;
 | |
| 	u64_t address;
 | |
| };
 | |
| 
 | |
| struct acpi_fadt_header
 | |
| {
 | |
| 	struct acpi_sdt_header hdr;
 | |
| 	u32_t facs;
 | |
| 	u32_t dsdt;
 | |
| 	u8_t model;
 | |
| 	u8_t preferred_pm_profile;
 | |
| 	u16_t sci_int;
 | |
| 	u32_t smi_cmd;
 | |
| 	u8_t acpi_enable;
 | |
| 	u8_t acpi_disable;
 | |
| 	u8_t s4bios_req;
 | |
| 	u8_t pstate_cnt;
 | |
| 	u32_t pm1a_evt_blk;
 | |
| 	u32_t pm1b_evt_blk;
 | |
| 	u32_t pm1a_cnt_blk;
 | |
| 	u32_t pm1b_cnt_blk;
 | |
| 	u32_t pm2_cnt_blk;
 | |
| 	u32_t pm_tmr_blk;
 | |
| 	u32_t gpe0_blk;
 | |
| 	u32_t gpe1_blk;
 | |
| 	u8_t pm1_evt_len;
 | |
| 	u8_t pm1_cnt_len;
 | |
| 	u8_t pm2_cnt_len;
 | |
| 	u8_t pm_tmr_len;
 | |
| 	u8_t gpe0_blk_len;
 | |
| 	u8_t gpe1_blk_len;
 | |
| 	u8_t gpe1_base;
 | |
| 	u8_t cst_cnt;
 | |
| 	u16_t p_lvl2_lat;
 | |
| 	u16_t p_lvl3_lat;
 | |
| 	u16_t flush_size;
 | |
| 	u16_t flush_stride;
 | |
| 	u8_t duty_offset;
 | |
| 	u8_t duty_width;
 | |
| 	u8_t day_alrm;
 | |
| 	u8_t mon_alrm;
 | |
| 	u8_t century;
 | |
| 	u16_t iapc_boot_arch;
 | |
| 	u8_t reserved1;
 | |
| 	u32_t flags;
 | |
| 	struct acpi_generic_address reset_reg;
 | |
| 	u8_t reset_value;
 | |
| 	u8_t reserved2[3];
 | |
| 	u64_t xfacs;
 | |
| 	u64_t xdsdt;
 | |
| 	struct acpi_generic_address xpm1a_evt_blk;
 | |
| 	struct acpi_generic_address xpm1b_evt_blk;
 | |
| 	struct acpi_generic_address xpm1a_cnt_blk;
 | |
| 	struct acpi_generic_address xpm1b_cnt_blk;
 | |
| 	struct acpi_generic_address xpm2_cnt_blk;
 | |
| 	struct acpi_generic_address xpm_tmr_blk;
 | |
| 	struct acpi_generic_address xgpe0_blk;
 | |
| 	struct acpi_generic_address xgpe1_blk;
 | |
| };
 | |
| 
 | |
| struct acpi_madt_hdr {
 | |
| 	struct acpi_sdt_header	hdr;
 | |
| 	u32_t			local_apic_address;
 | |
| 	u32_t			flags;
 | |
| };
 | |
| 
 | |
| #define ACPI_MADT_TYPE_LAPIC		0
 | |
| #define ACPI_MADT_TYPE_IOAPIC		1
 | |
| #define ACPI_MADT_TYPE_INT_SRC		2
 | |
| #define ACPI_MADT_TYPE_NMI_SRC		3
 | |
| #define ACPI_MADT_TYPE_LAPIC_NMI	4
 | |
| #define ACPI_MADT_TYPE_LAPIC_ADRESS	5
 | |
| #define ACPI_MADT_TYPE_IOSAPIC		6
 | |
| #define ACPI_MADT_TYPE_LSAPIC		7
 | |
| #define ACPI_MADT_TYPE_PLATFORM_INT_SRC	8
 | |
| #define ACPI_MADT_TYPE_Lx2APIC		9
 | |
| #define ACPI_MADT_TYPE_Lx2APIC_NMI	10
 | |
| 
 | |
| struct acpi_madt_item_hdr{
 | |
| 	u8_t	type;
 | |
| 	u8_t	length;
 | |
| };
 | |
| 
 | |
| struct acpi_madt_lapic {
 | |
| 	struct acpi_madt_item_hdr hdr;
 | |
| 	u8_t	acpi_cpu_id;
 | |
| 	u8_t	apic_id;
 | |
| 	u32_t	flags;
 | |
| };
 | |
| 
 | |
| struct acpi_madt_ioapic {
 | |
| 	struct acpi_madt_item_hdr hdr;
 | |
| 	u8_t	id;
 | |
| 	u8_t	__reserved;
 | |
| 	u32_t	address;
 | |
| 	u32_t	global_int_base;
 | |
| };
 | |
| 
 | |
| struct acpi_madt_int_src {
 | |
| 	struct acpi_madt_item_hdr hdr;
 | |
| 	u8_t	bus;
 | |
| 	u8_t	bus_int;
 | |
| 	u32_t	global_int;
 | |
| 	u16_t	mps_flags;
 | |
| };
 | |
| 
 | |
| struct acpi_madt_nmi {
 | |
| 	struct acpi_madt_item_hdr hdr;
 | |
| 	u16_t	flags;
 | |
| 	u32_t	global_int;
 | |
| };
 | |
| 
 | |
| void acpi_init(void);
 | |
| 
 | |
| void acpi_poweroff(void);
 | |
| 
 | |
| /* 
 | |
|  * Returns a pointer to the io acpi structure in the MADT table in ACPI. The
 | |
|  * pointer is valid only until paging is turned off. No memory is allocated in
 | |
|  * this function thus no memory needs to be freed
 | |
|  */
 | |
| struct acpi_madt_ioapic * acpi_get_ioapic_next(void);
 | |
| /* same as above for local APICs */
 | |
| struct acpi_madt_lapic * acpi_get_lapic_next(void);
 | |
| 
 | |
| #endif /* __ACPI_H__ */
 |