116 lines
2.5 KiB
C
116 lines
2.5 KiB
C
|
#ifndef _CONFIG_MANAGER_H
|
||
|
#define _CONFIG_MANAGER_H
|
||
|
|
||
|
#include <module.h>
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
typedef enum {
|
||
|
B_ISA_BUS,
|
||
|
B_PCI_BUS,
|
||
|
B_PCMCIA_BUS,
|
||
|
B_UNKNOWN_BUS = 0x80
|
||
|
} bus_type;
|
||
|
|
||
|
typedef struct {
|
||
|
uchar base;
|
||
|
uchar subtype;
|
||
|
uchar interface;
|
||
|
} device_type;
|
||
|
|
||
|
typedef struct {
|
||
|
uint32 mask;
|
||
|
uint32 flags;
|
||
|
uint32 cookie;
|
||
|
} resource_mask_descriptor;
|
||
|
|
||
|
typedef struct {
|
||
|
uint32 minbase;
|
||
|
uint32 maxbase;
|
||
|
uint32 basealign;
|
||
|
uint32 len;
|
||
|
uint32 flags;
|
||
|
uint32 cookie;
|
||
|
} resource_range_descriptor;
|
||
|
|
||
|
typedef enum {
|
||
|
B_IRQ_RESOURCE,
|
||
|
B_DMA_RESOURCE,
|
||
|
B_IO_PORT_RESOURCE,
|
||
|
B_MEMORY_RESOURCE
|
||
|
} resource_type;
|
||
|
|
||
|
typedef struct {
|
||
|
resource_type type;
|
||
|
union {
|
||
|
resource_mask_descriptor m;
|
||
|
resource_range_descriptor r;
|
||
|
uint32 for_padding[7];
|
||
|
} d;
|
||
|
} resource_descriptor;
|
||
|
|
||
|
struct device_configuration {
|
||
|
uint32 flags;
|
||
|
uint32 num_resources;
|
||
|
resource_descriptor resources[0];
|
||
|
};
|
||
|
|
||
|
struct possible_device_configurations {
|
||
|
uint32 flags;
|
||
|
uint32 num_possible;
|
||
|
struct device_configuration possible[0];
|
||
|
};
|
||
|
|
||
|
struct device_info {
|
||
|
uint32 size;
|
||
|
uint32 bus_dependent_info_offset;
|
||
|
bus_type bus;
|
||
|
device_type devtype;
|
||
|
uint32 id[4]; /* unique (per-bus) normally-persistent id for device */
|
||
|
uint32 flags;
|
||
|
status_t config_status;
|
||
|
|
||
|
/* bus-dependent data goes here... */
|
||
|
};
|
||
|
|
||
|
#define B_DEVICE_INFO_ENABLED 1
|
||
|
#define B_DEVICE_INFO_CONFIGURED 2
|
||
|
#define B_DEVICE_INFO_CAN_BE_DISABLED 4
|
||
|
|
||
|
typedef struct config_manager_for_driver_module_info {
|
||
|
module_info minfo;
|
||
|
|
||
|
status_t (*get_next_device_info)(bus_type bus, uint64 *cookie,
|
||
|
struct device_info *info, uint32 len);
|
||
|
status_t (*get_device_info_for)(uint64 device,
|
||
|
struct device_info *info, uint32 len);
|
||
|
|
||
|
status_t (*get_size_of_current_configuration_for)(uint64 device);
|
||
|
status_t (*get_current_configuration_for)(uint64 device,
|
||
|
struct device_configuration *config, uint32 len);
|
||
|
|
||
|
status_t (*get_size_of_possible_configurations_for)(uint64 device);
|
||
|
status_t (*get_possible_configurations_for)(uint64 device,
|
||
|
struct possible_device_configurations *possible,
|
||
|
uint32 len);
|
||
|
|
||
|
/* helper routines for drivers */
|
||
|
status_t (*count_resource_descriptors_of_type)(
|
||
|
const struct device_configuration *config,
|
||
|
resource_type type);
|
||
|
status_t (*get_nth_resource_descriptor_of_type)(
|
||
|
const struct device_configuration *config, uint32 n,
|
||
|
resource_type type, resource_descriptor *descriptor,
|
||
|
uint32 len);
|
||
|
} config_manager_for_driver_module_info;
|
||
|
|
||
|
#define B_CONFIG_MANAGER_FOR_DRIVER_MODULE_NAME "bus_managers/config_manager/driver/v1"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* _CONFIG_MANAGER_H */
|