Ignore:
Timestamp:
2010-04-17T01:28:38Z (14 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9d6bfa5
Parents:
9256ad29
Message:

sysinfo overhaul

  • cleanup (nicer data structures, use of SLAB allocator)
  • add support for storing arbitrary binary data
  • properly reimplement non-constant values (generated by functions)
  • add support for non-constant subtrees (generated by functions)
  • syscall ABI change, libc API change
  • reflect changes in user code

libc: task_spawn() can now return error code

  • reflect change in user code, print error strings after failed task_spawn()

uspace cleanup

  • more use of string and other constants
  • more use of str_error()
  • unify error reporting in init
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/sysinfo/sysinfo.h

    r9256ad29 rd9fae235  
    4141extern bool fb_exported;
    4242
    43 typedef union sysinfo_item_val {
     43typedef enum {
     44        SYSINFO_VAL_UNDEFINED = 0,
     45        SYSINFO_VAL_VAL = 1,
     46        SYSINFO_VAL_DATA = 2,
     47        SYSINFO_VAL_FUNCTION_VAL = 3,
     48        SYSINFO_VAL_FUNCTION_DATA = 4
     49} sysinfo_item_val_type_t;
     50
     51typedef enum {
     52        SYSINFO_SUBTREE_NONE = 0,
     53        SYSINFO_SUBTREE_TABLE = 1,
     54        SYSINFO_SUBTREE_FUNCTION = 2
     55} sysinfo_subtree_type_t;
     56
     57struct sysinfo_item;
     58
     59typedef unative_t (*sysinfo_fn_val_t)(struct sysinfo_item *);
     60typedef void *(*sysinfo_fn_data_t)(struct sysinfo_item *, size_t *);
     61typedef struct sysinfo_item *(*sysinfo_fn_subtree_t)(const char *);
     62
     63typedef struct {
     64        void *data;
     65        size_t size;
     66} sysinfo_data_t;
     67
     68typedef union {
    4469        unative_t val;
    45         void *fn;
     70        sysinfo_fn_val_t fn_val;
     71        sysinfo_fn_data_t fn_data;
     72        sysinfo_data_t data;
    4673} sysinfo_item_val_t;
     74
     75typedef union {
     76        struct sysinfo_item *table;
     77        sysinfo_fn_subtree_t find_item;
     78} sysinfo_subtree_t;
    4779
    4880typedef struct sysinfo_item {
    4981        char *name;
     82       
     83        sysinfo_item_val_type_t val_type;
     84        sysinfo_item_val_t val;
     85       
     86        sysinfo_subtree_type_t subtree_type;
     87        sysinfo_subtree_t subtree;
     88       
     89        struct sysinfo_item *next;
     90} sysinfo_item_t;
     91
     92typedef struct {
     93        sysinfo_item_val_type_t tag;
    5094        union {
    5195                unative_t val;
    52                 void *fn;
    53         } val;
     96                sysinfo_data_t data;
     97        };
     98} sysinfo_return_t;
    5499
    55         union {
    56                 struct sysinfo_item *table;
    57                 void *fn;
    58         } subinfo;
     100extern void sysinfo_init(void);
    59101
    60         struct sysinfo_item *next;
    61         int val_type;
    62         int subinfo_type;
    63 } sysinfo_item_t;
     102extern void sysinfo_set_item_val(const char *, sysinfo_item_t **, unative_t);
     103extern void sysinfo_set_item_data(const char *, sysinfo_item_t **, void *,
     104    size_t);
     105extern void sysinfo_set_item_val_fn(const char *, sysinfo_item_t **,
     106    sysinfo_fn_val_t);
     107extern void sysinfo_set_item_data_fn(const char *, sysinfo_item_t **,
     108    sysinfo_fn_data_t);
     109extern void sysinfo_set_item_undefined(const char *, sysinfo_item_t **);
    64110
    65 #define SYSINFO_VAL_VAL        0
    66 #define SYSINFO_VAL_FUNCTION   1
    67 #define SYSINFO_VAL_UNDEFINED  U_SPECIAL
     111extern sysinfo_return_t sysinfo_get_item(const char *, sysinfo_item_t **);
     112extern void sysinfo_dump(sysinfo_item_t **, unsigned int);
    68113
    69 #define SYSINFO_SUBINFO_NONE      0
    70 #define SYSINFO_SUBINFO_TABLE     1
    71 #define SYSINFO_SUBINFO_FUNCTION  2
    72 
    73 typedef unative_t (*sysinfo_val_fn_t)(sysinfo_item_t *root);
    74 typedef unative_t (*sysinfo_subinfo_fn_t)(const char *subname);
    75 
    76 typedef struct sysinfo_rettype {
    77         unative_t val;
    78         unative_t valid;
    79 } sysinfo_rettype_t;
    80 
    81 void sysinfo_set_item_val(const char *name, sysinfo_item_t **root, unative_t val);
    82 void sysinfo_dump(sysinfo_item_t **root, int depth);
    83 void sysinfo_set_item_function(const char *name, sysinfo_item_t **root, sysinfo_val_fn_t fn);
    84 void sysinfo_set_item_undefined(const char *name, sysinfo_item_t **root);
    85 
    86 sysinfo_rettype_t sysinfo_get_val(const char *name, sysinfo_item_t **root);
    87 
    88 unative_t sys_sysinfo_valid(unative_t ptr, unative_t len);
    89 unative_t sys_sysinfo_value(unative_t ptr, unative_t len);
     114unative_t sys_sysinfo_get_tag(void *, size_t);
     115unative_t sys_sysinfo_get_value(void *, size_t, void *);
     116unative_t sys_sysinfo_get_data_size(void *, size_t, void *);
     117unative_t sys_sysinfo_get_data(void *, size_t, void *, size_t);
    90118
    91119#endif
Note: See TracChangeset for help on using the changeset viewer.