Added kernel setting to dump MADT to syslog. It's very useful for understanding interrupt configuration.

It needs a bit polish in code but wanted to commit before leaving BG.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39124 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Fredrik Holmqvist
2010-10-24 13:49:04 +00:00
parent 6fd2f4a0d1
commit 39fa144962
2 changed files with 41 additions and 0 deletions
@@ -31,6 +31,12 @@ local hardware_src =
hwxface.c hwxface.c
; ;
local common_src =
dmtable.c
dmtbdump.c
dmtbinfo.c
;
local debugger_src = local debugger_src =
dbdisply.c dbdisply.c
dbxface.c dbxface.c
@@ -171,6 +177,7 @@ StaticLibrary libacpi_ca.a :
$(resources_src) $(resources_src)
$(tables_src) $(tables_src)
$(utilities_src) $(utilities_src)
$(common_src)
; ;
SEARCH on [ FGristFiles $(events_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi events ] ; SEARCH on [ FGristFiles $(events_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi events ] ;
@@ -182,6 +189,7 @@ SEARCH on [ FGristFiles $(utilities_src) ] = [ FDirName $(HAIKU_TOP) src add-on
SEARCH on [ FGristFiles $(dispatcher_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi dispatcher ] ; SEARCH on [ FGristFiles $(dispatcher_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi dispatcher ] ;
SEARCH on [ FGristFiles $(executer_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi executer ] ; SEARCH on [ FGristFiles $(executer_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi executer ] ;
SEARCH on [ FGristFiles $(parser_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi parser ] ; SEARCH on [ FGristFiles $(parser_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi parser ] ;
SEARCH on [ FGristFiles $(common_src) ] = [ FDirName $(HAIKU_TOP) src add-ons kernel bus_managers acpi common ] ;
KernelAddon acpi : KernelAddon acpi :
oshaiku.cpp oshaiku.cpp
@@ -22,6 +22,7 @@
#include "acpi.h" #include "acpi.h"
#include "accommon.h" #include "accommon.h"
#include "acdisasm.h"
#include "acnamesp.h" #include "acnamesp.h"
#include "acpi_priv.h" #include "acpi_priv.h"
@@ -73,6 +74,33 @@ get_device_by_hid_callback(ACPI_HANDLE object, UINT32 depth, void* context,
} }
static void dump_madt() {
ACPI_STATUS status;
ACPI_TABLE_HEADER *madt = NULL;
ACPI_SUBTABLE_HEADER *entry;
void *end;
int madtCount = -1;
while (true) {
status = AcpiGetTable (ACPI_SIG_MADT, ++madtCount, &madt);
if (status != AE_OK) break;
dprintf("acpi: MADT TABLE:\n");
AcpiDmDumpDataTable( madt );
/* entry = madt + 44;
end = madt + madt->Header.Length;
while (entry < end) {
dprintf("\t\tType: %d\n", entry->Type);
entry += entry->Length;
};
*/
};
dprintf("acpi: You have %d MADT tables.\n", madtCount);
}
// #pragma mark - ACPI bus manager API // #pragma mark - ACPI bus manager API
@@ -89,6 +117,7 @@ acpi_std_ops(int32 op,...)
void *settings; void *settings;
bool acpiDisabled = false; bool acpiDisabled = false;
bool acpiAvoidFullInit = false; bool acpiAvoidFullInit = false;
bool acpiDumpMADT = false;
settings = load_driver_settings("kernel"); settings = load_driver_settings("kernel");
if (settings != NULL) { if (settings != NULL) {
@@ -96,6 +125,8 @@ acpi_std_ops(int32 op,...)
false, false); false, false);
acpiAvoidFullInit = get_driver_boolean_parameter(settings, acpiAvoidFullInit = get_driver_boolean_parameter(settings,
"acpi_avoid_full_init", false, false); "acpi_avoid_full_init", false, false);
acpiDumpMADT = get_driver_boolean_parameter(settings,
"acpi_dump_MADT", false, false);
unload_driver_settings(settings); unload_driver_settings(settings);
} }
@@ -149,6 +180,8 @@ acpi_std_ops(int32 op,...)
goto err; goto err;
} }
if (acpiDumpMADT) dump_madt();
/* Install the default address space handlers. */ /* Install the default address space handlers. */
status = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, status = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT,
ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_DEFAULT_HANDLER, NULL, NULL); ACPI_ADR_SPACE_SYSTEM_MEMORY, ACPI_DEFAULT_HANDLER, NULL, NULL);