Changeset a2aa81cb in mainline for uspace/lib/mbr/libmbr.h
- Timestamp:
- 2013-05-30T11:52:31Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 44c4886, 469739f
- Parents:
- 622a50b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/mbr/libmbr.h
r622a50b ra2aa81cb 1 1 /* 2 * Copyright (c) 2009 Jiri Svoboda 2 3 * Copyright (c) 2011, 2012, 2013 Dominik Taborsky 3 * Copyright (c) 2009 Jiri Svoboda (for some definitions from uspace/srv/bd/part/mbr_part)4 4 * All rights reserved. 5 5 * … … 74 74 75 75 typedef enum { 76 /** Other flags unknown - saving previous state */ 76 77 /** Bootability */ 77 ST_BOOT = 0,78 ST_BOOT = 7, 78 79 /** Logical partition, 0 = primary, 1 = logical*/ 79 ST_LOGIC = 180 ST_LOGIC = 8 80 81 } MBR_FLAGS; 81 82 … … 102 103 /** Partition overlapping */ 103 104 ERR_OVERLAP, 104 /** Logical partition out of bounds */105 /** Partition out of bounds */ 105 106 ERR_OUT_BOUNDS, 106 107 /** No space left for EBR */ … … 108 109 /** Out of memory */ 109 110 ERR_NOMEM, 110 } MBR_ERR_VAL; 111 /** Libblock error */ 112 ERR_LIBBLOCK, 113 } mbr_err_val; 111 114 112 115 … … 144 147 /** Raw access to data */ 145 148 br_block_t raw_data; 146 /** Device where the data are from */147 service_id_t device;148 149 } mbr_t; 149 150 … … 156 157 uint8_t type; 157 158 /** Flags */ 158 uint 8_t status;159 uint16_t status; 159 160 /** Address of first block */ 160 161 uint32_t start_addr; … … 180 181 181 182 /** Both header and partition list */ 182 typedef struct mbr_table { 183 typedef struct mbr_label { 184 /** MBR header */ 183 185 mbr_t * mbr; 186 /** Partition list */ 184 187 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 */ 193 extern mbr_label_t * mbr_alloc_label(void); 194 195 /* Read/Write MBR header. 188 196 * WARNING: when changing both header and partitions, write first header, 189 197 * then partitions. The MBR headers' raw_data is NOT updated to follow 190 198 * partition changes. */ 191 199 extern 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.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. 197 205 * 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 * 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); 201 209 extern 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);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); 207 215 208 216 #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. */ 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 *); 218 227 219 228 #endif
Note:
See TracChangeset
for help on using the changeset viewer.