HelenOS sources
This source file includes following definitions.
- create_match_id
- delete_match_id
- add_match_id
- init_match_ids
- clean_match_ids
#ifndef LIBDEVICE_IPC_DEVMAN_H
#define LIBDEVICE_IPC_DEVMAN_H
#include <ipc/common.h>
#include <adt/list.h>
#include <mem.h>
#include <stdlib.h>
#define DEVMAN_NAME_MAXLEN 256
typedef sysarg_t devman_handle_t;
typedef enum {
DRIVER_NOT_STARTED = 0,
DRIVER_STARTING,
DRIVER_RUNNING
} driver_state_t;
typedef enum {
fun_invalid = 0,
fun_inner,
fun_exposed
} fun_type_t;
typedef struct match_id {
link_t link;
char *id;
unsigned int score;
} match_id_t;
typedef struct match_id_list {
list_t ids;
} match_id_list_t;
static inline match_id_t *create_match_id(void)
{
match_id_t *id = malloc(sizeof(match_id_t));
memset(id, 0, sizeof(match_id_t));
return id;
}
static inline void delete_match_id(match_id_t *id)
{
if (id) {
if (NULL != id->id) {
free(id->id);
}
free(id);
}
}
static inline void add_match_id(match_id_list_t *ids, match_id_t *id)
{
match_id_t *mid = NULL;
link_t *link = ids->ids.head.next;
while (link != &ids->ids.head) {
mid = list_get_instance(link, match_id_t, link);
if (mid->score < id->score) {
break;
}
link = link->next;
}
list_insert_before(&id->link, link);
}
static inline void init_match_ids(match_id_list_t *id_list)
{
list_initialize(&id_list->ids);
}
static inline void clean_match_ids(match_id_list_t *ids)
{
link_t *link = NULL;
match_id_t *id;
while (!list_empty(&ids->ids)) {
link = list_first(&ids->ids);
list_remove(link);
id = list_get_instance(link, match_id_t, link);
delete_match_id(id);
}
}
typedef enum {
DEVMAN_DRIVER_REGISTER = IPC_FIRST_USER_METHOD,
DEVMAN_ADD_FUNCTION,
DEVMAN_ADD_MATCH_ID,
DEVMAN_ADD_DEVICE_TO_CATEGORY,
DEVMAN_DRV_FUN_ONLINE,
DEVMAN_DRV_FUN_OFFLINE,
DEVMAN_REMOVE_FUNCTION
} driver_to_devman_t;
typedef enum {
DRIVER_DEV_ADD = IPC_FIRST_USER_METHOD,
DRIVER_DEV_REMOVE,
DRIVER_DEV_GONE,
DRIVER_FUN_ONLINE,
DRIVER_FUN_OFFLINE,
DRIVER_STOP
} devman_to_driver_t;
typedef enum {
DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD,
DEVMAN_DEV_GET_FUNCTIONS,
DEVMAN_DEV_GET_PARENT,
DEVMAN_FUN_GET_CHILD,
DEVMAN_FUN_GET_MATCH_ID,
DEVMAN_FUN_GET_NAME,
DEVMAN_FUN_GET_DRIVER_NAME,
DEVMAN_FUN_ONLINE,
DEVMAN_FUN_OFFLINE,
DEVMAN_FUN_GET_PATH,
DEVMAN_FUN_SID_TO_HANDLE,
DEVMAN_GET_DRIVERS,
DEVMAN_DRIVER_GET_DEVICES,
DEVMAN_DRIVER_GET_HANDLE,
DEVMAN_DRIVER_GET_MATCH_ID,
DEVMAN_DRIVER_GET_NAME,
DEVMAN_DRIVER_GET_STATE,
DEVMAN_DRIVER_LOAD,
DEVMAN_DRIVER_UNLOAD
} client_to_devman_t;
#endif
HelenOS homepage, sources at GitHub