Changeset 22fb7ab in mainline for uspace/lib


Ignore:
Timestamp:
2015-06-26T16:15:31Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
28ed0d9
Parents:
1356f85a
Message:

Delegate disks to volsrv and labels to vbd.

Location:
uspace/lib
Files:
7 added
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/Makefile

    r1356f85a r22fb7ab  
    153153        generic/stats.c \
    154154        generic/assert.c \
    155         generic/pio_trace.c
     155        generic/pio_trace.c \
     156        generic/vbd.c \
     157        generic/vol.c
    156158
    157159ifeq ($(CONFIG_RTLD),y)
  • uspace/lib/fdisk/include/fdisk.h

    r1356f85a r22fb7ab  
    4040#include <types/fdisk.h>
    4141
    42 extern int fdisk_dev_list_get(fdisk_dev_list_t **);
     42extern int fdisk_create(fdisk_t **);
     43extern void fdisk_destroy(fdisk_t *);
     44extern int fdisk_dev_list_get(fdisk_t *, fdisk_dev_list_t **);
    4345extern void fdisk_dev_list_free(fdisk_dev_list_t *);
    4446extern fdisk_dev_info_t *fdisk_dev_first(fdisk_dev_list_t *);
     
    4850extern int fdisk_dev_info_capacity(fdisk_dev_info_t *, fdisk_cap_t *);
    4951
    50 extern int fdisk_dev_open(service_id_t, fdisk_dev_t **);
     52extern int fdisk_dev_open(fdisk_t *, service_id_t, fdisk_dev_t **);
    5153extern void fdisk_dev_close(fdisk_dev_t *);
    5254extern int fdisk_dev_get_svcname(fdisk_dev_t *, char **);
     
    5456
    5557extern int fdisk_label_get_info(fdisk_dev_t *, fdisk_label_info_t *);
    56 extern int fdisk_label_create(fdisk_dev_t *, fdisk_label_type_t);
     58extern int fdisk_label_create(fdisk_dev_t *, label_type_t);
    5759extern int fdisk_label_destroy(fdisk_dev_t *);
    5860
     
    6870extern int fdisk_cap_format(fdisk_cap_t *, char **);
    6971extern int fdisk_cap_parse(const char *, fdisk_cap_t *);
    70 extern int fdisk_ltype_format(fdisk_label_type_t, char **);
     72extern int fdisk_ltype_format(label_type_t, char **);
    7173extern int fdisk_fstype_format(fdisk_fstype_t, char **);
    7274
  • uspace/lib/fdisk/include/types/fdisk.h

    r1356f85a r22fb7ab  
    4040#include <loc.h>
    4141#include <stdint.h>
     42#include <types/label.h>
     43#include <vol.h>
    4244
    4345typedef enum {
     
    9597} fdisk_dev_info_t;
    9698
    97 /** Fdisk label type */
    98 typedef enum {
    99         /** None */
    100         fdl_none = 0,
    101         /** Unknown */
    102         fdl_unknown,
    103         /** BIOS Master Boot Record */
    104         fdl_mbr,
    105         /** UEFI GUID Partition Table */
    106         fdl_gpt
    107 } fdisk_label_type_t;
    108 
    109 /** Highest label type + 1 */
    110 #define FDL_LIMIT (fdl_gpt + 1)
    111 /** Lowest label type allowed for creation */
    112 #define FDL_CREATE_LO fdl_mbr
    113 /** Highest label type allowed for creation + 1 */
    114 #define FDL_CREATE_HI (fdl_gpt + 1)
    115 
    11699/** Open fdisk device */
    117100typedef struct {
    118         /** Label type */
    119         fdisk_label_type_t ltype;
     101        /** Fdisk instance */
     102        struct fdisk *fdisk;
     103        /** Disk contents */
     104        label_disk_cnt_t dcnt;
     105        /** Service ID */
     106        service_id_t sid;
    120107        /** Partitions */
    121108        list_t parts; /* of fdisk_part_t */
    122         /** Service ID */
    123         service_id_t sid;
    124109} fdisk_dev_t;
    125110
    126111typedef struct {
     112        /** Disk contents */
     113        label_disk_cnt_t dcnt;
    127114        /** Label type */
    128         fdisk_label_type_t ltype;
     115        label_type_t ltype;
    129116} fdisk_label_info_t;
    130117
     
    156143} fdisk_part_info_t;
    157144
     145/** Fdisk instance */
     146typedef struct fdisk {
     147        /** Volume service */
     148        vol_t *vol;
     149} fdisk_t;
     150
    158151#endif
    159152
  • uspace/lib/fdisk/src/fdisk.c

    r1356f85a r22fb7ab  
    4343#include <stdlib.h>
    4444#include <str.h>
     45#include <vol.h>
    4546
    4647static const char *cu_str[] = {
     
    6869}
    6970
    70 int fdisk_dev_list_get(fdisk_dev_list_t **rdevlist)
     71int fdisk_create(fdisk_t **rfdisk)
     72{
     73        fdisk_t *fdisk;
     74        int rc;
     75
     76        fdisk = calloc(1, sizeof(fdisk_t));
     77        if (fdisk == NULL)
     78                return ENOMEM;
     79
     80        rc = vol_create(&fdisk->vol);
     81        if (rc != EOK) {
     82                free(fdisk);
     83                return EIO;
     84        }
     85
     86        *rfdisk = fdisk;
     87        return EOK;
     88}
     89
     90void fdisk_destroy(fdisk_t *fdisk)
     91{
     92        vol_destroy(fdisk->vol);
     93        free(fdisk);
     94}
     95
     96int fdisk_dev_list_get(fdisk_t *fdisk, fdisk_dev_list_t **rdevlist)
    7197{
    7298        fdisk_dev_list_t *devlist = NULL;
    7399        fdisk_dev_info_t *info;
    74         category_id_t disk_cat;
    75100        service_id_t *svcs = NULL;
    76101        size_t count, i;
     
    83108        list_initialize(&devlist->devinfos);
    84109
    85         rc = loc_category_get_id("disk", &disk_cat, 0);
    86         if (rc != EOK) {
    87                 rc = EIO;
    88                 goto error;
    89         }
    90 
    91         rc = loc_category_get_svcs(disk_cat, &svcs, &count);
     110        rc = vol_get_disks(fdisk->vol, &svcs, &count);
    92111        if (rc != EOK) {
    93112                rc = EIO;
     
    210229}
    211230
    212 int fdisk_dev_open(service_id_t sid, fdisk_dev_t **rdev)
     231int fdisk_dev_open(fdisk_t *fdisk, service_id_t sid, fdisk_dev_t **rdev)
    213232{
    214233        fdisk_dev_t *dev;
     
    218237                return ENOMEM;
    219238
    220         dev->ltype = fdl_none;
     239        dev->fdisk = fdisk;
    221240        dev->sid = sid;
    222241        list_initialize(&dev->parts);
     
    271290int fdisk_label_get_info(fdisk_dev_t *dev, fdisk_label_info_t *info)
    272291{
    273         info->ltype = dev->ltype;
    274         return EOK;
    275 }
    276 
    277 int fdisk_label_create(fdisk_dev_t *dev, fdisk_label_type_t ltype)
    278 {
    279         if (dev->ltype != fdl_none)
    280                 return EEXISTS;
    281 
    282         dev->ltype = ltype;
    283         return EOK;
     292        vol_disk_info_t vinfo;
     293        int rc;
     294
     295        rc = vol_disk_info(dev->fdisk->vol, dev->sid, &vinfo);
     296        if (rc != EOK) {
     297                rc = EIO;
     298                goto error;
     299        }
     300
     301        info->dcnt = vinfo.dcnt;
     302        info->ltype = vinfo.ltype;
     303        return EOK;
     304error:
     305        return rc;
     306}
     307
     308int fdisk_label_create(fdisk_dev_t *dev, label_type_t ltype)
     309{
     310        return vol_label_create(dev->fdisk->vol, dev->sid, ltype);
    284311}
    285312
     
    287314{
    288315        fdisk_part_t *part;
    289 
    290         if (dev->ltype == fdl_none)
    291                 return ENOENT;
     316        int rc;
    292317
    293318        part = fdisk_part_first(dev);
     
    297322        }
    298323
    299         dev->ltype = fdl_none;
     324        rc = vol_disk_empty(dev->fdisk->vol, dev->sid);
     325        if (rc != EOK)
     326                return EIO;
     327
     328        dev->dcnt = dc_empty;
    300329        return EOK;
    301330}
     
    419448}
    420449
    421 int fdisk_ltype_format(fdisk_label_type_t ltype, char **rstr)
     450int fdisk_ltype_format(label_type_t ltype, char **rstr)
    422451{
    423452        const char *sltype;
     
    426455        sltype = NULL;
    427456        switch (ltype) {
    428         case fdl_none:
    429                 sltype = "None";
    430                 break;
    431         case fdl_unknown:
    432                 sltype = "Unknown";
    433                 break;
    434         case fdl_mbr:
     457        case lt_mbr:
    435458                sltype = "MBR";
    436459                break;
    437         case fdl_gpt:
     460        case lt_gpt:
    438461                sltype = "GPT";
    439462                break;
Note: See TracChangeset for help on using the changeset viewer.