Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset a1769ee in mainline for uspace/lib/libdrv/include/driver.h


Ignore:
Timestamp:
2010-03-31T20:30:54Z (12 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master
Children:
52b7b1bb
Parents:
eff1a590
Message:

device interfaces - parts of code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libdrv/include/driver.h

    reff1a590 ra1769ee  
    11/*
    2  * Copyright (c) 2010 Lenka Trochtova 
     2 * Copyright (c) 2010 Lenka Trochtova
    33 * All rights reserved.
    44 *
     
    3838#include <adt/list.h>
    3939#include <ipc/devman.h>
     40#include <ipc/dev_iface.h>
    4041
    41 typedef struct device {
     42struct device;
     43typedef struct device device_t;
     44
     45// device interface
     46
     47// first two parameters: device and interface structure registered by the devices driver
     48typedef void remote_iface_func_t(device_t*, void *, ipc_callid_t, ipc_call_t *);
     49typedef remote_iface_func_t *remote_iface_func_ptr_t;
     50
     51typedef struct {
     52        int method_count;
     53        remote_iface_func_ptr_t *methods;
     54} remote_iface_t;
     55
     56typedef struct {
     57        remote_iface_t * ifaces[DEV_IFACE_COUNT];
     58} iface_dipatch_table_t;
     59
     60static inline int get_iface_index(dev_inferface_id_t id)
     61{
     62        return id - DEV_IFACE_FIRST;
     63}
     64
     65static inline bool is_valid_iface_id(dev_inferface_id_t id)
     66{
     67        return DEV_IFACE_FIRST <= id && id < DEV_IFACE_MAX;
     68}
     69
     70// device
     71
     72struct device {
    4273        device_handle_t handle;
    43         ipcarg_t parent_phone; 
     74        ipcarg_t parent_phone;
    4475        const char *name;
    4576        match_id_list_t match_ids;
    4677        void *driver_data;
    47        
     78        void *interfaces[DEV_IFACE_COUNT];
     79
    4880        // TODO add more items
    49        
     81
    5082        link_t link;
    51 } device_t;
     83};
    5284
    53 typedef struct driver_ops {     
     85
     86// driver
     87
     88typedef struct driver_ops {
    5489        bool (*add_device)(device_t *dev);
    5590        // TODO add other generic driver operations
     
    6196} driver_t;
    6297
     98
     99
     100
     101
    63102int driver_main(driver_t *drv);
    64103
     
    68107        if (NULL != dev) {
    69108                memset(dev, 0, sizeof(device_t));
    70         }       
     109        }
    71110        list_initialize(&dev->match_ids.ids);
    72111        return dev;
    73112}
    74113
    75 static inline void delete_device(device_t *dev) {
     114static inline void delete_device(device_t *dev)
     115{
    76116        clean_match_ids(&dev->match_ids);
    77117        if (NULL != dev->name) {
     
    79119        }
    80120        free(dev);
     121}
     122
     123static inline void device_set_iface (device_t *dev, dev_inferface_id_t id, void *iface)
     124{
     125        assert(is_valid_iface_id(id));
     126
     127        int idx = get_iface_index(id);
     128        dev->interfaces[idx] = iface;
    81129}
    82130
Note: See TracChangeset for help on using the changeset viewer.