Ignore:
File:
1 edited

Legend:

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

    r5291411 r6f9e7fea  
    11/*
    22 * Copyright (c) 2010 Lenka Trochtova
     3 * Copyright (c) 2010 Vojtech Horky
    34 * All rights reserved.
    45 *
     
    5253#define NAME "root"
    5354
     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
    5463static int root_add_device(device_t *dev);
    5564
     
    6574};
    6675
     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 */
     81static 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
    6793/** Create the device which represents the root of HW device tree.
    6894 *
     
    7399{
    74100        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);
    75103       
    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        
    109 failure:
    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        
     104        int res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME,
     105            PLATFORM_DEVICE_MATCH_ID, PLATFORM_DEVICE_MATCH_SCORE);
     106
    118107        return res;
    119108}
     
    128117        printf(NAME ": root_add_device, device handle = %d\n", dev->handle);
    129118       
     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
    130126        /* Register root device's children. */
    131127        int res = add_platform_child(dev);
Note: See TracChangeset for help on using the changeset viewer.