Changes in uspace/lib/mbr/libmbr.h [a2aa81cb:9bda5d90] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/mbr/libmbr.h
ra2aa81cb r9bda5d90 1 1 /* 2 * Copyright (c) 2009 Jiri Svoboda3 2 * Copyright (c) 2011, 2012, 2013 Dominik Taborsky 4 3 * All rights reserved. … … 74 73 75 74 typedef enum { 76 /** Other flags unknown - saving previous state */77 75 /** Bootability */ 78 ST_BOOT = 7,76 ST_BOOT = 0, 79 77 /** Logical partition, 0 = primary, 1 = logical*/ 80 ST_LOGIC = 878 ST_LOGIC = 1 81 79 } MBR_FLAGS; 82 80 … … 103 101 /** Partition overlapping */ 104 102 ERR_OVERLAP, 105 /** Partition out of bounds */103 /** Logical partition out of bounds */ 106 104 ERR_OUT_BOUNDS, 107 105 /** No space left for EBR */ … … 109 107 /** Out of memory */ 110 108 ERR_NOMEM, 111 /** Libblock error */ 112 ERR_LIBBLOCK, 113 } mbr_err_val; 109 } MBR_ERR_VAL; 114 110 115 111 … … 147 143 /** Raw access to data */ 148 144 br_block_t raw_data; 145 /** Device where the data are from */ 146 service_id_t device; 149 147 } mbr_t; 150 148 … … 157 155 uint8_t type; 158 156 /** Flags */ 159 uint 16_t status;157 uint8_t status; 160 158 /** Address of first block */ 161 159 uint32_t start_addr; … … 181 179 182 180 /** Both header and partition list */ 183 typedef struct mbr_label { 184 /** MBR header */ 181 typedef struct mbr_table { 185 182 mbr_t * mbr; 186 /** Partition list */187 183 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. 196 187 * WARNING: when changing both header and partitions, write first header, 197 188 * then partitions. The MBR headers' raw_data is NOT updated to follow 198 189 * partition changes. */ 199 190 extern 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.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. 205 196 * 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 * 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); 209 200 extern 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);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); 215 206 216 207 #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. */ 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); 227 217 228 218 #endif
Note:
See TracChangeset
for help on using the changeset viewer.