Ignore:
File:
1 edited

Legend:

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

    r45059d6b r80a96d2  
    6363typedef struct fun_node fun_node_t;
    6464
     65typedef struct {
     66        fibril_mutex_t mutex;
     67        struct driver *driver;
     68} client_t;
     69
    6570typedef enum {
    6671        /** Driver has not been started. */
     
    113118} driver_list_t;
    114119
    115 /** The state of the device. */
     120/** Device state */
    116121typedef enum {
    117122        DEVICE_NOT_INITIALIZED = 0,
    118123        DEVICE_USABLE,
    119124        DEVICE_NOT_PRESENT,
    120         DEVICE_INVALID
     125        DEVICE_INVALID,
     126        /** Device node has been removed from the tree */
     127        DEVICE_REMOVED
    121128} device_state_t;
    122129
    123130/** Device node in the device tree. */
    124131struct dev_node {
     132        /** Reference count */
     133        atomic_t refcnt;
     134       
    125135        /** The global unique identifier of the device. */
    126136        devman_handle_t handle;
     
    149159};
    150160
     161/** Function state */
     162typedef enum {
     163        FUN_INIT = 0,
     164        FUN_OFF_LINE,
     165        FUN_ON_LINE,
     166        /** Function node has been removed from the tree */
     167        FUN_REMOVED
     168} fun_state_t;
     169
    151170/** Function node in the device tree. */
    152171struct fun_node {
     172        /** Reference count */
     173        atomic_t refcnt;
     174        /** State */
     175        fun_state_t state;
     176       
    153177        /** The global unique identifier of the function */
    154178        devman_handle_t handle;
     
    234258
    235259extern void add_driver(driver_list_t *, driver_t *);
    236 extern void attach_driver(dev_node_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 *);
    237262extern void add_device(driver_t *, dev_node_t *, dev_tree_t *);
    238263extern 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 *);
    239268
    240269extern driver_t *find_driver(driver_list_t *, const char *);
     
    249278extern dev_node_t *create_dev_node(void);
    250279extern void delete_dev_node(dev_node_t *node);
     280extern void dev_add_ref(dev_node_t *);
     281extern void dev_del_ref(dev_node_t *);
    251282extern dev_node_t *find_dev_node_no_lock(dev_tree_t *tree,
    252283    devman_handle_t handle);
     
    258289extern fun_node_t *create_fun_node(void);
    259290extern void delete_fun_node(fun_node_t *);
     291extern void fun_add_ref(fun_node_t *);
     292extern void fun_del_ref(fun_node_t *);
    260293extern fun_node_t *find_fun_node_no_lock(dev_tree_t *tree,
    261294    devman_handle_t handle);
    262295extern fun_node_t *find_fun_node(dev_tree_t *tree, devman_handle_t handle);
    263296extern fun_node_t *find_fun_node_by_path(dev_tree_t *, char *);
    264 extern fun_node_t *find_fun_node_in_device(dev_node_t *, const char *);
     297extern fun_node_t *find_fun_node_in_device(dev_tree_t *tree, dev_node_t *,
     298    const char *);
    265299
    266300/* Device tree */
     
    269303extern bool create_root_nodes(dev_tree_t *);
    270304extern bool insert_dev_node(dev_tree_t *, dev_node_t *, fun_node_t *);
     305extern void remove_dev_node(dev_tree_t *, dev_node_t *);
    271306extern bool insert_fun_node(dev_tree_t *, fun_node_t *, char *, dev_node_t *);
    272307extern void remove_fun_node(dev_tree_t *, fun_node_t *);
Note: See TracChangeset for help on using the changeset viewer.