From 897bf878431ba67fec79e5312b30d6bc4f82c2ab Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 3 Feb 2020 15:00:40 +0200 Subject: [PATCH] Add power button handler (and test SCI) for ACPI --- include/sys/amd64/acpica/platform/acygg.h | 185 +--------------------- sys/amd64/acpi_osl_hw.c | 2 +- sys/amd64/acpi_osl_irq.c | 2 - sys/amd64/hw/acpi.c | 11 ++ sys/sched.c | 2 + 5 files changed, 15 insertions(+), 187 deletions(-) diff --git a/include/sys/amd64/acpica/platform/acygg.h b/include/sys/amd64/acpica/platform/acygg.h index de78c1b..952450b 100644 --- a/include/sys/amd64/acpica/platform/acygg.h +++ b/include/sys/amd64/acpica/platform/acygg.h @@ -152,25 +152,9 @@ #ifndef __ACLINUX_H__ #define __ACLINUX_H__ -//#ifdef __KERNEL__ -// -///* ACPICA external files should not include ACPICA headers directly. */ -// -//#if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H) -//#error "Please don't include directly, include instead." -//#endif -// -//#endif -// -///* Common (in-kernel/user-space) ACPICA configuration */ -// #define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 -//#define ACPI_IGNORE_PACKAGE_RESOLUTION_ERRORS -// -// -//#ifdef __KERNEL__ -// + #define ACPI_USE_SYSTEM_INTTYPES #undef ACPI_NO_MEM_ALLOCATIONS @@ -202,172 +186,5 @@ typedef int BOOLEAN; #define ACPI_USE_LOCAL_CACHE 1 #define ACPI_USE_NATIVE_MATH64 #define ACPI_USE_GPE_POLLING -// -///* Kernel specific ACPICA configuration */ -// -//#ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY -//#define ACPI_REDUCED_HARDWARE 1 -//#endif -// -//#ifdef CONFIG_ACPI_DEBUGGER -//#define ACPI_DEBUGGER -//#endif -// -//#ifdef CONFIG_ACPI_DEBUG -//#define ACPI_MUTEX_DEBUG -//#endif -// -//#include -//#include -//#include -//#include -//#include -//#include -//#include -//#include -//#ifdef EXPORT_ACPI_INTERFACES -//#include -//#endif -//#ifdef CONFIG_ACPI -//#include -//#endif -// -//#define ACPI_INIT_FUNCTION __init -// -///* Use a specific bugging default separate from ACPICA */ -// -//#undef ACPI_DEBUG_DEFAULT -//#define ACPI_DEBUG_DEFAULT (ACPI_LV_INFO | ACPI_LV_REPAIR) -// -//#ifndef CONFIG_ACPI -// -///* External globals for __KERNEL__, stubs is needed */ -// -//#define ACPI_GLOBAL(t,a) -//#define ACPI_INIT_GLOBAL(t,a,b) -// -///* Generating stubs for configurable ACPICA macros */ -// -//#define ACPI_NO_MEM_ALLOCATIONS -// -///* Generating stubs for configurable ACPICA functions */ -// -//#define ACPI_NO_ERROR_MESSAGES -//#undef ACPI_DEBUG_OUTPUT -// -///* External interface for __KERNEL__, stub is needed */ -// -//#define ACPI_EXTERNAL_RETURN_STATUS(Prototype) \ -// static ACPI_INLINE Prototype {return(AE_NOT_CONFIGURED);} -//#define ACPI_EXTERNAL_RETURN_OK(Prototype) \ -// static ACPI_INLINE Prototype {return(AE_OK);} -//#define ACPI_EXTERNAL_RETURN_VOID(Prototype) \ -// static ACPI_INLINE Prototype {return;} -//#define ACPI_EXTERNAL_RETURN_UINT32(Prototype) \ -// static ACPI_INLINE Prototype {return(0);} -//#define ACPI_EXTERNAL_RETURN_PTR(Prototype) \ -// static ACPI_INLINE Prototype {return(NULL);} -// -//#endif /* CONFIG_ACPI */ -// -///* Host-dependent types and defines for in-kernel ACPICA */ -// -//#define ACPI_MACHINE_WIDTH BITS_PER_LONG -//#define ACPI_EXPORT_SYMBOL(symbol) EXPORT_SYMBOL(symbol); -//#define strtoul simple_strtoul -// -//#define ACPI_CACHE_T struct kmem_cache -//#define ACPI_SPINLOCK spinlock_t * -//#define ACPI_CPU_FLAGS unsigned long -// -///* Use native linux version of AcpiOsAllocateZeroed */ -// -//#define USE_NATIVE_ALLOCATE_ZEROED -// -///* -// * Overrides for in-kernel ACPICA -// */ -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock -// -///* -// * OSL interfaces used by debugger/disassembler -// */ -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitializeDebugger -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminateDebugger -// -///* -// * OSL interfaces used by utilities -// */ -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename -//#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory -// -//#define ACPI_MSG_ERROR KERN_ERR "ACPI Error: " -//#define ACPI_MSG_EXCEPTION KERN_ERR "ACPI Exception: " -//#define ACPI_MSG_WARNING KERN_WARNING "ACPI Warning: " -//#define ACPI_MSG_INFO KERN_INFO "ACPI: " -// -//#define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): " -//#define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): " -// -///* -// * Linux wants to use designated initializers for function pointer structs. -// */ -//#define ACPI_STRUCT_INIT(field, value) .field = value -// -//#else /* !__KERNEL__ */ -// -//#define ACPI_USE_STANDARD_HEADERS -// -//#ifdef ACPI_USE_STANDARD_HEADERS -//#include -//#endif -// -///* Define/disable kernel-specific declarators */ -// -//#ifndef __init -//#define __init -//#endif -//#ifndef __iomem -//#define __iomem -//#endif -// -///* Host-dependent types and defines for user-space ACPICA */ -// -//#define ACPI_FLUSH_CPU_CACHE() -//#define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread)) -// -//#if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\ -// defined(__aarch64__) || defined(__PPC64__) ||\ -// defined(__s390x__) -//#define ACPI_MACHINE_WIDTH 64 -//#define COMPILER_DEPENDENT_INT64 long -//#define COMPILER_DEPENDENT_UINT64 unsigned long -//#else -//#define ACPI_MACHINE_WIDTH 32 -//#define COMPILER_DEPENDENT_INT64 long long -//#define COMPILER_DEPENDENT_UINT64 unsigned long long -//#define ACPI_USE_NATIVE_DIVIDE -//#define ACPI_USE_NATIVE_MATH64 -//#endif -// -//#ifndef __cdecl -//#define __cdecl -//#endif -// -//#endif /* __KERNEL__ */ #endif /* __ACLINUX_H__ */ diff --git a/sys/amd64/acpi_osl_hw.c b/sys/amd64/acpi_osl_hw.c index a684ef6..8d59619 100644 --- a/sys/amd64/acpi_osl_hw.c +++ b/sys/amd64/acpi_osl_hw.c @@ -69,5 +69,5 @@ ACPI_STATUS AcpiOsWritePciConfiguration(ACPI_PCI_ID *PciId, UINT32 Reg, UINT64 V } UINT64 AcpiOsGetTimer(void) { - return 0; + return system_time; } diff --git a/sys/amd64/acpi_osl_irq.c b/sys/amd64/acpi_osl_irq.c index d2da412..ec41530 100644 --- a/sys/amd64/acpi_osl_irq.c +++ b/sys/amd64/acpi_osl_irq.c @@ -5,12 +5,10 @@ static ACPI_OSD_HANDLER sci_wrapped; uint32_t sci_wrapper(void *ctx) { - kdebug("!!! SCI WRAPPER !!!\n"); return sci_wrapped(ctx); } ACPI_STATUS AcpiOsInstallInterruptHandler(UINT32 InterruptNumber, ACPI_OSD_HANDLER ServiceRoutine, void *Context) { - kwarn("ACPI ISR INSTALL STUB\n"); sci_wrapped = ServiceRoutine; irq_add_leg_handler(InterruptNumber, sci_wrapper, Context); return AE_OK; diff --git a/sys/amd64/hw/acpi.c b/sys/amd64/hw/acpi.c index e58c7a7..990338c 100644 --- a/sys/amd64/hw/acpi.c +++ b/sys/amd64/hw/acpi.c @@ -18,6 +18,11 @@ static uint8_t checksum(const void *ptr, size_t size) { return v; } +static uint32_t acpi_power_button_handler(void *ctx) { + kinfo("Power button was pressed\n"); + return 0; +} + static ACPI_STATUS acpica_init(void) { ACPI_STATUS ret; ACPI_OBJECT arg1; @@ -67,6 +72,12 @@ static ACPI_STATUS acpica_init(void) { return ret; } + if (ACPI_FAILURE(ret = AcpiInstallFixedEventHandler(ACPI_EVENT_POWER_BUTTON, + acpi_power_button_handler, + NULL))) { + kwarn("Failed to install ACPI power button handler: %s\n", AcpiFormatException(ret)); + } + return AE_OK; } diff --git a/sys/sched.c b/sys/sched.c index 9dd78e0..631d465 100644 --- a/sys/sched.c +++ b/sys/sched.c @@ -153,6 +153,8 @@ void sched_debug_cycle(uint64_t delta_ms) { struct amd64_phys_stat phys_st; struct amd64_pool_stat pool_st; + return; + kdebug("--- DEBUG_CYCLE ---\n"); debugs(DEBUG_DEFAULT, "Process tree:\n");