Changes in / [5608deba:2cc7f16] in mainline


Ignore:
Files:
6 added
4 deleted
37 edited

Legend:

Unmodified
Added
Removed
  • abi/include/syscall.h

    r5608deba r2cc7f16  
    9292        SYS_IRQ_UNREGISTER,
    9393       
    94         SYS_SYSINFO_GET_KEYS_SIZE,
    95         SYS_SYSINFO_GET_KEYS,
    9694        SYS_SYSINFO_GET_VAL_TYPE,
    9795        SYS_SYSINFO_GET_VALUE,
  • boot/Makefile.common

    r5608deba r2cc7f16  
    165165        $(USPACE_PATH)/app/locinfo/locinfo \
    166166        $(USPACE_PATH)/app/mkfat/mkfat \
    167         $(USPACE_PATH)/app/mkexfat/mkexfat \
    168167        $(USPACE_PATH)/app/mkmfs/mkmfs \
    169168        $(USPACE_PATH)/app/lsusb/lsusb \
  • boot/arch/ia64/src/pal_asm.S

    r5608deba r2cc7f16  
    3232
    3333pal_static_call:
    34         alloc loc0 = ar.pfs, 7, 6, 0, 0
    35 
    36         mov loc1 = psr ;;
    37         mov psr.l = r0 ;;
    38         srlz.i
    39         srlz.d
     34        alloc loc0 = ar.pfs, 7, 5, 0, 0
    4035       
    41         mov loc2 = gp
    42         mov loc3 = rp
     36        mov loc1 = gp
     37        mov loc2 = rp
    4338       
    44         addl loc4 = @gprel(pal_proc), gp
    45 
     39        addl loc3 = @gprel(pal_proc), gp
     40       
    4641        mov r28 = in0
    4742        mov r29 = in1
     
    4944        mov r31 = in3 ;;
    5045       
    51         ld8 loc4 = [loc4]
    52         movl loc5 = 0f ;;
     46        ld8 loc3 = [loc3]
     47        movl loc4 = 0f ;;
    5348
    54         mov b6 = loc4
    55         mov rp = loc5 ;;
     49        mov b6 = loc3
     50        mov rp = loc4 ;;
    5651        br.cond.sptk.many b6
    5752
    58530:
    59         mov psr.l = loc1 ;;
    60         srlz.i
    61         srlz.d
    62 
    6354        cmp.ne p7,p0 = 0, in4
    6455        cmp.ne p8,p0 = 0, in5
     
    6960(p9)    st8 [in6] = r11
    7061       
    71         mov gp = loc2
    72         mov rp = loc3 ;;
     62        mov gp = loc1
     63        mov rp = loc2 ;;
    7364       
    7465        mov ar.pfs = loc0
  • boot/arch/ia64/src/sal_asm.S

    r5608deba r2cc7f16  
    2929.explicit
    3030
    31 #define STACK_SCRATCH_AREA      16
    32 #define STACK_IN8               (0 + STACK_SCRATCH_AREA)
    33 #define STACK_IN9               (8 + STACK_SCRATCH_AREA)
    34 #define STACK_IN10              (16 + STACK_SCRATCH_AREA)
    35 
    3631.global sal_call
    3732
     
    4439#
    4540sal_call:
    46         alloc loc0 = ar.pfs, 8, 8, 8, 0
     41        alloc loc0 = ar.pfs, 11, 5, 8, 0
    4742       
    48         adds sp = -STACK_SCRATCH_AREA, sp
    49 
    5043        mov loc1 = gp
    5144        mov loc2 = rp
     
    6457       
    6558        ld8 loc3 = [loc3]
    66         ld8 gp = [loc4]
    67 
    68         adds r14 = STACK_IN8 + STACK_SCRATCH_AREA, sp
    69         adds r15 = STACK_IN9 + STACK_SCRATCH_AREA, sp
    70         adds r16 = STACK_IN10 + STACK_SCRATCH_AREA, sp ;;
    71 
    72         ld8 loc5 = [r14]
    73         ld8 loc6 = [r15]
    74         ld8 loc7 = [r16]
     59        ld8 gp = [loc4] ;;
    7560       
    7661        mov b6 = loc3 ;;
    7762        br.call.sptk.many rp = b6
    7863       
    79         cmp.ne p7,p0 = 0, loc5
    80         cmp.ne p8,p0 = 0, loc6
    81         cmp.ne p9,p0 = 0, loc7 ;;
     64        cmp.ne p7,p0 = 0, in8
     65        cmp.ne p8,p0 = 0, in9
     66        cmp.ne p9,p0 = 0, in10 ;;
    8267       
    83 (p7)    st8 [loc5] = r9
    84 (p8)    st8 [loc6] = r10
    85 (p9)    st8 [loc7] = r11
     68(p7)    st8 [in8] = r9
     69(p8)    st8 [in9] = r10
     70(p9)    st8 [in10] = r11
    8671       
    8772        mov gp = loc1
    88         mov rp = loc2
    89 
    90         adds sp = STACK_SCRATCH_AREA, sp ;;
     73        mov rp = loc2 ;;
    9174       
    9275        mov ar.pfs = loc0
    9376        br.ret.sptk.many rp
    94 
  • kernel/arch/ia64/include/asm.h

    r5608deba r2cc7f16  
    6161        asm volatile (
    6262                "mf\n"
    63                 "mf.a\n"
    6463                ::: "memory"
    6564        );
     
    7574        asm volatile (
    7675                "mf\n"
    77                 "mf.a\n"
    7876                ::: "memory"
    7977        );
     
    8987        asm volatile (
    9088                "mf\n"
    91                 "mf.a\n"
    9289                ::: "memory"
    9390        );
     
    107104        else
    108105                v = *port;
    109 
    110         asm volatile (
    111                 "mf.a\n"
    112                 ::: "memory"
    113         );
    114106       
    115107        return v;
     
    129121        else
    130122                v = *port;
    131 
    132         asm volatile (
    133                 "mf.a\n"
    134                 ::: "memory"
    135         );
    136123       
    137124        return v;
     
    151138        else
    152139                v = *port;
    153 
    154         asm volatile (
    155                 "mf.a\n"
    156                 ::: "memory"
    157         );
    158140
    159141        return v;
  • kernel/arch/ia64/src/ia64.c

    r5608deba r2cc7f16  
    144144#endif
    145145#ifdef MACHINE_i460GX
    146         platform = "pc";
     146        platform = "i460GX";
    147147#endif
    148148        sysinfo_set_item_data("platform", NULL, (void *) platform,
  • kernel/arch/ppc32/src/ppc32.c

    r5608deba r2cc7f16  
    173173                ofw_tree_walk_by_device_type("display", display_register, NULL);
    174174#endif
    175                 /* Map OFW information into sysinfo */
    176                 ofw_sysinfo_map();
    177175               
    178176                /* Initialize IRQ routing */
  • kernel/arch/sparc64/src/sun4u/sparc64.c

    r5608deba r2cc7f16  
    9494{
    9595        if (config.cpu_active == 1) {
    96                 /* Map OFW information into sysinfo */
    97                 ofw_sysinfo_map();
    98                
    9996                /*
    10097                 * We have 2^11 different interrupt vectors.
  • kernel/arch/sparc64/src/sun4v/sparc64.c

    r5608deba r2cc7f16  
    9292{
    9393        if (config.cpu_active == 1) {
    94                 /* Map OFW information into sysinfo */
    95                 ofw_sysinfo_map();
    96                
    9794                /*
    9895                 * We have 2^11 different interrupt vectors.
  • kernel/genarch/include/ofw/ofw_tree.h

    r5608deba r2cc7f16  
    6767
    6868extern void ofw_tree_init(ofw_tree_node_t *);
    69 extern void ofw_sysinfo_map(void);
     69extern void ofw_tree_print(void);
    7070
    7171extern const char *ofw_tree_node_name(const ofw_tree_node_t *);
  • kernel/genarch/src/ofw/ofw_tree.c

    r5608deba r2cc7f16  
    3838#include <genarch/ofw/ofw_tree.h>
    3939#include <mm/slab.h>
    40 #include <sysinfo/sysinfo.h>
    4140#include <memstr.h>
    4241#include <str.h>
     
    6665    const char *name)
    6766{
    68         for (size_t i = 0; i < node->properties; i++) {
     67        size_t i;
     68       
     69        for (i = 0; i < node->properties; i++) {
    6970                if (str_cmp(node->property[i].name, name) == 0)
    7071                        return &node->property[i];
     
    103104    const char *name)
    104105{
     106        ofw_tree_node_t *cur;
     107       
    105108        /*
    106109         * Try to find the disambigued name.
    107110         */
    108         for (ofw_tree_node_t *cur = node->child; cur; cur = cur->peer) {
     111        for (cur = node->child; cur; cur = cur->peer) {
    109112                if (str_cmp(cur->da_name, name) == 0)
    110113                        return cur;
     
    118121         * are not always fully-qualified.
    119122         */
    120         for (ofw_tree_node_t *cur = node->child; cur; cur = cur->peer) {
     123        for (cur = node->child; cur; cur = cur->peer) {
    121124                if (str_cmp(ofw_tree_node_name(cur), name) == 0)
    122125                        return cur;
     
    138141    const char *dtype)
    139142{
    140         for (ofw_tree_node_t *cur = node->child; cur; cur = cur->peer) {
     143        ofw_tree_node_t *cur;
     144       
     145        for (cur = node->child; cur; cur = cur->peer) {
    141146                ofw_tree_property_t *prop =
    142147                    ofw_tree_getprop(cur, "device_type");
     
    167172    phandle handle)
    168173{
    169         for (ofw_tree_node_t *cur = root; cur; cur = cur->peer) {
     174        ofw_tree_node_t *cur;
     175       
     176        for (cur = root; cur; cur = cur->peer) {
    170177                if (cur->node_handle == handle)
    171178                        return cur;
    172179               
    173180                if (cur->child) {
    174                         ofw_tree_node_t *node =
    175                             ofw_tree_find_node_by_handle(cur->child, handle);
     181                        ofw_tree_node_t *node
     182                            = ofw_tree_find_node_by_handle(cur->child, handle);
    176183                        if (node)
    177184                                return node;
     
    194201    const char *dtype)
    195202{
    196         for (ofw_tree_node_t *cur = node->peer; cur; cur = cur->peer) {
     203        ofw_tree_node_t *cur;
     204       
     205        for (cur = node->peer; cur; cur = cur->peer) {
    197206                ofw_tree_property_t *prop =
    198207                    ofw_tree_getprop(cur, "device_type");
     
    220229    const char *name)
    221230{
    222         for (ofw_tree_node_t *cur = node->peer; cur; cur = cur->peer) {
    223                 ofw_tree_property_t *prop =
    224                     ofw_tree_getprop(cur, "name");
     231        ofw_tree_node_t *cur;
     232       
     233        for (cur = node->peer; cur; cur = cur->peer) {
     234                ofw_tree_property_t *prop
     235                    = ofw_tree_getprop(cur, "name");
    225236               
    226237                if ((!prop) || (!prop->value))
     
    248259       
    249260        ofw_tree_node_t *node = ofw_root;
     261        size_t i;
    250262        size_t j;
    251263       
    252         for (size_t i = 1; (i < str_size(path)) && (node); i = j + 1) {
     264        for (i = 1; (i < str_size(path)) && (node); i = j + 1) {
    253265                for (j = i; (j < str_size(path)) && (path[j] != '/'); j++);
    254266               
     
    282294    const char *dtype, ofw_tree_walker_t walker, void *arg)
    283295{
    284         for (ofw_tree_node_t *cur = node; cur; cur = cur->peer) {
     296        ofw_tree_node_t *cur;
     297       
     298        for (cur = node; cur; cur = cur->peer) {
    285299                ofw_tree_property_t *prop =
    286300                    ofw_tree_getprop(cur, "device_type");
     
    320334}
    321335
    322 /** Get OpenFirmware node properties.
    323  *
    324  * @param item    Sysinfo item (unused).
    325  * @param size    Size of the returned data.
    326  * @param dry_run Do not get the data, just calculate the size.
    327  * @param data    OpenFirmware node.
    328  *
    329  * @return Data containing a serialized dump of all node
    330  *         properties. If the return value is not NULL, it
    331  *         should be freed in the context of the sysinfo request.
    332  *
    333  */
    334 static void *ofw_sysinfo_properties(struct sysinfo_item *item, size_t *size,
    335     bool dry_run, void *data)
    336 {
    337         ofw_tree_node_t *node = (ofw_tree_node_t *) data;
    338        
    339         /* Compute serialized data size */
    340         *size = 0;
    341         for (size_t i = 0; i < node->properties; i++)
    342                 *size += str_size(node->property[i].name) + 1 +
    343                     sizeof(node->property[i].size) + node->property[i].size;
    344        
    345         if (dry_run)
    346                 return NULL;
    347        
    348         void *dump = malloc(*size, FRAME_ATOMIC);
    349         if (dump == NULL) {
    350                 *size = 0;
    351                 return NULL;
    352         }
    353        
    354         /* Serialize the data */
    355         size_t pos = 0;
    356         for (size_t i = 0; i < node->properties; i++) {
    357                 /* Property name */
    358                 str_cpy(dump + pos, *size - pos, node->property[i].name);
    359                 pos += str_size(node->property[i].name) + 1;
    360                
    361                 /* Value size */
    362                 memcpy(dump + pos, &node->property[i].size,
    363                     sizeof(node->property[i].size));
    364                 pos += sizeof(node->property[i].size);
    365                
    366                 /* Value */
    367                 memcpy(dump + pos, node->property[i].value,
    368                     node->property[i].size);
    369                 pos += node->property[i].size;
    370         }
    371        
    372         return ((void *) dump);
    373 }
    374 
    375 /** Map OpenFirmware device subtree rooted in a node into sysinfo.
     336/** Print OpenFirmware device subtree rooted in a node.
    376337 *
    377338 * Child nodes are processed recursively and peer nodes are processed
     
    382343 *
    383344 */
    384 static void ofw_tree_node_sysinfo(ofw_tree_node_t *node, const char *path)
     345static void ofw_tree_node_print(ofw_tree_node_t *node, const char *path)
    385346{
    386347        char *cur_path = (char *) malloc(PATH_MAX_LEN, 0);
    387        
    388         for (ofw_tree_node_t *cur = node; cur; cur = cur->peer) {
    389                 if ((cur->parent) && (path))
    390                         snprintf(cur_path, PATH_MAX_LEN, "%s.%s", path, cur->da_name);
    391                 else
    392                         snprintf(cur_path, PATH_MAX_LEN, "firmware.%s", cur->da_name);
    393                
    394                 sysinfo_set_item_gen_data(cur_path, NULL, ofw_sysinfo_properties,
    395                     (void *) cur);
     348        ofw_tree_node_t *cur;
     349       
     350        for (cur = node; cur; cur = cur->peer) {
     351                if ((cur->parent) && (path)) {
     352                        snprintf(cur_path, PATH_MAX_LEN, "%s/%s", path, cur->da_name);
     353                        printf("%s\n", cur_path);
     354                } else {
     355                        snprintf(cur_path, PATH_MAX_LEN, "%s", cur->da_name);
     356                        printf("/\n");
     357                }
    396358               
    397359                if (cur->child)
    398                         ofw_tree_node_sysinfo(cur->child, cur_path);
     360                        ofw_tree_node_print(cur->child, cur_path);
    399361        }
    400362       
     
    402364}
    403365
    404 /** Map the OpenFirmware device tree into sysinfo. */
    405 void ofw_sysinfo_map(void)
    406 {
    407         ofw_tree_node_sysinfo(ofw_root, NULL);
     366/** Print the structure of the OpenFirmware device tree. */
     367void ofw_tree_print(void)
     368{
     369        ofw_tree_node_print(ofw_root, NULL);
    408370}
    409371
  • kernel/generic/include/sysinfo/sysinfo.h

    r5608deba r2cc7f16  
    11/*
    22 * Copyright (c) 2006 Jakub Vana
    3  * Copyright (c) 2012 Martin Decky
    43 * All rights reserved.
    54 *
     
    5554struct sysinfo_item;
    5655
    57 /** Generated numeric value function */
    58 typedef sysarg_t (*sysinfo_fn_val_t)(struct sysinfo_item *, void *);
    59 
    60 /** Sysinfo generated numberic value data
    61  *
    62  */
    63 typedef struct {
    64         sysinfo_fn_val_t fn;  /**< Generated value function */
    65         void *data;           /**< Private data */
    66 } sysinfo_gen_val_data_t;
     56/** Gerated numeric value function */
     57typedef sysarg_t (*sysinfo_fn_val_t)(struct sysinfo_item *);
    6758
    6859/** Generated binary data function */
    69 typedef void *(*sysinfo_fn_data_t)(struct sysinfo_item *, size_t *, bool,
    70     void *);
    71 
    72 /** Sysinfo generated binary data data
    73  *
    74  */
    75 typedef struct {
    76         sysinfo_fn_data_t fn;  /**< Generated binary data function */
    77         void *data;            /**< Private data */
    78 } sysinfo_gen_data_data_t;
     60typedef void *(*sysinfo_fn_data_t)(struct sysinfo_item *, size_t *, bool);
    7961
    8062/** Sysinfo item binary data
     
    9072 */
    9173typedef union {
    92         sysarg_t val;                      /**< Constant numberic value */
    93         sysinfo_data_t data;               /**< Constant binary data */
    94         sysinfo_gen_val_data_t gen_val;    /**< Generated numeric value function */
    95         sysinfo_gen_data_data_t gen_data;  /**< Generated binary data function */
     74        sysarg_t val;               /**< Constant numberic value */
     75        sysinfo_fn_val_t fn_val;    /**< Generated numeric value function */
     76        sysinfo_fn_data_t fn_data;  /**< Generated binary data function */
     77        sysinfo_data_t data;        /**< Constant binary data */
    9678} sysinfo_item_val_t;
    9779
     
    11395
    11496/** Generated subtree function */
    115 typedef sysinfo_return_t (*sysinfo_fn_subtree_t)(const char *, bool, void *);
    116 
    117 /** Sysinfo generated subtree data
    118  *
    119  */
    120 typedef struct {
    121         sysinfo_fn_subtree_t fn;  /**< Generated subtree function */
    122         void *data;               /**< Private data */
    123 } sysinfo_gen_subtree_data_t;
     97typedef sysinfo_return_t (*sysinfo_fn_subtree_t)(const char *, bool);
    12498
    12599/** Sysinfo subtree (union)
     
    127101 */
    128102typedef union {
    129         struct sysinfo_item *table;            /**< Fixed subtree (list of subitems) */
    130         sysinfo_gen_subtree_data_t generator;  /**< Generated subtree */
     103        struct sysinfo_item *table;     /**< Fixed subtree (list of subitems) */
     104        sysinfo_fn_subtree_t get_data;  /**< Generated subtree function */
    131105} sysinfo_subtree_t;
    132106
     
    149123extern void sysinfo_set_item_data(const char *, sysinfo_item_t **, void *,
    150124    size_t);
    151 extern void sysinfo_set_item_gen_val(const char *, sysinfo_item_t **,
    152     sysinfo_fn_val_t, void *);
    153 extern void sysinfo_set_item_gen_data(const char *, sysinfo_item_t **,
    154     sysinfo_fn_data_t, void *);
     125extern void sysinfo_set_item_fn_val(const char *, sysinfo_item_t **,
     126    sysinfo_fn_val_t);
     127extern void sysinfo_set_item_fn_data(const char *, sysinfo_item_t **,
     128    sysinfo_fn_data_t);
    155129extern void sysinfo_set_item_undefined(const char *, sysinfo_item_t **);
    156130
    157131extern void sysinfo_set_subtree_fn(const char *, sysinfo_item_t **,
    158     sysinfo_fn_subtree_t, void *);
     132    sysinfo_fn_subtree_t);
    159133
    160134extern void sysinfo_init(void);
    161135extern void sysinfo_dump(sysinfo_item_t *);
    162136
    163 extern sysarg_t sys_sysinfo_get_keys_size(void *, size_t, void *);
    164 extern sysarg_t sys_sysinfo_get_keys(void *, size_t, void *, size_t, size_t *);
    165137extern sysarg_t sys_sysinfo_get_val_type(void *, size_t);
    166138extern sysarg_t sys_sysinfo_get_value(void *, size_t, void *);
  • kernel/generic/src/ddi/ddi.c

    r5608deba r2cc7f16  
    166166        }
    167167       
    168         if (zones.info[znum].flags & (ZONE_FIRMWARE | ZONE_RESERVED)) {
    169                 /*
    170                  * Frames are part of firmware or reserved zone
     168        if (zones.info[znum].flags & ZONE_FIRMWARE) {
     169                /*
     170                 * Frames are part of firmware
    171171                 * -> allow mapping for privileged tasks.
    172172                 */
  • kernel/generic/src/lib/func.c

    r5608deba r2cc7f16  
    5353void halt()
    5454{
    55 #if (defined(CONFIG_DEBUG)) && (defined(CONFIG_KCONSOLE))
     55#ifdef CONFIG_DEBUG
    5656        bool rundebugger = false;
    5757       
  • kernel/generic/src/main/main.c

    r5608deba r2cc7f16  
    221221        frame_init();
    222222        slab_cache_init();
    223         ra_init();
     223        ra_init();     
    224224        sysinfo_init();
    225225        btree_init();
     
    257257                for (i = 0; i < init.cnt; i++)
    258258                        LOG("init[%zu].addr=%p, init[%zu].size=%zu",
    259                             i, (void *) init.tasks[i].paddr, i, init.tasks[i].size);
     259                            i, (void *) init.tasks[i].addr, i, init.tasks[i].size);
    260260        } else
    261261                printf("No init binaries found.\n");
  • kernel/generic/src/mm/page.c

    r5608deba r2cc7f16  
    168168int page_find_mapping(uintptr_t virt, void **phys)
    169169{
    170         page_table_lock(AS, true);
     170        mutex_lock(&AS->lock);
    171171       
    172172        pte_t *pte = page_mapping_find(AS, virt, false);
    173173        if ((!PTE_VALID(pte)) || (!PTE_PRESENT(pte))) {
    174                 page_table_unlock(AS, true);
     174                mutex_unlock(&AS->lock);
    175175                return ENOENT;
    176176        }
     
    179179            (virt - ALIGN_DOWN(virt, PAGE_SIZE));
    180180       
    181         page_table_unlock(AS, true);
     181        mutex_unlock(&AS->lock);
    182182       
    183183        return EOK;
  • kernel/generic/src/syscall/syscall.c

    r5608deba r2cc7f16  
    184184       
    185185        /* Sysinfo syscalls. */
    186         (syshandler_t) sys_sysinfo_get_keys_size,
    187         (syshandler_t) sys_sysinfo_get_keys,
    188186        (syshandler_t) sys_sysinfo_get_val_type,
    189187        (syshandler_t) sys_sysinfo_get_value,
  • kernel/generic/src/sysinfo/stats.c

    r5608deba r2cc7f16  
    8383 *
    8484 * @param item Sysinfo item (unused).
    85  * @param data Unused.
    8685 *
    8786 * @return System uptime (in secords).
    8887 *
    8988 */
    90 static sysarg_t get_stats_uptime(struct sysinfo_item *item, void *data)
     89static sysarg_t get_stats_uptime(struct sysinfo_item *item)
    9190{
    9291        /* This doesn't have to be very accurate */
     
    9998 * @param size    Size of the returned data.
    10099 * @param dry_run Do not get the data, just calculate the size.
    101  * @param data    Unused.
    102100 *
    103101 * @return Data containing several stats_cpu_t structures.
     
    106104 */
    107105static void *get_stats_cpus(struct sysinfo_item *item, size_t *size,
    108     bool dry_run, void *data)
     106    bool dry_run)
    109107{
    110108        *size = sizeof(stats_cpu_t) * config.cpu_count;
     
    251249        ASSERT(interrupts_disabled());
    252250        ASSERT(irq_spinlock_locked(&task->lock));
    253        
     251
    254252        stats_task->task_id = task->taskid;
    255253        str_cpy(stats_task->name, TASK_NAME_BUFLEN, task->name);
     
    295293 * @param size    Size of the returned data.
    296294 * @param dry_run Do not get the data, just calculate the size.
    297  * @param data    Unused.
    298295 *
    299296 * @return Data containing several stats_task_t structures.
     
    302299 */
    303300static void *get_stats_tasks(struct sysinfo_item *item, size_t *size,
    304     bool dry_run, void *data)
     301    bool dry_run)
    305302{
    306303        /* Messing with task structures, avoid deadlock */
     
    353350        ASSERT(interrupts_disabled());
    354351        ASSERT(irq_spinlock_locked(&thread->lock));
    355        
     352
    356353        stats_thread->thread_id = thread->tid;
    357354        stats_thread->task_id = thread->task->taskid;
     
    401398 * @param size    Size of the returned data.
    402399 * @param dry_run Do not get the data, just calculate the size.
    403  * @param data    Unused.
    404400 *
    405401 * @return Data containing several stats_task_t structures.
     
    408404 */
    409405static void *get_stats_threads(struct sysinfo_item *item, size_t *size,
    410     bool dry_run, void *data)
     406    bool dry_run)
    411407{
    412408        /* Messing with threads structures, avoid deadlock */
     
    455451 * @param name    Task ID (string-encoded number).
    456452 * @param dry_run Do not get the data, just calculate the size.
    457  * @param data    Unused.
    458453 *
    459454 * @return Sysinfo return holder. The type of the returned
     
    465460 *
    466461 */
    467 static sysinfo_return_t get_stats_task(const char *name, bool dry_run,
    468     void *data)
     462static sysinfo_return_t get_stats_task(const char *name, bool dry_run)
    469463{
    470464        /* Initially no return value */
     
    526520 * @param name    Thread ID (string-encoded number).
    527521 * @param dry_run Do not get the data, just calculate the size.
    528  * @param data    Unused.
    529522 *
    530523 * @return Sysinfo return holder. The type of the returned
     
    536529 *
    537530 */
    538 static sysinfo_return_t get_stats_thread(const char *name, bool dry_run,
    539     void *data)
     531static sysinfo_return_t get_stats_thread(const char *name, bool dry_run)
    540532{
    541533        /* Initially no return value */
     
    594586 * @param size    Size of the returned data.
    595587 * @param dry_run Do not get the data, just calculate the size.
    596  * @param data    Unused.
    597588 *
    598589 * @return Data containing several stats_exc_t structures.
     
    601592 */
    602593static void *get_stats_exceptions(struct sysinfo_item *item, size_t *size,
    603     bool dry_run, void *data)
     594    bool dry_run)
    604595{
    605596        *size = sizeof(stats_exc_t) * IVT_ITEMS;
     
    643634 * @param name    Exception number (string-encoded number).
    644635 * @param dry_run Do not get the data, just calculate the size.
    645  * @param data    Unused.
    646636 *
    647637 * @return Sysinfo return holder. The type of the returned
     
    653643 *
    654644 */
    655 static sysinfo_return_t get_stats_exception(const char *name, bool dry_run,
    656     void *data)
     645static sysinfo_return_t get_stats_exception(const char *name, bool dry_run)
    657646{
    658647        /* Initially no return value */
     
    716705 * @param size    Size of the returned data.
    717706 * @param dry_run Do not get the data, just calculate the size.
    718  * @param data    Unused.
    719707 *
    720708 * @return Data containing stats_physmem_t.
     
    723711 */
    724712static void *get_stats_physmem(struct sysinfo_item *item, size_t *size,
    725     bool dry_run, void *data)
     713    bool dry_run)
    726714{
    727715        *size = sizeof(stats_physmem_t);
     
    747735 * @param size    Size of the returned data.
    748736 * @param dry_run Do not get the data, just calculate the size.
    749  * @param data    Unused.
    750737 *
    751738 * @return Data several load_t values.
     
    754741 */
    755742static void *get_stats_load(struct sysinfo_item *item, size_t *size,
    756     bool dry_run, void *data)
     743    bool dry_run)
    757744{
    758745        *size = sizeof(load_t) * LOAD_STEPS;
     
    823810        mutex_initialize(&load_lock, MUTEX_PASSIVE);
    824811       
    825         sysinfo_set_item_gen_val("system.uptime", NULL, get_stats_uptime, NULL);
    826         sysinfo_set_item_gen_data("system.cpus", NULL, get_stats_cpus, NULL);
    827         sysinfo_set_item_gen_data("system.physmem", NULL, get_stats_physmem, NULL);
    828         sysinfo_set_item_gen_data("system.load", NULL, get_stats_load, NULL);
    829         sysinfo_set_item_gen_data("system.tasks", NULL, get_stats_tasks, NULL);
    830         sysinfo_set_item_gen_data("system.threads", NULL, get_stats_threads, NULL);
    831         sysinfo_set_item_gen_data("system.exceptions", NULL, get_stats_exceptions, NULL);
    832         sysinfo_set_subtree_fn("system.tasks", NULL, get_stats_task, NULL);
    833         sysinfo_set_subtree_fn("system.threads", NULL, get_stats_thread, NULL);
    834         sysinfo_set_subtree_fn("system.exceptions", NULL, get_stats_exception, NULL);
     812        sysinfo_set_item_fn_val("system.uptime", NULL, get_stats_uptime);
     813        sysinfo_set_item_fn_data("system.cpus", NULL, get_stats_cpus);
     814        sysinfo_set_item_fn_data("system.physmem", NULL, get_stats_physmem);
     815        sysinfo_set_item_fn_data("system.load", NULL, get_stats_load);
     816        sysinfo_set_item_fn_data("system.tasks", NULL, get_stats_tasks);
     817        sysinfo_set_item_fn_data("system.threads", NULL, get_stats_threads);
     818        sysinfo_set_item_fn_data("system.exceptions", NULL, get_stats_exceptions);
     819        sysinfo_set_subtree_fn("system.tasks", NULL, get_stats_task);
     820        sysinfo_set_subtree_fn("system.threads", NULL, get_stats_thread);
     821        sysinfo_set_subtree_fn("system.exceptions", NULL, get_stats_exception);
    835822}
    836823
  • kernel/generic/src/sysinfo/sysinfo.c

    r5608deba r2cc7f16  
    11/*
    22 * Copyright (c) 2006 Jakub Vana
    3  * Copyright (c) 2012 Martin Decky
    43 * All rights reserved.
    54 *
     
    10099            sizeof(sysinfo_item_t), 0, sysinfo_item_constructor,
    101100            sysinfo_item_destructor, SLAB_CACHE_MAGDEFERRED);
    102        
     101
    103102        mutex_initialize(&sysinfo_lock, MUTEX_ACTIVE);
    104103}
     
    111110 * @param subtree Current sysinfo (sub)tree root item.
    112111 * @param ret     If the return value is NULL, this argument
    113  *                can be set either to NULL (i.e. no item was
     112 *                can be either also NULL (i.e. no item was
    114113 *                found and no data was generated) or the
    115114 *                original pointer is used to store the value
     
    126125{
    127126        ASSERT(subtree != NULL);
     127        ASSERT(ret != NULL);
    128128       
    129129        sysinfo_item_t *cur = subtree;
     
    151151                        case SYSINFO_SUBTREE_FUNCTION:
    152152                                /* Get generated data */
    153                                 if (ret != NULL)
    154                                         **ret = cur->subtree.generator.fn(name + i + 1,
    155                                             dry_run, cur->subtree.generator.data);
    156                                
     153                                **ret = cur->subtree.get_data(name + i + 1, dry_run);
    157154                                return NULL;
    158155                        default:
    159156                                /* Not found, no data generated */
    160                                 if (ret != NULL)
    161                                         *ret = NULL;
    162                                
     157                                *ret = NULL;
    163158                                return NULL;
    164159                        }
     
    169164       
    170165        /* Not found, no data generated */
    171         if (ret != NULL)
    172                 *ret = NULL;
    173        
     166        *ret = NULL;
    174167        return NULL;
    175168}
     
    359352 *             a new root item (NULL for global sysinfo root).
    360353 * @param fn   Numeric value generator function.
    361  * @param data Private data.
    362  *
    363  */
    364 void sysinfo_set_item_gen_val(const char *name, sysinfo_item_t **root,
    365     sysinfo_fn_val_t fn, void *data)
     354 *
     355 */
     356void sysinfo_set_item_fn_val(const char *name, sysinfo_item_t **root,
     357    sysinfo_fn_val_t fn)
    366358{
    367359        /* Protect sysinfo tree consistency */
     
    374366        if (item != NULL) {
    375367                item->val_type = SYSINFO_VAL_FUNCTION_VAL;
    376                 item->val.gen_val.fn = fn;
    377                 item->val.gen_val.data = data;
     368                item->val.fn_val = fn;
    378369        }
    379370       
     
    392383 *             a new root item (NULL for global sysinfo root).
    393384 * @param fn   Binary data generator function.
    394  * @param data Private data.
    395  *
    396  */
    397 void sysinfo_set_item_gen_data(const char *name, sysinfo_item_t **root,
    398     sysinfo_fn_data_t fn, void *data)
     385 *
     386 */
     387void sysinfo_set_item_fn_data(const char *name, sysinfo_item_t **root,
     388    sysinfo_fn_data_t fn)
    399389{
    400390        /* Protect sysinfo tree consistency */
     
    407397        if (item != NULL) {
    408398                item->val_type = SYSINFO_VAL_FUNCTION_DATA;
    409                 item->val.gen_data.fn = fn;
    410                 item->val.gen_data.data = data;
     399                item->val.fn_data = fn;
    411400        }
    412401       
     
    442431 *             a new root item (NULL for global sysinfo root).
    443432 * @param fn   Subtree generator function.
    444  * @param data Private data to be passed to the generator.
    445433 *
    446434 */
    447435void sysinfo_set_subtree_fn(const char *name, sysinfo_item_t **root,
    448     sysinfo_fn_subtree_t fn, void *data)
     436    sysinfo_fn_subtree_t fn)
    449437{
    450438        /* Protect sysinfo tree consistency */
     
    460448        if ((item != NULL) && (item->subtree_type != SYSINFO_SUBTREE_TABLE)) {
    461449                item->subtree_type = SYSINFO_SUBTREE_FUNCTION;
    462                 item->subtree.generator.fn = fn;
    463                 item->subtree.generator.data = data;
     450                item->subtree.get_data = fn;
    464451        }
    465452       
     
    469456/** Sysinfo dump indentation helper routine
    470457 *
    471  * @param depth Number of spaces to print.
    472  *
    473  */
    474 NO_TRACE static void sysinfo_indent(size_t spaces)
    475 {
    476         for (size_t i = 0; i < spaces; i++)
    477                 printf(" ");
     458 * @param depth Number of indentation characters to print.
     459 *
     460 */
     461NO_TRACE static void sysinfo_indent(unsigned int depth)
     462{
     463        unsigned int i;
     464        for (i = 0; i < depth; i++)
     465                printf("  ");
    478466}
    479467
     
    482470 * Should be called with sysinfo_lock held.
    483471 *
    484  * @param root   Root item of the current (sub)tree.
    485  * @param spaces Current indentation level.
    486  *
    487  */
    488 NO_TRACE static void sysinfo_dump_internal(sysinfo_item_t *root, size_t spaces)
    489 {
     472 * @param root  Root item of the current (sub)tree.
     473 * @param depth Current depth in the sysinfo tree.
     474 *
     475 */
     476NO_TRACE static void sysinfo_dump_internal(sysinfo_item_t *root, unsigned int depth)
     477{
     478        sysinfo_item_t *cur = root;
     479       
    490480        /* Walk all siblings */
    491         for (sysinfo_item_t *cur = root; cur; cur = cur->next) {
    492                 size_t length;
    493                
    494                 if (spaces == 0) {
    495                         printf("%s", cur->name);
    496                         length = str_length(cur->name);
    497                 } else {
    498                         sysinfo_indent(spaces);
    499                         printf(".%s", cur->name);
    500                         length = str_length(cur->name) + 1;
    501                 }
     481        while (cur != NULL) {
     482                sysinfo_indent(depth);
    502483               
    503484                sysarg_t val;
     
    507488                switch (cur->val_type) {
    508489                case SYSINFO_VAL_UNDEFINED:
    509                         printf(" [undefined]\n");
     490                        printf("+ %s\n", cur->name);
    510491                        break;
    511492                case SYSINFO_VAL_VAL:
    512                         printf(" -> %" PRIun" (%#" PRIxn ")\n", cur->val.val,
    513                             cur->val.val);
     493                        printf("+ %s -> %" PRIun" (%#" PRIxn ")\n", cur->name,
     494                            cur->val.val, cur->val.val);
    514495                        break;
    515496                case SYSINFO_VAL_DATA:
    516                         printf(" (%zu bytes)\n", cur->val.data.size);
     497                        printf("+ %s (%zu bytes)\n", cur->name,
     498                            cur->val.data.size);
    517499                        break;
    518500                case SYSINFO_VAL_FUNCTION_VAL:
    519                         val = cur->val.gen_val.fn(cur, cur->val.gen_val.data);
    520                         printf(" -> %" PRIun" (%#" PRIxn ") [generated]\n", val,
    521                             val);
     501                        val = cur->val.fn_val(cur);
     502                        printf("+ %s -> %" PRIun" (%#" PRIxn ") [generated]\n",
     503                            cur->name, val, val);
    522504                        break;
    523505                case SYSINFO_VAL_FUNCTION_DATA:
    524506                        /* N.B.: No data was actually returned (only a dry run) */
    525                         (void) cur->val.gen_data.fn(cur, &size, true,
    526                             cur->val.gen_data.data);
    527                         printf(" (%zu bytes) [generated]\n", size);
     507                        (void) cur->val.fn_data(cur, &size, true);
     508                        printf("+ %s (%zu bytes) [generated]\n", cur->name,
     509                            size);
    528510                        break;
    529511                default:
     
    536518                        break;
    537519                case SYSINFO_SUBTREE_TABLE:
    538                         sysinfo_dump_internal(cur->subtree.table, spaces + length);
     520                        sysinfo_dump_internal(cur->subtree.table, depth + 1);
    539521                        break;
    540522                case SYSINFO_SUBTREE_FUNCTION:
    541                         sysinfo_indent(spaces + length);
    542                         printf("<generated subtree>\n");
     523                        sysinfo_indent(depth + 1);
     524                        printf("+ [generated subtree]\n");
    543525                        break;
    544526                default:
    545                         sysinfo_indent(spaces + length);
    546                         printf("<unknown subtree>\n");
     527                        sysinfo_indent(depth + 1);
     528                        printf("+ [unknown subtree]\n");
    547529                }
     530               
     531                cur = cur->next;
    548532        }
    549533}
     
    610594                        break;
    611595                case SYSINFO_VAL_FUNCTION_VAL:
    612                         ret.val = item->val.gen_val.fn(item, item->val.gen_val.data);
     596                        ret.val = item->val.fn_val(item);
    613597                        break;
    614598                case SYSINFO_VAL_FUNCTION_DATA:
    615                         ret.data.data = item->val.gen_data.fn(item, &ret.data.size,
    616                             dry_run, item->val.gen_data.data);
     599                        ret.data.data = item->val.fn_data(item, &ret.data.size,
     600                            dry_run);
    617601                        break;
    618602                }
     
    651635        ASSERT(path);
    652636       
    653         if ((copy_from_uspace(path, ptr, size + 1) == 0) &&
    654             (path[size] == 0)) {
     637        if ((copy_from_uspace(path, ptr, size + 1) == 0)
     638            && (path[size] == 0)) {
    655639                /*
    656640                 * Prevent other functions from messing with sysinfo while we
     
    661645                mutex_unlock(&sysinfo_lock);
    662646        }
    663        
    664647        free(path);
    665648        return ret;
    666 }
    667 
    668 /** Return sysinfo keys determined by name
    669  *
    670  * Should be called with sysinfo_lock held.
    671  *
    672  * @param name    Sysinfo path.
    673  * @param root    Root item of the sysinfo (sub)tree.
    674  *                If it is NULL then consider the global
    675  *                sysinfo tree.
    676  * @param dry_run Do not actually get any generated
    677  *                binary data, just calculate the size.
    678  *
    679  * @return Item value (constant or generated).
    680  *
    681  */
    682 NO_TRACE static sysinfo_return_t sysinfo_get_keys(const char *name,
    683     sysinfo_item_t **root, bool dry_run)
    684 {
    685         if (root == NULL)
    686                 root = &global_root;
    687        
    688         sysinfo_item_t *subtree = NULL;
    689        
    690         if (name[0] != 0) {
    691                 /* Try to find the item */
    692                 sysinfo_item_t *item =
    693                     sysinfo_find_item(name, *root, NULL, dry_run);
    694                 if ((item != NULL) &&
    695                     (item->subtree_type == SYSINFO_SUBTREE_TABLE))
    696                         subtree = item->subtree.table;
    697         } else
    698                 subtree = *root;
    699        
    700         sysinfo_return_t ret;
    701        
    702         if (subtree != NULL) {
    703                 /*
    704                  * Calculate the size of subkeys.
    705                  */
    706                 size_t size = 0;
    707                 for (sysinfo_item_t *cur = subtree; cur; cur = cur->next)
    708                         size += str_size(cur->name) + 1;
    709                
    710                 if (dry_run) {
    711                         ret.tag = SYSINFO_VAL_DATA;
    712                         ret.data.data = NULL;
    713                         ret.data.size = size;
    714                 } else {
    715                         /* Allocate buffer for subkeys */
    716                         char *names = (char *) malloc(size, FRAME_ATOMIC);
    717                         if (names == NULL)
    718                                 return ret;
    719                        
    720                         size_t pos = 0;
    721                         for (sysinfo_item_t *cur = subtree; cur; cur = cur->next) {
    722                                 str_cpy(names + pos, size - pos, cur->name);
    723                                 pos += str_size(cur->name) + 1;
    724                         }
    725                        
    726                         /* Correct return value */
    727                         ret.tag = SYSINFO_VAL_DATA;
    728                         ret.data.data = (void *) names;
    729                         ret.data.size = size;
    730                 }
    731         } else {
    732                 /* No item in the fixed sysinfo tree */
    733                 ret.tag = SYSINFO_VAL_UNDEFINED;
    734         }
    735        
    736         return ret;
    737 }
    738 
    739 /** Return sysinfo keys determined by name from user space
    740  *
    741  * The path string passed from the user space has to be properly
    742  * null-terminated (the last passed character must be null).
    743  *
    744  * @param ptr     Sysinfo path in the user address space.
    745  * @param size    Size of the path string.
    746  * @param dry_run Do not actually get any generated
    747  *                binary data, just calculate the size.
    748  *
    749  */
    750 NO_TRACE static sysinfo_return_t sysinfo_get_keys_uspace(void *ptr, size_t size,
    751     bool dry_run)
    752 {
    753         sysinfo_return_t ret;
    754         ret.tag = SYSINFO_VAL_UNDEFINED;
    755        
    756         if (size > SYSINFO_MAX_PATH)
    757                 return ret;
    758        
    759         char *path = (char *) malloc(size + 1, 0);
    760         ASSERT(path);
    761        
    762         if ((copy_from_uspace(path, ptr, size + 1) == 0) &&
    763             (path[size] == 0)) {
    764                 /*
    765                  * Prevent other functions from messing with sysinfo while we
    766                  * are reading it.
    767                  */
    768                 mutex_lock(&sysinfo_lock);
    769                 ret = sysinfo_get_keys(path, NULL, dry_run);
    770                 mutex_unlock(&sysinfo_lock);
    771         }
    772        
    773         free(path);
    774         return ret;
    775 }
    776 
    777 /** Get the sysinfo keys size (syscall)
    778  *
    779  * The path string passed from the user space has
    780  * to be properly null-terminated (the last passed
    781  * character must be null).
    782  *
    783  * @param path_ptr  Sysinfo path in the user address space.
    784  * @param path_size Size of the path string.
    785  * @param size_ptr  User space pointer where to store the
    786  *                  keys size.
    787  *
    788  * @return Error code (EOK in case of no error).
    789  *
    790  */
    791 sysarg_t sys_sysinfo_get_keys_size(void *path_ptr, size_t path_size,
    792     void *size_ptr)
    793 {
    794         int rc;
    795        
    796         /*
    797          * Get the keys.
    798          *
    799          * N.B.: There is no need to free any potential keys
    800          * since we request a dry run.
    801          */
    802         sysinfo_return_t ret =
    803             sysinfo_get_keys_uspace(path_ptr, path_size, true);
    804        
    805         /* Check return data tag */
    806         if (ret.tag == SYSINFO_VAL_DATA)
    807                 rc = copy_to_uspace(size_ptr, &ret.data.size,
    808                     sizeof(ret.data.size));
    809         else
    810                 rc = EINVAL;
    811        
    812         return (sysarg_t) rc;
    813 }
    814 
    815 /** Get the sysinfo keys (syscall)
    816  *
    817  * The path string passed from the user space has
    818  * to be properly null-terminated (the last passed
    819  * character must be null).
    820  *
    821  * If the user space buffer size does not equal
    822  * the actual size of the returned data, the data
    823  * is truncated.
    824  *
    825  * The actual size of data returned is stored to
    826  * size_ptr.
    827  *
    828  * @param path_ptr    Sysinfo path in the user address space.
    829  * @param path_size   Size of the path string.
    830  * @param buffer_ptr  User space pointer to the buffer where
    831  *                    to store the binary data.
    832  * @param buffer_size User space buffer size.
    833  * @param size_ptr    User space pointer where to store the
    834  *                    binary data size.
    835  *
    836  * @return Error code (EOK in case of no error).
    837  *
    838  */
    839 sysarg_t sys_sysinfo_get_keys(void *path_ptr, size_t path_size,
    840     void *buffer_ptr, size_t buffer_size, size_t *size_ptr)
    841 {
    842         int rc;
    843        
    844         /* Get the keys */
    845         sysinfo_return_t ret = sysinfo_get_keys_uspace(path_ptr, path_size,
    846             false);
    847        
    848         /* Check return data tag */
    849         if (ret.tag == SYSINFO_VAL_DATA) {
    850                 size_t size = min(ret.data.size, buffer_size);
    851                 rc = copy_to_uspace(buffer_ptr, ret.data.data, size);
    852                 if (rc == EOK)
    853                         rc = copy_to_uspace(size_ptr, &size, sizeof(size));
    854                
    855                 free(ret.data.data);
    856         } else
    857                 rc = EINVAL;
    858        
    859         return (sysarg_t) rc;
    860649}
    861650
     
    883672       
    884673        /*
    885          * Map generated value types to constant types (user space does
    886          * not care whether the value is constant or generated).
     674         * Map generated value types to constant types (user space does not care
     675         * whether the value is constant or generated).
    887676         */
    888677        if (ret.tag == SYSINFO_VAL_FUNCTION_VAL)
     
    912701{
    913702        int rc;
    914        
     703
    915704        /*
    916705         * Get the item.
    917706         *
    918          * N.B.: There is no need to free any potential generated binary
    919          * data since we request a dry run.
     707         * N.B.: There is no need to free any potential generated binary data
     708         * since we request a dry run.
    920709         */
    921710        sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size, true);
     
    952741         * Get the item.
    953742         *
    954          * N.B.: There is no need to free any potential generated binary
    955          * data since we request a dry run.
     743         * N.B.: There is no need to free any potential generated binary data
     744         * since we request a dry run.
    956745         */
    957746        sysinfo_return_t ret = sysinfo_get_item_uspace(path_ptr, path_size, true);
  • uspace/Makefile

    r5608deba r2cc7f16  
    4848        app/lsusb \
    4949        app/mkfat \
    50         app/mkexfat \
    5150        app/mkmfs \
    5251        app/redir \
  • uspace/app/sysinfo/sysinfo.c

    r5608deba r2cc7f16  
    3737#include <stdio.h>
    3838#include <sysinfo.h>
    39 #include <malloc.h>
    4039#include <sys/types.h>
     40
     41static int print_item_val(char *ipath);
     42static int print_item_data(char *ipath);
     43
     44static void dump_bytes_hex(char *data, size_t size);
     45static void dump_bytes_text(char *data, size_t size);
     46
     47static void print_syntax(void);
     48
     49int main(int argc, char *argv[])
     50{
     51        int rc;
     52        char *ipath;
     53        sysinfo_item_val_type_t tag;
     54
     55        if (argc != 2) {
     56                print_syntax();
     57                return 1;
     58        }
     59
     60        ipath = argv[1];
     61
     62        tag = sysinfo_get_val_type(ipath);
     63
     64        /* Silence warning */
     65        rc = EOK;
     66
     67        switch (tag) {
     68        case SYSINFO_VAL_UNDEFINED:
     69                printf("Error: Sysinfo item '%s' not defined.\n", ipath);
     70                rc = 2;
     71                break;
     72        case SYSINFO_VAL_VAL:
     73                rc = print_item_val(ipath);
     74                break;
     75        case SYSINFO_VAL_DATA:
     76                rc = print_item_data(ipath);
     77                break;
     78        default:
     79                printf("Error: Sysinfo item '%s' with unknown value type.\n",
     80                    ipath);
     81                rc = 2;
     82                break;
     83        }
     84
     85        return rc;
     86}
     87
     88static int print_item_val(char *ipath)
     89{
     90        sysarg_t value;
     91        int rc;
     92
     93        rc = sysinfo_get_value(ipath, &value);
     94        if (rc != EOK) {
     95                printf("Error reading item '%s'.\n", ipath);
     96                return rc;
     97        }
     98
     99        printf("%s -> %" PRIu64 " (0x%" PRIx64 ")\n", ipath,
     100            (uint64_t) value, (uint64_t) value);
     101
     102        return EOK;
     103}
     104
     105static int print_item_data(char *ipath)
     106{
     107        void *data;
     108        size_t size;
     109
     110        data = sysinfo_get_data(ipath, &size);
     111        if (data == NULL) {
     112                printf("Error reading item '%s'.\n", ipath);
     113                return -1;
     114        }
     115
     116        printf("%s -> ", ipath);
     117        dump_bytes_hex(data, size);
     118        fputs(" ('", stdout);
     119        dump_bytes_text(data, size);
     120        fputs("')\n", stdout);
     121
     122        return EOK;
     123}
    41124
    42125static void dump_bytes_hex(char *data, size_t size)
    43126{
    44         for (size_t i = 0; i < size; i++) {
    45                 if (i > 0)
    46                         putchar(' ');
     127        size_t i;
     128
     129        for (i = 0; i < size; ++i) {
     130                if (i > 0) putchar(' ');
    47131                printf("0x%02x", (uint8_t) data[i]);
    48132        }
     
    51135static void dump_bytes_text(char *data, size_t size)
    52136{
    53         size_t offset = 0;
    54        
     137        wchar_t c;
     138        size_t offset;
     139
     140        offset = 0;
     141
    55142        while (offset < size) {
    56                 wchar_t c = str_decode(data, &offset, size);
     143                c = str_decode(data, &offset, size);
    57144                printf("%lc", (wint_t) c);
    58145        }
    59146}
    60147
    61 static int print_item_val(char *ipath)
     148
     149static void print_syntax(void)
    62150{
    63         sysarg_t value;
    64         int rc = sysinfo_get_value(ipath, &value);
    65         if (rc != EOK) {
    66                 printf("Error reading item '%s'.\n", ipath);
    67                 return rc;
    68         }
    69        
    70         printf("%s -> %" PRIu64 " (0x%" PRIx64 ")\n", ipath,
    71             (uint64_t) value, (uint64_t) value);
    72        
    73         return EOK;
    74 }
    75 
    76 static int print_item_data(char *ipath)
    77 {
    78         size_t size;
    79         void *data = sysinfo_get_data(ipath, &size);
    80         if (data == NULL) {
    81                 printf("Error reading item '%s'.\n", ipath);
    82                 return -1;
    83         }
    84        
    85         printf("%s -> ", ipath);
    86         dump_bytes_hex(data, size);
    87         fputs(" ('", stdout);
    88         dump_bytes_text(data, size);
    89         fputs("')\n", stdout);
    90        
    91         return EOK;
    92 }
    93 
    94 static int print_item_property(char *ipath, char *iprop)
    95 {
    96         size_t size;
    97         void *data = sysinfo_get_property(ipath, iprop, &size);
    98         if (data == NULL) {
    99                 printf("Error reading property '%s' of item '%s'.\n", iprop,
    100                     ipath);
    101                 return -1;
    102         }
    103        
    104         printf("%s property %s -> ", ipath, iprop);
    105         dump_bytes_hex(data, size);
    106         fputs(" ('", stdout);
    107         dump_bytes_text(data, size);
    108         fputs("')\n", stdout);
    109        
    110         return EOK;
    111 }
    112 
    113 static void print_spaces(size_t spaces)
    114 {
    115         for (size_t i = 0; i < spaces; i++)
    116                 printf(" ");
    117 }
    118 
    119 static void print_keys(const char *path, size_t spaces)
    120 {
    121         size_t size;
    122         char *keys = sysinfo_get_keys(path, &size);
    123         if ((keys == NULL) || (size == 0))
    124                 return;
    125        
    126         size_t pos = 0;
    127         while (pos < size) {
    128                 /* Process each key with sanity checks */
    129                 size_t cur_size = str_nsize(keys + pos, size - pos);
    130                 if (keys[pos + cur_size] != 0)
    131                         break;
    132                
    133                 size_t path_size = str_size(path) + cur_size + 2;
    134                 char *cur_path = (char *) malloc(path_size);
    135                 if (cur_path == NULL)
    136                         break;
    137                
    138                 size_t length;
    139                
    140                 if (path[0] != 0) {
    141                         print_spaces(spaces);
    142                         printf(".%s\n", keys + pos);
    143                         length = str_length(keys + pos) + 1;
    144                        
    145                         snprintf(cur_path, path_size, "%s.%s", path, keys + pos);
    146                 } else {
    147                         printf("%s\n", keys + pos);
    148                         length = str_length(keys + pos);
    149                        
    150                         snprintf(cur_path, path_size, "%s", keys + pos);
    151                 }
    152                
    153                 print_keys(cur_path, spaces + length);
    154                
    155                 free(cur_path);
    156                 pos += cur_size + 1;
    157         }
    158        
    159         free(keys);
    160 }
    161 
    162 int main(int argc, char *argv[])
    163 {
    164         int rc = 0;
    165        
    166         if (argc < 2) {
    167                 /* Print keys */
    168                 print_keys("", 0);
    169                 return rc;
    170         }
    171        
    172         char *ipath = argv[1];
    173        
    174         if (argc < 3) {
    175                 sysinfo_item_val_type_t tag = sysinfo_get_val_type(ipath);
    176                
    177                 switch (tag) {
    178                 case SYSINFO_VAL_UNDEFINED:
    179                         printf("Error: Sysinfo item '%s' not defined.\n", ipath);
    180                         rc = 2;
    181                         break;
    182                 case SYSINFO_VAL_VAL:
    183                         rc = print_item_val(ipath);
    184                         break;
    185                 case SYSINFO_VAL_DATA:
    186                         rc = print_item_data(ipath);
    187                         break;
    188                 default:
    189                         printf("Error: Sysinfo item '%s' with unknown value type.\n",
    190                             ipath);
    191                         rc = 2;
    192                         break;
    193                 }
    194                
    195                 return rc;
    196         }
    197        
    198         char *iprop = argv[2];
    199         rc = print_item_property(ipath, iprop);
    200         return rc;
     151        printf("Syntax: sysinfo <item_path>\n");
    201152}
    202153
  • uspace/drv/bus/usb/uhci/transfer_list.c

    r5608deba r2cc7f16  
    110110        assert(instance);
    111111        assert(uhci_batch);
    112         usb_log_debug2("Batch %p adding to queue %s.\n",
    113             uhci_batch->usb_batch, instance->name);
     112        usb_log_debug2("Queue %s: Adding batch(%p).\n", instance->name,
     113            uhci_batch->usb_batch);
    114114
    115115        fibril_mutex_lock(&instance->guard);
     
    139139        list_append(&uhci_batch->link, &instance->batch_list);
    140140
    141         usb_log_debug2("Batch %p " USB_TRANSFER_BATCH_FMT
    142             " scheduled in queue %s.\n", uhci_batch->usb_batch,
    143             USB_TRANSFER_BATCH_ARGS(*uhci_batch->usb_batch), instance->name);
     141        usb_log_debug2("Batch %p " USB_TRANSFER_BATCH_FMT " scheduled in queue %s.\n",
     142            uhci_batch, USB_TRANSFER_BATCH_ARGS(*uhci_batch->usb_batch),
     143            instance->name);
    144144        fibril_mutex_unlock(&instance->guard);
    145145}
     
    205205        assert(fibril_mutex_is_locked(&instance->guard));
    206206
    207         usb_log_debug2("Batch %p removing from queue %s.\n",
    208             uhci_batch->usb_batch, instance->name);
     207        usb_log_debug2("Queue %s: removing batch(%p).\n",
     208            instance->name, uhci_batch->usb_batch);
    209209
    210210        /* Assume I'm the first */
     
    228228        list_remove(&uhci_batch->link);
    229229        usb_log_debug2("Batch %p " USB_TRANSFER_BATCH_FMT " removed (%s) "
    230             "from %s, next: %x.\n", uhci_batch->usb_batch,
    231             USB_TRANSFER_BATCH_ARGS(*uhci_batch->usb_batch),
     230            "from %s, next: %x.\n",
     231            uhci_batch, USB_TRANSFER_BATCH_ARGS(*uhci_batch->usb_batch),
    232232            qpos, instance->name, uhci_batch->qh->next);
    233233}
  • uspace/drv/bus/usb/uhci/uhci_batch.c

    r5608deba r2cc7f16  
    174174                        assert(uhci_batch->usb_batch->ep != NULL);
    175175
    176                         usb_log_debug("Batch %p found error TD(%zu->%p):%"
     176                        usb_log_debug("Batch(%p) found error TD(%zu):%"
    177177                            PRIx32 ".\n", uhci_batch->usb_batch, i,
    178                             &uhci_batch->tds[i], uhci_batch->tds[i].status);
     178                            uhci_batch->tds[i].status);
    179179                        td_print_status(&uhci_batch->tds[i]);
    180180
  • uspace/drv/char/ps2mouse/ps2mouse.c

    r5608deba r2cc7f16  
    8080        } \
    8181        if (data != (value)) { \
    82                 ddf_msg(LVL_DEBUG, "Failed testing byte: got %hhx vs. %hhx)", \
     82                ddf_msg(LVL_ERROR, "Failed testing byte: got %hhx vs. %hhx)", \
    8383                    data, (value)); \
    8484                return EIO; \
  • uspace/drv/infrastructure/root/root.c

    r5608deba r2cc7f16  
    158158        if (asprintf(&match_id, PLATFORM_FUN_MATCH_ID_FMT, platform) == -1) {
    159159                ddf_msg(LVL_ERROR, "Memory allocation failed.");
    160                 free(platform);
    161                 return ENOMEM;
    162         }
    163 
    164         free(platform);
     160                return ENOMEM;
     161        }
    165162
    166163        /* Add function. */
     
    172169        if (fun == NULL) {
    173170                ddf_msg(LVL_ERROR, "Error creating function %s", name);
    174                 free(match_id);
    175171                return ENOMEM;
    176172        }
     
    180176                ddf_msg(LVL_ERROR, "Failed adding match IDs to function %s",
    181177                    name);
    182                 free(match_id);
    183178                ddf_fun_destroy(fun);
    184179                return rc;
     
    213208         * vital for the system.
    214209         */
    215         (void) add_virtual_root_fun(dev);
     210        add_virtual_root_fun(dev);
    216211
    217212        /* Register root device's children. */
  • uspace/lib/c/arch/ia64/include/ddi.h

    r5608deba r2cc7f16  
    6262
    6363        asm volatile ("mf\n" ::: "memory");
    64         asm volatile ("mf.a\n" ::: "memory");
    6564}
    6665
     
    7776
    7877        asm volatile ("mf\n" ::: "memory");
    79         asm volatile ("mf.a\n" ::: "memory");
    8078}
    8179
     
    9290
    9391        asm volatile ("mf\n" ::: "memory");
    94         asm volatile ("mf.a\n" ::: "memory");
    9592}
    9693
     
    109106                v = *port;
    110107        }
    111 
    112         asm volatile ("mf.a\n" ::: "memory");
    113108
    114109        return v;
     
    130125        }
    131126
    132         asm volatile ("mf.a\n" ::: "memory");
    133 
    134127        return v;
    135128}
     
    141134        asm volatile ("mf\n" ::: "memory");
    142135
    143         if (port < (ioport32_t *) IO_SPACE_BOUNDARY) {
     136        if (port < (ioport32_t *) port) {
    144137                uintptr_t prt = (uintptr_t) port;
    145138
     
    150143        }
    151144
    152         asm volatile ("mf.a\n" ::: "memory");
    153 
    154145        return v;
    155146}
  • uspace/lib/c/generic/str.c

    r5608deba r2cc7f16  
    259259       
    260260        return offset;
    261 }
    262 
    263 /** Get size of string with size limit.
    264  *
    265  * Get the number of bytes which are used by the string @a str
    266  * (excluding the NULL-terminator), but no more than @max_size bytes.
    267  *
    268  * @param str      String to consider.
    269  * @param max_size Maximum number of bytes to measure.
    270  *
    271  * @return Number of bytes used by the string
    272  *
    273  */
    274 size_t str_nsize(const char *str, size_t max_size)
    275 {
    276         size_t size = 0;
    277        
    278         while ((*str++ != 0) && (size < max_size))
    279                 size++;
    280        
    281         return size;
    282 }
    283 
    284 /** Get size of wide string with size limit.
    285  *
    286  * Get the number of bytes which are used by the wide string @a str
    287  * (excluding the NULL-terminator), but no more than @max_size bytes.
    288  *
    289  * @param str      Wide string to consider.
    290  * @param max_size Maximum number of bytes to measure.
    291  *
    292  * @return Number of bytes used by the wide string
    293  *
    294  */
    295 size_t wstr_nsize(const wchar_t *str, size_t max_size)
    296 {
    297         return (wstr_nlength(str, max_size) * sizeof(wchar_t));
    298261}
    299262
  • uspace/lib/c/generic/sysinfo.c

    r5608deba r2cc7f16  
    4040#include <bool.h>
    4141
    42 /** Get sysinfo keys size
    43  *
    44  * @param path  Sysinfo path.
    45  * @param value Pointer to store the keys size.
    46  *
    47  * @return EOK if the keys were successfully read.
    48  *
    49  */
    50 static int sysinfo_get_keys_size(const char *path, size_t *size)
    51 {
    52         return (int) __SYSCALL3(SYS_SYSINFO_GET_KEYS_SIZE, (sysarg_t) path,
    53             (sysarg_t) str_size(path), (sysarg_t) size);
    54 }
    55 
    56 /** Get sysinfo keys
    57  *
    58  * @param path  Sysinfo path.
    59  * @param value Pointer to store the keys size.
    60  *
    61  * @return Keys read from sysinfo or NULL if the
    62  *         sysinfo item has no subkeys.
    63  *         The returned non-NULL pointer should be
    64  *         freed by free().
    65  *
    66  */
    67 char *sysinfo_get_keys(const char *path, size_t *size)
    68 {
    69         /*
    70          * The size of the keys might change during time.
    71          * Unfortunatelly we cannot allocate the buffer
    72          * and transfer the keys as a single atomic operation.
    73          */
    74        
    75         /* Get the keys size */
    76         int ret = sysinfo_get_keys_size(path, size);
    77         if ((ret != EOK) || (size == 0)) {
    78                 /*
    79                  * Item with no subkeys.
    80                  */
    81                 *size = 0;
    82                 return NULL;
    83         }
    84        
    85         char *data = malloc(*size);
    86         if (data == NULL) {
    87                 *size = 0;
    88                 return NULL;
    89         }
    90        
    91         /* Get the data */
    92         size_t sz;
    93         ret = __SYSCALL5(SYS_SYSINFO_GET_KEYS, (sysarg_t) path,
    94             (sysarg_t) str_size(path), (sysarg_t) data, (sysarg_t) *size,
    95             (sysarg_t) &sz);
    96         if (ret == EOK) {
    97                 *size = sz;
    98                 return data;
    99         }
    100        
    101         free(data);
    102         *size = 0;
    103         return NULL;
    104 }
    105 
    10642/** Get sysinfo item type
    10743 *
     
    13470/** Get sysinfo binary data size
    13571 *
    136  * @param path Sysinfo path.
    137  * @param size Pointer to store the binary data size.
     72 * @param path  Sysinfo path.
     73 * @param value Pointer to store the binary data size.
    13874 *
    13975 * @return EOK if the value was successfully read and
     
    14985/** Get sysinfo binary data
    15086 *
    151  * @param path Sysinfo path.
    152  * @param size Pointer to store the binary data size.
     87 * @param path  Sysinfo path.
     88 * @param value Pointer to store the binary data size.
    15389 *
    15490 * @return Binary data read from sysinfo or NULL if the
     
    198134}
    199135
    200 /** Get sysinfo property
    201  *
    202  * @param path Sysinfo path.
    203  * @param name Property name.
    204  * @param size Pointer to store the binary data size.
    205  *
    206  * @return Property value read from sysinfo or NULL if the
    207  *         sysinfo item value type is not binary data.
    208  *         The returned non-NULL pointer should be
    209  *         freed by free().
    210  *
    211  */
    212 void *sysinfo_get_property(const char *path, const char *name, size_t *size)
    213 {
    214         size_t total_size;
    215         void *data = sysinfo_get_data(path, &total_size);
    216         if ((data == NULL) || (total_size == 0)) {
    217                 *size = 0;
    218                 return NULL;
    219         }
    220        
    221         size_t pos = 0;
    222         while (pos < total_size) {
    223                 /* Process each property with sanity checks */
    224                 size_t cur_size = str_nsize(data + pos, total_size - pos);
    225                 if (((char *) data)[pos + cur_size] != 0)
    226                         break;
    227                
    228                 bool found = (str_cmp(data + pos, name) == 0);
    229                
    230                 pos += cur_size + 1;
    231                 if (pos >= total_size)
    232                         break;
    233                
    234                 /* Process value size */
    235                 size_t value_size;
    236                 memcpy(&value_size, data + pos, sizeof(value_size));
    237                
    238                 pos += sizeof(value_size);
    239                 if ((pos >= total_size) || (pos + value_size > total_size))
    240                         break;
    241                
    242                 if (found) {
    243                         void *value = malloc(value_size);
    244                         if (value == NULL)
    245                                 break;
    246                        
    247                         memcpy(value, data + pos, value_size);
    248                         free(data);
    249                        
    250                         *size = value_size;
    251                         return value;
    252                 }
    253                
    254                 pos += value_size;
    255         }
    256        
    257         free(data);
    258        
    259         *size = 0;
    260         return NULL;
    261 }
    262 
    263136/** @}
    264137 */
  • uspace/lib/c/include/str.h

    r5608deba r2cc7f16  
    6060extern size_t str_size(const char *str);
    6161extern size_t wstr_size(const wchar_t *str);
    62 
    63 extern size_t str_nsize(const char *str, size_t max_size);
    64 extern size_t wstr_nsize(const wchar_t *str, size_t max_size);
    6562
    6663extern size_t str_lsize(const char *str, size_t max_len);
  • uspace/lib/c/include/sysinfo.h

    r5608deba r2cc7f16  
    4040#include <abi/sysinfo.h>
    4141
    42 extern char *sysinfo_get_keys(const char *, size_t *);
    4342extern sysinfo_item_val_type_t sysinfo_get_val_type(const char *);
    4443extern int sysinfo_get_value(const char *, sysarg_t *);
    4544extern void *sysinfo_get_data(const char *, size_t *);
    46 extern void *sysinfo_get_property(const char *, const char *, size_t *);
    4745
    4846#endif
  • uspace/srv/fs/exfat/exfat_bitmap.c

    r5608deba r2cc7f16  
    4848
    4949
    50 int exfat_bitmap_is_free(exfat_bs_t *bs, service_id_t service_id,
     50int bitmap_is_free(exfat_bs_t *bs, service_id_t service_id,
    5151    exfat_cluster_t clst)
    5252{
     
    8989}
    9090
    91 int exfat_bitmap_set_cluster(exfat_bs_t *bs, service_id_t service_id,
     91int bitmap_set_cluster(exfat_bs_t *bs, service_id_t service_id,
    9292    exfat_cluster_t clst)
    9393{
     
    124124}
    125125
    126 int exfat_bitmap_clear_cluster(exfat_bs_t *bs, service_id_t service_id,
     126int bitmap_clear_cluster(exfat_bs_t *bs, service_id_t service_id,
    127127    exfat_cluster_t clst)
    128128{
     
    160160}
    161161
    162 int exfat_bitmap_set_clusters(exfat_bs_t *bs, service_id_t service_id,
     162int bitmap_set_clusters(exfat_bs_t *bs, service_id_t service_id,
    163163    exfat_cluster_t firstc, exfat_cluster_t count)
    164164{
     
    168168
    169169        while (clst < firstc + count ) {
    170                 rc = exfat_bitmap_set_cluster(bs, service_id, clst);
     170                rc = bitmap_set_cluster(bs, service_id, clst);
    171171                if (rc != EOK) {
    172172                        if (clst - firstc > 0)
    173                                 (void) exfat_bitmap_clear_clusters(bs, service_id,
     173                                (void) bitmap_clear_clusters(bs, service_id,
    174174                                    firstc, clst - firstc);
    175175                        return rc;
     
    180180}
    181181
    182 int exfat_bitmap_clear_clusters(exfat_bs_t *bs, service_id_t service_id,
     182int bitmap_clear_clusters(exfat_bs_t *bs, service_id_t service_id,
    183183    exfat_cluster_t firstc, exfat_cluster_t count)
    184184{
     
    188188
    189189        while (clst < firstc + count) {
    190                 rc = exfat_bitmap_clear_cluster(bs, service_id, clst);
     190                rc = bitmap_clear_cluster(bs, service_id, clst);
    191191                if (rc != EOK)
    192192                        return rc;
     
    196196}
    197197
    198 int exfat_bitmap_alloc_clusters(exfat_bs_t *bs, service_id_t service_id,
     198int bitmap_alloc_clusters(exfat_bs_t *bs, service_id_t service_id,
    199199    exfat_cluster_t *firstc, exfat_cluster_t count)
    200200{
     
    204204        while (startc < DATA_CNT(bs) + 2) {
    205205                endc = startc;
    206                 while (exfat_bitmap_is_free(bs, service_id, endc) == EOK) {
     206                while (bitmap_is_free(bs, service_id, endc) == EOK) {
    207207                        if ((endc - startc) + 1 == count) {
    208208                                *firstc = startc;
    209                                 return exfat_bitmap_set_clusters(bs, service_id, startc, count);
     209                                return bitmap_set_clusters(bs, service_id, startc, count);
    210210                        } else
    211211                                endc++;
     
    217217
    218218
    219 int exfat_bitmap_append_clusters(exfat_bs_t *bs, exfat_node_t *nodep,
     219int bitmap_append_clusters(exfat_bs_t *bs, exfat_node_t *nodep,
    220220    exfat_cluster_t count)
    221221{
    222222        if (nodep->firstc == 0) {
    223                 return exfat_bitmap_alloc_clusters(bs, nodep->idx->service_id,
     223                return bitmap_alloc_clusters(bs, nodep->idx->service_id,
    224224                    &nodep->firstc, count);
    225225        } else {
     
    228228
    229229                clst = lastc + 1;
    230                 while (exfat_bitmap_is_free(bs, nodep->idx->service_id, clst) == EOK) {
     230                while (bitmap_is_free(bs, nodep->idx->service_id, clst) == EOK) {
    231231                        if (clst - lastc == count){
    232                                 return exfat_bitmap_set_clusters(bs, nodep->idx->service_id,
     232                                return bitmap_set_clusters(bs, nodep->idx->service_id,
    233233                                    lastc + 1, count);
    234234                        } else
     
    240240
    241241
    242 int exfat_bitmap_free_clusters(exfat_bs_t *bs, exfat_node_t *nodep,
     242int bitmap_free_clusters(exfat_bs_t *bs, exfat_node_t *nodep,
    243243    exfat_cluster_t count)
    244244{
     
    247247        lastc -= count;
    248248
    249         return exfat_bitmap_clear_clusters(bs, nodep->idx->service_id, lastc + 1, count);
    250 }
    251 
    252 
    253 int exfat_bitmap_replicate_clusters(exfat_bs_t *bs, exfat_node_t *nodep)
     249        return bitmap_clear_clusters(bs, nodep->idx->service_id, lastc + 1, count);
     250}
     251
     252
     253int bitmap_replicate_clusters(exfat_bs_t *bs, exfat_node_t *nodep)
    254254{
    255255        int rc;
  • uspace/srv/fs/exfat/exfat_bitmap.h

    r5608deba r2cc7f16  
    4242struct exfat_bs;
    4343
    44 extern int exfat_bitmap_alloc_clusters(struct exfat_bs *, service_id_t,
     44extern int bitmap_alloc_clusters(struct exfat_bs *, service_id_t,
    4545    exfat_cluster_t *, exfat_cluster_t);
    46 extern int exfat_bitmap_append_clusters(struct exfat_bs *, struct exfat_node *,
     46extern int bitmap_append_clusters(struct exfat_bs *, struct exfat_node *,
    4747    exfat_cluster_t);
    48 extern int exfat_bitmap_free_clusters(struct exfat_bs *, struct exfat_node *,
     48extern int bitmap_free_clusters(struct exfat_bs *, struct exfat_node *,
    4949    exfat_cluster_t);
    50 extern int exfat_bitmap_replicate_clusters(struct exfat_bs *, struct exfat_node *);
     50extern int bitmap_replicate_clusters(struct exfat_bs *, struct exfat_node *);
    5151
    52 extern int exfat_bitmap_is_free(struct exfat_bs *, service_id_t, exfat_cluster_t);
    53 extern int exfat_bitmap_set_cluster(struct exfat_bs *, service_id_t, exfat_cluster_t);
    54 extern int exfat_bitmap_clear_cluster(struct exfat_bs *, service_id_t,
     52extern int bitmap_is_free(struct exfat_bs *, service_id_t, exfat_cluster_t);
     53extern int bitmap_set_cluster(struct exfat_bs *, service_id_t, exfat_cluster_t);
     54extern int bitmap_clear_cluster(struct exfat_bs *, service_id_t,
    5555    exfat_cluster_t);
    5656
    57 extern int exfat_bitmap_set_clusters(struct exfat_bs *, service_id_t,
     57extern int bitmap_set_clusters(struct exfat_bs *, service_id_t,
    5858    exfat_cluster_t, exfat_cluster_t);
    59 extern int exfat_bitmap_clear_clusters(struct exfat_bs *, service_id_t,
     59extern int bitmap_clear_clusters(struct exfat_bs *, service_id_t,
    6060    exfat_cluster_t, exfat_cluster_t);
    6161
  • uspace/srv/fs/exfat/exfat_dentry.c

    r5608deba r2cc7f16  
    130130}
    131131
    132 size_t exfat_utf16_length(const uint16_t *wstr)
     132size_t utf16_length(const uint16_t *wstr)
    133133{
    134134        size_t len = 0;
  • uspace/srv/fs/exfat/exfat_dentry.h

    r5608deba r2cc7f16  
    160160extern bool exfat_valid_name(const char *);
    161161
    162 extern size_t exfat_utf16_length(const uint16_t *);
     162extern size_t utf16_length(const uint16_t *);
    163163
    164164
  • uspace/srv/fs/exfat/exfat_directory.c

    r5608deba r2cc7f16  
    371371        ds.stream.valid_data_size = 0;
    372372        ds.stream.data_size = 0;
    373         ds.stream.name_size = exfat_utf16_length(wname);
     373        ds.stream.name_size = utf16_length(wname);
    374374        ds.stream.hash = host2uint16_t_le(exfat_name_hash(wname, uctable,
    375375            uctable_chars));
  • uspace/srv/fs/exfat/exfat_fat.c

    r5608deba r2cc7f16  
    314314            clst++) {
    315315                /* Need to rewrite because of multiple exfat_bitmap_get calls */
    316                 if (exfat_bitmap_is_free(bs, service_id, clst) == EOK) {
     316                if (bitmap_is_free(bs, service_id, clst) == EOK) {
    317317                        /*
    318318                         * The cluster is free. Put it into our stack
     
    325325                                goto exit_error;
    326326                        found++;
    327                         rc = exfat_bitmap_set_cluster(bs, service_id, clst);
     327                        rc = bitmap_set_cluster(bs, service_id, clst);
    328328                        if (rc != EOK)
    329329                                goto exit_error;
     
    346346        /* If something wrong - free the clusters */
    347347        while (found--) {
    348                 (void) exfat_bitmap_clear_cluster(bs, service_id, lifo[found]);
     348                (void) bitmap_clear_cluster(bs, service_id, lifo[found]);
    349349                (void) exfat_set_cluster(bs, service_id, lifo[found], 0);
    350350        }
     
    378378                if (rc != EOK)
    379379                        return rc;
    380                 rc = exfat_bitmap_clear_cluster(bs, service_id, firstc);
     380                rc = bitmap_clear_cluster(bs, service_id, firstc);
    381381                if (rc != EOK)
    382382                        return rc;
  • uspace/srv/fs/exfat/exfat_ops.c

    r5608deba r2cc7f16  
    405405
    406406        if (!nodep->fragmented) {
    407                 rc = exfat_bitmap_append_clusters(bs, nodep, clusters);
     407                rc = bitmap_append_clusters(bs, nodep, clusters);
    408408                if (rc != ENOSPC)
    409409                        return rc;
     
    411411                        nodep->fragmented = true;
    412412                        nodep->dirty = true;            /* need to sync node */
    413                         rc = exfat_bitmap_replicate_clusters(bs, nodep);
     413                        rc = bitmap_replicate_clusters(bs, nodep);
    414414                        if (rc != EOK)
    415415                                return rc;
     
    457457
    458458                clsts = prev_clsts - new_clsts;
    459                 rc = exfat_bitmap_free_clusters(bs, nodep, clsts);
     459                rc = bitmap_free_clusters(bs, nodep, clsts);
    460460                if (rc != EOK)
    461461                        return rc;
     
    704704                                nodep->firstc);
    705705                else
    706                         rc = exfat_bitmap_free_clusters(bs, nodep,
     706                        rc = bitmap_free_clusters(bs, nodep,
    707707                            ROUND_UP(nodep->size, BPC(bs)) / BPC(bs));
    708708        }
     
    758758
    759759        fibril_mutex_unlock(&parentp->idx->lock);
     760        if (rc != EOK)
     761                return rc;
     762
    760763        fibril_mutex_lock(&childp->idx->lock);
     764
    761765
    762766        childp->idx->pfc = parentp->firstc;
     
    14591463        }
    14601464
    1461         int rc2 = exfat_node_put(fn);
    1462         if (rc == EOK && rc2 != EOK)
    1463                 rc = rc2;
    1464 
     1465        (void) exfat_node_put(fn);
    14651466        return rc;
    14661467}
Note: See TracChangeset for help on using the changeset viewer.