Changeset 469739f in mainline for uspace/lib/mbr/libmbr.h


Ignore:
Timestamp:
2013-05-30T13:58:10Z (11 years ago)
Author:
Dominik Taborsky (AT DOT) <brembyseznamcz>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c9f61150, cb328ab
Parents:
9bda5d90 (diff), a2aa81cb (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:

API changes, bug fixing

File:
1 edited

Legend:

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

    r9bda5d90 r469739f  
    11/*
     2 * Copyright (c) 2009 Jiri Svoboda
    23 * Copyright (c) 2011, 2012, 2013 Dominik Taborsky
    34 * All rights reserved.
     
    7374
    7475typedef enum {
     76        /** Other flags unknown - saving previous state */
    7577        /** Bootability */
    76         ST_BOOT = 0,
     78        ST_BOOT = 7,
    7779        /** Logical partition, 0 = primary, 1 = logical*/
    78         ST_LOGIC = 1
     80        ST_LOGIC = 8
    7981} MBR_FLAGS;
    8082
     
    101103        /** Partition overlapping */
    102104        ERR_OVERLAP,
    103         /** Logical partition out of bounds */
     105        /** Partition out of bounds */
    104106        ERR_OUT_BOUNDS,
    105107        /** No space left for EBR */
     
    107109        /** Out of memory */
    108110        ERR_NOMEM,
    109 } MBR_ERR_VAL;
     111        /** Libblock error */
     112        ERR_LIBBLOCK,
     113} mbr_err_val;
    110114
    111115
     
    143147        /** Raw access to data */
    144148        br_block_t raw_data;
    145         /** Device where the data are from */
    146         service_id_t device;
    147149} mbr_t;
    148150
     
    155157        uint8_t type;
    156158        /** Flags */
    157         uint8_t status;
     159        uint16_t status;
    158160        /** Address of first block */
    159161        uint32_t start_addr;
     
    179181
    180182/** Both header and partition list */
    181 typedef struct mbr_table {
     183typedef struct mbr_label {
     184        /** MBR header */
    182185        mbr_t * mbr;
     186        /** Partition list */
    183187        mbr_partitions_t * parts;
    184 } mbr_table_t;
    185 
    186 /** Read/Write MBR header.
     188        /** Device where the data are from (or for) */
     189        service_id_t device;
     190} mbr_label_t;
     191
     192/* Alloc complete label structure */
     193extern mbr_label_t * mbr_alloc_label(void);
     194
     195/* Read/Write MBR header.
    187196 * WARNING: when changing both header and partitions, write first header,
    188197 * then partitions. The MBR headers' raw_data is NOT updated to follow
    189198 * partition changes. */
    190199extern mbr_t * mbr_alloc_mbr(void);
    191 extern mbr_t * mbr_read_mbr(service_id_t dev_handle);
    192 extern int mbr_write_mbr(mbr_t * mbr, service_id_t dev_handle);
    193 extern int mbr_is_mbr(mbr_t * mbr);
    194 
    195 /** Read/Write/Set MBR partitions.
     200extern int mbr_read_mbr(mbr_label_t *, service_id_t);
     201extern int mbr_write_mbr(mbr_label_t *, service_id_t);
     202extern int mbr_is_mbr(mbr_label_t *);
     203
     204/* Read/Write/Set MBR partitions.
    196205 * NOTE: Writing partitions writes the complete header as well. */
    197 extern mbr_partitions_t * mbr_read_partitions(mbr_t * mbr);
    198 extern int                      mbr_write_partitions(mbr_partitions_t * parts, mbr_t * mbr, service_id_t dev_handle);
    199 extern mbr_part_t *     mbr_alloc_partition(void);
     206extern int mbr_read_partitions(mbr_label_t *);
     207extern int          mbr_write_partitions(mbr_label_t *, service_id_t);
     208extern mbr_part_t * mbr_alloc_partition(void);
    200209extern mbr_partitions_t * mbr_alloc_partitions(void);
    201 extern MBR_ERR_VAL      mbr_add_partition(mbr_partitions_t * parts, mbr_part_t * partition);
    202 extern int                      mbr_remove_partition(mbr_partitions_t * parts, size_t idx);
    203 extern int                      mbr_get_flag(mbr_part_t * p, MBR_FLAGS flag);
    204 extern void                     mbr_set_flag(mbr_part_t * p, MBR_FLAGS flag, bool value);
    205 extern uint32_t         mbr_get_next_aligned(uint32_t addr, unsigned int alignment);
     210extern mbr_err_val  mbr_add_partition(mbr_label_t *, mbr_part_t *);
     211extern int          mbr_remove_partition(mbr_label_t *, size_t);
     212extern int          mbr_get_flag(mbr_part_t *, MBR_FLAGS);
     213extern void         mbr_set_flag(mbr_part_t *, MBR_FLAGS, bool);
     214extern uint32_t     mbr_get_next_aligned(uint32_t, unsigned int);
    206215
    207216#define mbr_part_foreach(parts, iterator)       \
    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. */
    214 extern void mbr_free_mbr(mbr_t * mbr);
    215 extern void mbr_free_partition(mbr_part_t * p);
    216 extern void mbr_free_partitions(mbr_partitions_t * parts);
     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. */
     223extern void mbr_free_label(mbr_label_t *);
     224extern void mbr_free_mbr(mbr_t *);
     225extern void mbr_free_partition(mbr_part_t *);
     226extern void mbr_free_partitions(mbr_partitions_t *);
    217227
    218228#endif
Note: See TracChangeset for help on using the changeset viewer.