Changeset 729fa2d6 in mainline for uspace/srv/drivers/root/root.c


Ignore:
Timestamp:
2010-02-25T14:29:23Z (14 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
92413de
Parents:
924c75e1
Message:

parts of root device driver

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/drivers/root/root.c

    r924c75e1 r729fa2d6  
    4848#include <ctype.h>
    4949
     50#include <devman.h>
    5051#include <ipc/devman.h>
    5152
     
    149150
    150151
    151 // TODO put this to library (like in device mapper)
    152 static int devman_phone_driver = -1;
    153 static int devman_phone_client = -1;
    154 
    155 int devman_get_phone(devman_interface_t iface, unsigned int flags)
    156 {
    157         switch (iface) {
    158         case DEVMAN_DRIVER:
    159                 if (devman_phone_driver >= 0)
    160                         return devman_phone_driver;
    161                
    162                 if (flags & IPC_FLAG_BLOCKING)
    163                         devman_phone_driver = ipc_connect_me_to_blocking(PHONE_NS,
    164                             SERVICE_DEVMAN, DEVMAN_DRIVER, 0);
    165                 else
    166                         devman_phone_driver = ipc_connect_me_to(PHONE_NS,
    167                             SERVICE_DEVMAN, DEVMAN_DRIVER, 0);
    168                
    169                 return devman_phone_driver;
    170         case DEVMAN_CLIENT:
    171                 if (devman_phone_client >= 0)
    172                         return devman_phone_client;
    173                
    174                 if (flags & IPC_FLAG_BLOCKING)
    175                         devman_phone_client = ipc_connect_me_to_blocking(PHONE_NS,
    176                             SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
    177                 else
    178                         devman_phone_client = ipc_connect_me_to(PHONE_NS,
    179                             SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
    180                
    181                 return devman_phone_client;
    182         default:
     152
     153int driver_main(driver_t *drv)
     154{
     155        // remember driver structure - driver_ops will be called by generic handler for incoming connections
     156        driver = drv;
     157       
     158        // register driver by device manager with generic handler for incoming connections
     159        printf("%s: sending registration request to devman.\n", driver->name);
     160        devman_driver_register(driver->name, driver_connection);               
     161
     162        async_manager();
     163
     164        // Never reached
     165        return 0;
     166       
     167}
     168
     169////////////////////////////////////////
     170// ROOT driver
     171////////////////////////////////////////
     172
     173#define NAME "root"
     174
     175
     176
     177bool root_add_device(device_t *dev)
     178{
     179        // TODO add root device and register its children
     180        return true;
     181}
     182
     183static driver_ops_t root_ops = {
     184        .add_device = &root_add_device
     185};
     186
     187static driver_t root_driver = {
     188        .name = NAME,
     189        .driver_ops = &root_ops
     190};
     191
     192bool root_init()
     193{
     194        // TODO  driver initialization 
     195        return true;
     196}
     197
     198int main(int argc, char *argv[])
     199{
     200        printf(NAME ": HelenOS root device driver\n");
     201        if (!root_init()) {
     202                printf(NAME ": Error while initializing driver.\n");
    183203                return -1;
    184204        }
    185 }
    186 
    187 /** Register new driver with device manager. */
    188 int devman_driver_register(const char *name, async_client_conn_t conn)
    189 {
    190         int phone = devman_get_phone(DEVMAN_DRIVER, IPC_FLAG_BLOCKING);
    191        
    192         if (phone < 0)
    193                 return phone;
    194        
    195         async_serialize_start();
    196        
    197         ipc_call_t answer;
    198         aid_t req = async_send_2(phone, DEVMAN_DRIVER_REGISTER, 0, 0, &answer);
    199        
    200         ipcarg_t retval = async_data_write_start(phone, name, str_size(name));
    201         if (retval != EOK) {
    202                 async_wait_for(req, NULL);
    203                 async_serialize_end();
    204                 return -1;
    205         }
    206        
    207         async_set_client_connection(conn);
    208        
    209         ipcarg_t callback_phonehash;
    210         ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash);
    211         async_wait_for(req, &retval);
    212        
    213         async_serialize_end();
    214        
    215         return retval;
    216 }
    217 
    218 int driver_main(driver_t *drv)
    219 {
    220         // remember driver structure - driver_ops will be called by generic handler for incoming connections
    221         driver = drv;
    222        
    223         // register driver by device manager with generic handler for incoming connections
    224         devman_driver_register(driver->name, driver_connection);               
    225 
    226         async_manager();
    227 
    228         // Never reached
    229         return 0;
    230        
    231 }
    232 
    233 ////////////////////////////////////////
    234 // ROOT driver
    235 ////////////////////////////////////////
    236 
    237 #define NAME "root"
    238 
    239 static driver_t root_driver;
    240 
    241 bool root_add_device(device_t *dev)
    242 {
    243         // TODO
    244         return true;
    245 }
    246 
    247 bool root_init(driver_t *drv, const char *name)
    248 {
    249         // TODO  initialize driver structure
    250        
    251         return true;
    252 }
    253 
    254 int main(int argc, char *argv[])
    255 {
    256         printf(NAME ": HelenOS root device driver\n");
    257         if (!root_init(&root_driver, argv[0])) {
    258                 printf(NAME ": Error while initializing driver\n");
    259                 return -1;
    260         }
    261205       
    262206        return driver_main(&root_driver);
    263 
    264 }
     207}
Note: See TracChangeset for help on using the changeset viewer.