Ignore:
File:
1 edited

Legend:

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

    r6f9e7fea r5291411  
    11/*
    22 * Copyright (c) 2010 Lenka Trochtova
    3  * Copyright (c) 2010 Vojtech Horky
    43 * All rights reserved.
    54 *
     
    5352#define NAME "root"
    5453
    55 #define PLATFORM_DEVICE_NAME "hw"
    56 #define PLATFORM_DEVICE_MATCH_ID STRING(UARCH)
    57 #define PLATFORM_DEVICE_MATCH_SCORE 100
    58 
    59 #define VIRTUAL_DEVICE_NAME "virt"
    60 #define VIRTUAL_DEVICE_MATCH_ID "rootvirt"
    61 #define VIRTUAL_DEVICE_MATCH_SCORE 100
    62 
    6354static int root_add_device(device_t *dev);
    6455
     
    7465};
    7566
    76 /** Create the device which represents the root of virtual device tree.
    77  *
    78  * @param parent Parent of the newly created device.
    79  * @return Error code.
    80  */
    81 static int add_virtual_root_child(device_t *parent)
    82 {
    83         printf(NAME ": adding new child for virtual devices.\n");
    84         printf(NAME ":   device node is `%s' (%d %s)\n", VIRTUAL_DEVICE_NAME,
    85             VIRTUAL_DEVICE_MATCH_SCORE, VIRTUAL_DEVICE_MATCH_ID);
    86 
    87         int res = child_device_register_wrapper(parent, VIRTUAL_DEVICE_NAME,
    88             VIRTUAL_DEVICE_MATCH_ID, VIRTUAL_DEVICE_MATCH_SCORE);
    89 
    90         return res;
    91 }
    92 
    9367/** Create the device which represents the root of HW device tree.
    9468 *
     
    9973{
    10074        printf(NAME ": adding new child for platform device.\n");
    101         printf(NAME ":   device node is `%s' (%d %s)\n", PLATFORM_DEVICE_NAME,
    102             PLATFORM_DEVICE_MATCH_SCORE, PLATFORM_DEVICE_MATCH_ID);
    10375       
    104         int res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME,
    105             PLATFORM_DEVICE_MATCH_ID, PLATFORM_DEVICE_MATCH_SCORE);
    106 
     76        int res = EOK;
     77        device_t *platform = NULL;
     78        match_id_t *match_id = NULL;
     79       
     80        /* Create new device. */
     81        platform = create_device();
     82        if (NULL == platform) {
     83                res = ENOMEM;
     84                goto failure;
     85        }       
     86       
     87        platform->name = "hw";
     88        printf(NAME ": the new device's name is %s.\n", platform->name);
     89       
     90        /* Initialize match id list. */
     91        match_id = create_match_id();
     92        if (NULL == match_id) {
     93                res = ENOMEM;
     94                goto failure;
     95        }
     96       
     97        /* TODO - replace this with some better solution (sysinfo ?) */
     98        match_id->id = STRING(UARCH);
     99        match_id->score = 100;
     100        add_match_id(&platform->match_ids, match_id);
     101       
     102        /* Register child device. */
     103        res = child_device_register(platform, parent);
     104        if (EOK != res)
     105                goto failure;
     106       
     107        return res;
     108       
     109failure:
     110        if (NULL != match_id)
     111                match_id->id = NULL;
     112       
     113        if (NULL != platform) {
     114                platform->name = NULL;
     115                delete_device(platform);
     116        }
     117       
    107118        return res;
    108119}
     
    117128        printf(NAME ": root_add_device, device handle = %d\n", dev->handle);
    118129       
    119         /*
    120          * Register virtual devices root.
    121          * We ignore error occurrence because virtual devices shall not be
    122          * vital for the system.
    123          */
    124         add_virtual_root_child(dev);
    125 
    126130        /* Register root device's children. */
    127131        int res = add_platform_child(dev);
Note: See TracChangeset for help on using the changeset viewer.