Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/devman/devman.h

    re5556e4a r3e6a98c5  
    3535#define DEVMAN_H_
    3636
     37#include <assert.h>
    3738#include <stdbool.h>
     39#include <dirent.h>
     40#include <str.h>
    3841#include <adt/list.h>
    3942#include <adt/hash_table.h>
     
    4851#define NAME "devman"
    4952
     53#define MATCH_EXT ".ma"
     54
    5055#define LOC_DEVICE_NAMESPACE "devices"
    5156#define LOC_SEPARATOR '\\'
     
    6267} client_t;
    6368
     69typedef enum {
     70        /** Driver has not been started. */
     71        DRIVER_NOT_STARTED = 0,
     72       
     73        /**
     74         * Driver has been started, but has not registered as running and ready
     75         * to receive requests.
     76         */
     77        DRIVER_STARTING,
     78       
     79        /** Driver is running and prepared to serve incomming requests. */
     80        DRIVER_RUNNING
     81} driver_state_t;
     82
    6483/** Representation of device driver. */
    6584typedef struct driver {
    6685        /** Pointers to previous and next drivers in a linked list. */
    6786        link_t drivers;
    68         /** Handle */
    69         devman_handle_t handle;
    7087       
    7188        /**
     
    7390         * and prepared to receive requests.
    7491         */
    75         driver_state_t state;
     92        int state;
    7693       
    7794        /** Session asociated with this driver. */
     
    98115        /** Fibril mutex for list of drivers. */
    99116        fibril_mutex_t drivers_mutex;
    100         /** Next free handle */
    101         devman_handle_t next_handle;
    102117} driver_list_t;
    103118
     
    223238} dev_tree_t;
    224239
     240/* Match ids and scores */
     241
     242extern int get_match_score(driver_t *, dev_node_t *);
     243
     244extern bool parse_match_ids(char *, match_id_list_t *);
     245extern bool read_match_ids(const char *, match_id_list_t *);
     246extern char *read_match_id(char **);
     247extern char *read_id(const char **);
     248
     249/* Drivers */
     250
     251extern void init_driver_list(driver_list_t *);
     252extern driver_t *create_driver(void);
     253extern bool get_driver_info(const char *, const char *, driver_t *);
     254extern int lookup_available_drivers(driver_list_t *, const char *);
     255
     256extern driver_t *find_best_match_driver(driver_list_t *, dev_node_t *);
     257extern bool assign_driver(dev_node_t *, driver_list_t *, dev_tree_t *);
     258
     259extern void add_driver(driver_list_t *, driver_t *);
     260extern void attach_driver(dev_tree_t *, dev_node_t *, driver_t *);
     261extern void detach_driver(dev_tree_t *, dev_node_t *);
     262extern void add_device(driver_t *, dev_node_t *, dev_tree_t *);
     263extern bool start_driver(driver_t *);
     264extern int driver_dev_remove(dev_tree_t *, dev_node_t *);
     265extern int driver_dev_gone(dev_tree_t *, dev_node_t *);
     266extern int driver_fun_online(dev_tree_t *, fun_node_t *);
     267extern int driver_fun_offline(dev_tree_t *, fun_node_t *);
     268
     269extern driver_t *find_driver(driver_list_t *, const char *);
     270extern void initialize_running_driver(driver_t *, dev_tree_t *);
     271
     272extern void init_driver(driver_t *);
     273extern void clean_driver(driver_t *);
     274extern void delete_driver(driver_t *);
     275
     276/* Device nodes */
     277
     278extern dev_node_t *create_dev_node(void);
     279extern void delete_dev_node(dev_node_t *node);
     280extern void dev_add_ref(dev_node_t *);
     281extern void dev_del_ref(dev_node_t *);
     282
     283extern dev_node_t *find_dev_node_no_lock(dev_tree_t *tree,
     284    devman_handle_t handle);
     285extern dev_node_t *find_dev_node(dev_tree_t *tree, devman_handle_t handle);
     286extern dev_node_t *find_dev_function(dev_node_t *, const char *);
     287extern int dev_get_functions(dev_tree_t *tree, dev_node_t *, devman_handle_t *,
     288    size_t, size_t *);
     289
     290extern fun_node_t *create_fun_node(void);
     291extern void delete_fun_node(fun_node_t *);
     292extern void fun_add_ref(fun_node_t *);
     293extern void fun_del_ref(fun_node_t *);
     294extern void fun_busy_lock(fun_node_t *);
     295extern void fun_busy_unlock(fun_node_t *);
     296extern fun_node_t *find_fun_node_no_lock(dev_tree_t *tree,
     297    devman_handle_t handle);
     298extern fun_node_t *find_fun_node(dev_tree_t *tree, devman_handle_t handle);
     299extern fun_node_t *find_fun_node_by_path(dev_tree_t *, char *);
     300extern fun_node_t *find_fun_node_in_device(dev_tree_t *tree, dev_node_t *,
     301    const char *);
     302
     303/* Device tree */
     304
     305extern bool init_device_tree(dev_tree_t *, driver_list_t *);
     306extern bool create_root_nodes(dev_tree_t *);
     307extern bool insert_dev_node(dev_tree_t *, dev_node_t *, fun_node_t *);
     308extern void remove_dev_node(dev_tree_t *, dev_node_t *);
     309extern bool insert_fun_node(dev_tree_t *, fun_node_t *, char *, dev_node_t *);
     310extern void remove_fun_node(dev_tree_t *, fun_node_t *);
     311
     312/* Loc services */
     313
     314extern void loc_register_tree_function(fun_node_t *, dev_tree_t *);
     315
     316extern fun_node_t *find_loc_tree_function(dev_tree_t *, service_id_t);
     317
     318extern void tree_add_loc_function(dev_tree_t *, fun_node_t *);
     319
    225320#endif
    226321
Note: See TracChangeset for help on using the changeset viewer.