Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/root/root.c

    raf6b5157 reff1f033  
    22 * Copyright (c) 2010 Lenka Trochtova
    33 * Copyright (c) 2010 Vojtech Horky
    4  * Copyright (c) 2011 Jiri Svoboda
    54 * All rights reserved.
    65 *
     
    4544#include <stdlib.h>
    4645#include <str.h>
    47 #include <str_error.h>
    4846#include <ctype.h>
    4947#include <macros.h>
     
    5149#include <sysinfo.h>
    5250
    53 #include <ddf/driver.h>
     51#include <driver.h>
    5452#include <devman.h>
    5553#include <ipc/devman.h>
     
    5755#define NAME "root"
    5856
    59 #define PLATFORM_FUN_NAME "hw"
    60 #define PLATFORM_FUN_MATCH_ID_FMT "platform/%s"
    61 #define PLATFORM_FUN_MATCH_SCORE 100
     57#define PLATFORM_DEVICE_NAME "hw"
     58#define PLATFORM_DEVICE_MATCH_ID_FMT "platform/%s"
     59#define PLATFORM_DEVICE_MATCH_SCORE 100
    6260
    63 #define VIRTUAL_FUN_NAME "virt"
    64 #define VIRTUAL_FUN_MATCH_ID "rootvirt"
    65 #define VIRTUAL_FUN_MATCH_SCORE 100
     61#define VIRTUAL_DEVICE_NAME "virt"
     62#define VIRTUAL_DEVICE_MATCH_ID "rootvirt"
     63#define VIRTUAL_DEVICE_MATCH_SCORE 100
    6664
    67 static int root_add_device(ddf_dev_t *dev);
     65static int root_add_device(device_t *dev);
    6866
    6967/** The root device driver's standard operations. */
     
    7876};
    7977
    80 /** Create the function which represents the root of virtual device tree.
     78/** Create the device which represents the root of virtual device tree.
    8179 *
    82  * @param dev   Device
    83  * @return      EOK on success or negative error code
     80 * @param parent Parent of the newly created device.
     81 * @return Error code.
    8482 */
    85 static int add_virtual_root_fun(ddf_dev_t *dev)
     83static int add_virtual_root_child(device_t *parent)
    8684{
    87         const char *name = VIRTUAL_FUN_NAME;
    88         ddf_fun_t *fun;
    89         int rc;
     85        printf(NAME ": adding new child for virtual devices.\n");
     86        printf(NAME ":   device node is `%s' (%d %s)\n", VIRTUAL_DEVICE_NAME,
     87            VIRTUAL_DEVICE_MATCH_SCORE, VIRTUAL_DEVICE_MATCH_ID);
    9088
    91         printf(NAME ": adding new function for virtual devices.\n");
    92         printf(NAME ":   function node is `%s' (%d %s)\n", name,
    93             VIRTUAL_FUN_MATCH_SCORE, VIRTUAL_FUN_MATCH_ID);
     89        int res = child_device_register_wrapper(parent, VIRTUAL_DEVICE_NAME,
     90            VIRTUAL_DEVICE_MATCH_ID, VIRTUAL_DEVICE_MATCH_SCORE);
    9491
    95         fun = ddf_fun_create(dev, fun_inner, name);
    96         if (fun == NULL) {
    97                 printf(NAME ": error creating function %s\n", name);
    98                 return ENOMEM;
    99         }
    100 
    101         rc = ddf_fun_add_match_id(fun, VIRTUAL_FUN_MATCH_ID,
    102             VIRTUAL_FUN_MATCH_SCORE);
    103         if (rc != EOK) {
    104                 printf(NAME ": error adding match IDs to function %s\n", name);
    105                 ddf_fun_destroy(fun);
    106                 return rc;
    107         }
    108 
    109         rc = ddf_fun_bind(fun);
    110         if (rc != EOK) {
    111                 printf(NAME ": error binding function %s: %s\n", name,
    112                     str_error(rc));
    113                 ddf_fun_destroy(fun);
    114                 return rc;
    115         }
    116 
    117         return EOK;
     92        return res;
    11893}
    11994
    120 /** Create the function which represents the root of HW device tree.
     95/** Create the device which represents the root of HW device tree.
    12196 *
    122  * @param dev   Device
    123  * @return      EOK on success or negative error code
     97 * @param parent        Parent of the newly created device.
     98 * @return 0 on success, negative error number otherwise.
    12499 */
    125 static int add_platform_fun(ddf_dev_t *dev)
     100static int add_platform_child(device_t *parent)
    126101{
    127102        char *match_id;
    128103        char *platform;
    129104        size_t platform_size;
    130 
    131         const char *name = PLATFORM_FUN_NAME;
    132         ddf_fun_t *fun;
    133         int rc;
     105        int res;
    134106
    135107        /* Get platform name from sysinfo. */
     108
    136109        platform = sysinfo_get_data("platform", &platform_size);
    137110        if (platform == NULL) {
     
    150123
    151124        /* Construct match ID. */
    152         if (asprintf(&match_id, PLATFORM_FUN_MATCH_ID_FMT, platform) == -1) {
     125
     126        if (asprintf(&match_id, PLATFORM_DEVICE_MATCH_ID_FMT, platform) == -1) {
    153127                printf(NAME ": Memory allocation failed.\n");
    154128                return ENOMEM;
    155129        }
    156130
    157         /* Add function. */
    158         printf(NAME ": adding platform function\n");
    159         printf(NAME ":   function node is `%s' (%d %s)\n", PLATFORM_FUN_NAME,
    160             PLATFORM_FUN_MATCH_SCORE, match_id);
     131        /* Add child. */
    161132
    162         fun = ddf_fun_create(dev, fun_inner, name);
    163         if (fun == NULL) {
    164                 printf(NAME ": error creating function %s\n", name);
    165                 return ENOMEM;
    166         }
     133        printf(NAME ": adding new child for platform device.\n");
     134        printf(NAME ":   device node is `%s' (%d %s)\n", PLATFORM_DEVICE_NAME,
     135            PLATFORM_DEVICE_MATCH_SCORE, match_id);
    167136
    168         rc = ddf_fun_add_match_id(fun, match_id, PLATFORM_FUN_MATCH_SCORE);
    169         if (rc != EOK) {
    170                 printf(NAME ": error adding match IDs to function %s\n", name);
    171                 ddf_fun_destroy(fun);
    172                 return rc;
    173         }
     137        res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME,
     138            match_id, PLATFORM_DEVICE_MATCH_SCORE);
    174139
    175         rc = ddf_fun_bind(fun);
    176         if (rc != EOK) {
    177                 printf(NAME ": error binding function %s: %s\n", name,
    178                     str_error(rc));
    179                 ddf_fun_destroy(fun);
    180                 return rc;
    181         }
    182 
    183         return EOK;
     140        return res;
    184141}
    185142
     
    189146 *                      of HW and pseudo devices).
    190147 */
    191 static int root_add_device(ddf_dev_t *dev)
     148static int root_add_device(device_t *dev)
    192149{
    193150        printf(NAME ": root_add_device, device handle=%" PRIun "\n",
    194151            dev->handle);
    195 
     152       
    196153        /*
    197154         * Register virtual devices root.
     
    199156         * vital for the system.
    200157         */
    201         add_virtual_root_fun(dev);
     158        add_virtual_root_child(dev);
    202159
    203160        /* Register root device's children. */
    204         int res = add_platform_fun(dev);
     161        int res = add_platform_child(dev);
    205162        if (EOK != res)
    206163                printf(NAME ": failed to add child device for platform.\n");
    207 
     164       
    208165        return res;
    209166}
     
    212169{
    213170        printf(NAME ": HelenOS root device driver\n");
    214         return ddf_driver_main(&root_driver);
     171        return driver_main(&root_driver);
    215172}
    216173
Note: See TracChangeset for help on using the changeset viewer.