Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 77a194c in mainline


Ignore:
Timestamp:
2015-11-04T18:55:46Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
44183b98
Parents:
5265eea4 (diff), bfcde8d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge new disk partitioning architecture.

Files:
35 added
13 deleted
18 edited
13 moved

Legend:

Unmodified
Added
Removed
  • .bzrignore

    r5265eea4 r77a194c  
    3434uspace/app/dnsres/dnsres
    3535uspace/app/edit/edit
     36uspace/app/fdisk/fdisk
    3637uspace/app/fontviewer/fontviewer
    3738uspace/app/getterm/getterm
     
    9192uspace/dist/app/dnsres
    9293uspace/dist/app/edit
     94uspace/dist/app/fdisk
    9395uspace/dist/app/fontviewer
    9496uspace/dist/app/getterm
     
    181183uspace/dist/srv/fat
    182184uspace/dist/srv/file_bd
    183 uspace/dist/srv/g_part
    184185uspace/dist/srv/hound
    185186uspace/dist/srv/i8259
     
    189190uspace/dist/srv/locfs
    190191uspace/dist/srv/loopip
    191 uspace/dist/srv/mbr_part
    192192uspace/dist/srv/mfs
    193193uspace/dist/srv/output
     
    200200uspace/dist/srv/udf
    201201uspace/dist/srv/udp
     202uspace/dist/srv/vbd
     203uspace/dist/srv/volsrv
    202204uspace/dist/test/*
    203205uspace/drv/audio/hdaudio/hdaudio
     
    252254uspace/srv/audio/hound/hound
    253255uspace/srv/bd/file_bd/file_bd
    254 uspace/srv/bd/part/guid_part/g_part
    255 uspace/srv/bd/part/mbr_part/mbr_part
    256256uspace/srv/bd/rd/rd
    257257uspace/srv/bd/sata_bd/sata_bd
     258uspace/srv/bd/vbd/vbd
    258259uspace/srv/clipboard/clipboard
    259260uspace/srv/devman/devman
     
    290291uspace/srv/ns/ns
    291292uspace/srv/taskmon/taskmon
     293uspace/srv/volsrv/volsrv
    292294uspace/srv/vfs/vfs
    293295kernel/arch/ia32/_link.ld
     
    313315uspace/app/viewer/viewer
    314316uspace/dist/app/viewer
    315 uspace/app/hdisk/hdisk
    316 uspace/dist/app/hdisk
    317317uspace/app/untar/untar
    318318uspace/dist/app/untar
  • abi/include/abi/fourcc.h

    r5265eea4 r77a194c  
    3636#define ABI_FOURCC_H_
    3737
     38#include "../../../common.h"
     39
    3840#define FOURCC(a, b, c, d) \
    3941        (((UINT32_T) (a)) | (((UINT32_T) (b)) << 8) | \
  • abi/include/abi/ipc/interfaces.h

    r5265eea4 r77a194c  
    174174            FOURCC_COMPACT('m', 'o', 'u', 's') | IFACE_EXCHANGE_SERIALIZE | IFACE_MOD_CALLBACK,
    175175        INTERFACE_KBD_CB =
    176             FOURCC_COMPACT('k', 'b', 'd', ' ') | IFACE_EXCHANGE_SERIALIZE | IFACE_MOD_CALLBACK
     176            FOURCC_COMPACT('k', 'b', 'd', ' ') | IFACE_EXCHANGE_SERIALIZE | IFACE_MOD_CALLBACK,
     177        INTERFACE_VOL =
     178            FOURCC_COMPACT('v', 'o', 'l', ' ') | IFACE_EXCHANGE_SERIALIZE,
     179        INTERFACE_VBD =
     180            FOURCC_COMPACT('v', 'b', 'd', ' ') | IFACE_EXCHANGE_SERIALIZE
    177181} iface_t;
    178182
  • boot/Makefile.common

    r5265eea4 r77a194c  
    101101RD_SRVS_NON_ESSENTIAL = \
    102102        $(USPACE_PATH)/srv/bd/file_bd/file_bd \
    103         $(USPACE_PATH)/srv/bd/part/guid_part/g_part \
    104         $(USPACE_PATH)/srv/bd/part/mbr_part/mbr_part \
    105103        $(USPACE_PATH)/srv/bd/sata_bd/sata_bd \
     104        $(USPACE_PATH)/srv/bd/vbd/vbd \
    106105        $(USPACE_PATH)/srv/clipboard/clipboard \
    107106        $(USPACE_PATH)/srv/fs/tmpfs/tmpfs \
     
    124123        $(USPACE_PATH)/srv/net/tcp/tcp \
    125124        $(USPACE_PATH)/srv/net/udp/udp \
    126         $(USPACE_PATH)/srv/taskmon/taskmon
     125        $(USPACE_PATH)/srv/taskmon/taskmon \
     126        $(USPACE_PATH)/srv/volsrv/volsrv
    127127
    128128RD_DRVS_ESSENTIAL = \
     
    182182        $(USPACE_PATH)/app/download/download \
    183183        $(USPACE_PATH)/app/edit/edit \
    184         $(USPACE_PATH)/app/hdisk/hdisk \
     184        $(USPACE_PATH)/app/fdisk/fdisk \
    185185        $(USPACE_PATH)/app/inet/inet \
    186186        $(USPACE_PATH)/app/kill/kill \
  • uspace/Makefile

    r5265eea4 r77a194c  
    4545        app/download \
    4646        app/edit \
     47        app/fdisk \
    4748        app/fontviewer \
    4849        app/getterm \
    49         app/hdisk \
    5050        app/init \
    5151        app/inet \
     
    112112        srv/bd/file_bd \
    113113        srv/bd/rd \
    114         srv/bd/part/guid_part \
    115         srv/bd/part/mbr_part \
     114        srv/bd/vbd \
    116115        srv/fs/exfat \
    117116        srv/fs/udf \
     
    122121        srv/fs/locfs \
    123122        srv/fs/ext4fs \
     123        srv/volsrv \
    124124        srv/hid/compositor \
    125125        srv/hid/console \
     
    217217        lib/crypto \
    218218        lib/clui \
     219        lib/fdisk \
    219220        lib/fmtutil \
    220221        lib/scsi \
     
    229230        lib/softrend \
    230231        lib/draw \
     232        lib/label \
    231233        lib/math \
    232234        lib/nettl \
     
    245247        lib/bithenge \
    246248        lib/posix \
    247         lib/mbr \
    248         lib/gpt \
    249249        lib/ieee80211
    250250
  • uspace/Makefile.common

    r5265eea4 r77a194c  
    122122LIBCRYPTO_PREFIX = $(LIB_PREFIX)/crypto
    123123LIBBLOCK_PREFIX = $(LIB_PREFIX)/block
     124LIBFDISK_PREFIX = $(LIB_PREFIX)/fdisk
     125LIBLABEL_PREFIX = $(LIB_PREFIX)/label
    124126LIBFS_PREFIX = $(LIB_PREFIX)/fs
    125127LIBCLUI_PREFIX = $(LIB_PREFIX)/clui
     
    155157LIBURI_PREFIX = $(LIB_PREFIX)/uri
    156158
    157 LIBMBR_PREFIX = $(LIB_PREFIX)/mbr
    158 LIBGPT_PREFIX = $(LIB_PREFIX)/gpt
    159159LIBNETTL_PREFIX = $(LIB_PREFIX)/nettl
    160160
  • uspace/app/init/init.c

    r5265eea4 r77a194c  
    337337        srv_start("/srv/s3c24xx_ts");
    338338       
     339        srv_start("/srv/vbd");
     340        srv_start("/srv/volsrv");
     341       
    339342        srv_start("/srv/loopip");
    340343        srv_start("/srv/ethip");
  • uspace/drv/block/ata_bd/main.c

    r5265eea4 r77a194c  
    199199
    200200        ddf_fun_add_to_category(fun, "bd");
     201        ddf_fun_add_to_category(fun, "disk");
    201202
    202203        free(fun_name);
  • uspace/lib/block/block.c

    r5265eea4 r77a194c  
    788788}
    789789
     790/** Synchronize blocks to persistent storage.
     791 *
     792 * @param service_id    Service ID of the block device.
     793 * @param ba            Address of first block (physical).
     794 * @param cnt           Number of blocks.
     795 *
     796 * @return              EOK on success or negative error code on failure.
     797 */
     798int block_sync_cache(service_id_t service_id, aoff64_t ba, size_t cnt)
     799{
     800        devcon_t *devcon;
     801
     802        devcon = devcon_search(service_id);
     803        assert(devcon);
     804
     805        return bd_sync_cache(devcon->bd, ba, cnt);
     806}
     807
    790808/** Get device block size.
    791809 *
  • uspace/lib/block/block.h

    r5265eea4 r77a194c  
    120120extern int block_read_bytes_direct(service_id_t, aoff64_t, size_t, void *);
    121121extern int block_write_direct(service_id_t, aoff64_t, size_t, const void *);
     122extern int block_sync_cache(service_id_t, aoff64_t, size_t);
    122123
    123124#endif
  • uspace/lib/c/Makefile

    r5265eea4 r77a194c  
    9595        generic/task.c \
    9696        generic/futex.c \
     97        generic/imath.c \
    9798        generic/inet/addr.c \
    9899        generic/inet/endpoint.c \
     
    152153        generic/stats.c \
    153154        generic/assert.c \
    154         generic/pio_trace.c
     155        generic/pio_trace.c \
     156        generic/uuid.c \
     157        generic/vbd.c \
     158        generic/vol.c
    155159
    156160ifeq ($(CONFIG_RTLD),y)
  • uspace/lib/c/generic/str.c

    r5265eea4 r77a194c  
    519519        wchar_t c1 = 0;
    520520        wchar_t c2 = 0;
    521        
     521
    522522        size_t off1 = 0;
    523523        size_t off2 = 0;
     
    529529                if (c1 < c2)
    530530                        return -1;
    531                
     531
    532532                if (c1 > c2)
    533533                        return 1;
    534534
    535535                if (c1 == 0 || c2 == 0)
    536                         break;         
     536                        break;
    537537        }
    538538
     
    566566        wchar_t c1 = 0;
    567567        wchar_t c2 = 0;
    568        
     568
    569569        size_t off1 = 0;
    570570        size_t off2 = 0;
    571        
     571
    572572        size_t len = 0;
    573573
     
    578578                c1 = str_decode(s1, &off1, STR_NO_LIMIT);
    579579                c2 = str_decode(s2, &off2, STR_NO_LIMIT);
     580
     581                if (c1 < c2)
     582                        return -1;
     583
     584                if (c1 > c2)
     585                        return 1;
     586
     587                if (c1 == 0 || c2 == 0)
     588                        break;
     589
     590                ++len;
     591        }
     592
     593        return 0;
     594
     595}
     596
     597/** Compare two NULL terminated strings in case-insensitive manner.
     598 *
     599 * Do a char-by-char comparison of two NULL-terminated strings.
     600 * The strings are considered equal iff their length is equal
     601 * and both strings consist of the same sequence of characters
     602 * when converted to lower case.
     603 *
     604 * A string S1 is less than another string S2 if it has a character with
     605 * lower value at the first character position where the strings differ.
     606 * If the strings differ in length, the shorter one is treated as if
     607 * padded by characters with a value of zero.
     608 *
     609 * @param s1 First string to compare.
     610 * @param s2 Second string to compare.
     611 *
     612 * @return 0 if the strings are equal, -1 if the first is less than the second,
     613 *         1 if the second is less than the first.
     614 *
     615 */
     616int str_casecmp(const char *s1, const char *s2)
     617{
     618        wchar_t c1 = 0;
     619        wchar_t c2 = 0;
     620
     621        size_t off1 = 0;
     622        size_t off2 = 0;
     623
     624        while (true) {
     625                c1 = tolower(str_decode(s1, &off1, STR_NO_LIMIT));
     626                c2 = tolower(str_decode(s2, &off2, STR_NO_LIMIT));
     627
     628                if (c1 < c2)
     629                        return -1;
     630
     631                if (c1 > c2)
     632                        return 1;
     633
     634                if (c1 == 0 || c2 == 0)
     635                        break;
     636        }
     637
     638        return 0;
     639}
     640
     641/** Compare two NULL terminated strings with length limit in case-insensitive
     642 * manner.
     643 *
     644 * Do a char-by-char comparison of two NULL-terminated strings.
     645 * The strings are considered equal iff
     646 * min(str_length(s1), max_len) == min(str_length(s2), max_len)
     647 * and both strings consist of the same sequence of characters,
     648 * up to max_len characters.
     649 *
     650 * A string S1 is less than another string S2 if it has a character with
     651 * lower value at the first character position where the strings differ.
     652 * If the strings differ in length, the shorter one is treated as if
     653 * padded by characters with a value of zero. Only the first max_len
     654 * characters are considered.
     655 *
     656 * @param s1      First string to compare.
     657 * @param s2      Second string to compare.
     658 * @param max_len Maximum number of characters to consider.
     659 *
     660 * @return 0 if the strings are equal, -1 if the first is less than the second,
     661 *         1 if the second is less than the first.
     662 *
     663 */
     664int str_lcasecmp(const char *s1, const char *s2, size_t max_len)
     665{
     666        wchar_t c1 = 0;
     667        wchar_t c2 = 0;
     668       
     669        size_t off1 = 0;
     670        size_t off2 = 0;
     671       
     672        size_t len = 0;
     673
     674        while (true) {
     675                if (len >= max_len)
     676                        break;
     677
     678                c1 = tolower(str_decode(s1, &off1, STR_NO_LIMIT));
     679                c2 = tolower(str_decode(s2, &off2, STR_NO_LIMIT));
    580680
    581681                if (c1 < c2)
  • uspace/lib/c/include/imath.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2012-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup hdisk
     29/** @addtogroup libc
    3030 * @{
    3131 */
    3232/** @file
     33 * @brief Integer math functions
    3334 */
    3435
    35 #ifndef __INPUT_H__
    36 #define __INPUT_H__
     36#ifndef LIBC_IMATH_H_
     37#define LIBC_IMATH_H_
    3738
    38 #include <tinput.h>
     39#include <stdint.h>
    3940
    40 extern int get_input_line(tinput_t *, char **);
    41 extern uint8_t get_input_uint8(tinput_t *);
    42 extern uint32_t get_input_uint32(tinput_t *);
    43 extern uint64_t get_input_uint64(tinput_t *);
    44 extern size_t get_input_size_t(tinput_t *);
     41extern int ipow10_u64(unsigned, uint64_t *);
     42extern unsigned ilog10_u64(uint64_t);
    4543
    4644#endif
     45
     46/**
     47 * @}
     48 */
  • uspace/lib/c/include/ipc/services.h

    r5265eea4 r77a194c  
    5959#define SERVICE_NAME_UDP      "net/udp"
    6060#define SERVICE_NAME_TCP      "net/tcp"
     61#define SERVICE_NAME_VBD      "vbd"
     62#define SERVICE_NAME_VOLSRV   "volsrv"
    6163
    6264#endif
  • uspace/lib/c/include/str.h

    r5265eea4 r77a194c  
    8282extern int str_cmp(const char *s1, const char *s2);
    8383extern int str_lcmp(const char *s1, const char *s2, size_t max_len);
     84extern int str_casecmp(const char *s1, const char *s2);
     85extern int str_lcasecmp(const char *s1, const char *s2, size_t max_len);
    8486
    8587extern bool str_test_prefix(const char *s, const char *p);
  • uspace/lib/c/include/types/vol.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2012-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup hdisk
     29/** @addtogroup libc
    3030 * @{
    3131 */
     
    3333 */
    3434
    35 #ifndef __COMMON_H__
    36 #define __COMMON_H__
     35#ifndef LIBC_TYPES_VOL_H_
     36#define LIBC_TYPES_VOL_H_
    3737
    38 #include <libmbr.h>
    39 #include <libgpt.h>
     38#include <async.h>
    4039
    4140typedef enum {
    42         LYT_NONE,
    43         LYT_MBR,
    44         LYT_GPT,
    45 } layouts_t;
     41        /** Partition is empty */
     42        vpc_empty,
     43        /** Partition contains a recognized filesystem */
     44        vpc_fs,
     45        /** Partition contains unrecognized data */
     46        vpc_unknown
     47} vol_part_cnt_t;
    4648
    47 typedef union {
    48         mbr_label_t *mbr;
    49         gpt_label_t *gpt;
    50 } label_data_t;
     49/** File system type */
     50typedef enum {
     51        fs_exfat,
     52        fs_fat,
     53        fs_minix,
     54        fs_ext4
     55} vol_fstype_t;
    5156
    52 typedef struct label {
    53         layouts_t layout;
    54         aoff64_t blocks;
    55         service_id_t device;
    56         label_data_t data;
    57         unsigned int alignment;
    58         int (* destroy_label)(struct label *);
    59         int (* add_part)(struct label *, tinput_t *);
    60         int (* delete_part)(struct label *, tinput_t *);
    61         int (* new_label)(struct label *);
    62         int (* print_parts)(struct label *);
    63         int (* read_parts)(struct label *);
    64         int (* write_parts)(struct label *);
    65         int (* extra_funcs)(struct label *, tinput_t *);
    66 } label_t;
     57#define VOL_FSTYPE_LIMIT (fs_ext4 + 1)
     58#define VOL_FSTYPE_DEFAULT fs_minix
     59
     60/** Volume service */
     61typedef struct vol {
     62        /** Volume service session */
     63        async_sess_t *sess;
     64} vol_t;
     65
     66/** Partition information */
     67typedef struct {
     68        /** Partition content type */
     69        vol_part_cnt_t pcnt;
     70        /** Filesystem type */
     71        vol_fstype_t fstype;
     72} vol_part_info_t;
    6773
    6874#endif
     75
     76/** @}
     77 */
  • uspace/lib/c/include/vol.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2012-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup hdisk
     29/** @addtogroup libc
    3030 * @{
    3131 */
     
    3333 */
    3434
    35 #ifndef __FUNC_NONE_H__
    36 #define __FUNC_NONE_H__
     35#ifndef LIBC_VOL_H_
     36#define LIBC_VOL_H_
    3737
     38#include <async.h>
    3839#include <loc.h>
    39 #include <tinput.h>
    40 #include "common.h"
     40#include <stdint.h>
     41#include <types/label.h>
     42#include <types/vol.h>
    4143
    42 extern int construct_none_label(label_t *);
    43 extern int add_none_part(label_t *, tinput_t *);
    44 extern int delete_none_part(label_t *, tinput_t *);
    45 extern int destroy_none_label(label_t *);
    46 extern int new_none_label(label_t *);
    47 extern int print_none_parts(label_t *);
    48 extern int read_none_parts(label_t *);
    49 extern int write_none_parts(label_t *);
    50 extern int extra_none_funcs(label_t *, tinput_t *);
     44extern int vol_create(vol_t **);
     45extern void vol_destroy(vol_t *);
     46extern int vol_get_parts(vol_t *, service_id_t **, size_t *);
     47extern int vol_part_add(vol_t *, service_id_t);
     48extern int vol_part_info(vol_t *, service_id_t, vol_part_info_t *);
     49extern int vol_part_empty(vol_t *, service_id_t);
     50extern int vol_part_mkfs(vol_t *, service_id_t, vol_fstype_t);
    5151
    5252#endif
     53
     54/** @}
     55 */
  • uspace/lib/clui/Makefile

    r5265eea4 r77a194c  
    3232
    3333SOURCES = \
     34        nchoice.c \
    3435        tinput.c
    3536
  • uspace/lib/clui/nchoice.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
    3  * Copyright (c) 2011-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    43 * All rights reserved.
    54 *
     
    2827 */
    2928
    30 /** @addtogroup libgpt
     29/** @addtogroup libclui
    3130 * @{
    3231 */
    33 /** @file
     32/**
     33 * @file Numerical choice
    3434 */
    3535
    36 #ifndef LIBGPT_GPT_H_
    37 #define LIBGPT_GPT_H_
     36#ifndef LIBCLUI_NCHOICE_H_
     37#define LIBCLUI_NCHOICE_H_
     38
     39#include <adt/list.h>
     40#include <tinput.h>
    3841
    3942typedef enum {
    40         AT_REQ_PART = 0,
    41         AT_NO_BLOCK_IO,
    42         AT_LEGACY_BOOT,
    43         AT_UNDEFINED,
    44         AT_SPECIFIC = 48
    45 } gpt_attr_t;
     43        /** This is the default option */
     44        ncf_default = 1
     45} nchoice_flag_t;
    4646
    47 /** GPT header */
    4847typedef struct {
    49         uint8_t efi_signature[8];
    50         uint8_t revision[4];
    51         uint32_t header_size;
    52         uint32_t header_crc32;
    53         uint32_t reserved;
    54         uint64_t current_lba;
    55         uint64_t alternate_lba;
    56         uint64_t first_usable_lba;
    57         uint64_t last_usable_lba;
    58         uint8_t disk_guid[16];
    59         uint64_t entry_lba;
    60         uint32_t fillries;
    61         uint32_t entry_size;
    62         uint32_t pe_array_crc32;
    63 } __attribute__((packed)) gpt_header_t;
     48        /** Link to nchoice_t.opts */
     49        link_t lchoice;
     50        /** Option text */
     51        char *text;
     52        /** User argument */
     53        void *arg;
     54} nchoice_opt_t;
    6455
    65 /** GPT partition entry */
    6656typedef struct {
    67         uint8_t part_type[16];
    68         uint8_t part_id[16];
    69         uint64_t start_lba;
    70         uint64_t end_lba;
    71         uint64_t attributes;
    72         uint8_t part_name[72];
    73 } __attribute__((packed)) gpt_entry_t;
     57        /** Prompt text */
     58        char *prompt;
     59        /** Options */
     60        list_t opts; /* of nchoice_opt_t */
     61        /** Text input */
     62        tinput_t *tinput;
     63        /** Default option */
     64        nchoice_opt_t *def_opt;
     65} nchoice_t;
     66
     67extern int nchoice_create(nchoice_t **);
     68extern void nchoice_destroy(nchoice_t *);
     69extern int nchoice_set_prompt(nchoice_t *, const char *);
     70extern int nchoice_add(nchoice_t *, const char *, void *, nchoice_flag_t);
     71extern int nchoice_get(nchoice_t *, void **);
    7472
    7573#endif
     74
     75/** @}
     76 */
  • uspace/lib/clui/tinput.c

    r5265eea4 r77a194c  
    457457}
    458458
    459 static void tinput_set_str(tinput_t *ti, char *str)
     459static void tinput_set_str(tinput_t *ti, const char *str)
    460460{
    461461        str_to_wstr(ti->buffer, INPUT_MAX_SIZE, str);
     
    853853}
    854854
    855 /** Read in one line of input.
    856  *
    857  * @param ti   Text input.
    858  * @param dstr Place to save pointer to new string.
     855/** Read in one line of input with initial text provided.
     856 *
     857 * @param ti   Text input
     858 * @param istr Initial string
     859 * @param dstr Place to save pointer to new string
    859860 *
    860861 * @return EOK on success
     
    863864 *
    864865 */
    865 int tinput_read(tinput_t *ti, char **dstr)
     866int tinput_read_i(tinput_t *ti, const char *istr, char **dstr)
    866867{
    867868        console_flush(ti->console);
     
    869870                return EIO;
    870871       
    871         ti->pos = 0;
     872        tinput_set_str(ti, istr);
     873
    872874        ti->sel_start = 0;
    873         ti->nc = 0;
    874         ti->buffer[0] = '\0';
    875875        ti->done = false;
    876876        ti->exit_clui = false;
     
    916916}
    917917
     918/** Read in one line of input.
     919 *
     920 * @param ti   Text input
     921 * @param dstr Place to save pointer to new string.
     922 *
     923 * @return EOK on success
     924 * @return ENOENT if user requested abort
     925 * @return EIO if communication with console failed
     926 *
     927 */
     928int tinput_read(tinput_t *ti, char **dstr)
     929{
     930        return tinput_read_i(ti, "", dstr);
     931}
     932
    918933static void tinput_key_ctrl(tinput_t *ti, kbd_event_t *ev)
    919934{
  • uspace/lib/clui/tinput.h

    r5265eea4 r77a194c  
    159159extern void tinput_destroy(tinput_t *);
    160160extern int tinput_read(tinput_t *, char **);
     161extern int tinput_read_i(tinput_t *, const char *, char **);
    161162
    162163#endif
  • uspace/lib/fdisk/Makefile

    r5265eea4 r77a194c  
    11#
    2 # Copyright (c) 2011 Dominik Taborsky
     2# Copyright (c) 2015 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2828
    2929USPACE_PREFIX = ../..
    30 EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX)
    31 LIBRARY = libmbr
     30EXTRA_CFLAGS = -Iinclude -I$(LIBBLOCK_PREFIX)
     31
     32LIBRARY = libfdisk
    3233
    3334SOURCES = \
    34         libmbr.c
     35        src/cap.c \
     36        src/fdisk.c
    3537
    3638include $(USPACE_PREFIX)/Makefile.common
  • uspace/lib/label/Makefile

    r5265eea4 r77a194c  
    11#
    2 # Copyright (c) 2011 Dominik Taborsky
     2# Copyright (c) 2015 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2828
    2929USPACE_PREFIX = ../..
    30 EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX) -I$(LIBMBR_PREFIX)
    31 LIBRARY = libgpt
     30EXTRA_CFLAGS = -Iinclude -I$(LIBBLOCK_PREFIX)
     31
     32LIBRARY = liblabel
    3233
    3334SOURCES = \
    34         libgpt.c \
    35         global.c
     35        src/dummy.c \
     36        src/mbr.c \
     37        src/gpt.c \
     38        src/label.c
    3639
    3740include $(USPACE_PREFIX)/Makefile.common
  • uspace/lib/label/include/std/gpt.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3333 */
    3434
    35 #ifndef __GPT_H__
    36 #define __GPT_H__
     35#ifndef LIBLABEL_STD_GPT_H_
     36#define LIBLABEL_STD_GPT_H_
    3737
    3838#include <sys/types.h>
    3939
    40 /** Block address of GPT header. */
    41 #define GPT_HDR_BA      1
     40enum {
     41        /** Block address of primary GPT header. */
     42        gpt_hdr_ba = 1,
     43
     44        /** Minimum size of partition table in bytes, required by std. */
     45        gpt_ptable_min_size = 16384,
     46
     47        /** GPT revision */
     48        gpt_revision = 0x00010000
     49};
    4250
    4351/** GPT header */
     
    6977} __attribute__((packed)) gpt_entry_t;
    7078
     79/** Microsoft Basic Data Partition */
     80#define GPT_MS_BASIC_DATA "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7"
     81/** Linux Filesystem Data */
     82#define GPT_LINUX_FS_DATA "0FC63DAF-8483-4772-8E79-3D69D8477DE4"
     83/** I could not find any definition of Minix GUID partition type.
     84 * This is a randomly generated UUID */
     85#define GPT_MINIX_FAKE "8308e350-4e2d-46c7-8e3b-24b07e8ac674"
     86
    7187#endif
    7288
  • uspace/lib/label/include/std/mbr.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
    3  * Copyright (c) 2011-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    43 * All rights reserved.
    54 *
     
    2827 */
    2928
    30  /** @addtogroup libmbr
     29/** @addtogroup bd
    3130 * @{
    3231 */
     
    3433 */
    3534
    36 #ifndef LIBMBR_MBR_H_
    37 #define LIBMBR_MBR_H_
     35#ifndef LIBLABEL_STD_MBR_H_
     36#define LIBLABEL_STD_MBR_H_
    3837
    39 #include <sys/types.h>
     38#include <stdint.h>
    4039
    4140enum {
     41        /** Block address of Master Boot Record. */
     42        mbr_ba = 0,
     43
     44        /** First block allowed for allocation */
     45        mbr_ablock0 = 18,
     46
    4247        /** Number of primary partition records */
    43         N_PRIMARY = 4,
    44        
     48        mbr_nprimary = 4,
     49
    4550        /** Boot record signature */
    46         BR_SIGNATURE = 0xAA55
     51        mbr_br_signature = 0xAA55,
     52
     53        /** EBR PTE slot describing partition corresponding to this EBR */
     54        mbr_ebr_pte_this = 0,
     55        /** EBR PTE slot describing the next EBR */
     56        mbr_ebr_pte_next = 1
    4757};
    4858
    49 enum {
    50         /** Non-bootable */
    51         B_INACTIVE = 0x00,
    52         /** Bootable */
    53         B_ACTIVE = 0x80,
    54         /** Anything else means invalid */
    55 };
    56 
    57 enum {
     59enum mbr_ptype {
    5860        /** Unused partition entry */
    59         PT_UNUSED = 0x00,
     61        mbr_pt_unused      = 0x00,
    6062        /** Extended partition */
    61         PT_EXTENDED = 0x05,
     63        mbr_pt_extended    = 0x05,
    6264        /** Extended partition with LBA */
    63         PT_EXTENDED_LBA = 0x0F,
    64         /** GPT Protective partition */
    65         PT_GPT = 0xEE,
     65        mbr_pt_extended_lba = 0x0f,
     66        /** FAT16 with LBA */
     67        mbr_pt_fat16_lba    = 0x0e,
     68        /** FAT32 with LBA */
     69        mbr_pt_fat32_lba    = 0x0c,
     70        /** IFS, HPFS, NTFS, exFAT */
     71        mbr_pt_ms_advanced  = 0x07,
     72        /** Minix */
     73        mbr_pt_minix        = 0x81,
     74        /** Linux */
     75        mbr_pt_linux        = 0x83,
     76        /** GPT Protective */
     77        mbr_pt_gpt_protect  = 0xee
    6678};
    6779
     
    7991        /** Number of blocks in partition */
    8092        uint32_t length;
    81 } __attribute__((packed)) pt_entry_t;
     93} __attribute__((packed)) mbr_pte_t;
    8294
    8395/** Structure of a boot-record block */
    8496typedef struct {
    85         /** Area for boot code */
     97        /* Area for boot code */
    8698        uint8_t code_area[440];
    87         /** Optional media ID */
     99
     100        /* Optional media ID */
    88101        uint32_t media_id;
    89         /** Padding */
     102
    90103        uint16_t pad0;
     104
    91105        /** Partition table entries */
    92         pt_entry_t pte[N_PRIMARY];
     106        mbr_pte_t pte[mbr_nprimary];
     107
    93108        /** Boot record block signature (@c BR_SIGNATURE) */
    94109        uint16_t signature;
    95 } __attribute__((packed)) br_block_t;
     110} __attribute__((packed)) mbr_br_block_t;
    96111
    97112#endif
    98113
     114/** @}
     115 */
  • uspace/lib/label/src/mbr.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2012-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup hdisk
     29/** @addtogroup liblabel
    3030 * @{
    3131 */
    32 /** @file
     32/**
     33 * @file Master Boot Record label
    3334 */
    3435
    35 #ifndef __HDISK_H__
    36 #define __HDISK_H__
     36#ifndef LIBLABEL_MBR_H_
     37#define LIBLABEL_MBR_H_
    3738
    38 #include "common.h"
     39#include <types/liblabel.h>
    3940
    40 #define init_label() \
    41         label.layout = LYT_NONE
     41extern label_ops_t mbr_label_ops;
    4242
    4343#endif
     44
     45/** @}
     46 */
  • uspace/srv/bd/vbd/Makefile

    r5265eea4 r77a194c  
    11#
    2 # Copyright (c) 2010 Jiri Svoboda
     2# Copyright (c) 2015 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
    29 USPACE_PREFIX = ../../../..
    30 LIBS = $(LIBBLOCK_PREFIX)/libblock.a
    31 EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX)
     29USPACE_PREFIX = ../../..
    3230
    33 # Correct name is 'guid_part' but must use this because of FAT 8.3 names.
    34 BINARY = g_part
     31LIBS = \
     32        $(LIBLABEL_PREFIX)/liblabel.a \
     33        $(LIBBLOCK_PREFIX)/libblock.a
     34
     35EXTRA_CFLAGS = \
     36        -I$(LIBLABEL_PREFIX)/include \
     37        -I$(LIBBLOCK_PREFIX)
     38
     39BINARY = vbd
    3540
    3641SOURCES = \
    37         guid_part.c
     42        disk.c \
     43        vbd.c
    3844
    3945include $(USPACE_PREFIX)/Makefile.common
  • uspace/srv/locsrv/locsrv.c

    r5265eea4 r77a194c  
    13171317        categ_dir_add_cat(&cdir, cat);
    13181318
     1319        cat = category_new("disk");
     1320        categ_dir_add_cat(&cdir, cat);
     1321
     1322        cat = category_new("partition");
     1323        categ_dir_add_cat(&cdir, cat);
     1324
    13191325        cat = category_new("iplink");
    13201326        categ_dir_add_cat(&cdir, cat);
  • uspace/srv/volsrv/Makefile

    r5265eea4 r77a194c  
    11#
    2 # Copyright (c) 2005 Martin Decky
    3 # Copyright (c) 2007 Jakub Jermar
     2# Copyright (c) 2015 Jiri Svoboda
    43# All rights reserved.
    54#
     
    2827#
    2928
    30 USPACE_PREFIX = ../../../..
     29USPACE_PREFIX = ../..
     30
    3131LIBS = $(LIBBLOCK_PREFIX)/libblock.a
    32 EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX)
    33 BINARY = mbr_part
     32EXTRA_CFLAGS = -I $(LIBBLOCK_PREFIX)
     33
     34BINARY = volsrv
    3435
    3536SOURCES = \
    36         mbr_part.c
     37        empty.c \
     38        mkfs.c \
     39        part.c \
     40        volsrv.c
    3741
    3842include $(USPACE_PREFIX)/Makefile.common
  • uspace/srv/volsrv/empty.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2012-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup hdisk
     29/** @addtogroup volsrv
    3030 * @{
    3131 */
    32 /** @file
     32/**
     33 * @file
     34 * @brief
    3335 */
    3436
    35 #ifndef __FUNC_GPT_H__
    36 #define __FUNC_GPT_H__
     37#ifndef EMPTY_H_
     38#define EMPTY_H_
    3739
    3840#include <loc.h>
    39 #include <tinput.h>
    40 #include <libgpt.h>
    41 #include "common.h"
    4241
    43 extern int construct_gpt_label(label_t *);
    44 extern int add_gpt_part(label_t *, tinput_t *);
    45 extern int delete_gpt_part(label_t *, tinput_t *);
    46 extern int destroy_gpt_label(label_t *);
    47 extern int new_gpt_label(label_t *);
    48 extern int print_gpt_parts(label_t *);
    49 extern int read_gpt_parts(label_t *);
    50 extern int write_gpt_parts(label_t *);
    51 extern int extra_gpt_funcs(label_t *, tinput_t *);
     42extern int volsrv_part_is_empty(service_id_t, bool *);
     43extern int volsrv_part_empty(service_id_t);
    5244
    5345#endif
     46
     47/** @}
     48 */
  • uspace/srv/volsrv/part.h

    r5265eea4 r77a194c  
    11/*
    2  * Copyright (c) 2012-2013 Dominik Taborsky
     2 * Copyright (c) 2015 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup hdisk
     29/** @addtogroup volsrv
    3030 * @{
    3131 */
    32 /** @file
     32/**
     33 * @file
     34 * @brief
    3335 */
    3436
    35 #ifndef __FUNC_MBR_H__
    36 #define __FUNC_MBR_H__
     37#ifndef PART_H_
     38#define PART_H_
    3739
    3840#include <loc.h>
    39 #include <tinput.h>
    40 #include <libmbr.h>
    41 #include "common.h"
     41#include <sys/types.h>
     42#include <types/vol.h>
     43#include "types/part.h"
    4244
    43 extern int construct_mbr_label(label_t *);
    44 extern int add_mbr_part(label_t *, tinput_t *);
    45 extern int delete_mbr_part(label_t *, tinput_t *);
    46 extern int destroy_mbr_label(label_t *);
    47 extern int new_mbr_label(label_t *);
    48 extern int print_mbr_parts(label_t *);
    49 extern int read_mbr_parts(label_t *);
    50 extern int write_mbr_parts(label_t *);
    51 extern int extra_mbr_funcs(label_t *, tinput_t *);
     45extern int vol_part_init(void);
     46extern int vol_part_discovery_start(void);
     47extern int vol_part_add(service_id_t);
     48extern int vol_part_get_ids(service_id_t *, size_t, size_t *);
     49extern int vol_part_find_by_id(service_id_t, vol_part_t **);
     50extern int vol_part_empty_part(vol_part_t *);
     51extern int vol_part_mkfs_part(vol_part_t *, vol_fstype_t);
     52extern int vol_part_get_info(vol_part_t *, vol_part_info_t *);
    5253
    5354#endif
     55
     56/** @}
     57 */
Note: See TracChangeset for help on using the changeset viewer.