Ignore:
File:
1 edited

Legend:

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

    r6f9e7fea reff1f033  
    4646#include <ctype.h>
    4747#include <macros.h>
     48#include <inttypes.h>
     49#include <sysinfo.h>
    4850
    4951#include <driver.h>
     
    5456
    5557#define PLATFORM_DEVICE_NAME "hw"
    56 #define PLATFORM_DEVICE_MATCH_ID STRING(UARCH)
     58#define PLATFORM_DEVICE_MATCH_ID_FMT "platform/%s"
    5759#define PLATFORM_DEVICE_MATCH_SCORE 100
    5860
     
    98100static int add_platform_child(device_t *parent)
    99101{
     102        char *match_id;
     103        char *platform;
     104        size_t platform_size;
     105        int res;
     106
     107        /* Get platform name from sysinfo. */
     108
     109        platform = sysinfo_get_data("platform", &platform_size);
     110        if (platform == NULL) {
     111                printf(NAME ": Failed to obtain platform name.\n");
     112                return ENOENT;
     113        }
     114
     115        /* Null-terminate string. */
     116        platform = realloc(platform, platform_size + 1);
     117        if (platform == NULL) {
     118                printf(NAME ": Memory allocation failed.\n");
     119                return ENOMEM;
     120        }
     121
     122        platform[platform_size] = '\0';
     123
     124        /* Construct match ID. */
     125
     126        if (asprintf(&match_id, PLATFORM_DEVICE_MATCH_ID_FMT, platform) == -1) {
     127                printf(NAME ": Memory allocation failed.\n");
     128                return ENOMEM;
     129        }
     130
     131        /* Add child. */
     132
    100133        printf(NAME ": adding new child for platform device.\n");
    101134        printf(NAME ":   device node is `%s' (%d %s)\n", PLATFORM_DEVICE_NAME,
    102             PLATFORM_DEVICE_MATCH_SCORE, PLATFORM_DEVICE_MATCH_ID);
    103        
    104         int res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME,
    105             PLATFORM_DEVICE_MATCH_ID, PLATFORM_DEVICE_MATCH_SCORE);
     135            PLATFORM_DEVICE_MATCH_SCORE, match_id);
     136
     137        res = child_device_register_wrapper(parent, PLATFORM_DEVICE_NAME,
     138            match_id, PLATFORM_DEVICE_MATCH_SCORE);
    106139
    107140        return res;
     
    115148static int root_add_device(device_t *dev)
    116149{
    117         printf(NAME ": root_add_device, device handle = %d\n", dev->handle);
     150        printf(NAME ": root_add_device, device handle=%" PRIun "\n",
     151            dev->handle);
    118152       
    119153        /*
Note: See TracChangeset for help on using the changeset viewer.