Changeset a2aa81cb in mainline for uspace/lib/mbr/libmbr.h


Ignore:
Timestamp:
2013-05-30T11:52:31Z (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:
44c4886, 469739f
Parents:
622a50b
Message:

API changes, bug fixing

File:
1 edited

Legend:

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

    r622a50b ra2aa81cb  
    11/*
     2 * Copyright (c) 2009 Jiri Svoboda
    23 * Copyright (c) 2011, 2012, 2013 Dominik Taborsky
    3  * Copyright (c) 2009 Jiri Svoboda (for some definitions from uspace/srv/bd/part/mbr_part)
    44 * All rights reserved.
    55 *
     
    7474
    7575typedef enum {
     76        /** Other flags unknown - saving previous state */
    7677        /** Bootability */
    77         ST_BOOT = 0,
     78        ST_BOOT = 7,
    7879        /** Logical partition, 0 = primary, 1 = logical*/
    79         ST_LOGIC = 1
     80        ST_LOGIC = 8
    8081} MBR_FLAGS;
    8182
     
    102103        /** Partition overlapping */
    103104        ERR_OVERLAP,
    104         /** Logical partition out of bounds */
     105        /** Partition out of bounds */
    105106        ERR_OUT_BOUNDS,
    106107        /** No space left for EBR */
     
    108109        /** Out of memory */
    109110        ERR_NOMEM,
    110 } MBR_ERR_VAL;
     111        /** Libblock error */
     112        ERR_LIBBLOCK,
     113} mbr_err_val;
    111114
    112115
     
    144147        /** Raw access to data */
    145148        br_block_t raw_data;
    146         /** Device where the data are from */
    147         service_id_t device;
    148149} mbr_t;
    149150
     
    156157        uint8_t type;
    157158        /** Flags */
    158         uint8_t status;
     159        uint16_t status;
    159160        /** Address of first block */
    160161        uint32_t start_addr;
     
    180181
    181182/** Both header and partition list */
    182 typedef struct mbr_table {
     183typedef struct mbr_label {
     184        /** MBR header */
    183185        mbr_t * mbr;
     186        /** Partition list */
    184187        mbr_partitions_t * parts;
    185 } mbr_table_t;
    186 
    187 /** 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.
    188196 * WARNING: when changing both header and partitions, write first header,
    189197 * then partitions. The MBR headers' raw_data is NOT updated to follow
    190198 * partition changes. */
    191199extern mbr_t * mbr_alloc_mbr(void);
    192 extern mbr_t * mbr_read_mbr(service_id_t dev_handle);
    193 extern int mbr_write_mbr(mbr_t * mbr, service_id_t dev_handle);
    194 extern int mbr_is_mbr(mbr_t * mbr);
    195 
    196 /** 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.
    197205 * NOTE: Writing partitions writes the complete header as well. */
    198 extern mbr_partitions_t * mbr_read_partitions(mbr_t * mbr);
    199 extern int                      mbr_write_partitions(mbr_partitions_t * parts, mbr_t * mbr, service_id_t dev_handle);
    200 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);
    201209extern mbr_partitions_t * mbr_alloc_partitions(void);
    202 extern MBR_ERR_VAL      mbr_add_partition(mbr_partitions_t * parts, mbr_part_t * partition);
    203 extern int                      mbr_remove_partition(mbr_partitions_t * parts, size_t idx);
    204 extern int                      mbr_get_flag(mbr_part_t * p, MBR_FLAGS flag);
    205 extern void                     mbr_set_flag(mbr_part_t * p, MBR_FLAGS flag, bool value);
    206 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);
    207215
    208216#define mbr_part_foreach(parts, iterator)       \
    209                         for (iterator  = list_get_instance((parts)->list.head.next, mbr_part_t, link); \
    210                                  iterator != list_get_instance(&((parts)->list.head), mbr_part_t, link); \
    211                                  iterator  = list_get_instance(iterator->link.next, mbr_part_t, link))
    212 
    213 
    214 /** free() wrapper functions. */
    215 extern void mbr_free_mbr(mbr_t * mbr);
    216 extern void mbr_free_partition(mbr_part_t * p);
    217 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 *);
    218227
    219228#endif
Note: See TracChangeset for help on using the changeset viewer.