From 67e8a1390b0de9c3c062125172b13fd234ca7daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 7 Oct 2003 22:44:34 +0000 Subject: [PATCH] Added an "align" parameter to of_claim(). Added prototype for of_call_method(). gChosen is now declared and initialized in this file, therefore, of_init() can now fail (in case gChosen cannot be set). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4963 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../boot/platform/openfirmware/openfirmware.c | 13 ++++++++++--- .../boot/platform/openfirmware/openfirmware.h | 11 +++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/kernel/boot/platform/openfirmware/openfirmware.c b/src/kernel/boot/platform/openfirmware/openfirmware.c index c71d6c36ed..5084b52627 100644 --- a/src/kernel/boot/platform/openfirmware/openfirmware.c +++ b/src/kernel/boot/platform/openfirmware/openfirmware.c @@ -10,12 +10,19 @@ // OpenFirmware entry function static int (*gCallOpenFirmware)(void *) = 0; +int gChosen; -void +status_t of_init(int (*openFirmwareEntry)(void *)) { gCallOpenFirmware = openFirmwareEntry; + + gChosen = of_finddevice("/chosen"); + if (gChosen == OF_FAILED) + return B_ERROR; + + return B_OK; } @@ -395,7 +402,7 @@ of_release(void *virtual, int size) void * -of_claim(void *virtual, int size) +of_claim(void *virtual, int size, int align) { struct { const char *name; @@ -405,7 +412,7 @@ of_claim(void *virtual, int size) int size; int align; void *address; - } args = {"claim", 3, 1, virtual, size, 64}; + } args = {"claim", 3, 1, virtual, size, align}; if (gCallOpenFirmware(&args) == OF_FAILED) return NULL; diff --git a/src/kernel/boot/platform/openfirmware/openfirmware.h b/src/kernel/boot/platform/openfirmware/openfirmware.h index 8feb195e25..df4330b646 100644 --- a/src/kernel/boot/platform/openfirmware/openfirmware.h +++ b/src/kernel/boot/platform/openfirmware/openfirmware.h @@ -15,11 +15,17 @@ extern int gChosen; +struct of_region { + void *base; + uint32 size; +}; + + #ifdef __cplusplus extern "C" { #endif -extern void of_init(int (*openFirmwareEntry)(void *)); +extern status_t of_init(int (*openFirmwareEntry)(void *)); /* device tree functions */ extern int of_finddevice(const char *device); @@ -43,9 +49,10 @@ extern int of_seek(int handle, off_t pos); /* memory functions */ extern int of_release(void *virtualAddress, int size); -extern void *of_claim(void *virtualAddress, int size); +extern void *of_claim(void *virtualAddress, int size, int align); /* misc functions */ +extern int of_call_method(const char *method, int numArgs, int numReturns, ...); extern int of_test(const char *service); extern int of_milliseconds(void); extern void of_exit(void);