Rearranged the device_manager init/module stuff; it's now initialized from

main, not by getting the module any longer.
It now also creates the root node directly.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7438 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2004-05-07 00:34:00 +00:00
parent 637f662399
commit 3ad71e9d7e
2 changed files with 58 additions and 79 deletions
+53 -79
View File
@@ -1,5 +1,7 @@
/*
** Copyright 2002-04, Thomas Kurschel. All rights reserved.
** Copyright 2004, Axel Dörfler, [email protected]. All rights reserved.
**
** Distributed under the terms of the OpenBeOS License.
*/
@@ -10,14 +12,10 @@
*/
#include "device_manager_private.h"
#include <kdevice_manager.h>
#include <KernelExport.h>
//#include <driver_settings.h>
//#include <stdlib.h>
//#include <string.h>
//#include <stdio.h>
//#include <dirent.h>
//#define TRACE_DEVICE_MANAGER
#ifdef TRACE_DEVICE_MANAGER
@@ -32,8 +30,6 @@ pnp_node_info *node_list;
bool disable_useraddons;
//int pnp_load_wait_count;
//sem_id pnp_load_wait_sem;
int pnp_resource_wait_count;
sem_id pnp_resource_wait_sem;
@@ -43,91 +39,32 @@ io_resource_info *io_mem_list, *io_port_list, *isa_dma_list;
void
check_settings()
{
void *settings;
void *settings = load_driver_settings(B_SAFEMODE_DRIVER_SETTINGS);
disable_useraddons = get_driver_boolean_parameter(settings, "disableuseraddons", 0, 1);
settings = load_driver_settings( B_SAFEMODE_DRIVER_SETTINGS );
disable_useraddons = get_driver_boolean_parameter( settings, "disableuseraddons", 0, 1 );
unload_driver_settings(settings);
// if( disable_useraddons )
// SHOW_INFO0( 2, "User pnp drivers disabled" );
}
#endif
static status_t
init()
{
status_t status;
TRACE(("device manager init\n"));
status = id_generator_init();
if (status < B_OK) {
panic("could not initialize ID generator\n");
return status;
}
status = nodes_init();
if (status < B_OK) {
panic("could not initialize device nodes\n");
return status;
}
pnp_resource_wait_sem = create_sem(0, "pnp_resource_wait_sem");
if (pnp_resource_wait_sem < 0) {
panic("could not create resource wait sem\n");
return pnp_resource_wait_sem;
}
// node_list = NULL;
/* pnp_load_wait_count = 0;*/
pnp_resource_wait_count = 0;
io_mem_list = io_port_list = isa_dma_list = NULL;
pnp_fs_emulation_nesting = 0;
return B_OK;
/*
err3:
delete_sem( pnp_load_wait_sem );
err2:
DELETE_BEN( &node_lock );
err:
DELETE_BEN( &generator_lock );
return res;*/
}
#if 0
static status_t
uninit()
{
SHOW_FLOW0( 0, "" );
DELETE_BEN( &node_lock );
DELETE_BEN( &generator_lock );
/* delete_sem( pnp_load_wait_sem );*/
delete_sem( pnp_resource_wait_sem );
return B_OK;
}
#endif
static status_t
std_ops(int32 op, ...)
{
switch( op ) {
case B_MODULE_INIT:
return init();
case B_MODULE_UNINIT:
return B_OK;
// return uninit();
default:
return B_ERROR;
switch (op) {
case B_MODULE_INIT:
case B_MODULE_UNINIT:
return B_OK;
default:
return B_ERROR;
}
}
// ToDo: the device manager exports these for now, so that Thomas's driver
// can work on both R5 and OpenBeOS without too much hassle
device_manager_info gDeviceManagerModule = {
{
DEVICE_MANAGER_MODULE_NAME,
@@ -165,3 +102,40 @@ device_manager_info gDeviceManagerModule = {
pnp_write_attr
};
// #pragma mark -
status_t
device_manager_init(struct kernel_args *args)
{
status_t status;
TRACE(("device manager init\n"));
status = id_generator_init();
if (status < B_OK) {
panic("could not initialize ID generator\n");
return status;
}
status = nodes_init();
if (status < B_OK) {
panic("could not initialize device nodes\n");
return status;
}
pnp_resource_wait_sem = create_sem(0, "pnp_resource_wait_sem");
if (pnp_resource_wait_sem < 0) {
panic("could not create resource wait sem\n");
return pnp_resource_wait_sem;
}
pnp_resource_wait_count = 0;
io_mem_list = io_port_list = isa_dma_list = NULL;
pnp_fs_emulation_nesting = 0;
pnp_root_init_root();
return B_OK;
}
@@ -251,6 +251,11 @@ void pnp_defer_probing_of_children( pnp_node_info *node );
void pnp_probe_waiting_children_nolock( pnp_node_info *node );
void pnp_probe_waiting_children( pnp_node_info *node );
// root_node.c
extern void pnp_root_init_root(void);
extern void pnp_root_destroy_root(void);
extern void pnp_root_rescan_root(void);
// scan.c