From e5d9d14f902eb8c409b4a2db3f4af45c0b49d891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 7 May 2004 00:16:46 +0000 Subject: [PATCH] Added the root node of the device tree to the build. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7436 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/core/device_manager/Jamfile | 1 + src/kernel/core/device_manager/root_node.c | 207 +++++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 src/kernel/core/device_manager/root_node.c diff --git a/src/kernel/core/device_manager/Jamfile b/src/kernel/core/device_manager/Jamfile index ecc686ccb3..4416524e38 100644 --- a/src/kernel/core/device_manager/Jamfile +++ b/src/kernel/core/device_manager/Jamfile @@ -14,6 +14,7 @@ KernelMergeObject kernel_device_manager.o : patterns.c probe.c registration.c + root_node.c scan.c : -fno-pic -Wno-unused -D_KERNEL_MODE diff --git a/src/kernel/core/device_manager/root_node.c b/src/kernel/core/device_manager/root_node.c new file mode 100644 index 0000000000..dbfc7d5e61 --- /dev/null +++ b/src/kernel/core/device_manager/root_node.c @@ -0,0 +1,207 @@ +/* +** Copyright 2002/03, Thomas Kurschel. All rights reserved. +** Distributed under the terms of the OpenBeOS License. +*/ + +/* + Part of PnP devfs + + Interface of PnP root module. + + This module creates the root devices (PCI and ISA) to initiate + the PnP device scan. It is calles by pnp_boot_helper but should + probably be moved into kernel for simplification. + + In the future, we want to check hardware configuration before we + start loading ISA and PCI bus manager. +*/ + + +#include +#include + +#include "device_manager_private.h" + +//#include +/*#include +#include */ + + +#define TRACE_ROOT_NODE +#ifdef TRACE_ROOT_NODE +# define TRACE(x) dprintf x +#else +# define TRACE(x) ; +#endif + + +#define PNP_ROOT_TYPE_NAME "pnp/root" + // type of pnp root device + +#define PNP_ROOT_DRIVERS_DIR "root" + // registration directory of pnp root drivers + // (put all drivers under "universal" and use unique connection names) + +#define PNP_ROOT_MODULE_NAME PNP_DIR"sys/pnp_root/v1" + + +static pnp_node_handle sRootNode; + + +void +pnp_root_init_root(void) +{ + pnp_node_attr attrs[] = { + { PNP_DRIVER_DRIVER, B_STRING_TYPE, { string: PNP_ROOT_MODULE_NAME }}, + { PNP_DRIVER_TYPE, B_STRING_TYPE, { string: PNP_ROOT_TYPE_NAME }}, + + // well - connection is actually pointless as there is on other root node + { PNP_DRIVER_CONNECTION, B_STRING_TYPE, { string: "pnp_root" }}, + { PNP_DRIVER_DEVICE_IDENTIFIER, B_STRING_TYPE, { string: "pnp_root" }}, + + // directory for root drivers + { PNP_DRIVER_DYNAMIC_CONSUMER, B_STRING_TYPE, { string: PNP_ROOT_DRIVERS_DIR "/" }}, + + { NULL } + }; + + if (pnp_register_device(NULL, attrs, NULL, &sRootNode) != B_OK) + panic("Cannot register PnP-Root\n"); +} + + +void +pnp_root_destroy_root(void) +{ + // make sure we are registered + if (sRootNode == NULL) + return; + + TRACE(("Destroying PnP-root\n")); + + if (pnp_unregister_device(sRootNode) != B_OK) + return; + + sRootNode = NULL; +} + + +void +pnp_root_rescan_root(void) +{ + // make sure we are registered + if (sRootNode == NULL) + return; + + TRACE(("Rescanning PnP-root\n")); + + // scan _very_ deep + pnp_rescan(sRootNode, 30000); +} + + +static status_t +pnp_root_init_device(pnp_node_handle node, void *user_cookie, void **cookie) +{ + *cookie = NULL; + return B_OK; +} + + +static status_t +pnp_root_uninit_device(void *cookie) +{ + return B_OK; +} + +/* +static status_t pnp_root_device_added( + pnp_node_handle parent ) +{ + char *tmp; + status_t res; + pnp_node_handle loader_node; + + // make sure parent is really root + if( pnp->get_attr_string( parent, PNP_DRIVER_TYPE, &tmp, false )) + return B_ERROR; + + if( strcmp( tmp, PNP_ROOT_NODE_TYPE_NAME ) != 0 ) { + free( tmp ); + return B_ERROR; + } + + free( tmp ); + + // load ISA bus manager + // if you don't want ISA, remove this registration + { + pnp_node_attr attrs[] = { + // info about ourself + { PNP_DRIVER_DRIVER, B_STRING_TYPE, { string: PNP_ROOT_MODULE_NAME }}, + { PNP_DRIVER_TYPE, B_STRING_TYPE, { string: "pnp/isa_loader" }}, + { PNP_DRIVER_FIXED_CONSUMER, B_STRING_TYPE, { string: ISA2_MODULE_NAME }}, + { PNP_DRIVER_CONNECTION, B_STRING_TYPE, { string: "ISA" }}, + { PNP_DRIVER_DEVICE_IDENTIFIER, B_STRING_TYPE, { string: "ISA" }}, + { NULL } + }; + + SHOW_FLOW0( 4, "registering ISA root" ); + + res = pnp->register_device( parent, attrs, NULL, &loader_node ); + if( res != B_OK ) + return res; + } + + // load PCI bus manager + { + pnp_node_attr attrs[] = { + // info about ourself + { PNP_DRIVER_DRIVER, B_STRING_TYPE, { string: PNP_ROOT_MODULE_NAME }}, + { PNP_DRIVER_TYPE, B_STRING_TYPE, { string: "pnp/pci_loader" }}, + { PNP_DRIVER_FIXED_CONSUMER, B_STRING_TYPE, { string: PCI_ROOT_MODULE_NAME }}, + { PNP_DRIVER_CONNECTION, B_STRING_TYPE, { string: "PCI" }}, + { PNP_DRIVER_DEVICE_IDENTIFIER, B_STRING_TYPE, { string: "PCI" }}, + { NULL } + }; + + SHOW_FLOW0( 4, "registering PCI root" ); + + res = pnp->register_device( parent, attrs, NULL, &loader_node ); + if( res != B_OK ) + return res; + } + + return B_OK; + +} +*/ + +static status_t +std_ops(int32 op, ...) +{ + switch (op) { + case B_MODULE_INIT: + case B_MODULE_UNINIT: + return B_OK; + + default: + return B_ERROR; + } +} + + +pnp_driver_info gDeviceRootModule = { + { + PNP_ROOT_MODULE_NAME, + 0, + std_ops, + }, + + pnp_root_init_device, + pnp_root_uninit_device, + NULL, + NULL, + NULL +}; +