Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/mbr/libmbr.h

    ra2aa81cb r9bda5d90  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
    32 * Copyright (c) 2011, 2012, 2013 Dominik Taborsky
    43 * All rights reserved.
     
    7473
    7574typedef enum {
    76         /** Other flags unknown - saving previous state */
    7775        /** Bootability */
    78         ST_BOOT = 7,
     76        ST_BOOT = 0,
    7977        /** Logical partition, 0 = primary, 1 = logical*/
    80         ST_LOGIC = 8
     78        ST_LOGIC = 1
    8179} MBR_FLAGS;
    8280
     
    103101        /** Partition overlapping */
    104102        ERR_OVERLAP,
    105         /** Partition out of bounds */
     103        /** Logical partition out of bounds */
    106104        ERR_OUT_BOUNDS,
    107105        /** No space left for EBR */
     
    109107        /** Out of memory */
    110108        ERR_NOMEM,
    111         /** Libblock error */
    112         ERR_LIBBLOCK,
    113 } mbr_err_val;
     109} MBR_ERR_VAL;
    114110
    115111
     
    147143        /** Raw access to data */
    148144        br_block_t raw_data;
     145        /** Device where the data are from */
     146        service_id_t device;
    149147} mbr_t;
    150148
     
    157155        uint8_t type;
    158156        /** Flags */
    159         uint16_t status;
     157        uint8_t status;
    160158        /** Address of first block */
    161159        uint32_t start_addr;
     
    181179
    182180/** Both header and partition list */
    183 typedef struct mbr_label {
    184         /** MBR header */
     181typedef struct mbr_table {
    185182        mbr_t * mbr;
    186         /** Partition list */
    187183        mbr_partitions_t * parts;
    188         /** Device where the data are from (or for) */
    189         service_id_t device;
    190 } mbr_label_t;
    191 
    192 /* Alloc complete label structure */
    193 extern mbr_label_t * mbr_alloc_label(void);
    194 
    195 /* Read/Write MBR header.
     184} mbr_table_t;
     185
     186/** Read/Write MBR header.
    196187 * WARNING: when changing both header and partitions, write first header,
    197188 * then partitions. The MBR headers' raw_data is NOT updated to follow
    198189 * partition changes. */
    199190extern mbr_t * mbr_alloc_mbr(void);
    200 extern int mbr_read_mbr(mbr_label_t *, service_id_t);
    201 extern int mbr_write_mbr(mbr_label_t *, service_id_t);
    202 extern int mbr_is_mbr(mbr_label_t *);
    203 
    204 /* Read/Write/Set MBR partitions.
     191extern mbr_t * mbr_read_mbr(service_id_t dev_handle);
     192extern int mbr_write_mbr(mbr_t * mbr, service_id_t dev_handle);
     193extern int mbr_is_mbr(mbr_t * mbr);
     194
     195/** Read/Write/Set MBR partitions.
    205196 * NOTE: Writing partitions writes the complete header as well. */
    206 extern int mbr_read_partitions(mbr_label_t *);
    207 extern int          mbr_write_partitions(mbr_label_t *, service_id_t);
    208 extern mbr_part_t * mbr_alloc_partition(void);
     197extern mbr_partitions_t * mbr_read_partitions(mbr_t * mbr);
     198extern int                      mbr_write_partitions(mbr_partitions_t * parts, mbr_t * mbr, service_id_t dev_handle);
     199extern mbr_part_t *     mbr_alloc_partition(void);
    209200extern mbr_partitions_t * mbr_alloc_partitions(void);
    210 extern mbr_err_val  mbr_add_partition(mbr_label_t *, mbr_part_t *);
    211 extern int          mbr_remove_partition(mbr_label_t *, size_t);
    212 extern int          mbr_get_flag(mbr_part_t *, MBR_FLAGS);
    213 extern void         mbr_set_flag(mbr_part_t *, MBR_FLAGS, bool);
    214 extern uint32_t     mbr_get_next_aligned(uint32_t, unsigned int);
     201extern MBR_ERR_VAL      mbr_add_partition(mbr_partitions_t * parts, mbr_part_t * partition);
     202extern int                      mbr_remove_partition(mbr_partitions_t * parts, size_t idx);
     203extern int                      mbr_get_flag(mbr_part_t * p, MBR_FLAGS flag);
     204extern void                     mbr_set_flag(mbr_part_t * p, MBR_FLAGS flag, bool value);
     205extern uint32_t         mbr_get_next_aligned(uint32_t addr, unsigned int alignment);
    215206
    216207#define mbr_part_foreach(parts, iterator)       \
    217         for (iterator  = list_get_instance((parts)->list.head.next, mbr_part_t, link); \
    218              iterator != list_get_instance(&((parts)->list.head), mbr_part_t, link); \
    219              iterator  = list_get_instance(iterator->link.next, mbr_part_t, link))
    220 
    221 
    222 /* free() wrapper functions. */
    223 extern void mbr_free_label(mbr_label_t *);
    224 extern void mbr_free_mbr(mbr_t *);
    225 extern void mbr_free_partition(mbr_part_t *);
    226 extern void mbr_free_partitions(mbr_partitions_t *);
     208                        for (iterator  = list_get_instance((parts)->list.head.next, mbr_part_t, link); \
     209                                 iterator != list_get_instance(&((parts)->list.head), mbr_part_t, link); \
     210                                 iterator  = list_get_instance(iterator->link.next, mbr_part_t, link))
     211
     212
     213/** free() wrapper functions. */
     214extern void mbr_free_mbr(mbr_t * mbr);
     215extern void mbr_free_partition(mbr_part_t * p);
     216extern void mbr_free_partitions(mbr_partitions_t * parts);
    227217
    228218#endif
Note: See TracChangeset for help on using the changeset viewer.