Changeset 6453e306 in mainline for uspace/lib/gpt/libgpt.h
- Timestamp:
- 2013-12-25T16:09:43Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ac36aed
- Parents:
- d51beba3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified uspace/lib/gpt/libgpt.h ¶
rd51beba3 r6453e306 1 1 /* 2 2 * Copyright (c) 2009 Jiri Svoboda 3 * Copyright (c) 2011 , 2012,2013 Dominik Taborsky3 * Copyright (c) 2011-2013 Dominik Taborsky 4 4 * All rights reserved. 5 5 * … … 37 37 #define LIBGPT_LIBGPT_H_ 38 38 39 #define LIBGPT_NAME "libgpt"40 41 39 #include <loc.h> 42 40 #include <sys/types.h> 43 44 41 #include "gpt.h" 45 42 46 43 /** Block address of GPT header. */ 47 #define GPT_HDR_BA 1 44 #define GPT_HDR_BA 1 45 48 46 /** Block size of GPT header. */ 49 #define GPT_HDR_BS 1 47 #define GPT_HDR_BS 1 48 50 49 /** Minimum number of GPT partition entries */ 51 #define GPT_MIN_PART_NUM 128 50 #define GPT_MIN_PART_NUM 128 51 52 52 /** Basic number of GPT partition entries */ 53 #define GPT_BASE_PART_NUM (GPT_MIN_PART_NUM) 53 #define GPT_BASE_PART_NUM (GPT_MIN_PART_NUM) 54 54 55 /** How much fill we ignore before resizing partition array */ 55 #define GPT_IGNORE_FILL_NUM 1056 #define GPT_IGNORE_FILL_NUM 10 56 57 57 58 /** Unused partition entry */ 58 #define GPT_PTE_UNUSED 0 59 #define GPT_PTE_UNUSED 0 60 61 /** Raw GPT header. 62 * 63 * Uses more bytes than sizeof(gpt_header_t). 64 */ 65 typedef struct { 66 gpt_header_t *header; 67 } gpt_t; 68 69 typedef gpt_entry_t gpt_part_t; 70 71 typedef struct { 72 /** Number of entries */ 73 size_t fill; 74 75 /** Size of the array */ 76 size_t arr_size; 77 78 /** Resizable partition array */ 79 gpt_part_t *part_array; 80 } gpt_partitions_t; 81 82 typedef struct { 83 gpt_t *gpt; 84 gpt_partitions_t *parts; 85 service_id_t device; 86 } gpt_label_t; 87 88 typedef struct { 89 const char *desc; 90 const char *guid; 91 } partition_type_t; 59 92 60 93 /** GPT header signature ("EFI PART" in ASCII) */ … … 62 95 extern const uint8_t revision[4]; 63 96 64 typedef struct { 65 /** Raw header. Has more bytes alloced than sizeof(gpt_header_t)! 66 * See gpt_alloc_header() to know why. */ 67 gpt_header_t *header; 68 } gpt_t; 97 extern const partition_type_t gpt_ptypes[]; 69 98 70 typedef gpt_entry_t gpt_part_t; 71 72 typedef struct gpt_parts { 73 /** Number of entries */ 74 size_t fill; 75 /** Size of the array */ 76 size_t arr_size; 77 /** Resizable partition array */ 78 gpt_entry_t *part_array; 79 } gpt_partitions_t; 80 81 82 typedef struct gpt_table { 83 gpt_t *gpt; 84 gpt_partitions_t *parts; 85 service_id_t device; 86 } gpt_label_t; 87 88 struct partition_type { 89 const char *desc; 90 const char *guid; 91 }; 92 93 extern const struct partition_type gpt_ptypes[]; 94 95 extern gpt_label_t * gpt_alloc_label(void); 99 extern gpt_label_t *gpt_alloc_label(void); 96 100 extern void gpt_free_label(gpt_label_t *); 97 101 98 extern gpt_t * 99 extern int 100 extern int 102 extern gpt_t *gpt_alloc_header(size_t); 103 extern int gpt_read_header(gpt_label_t *, service_id_t); 104 extern int gpt_write_header(gpt_label_t *, service_id_t); 101 105 102 extern gpt_partitions_t * 103 extern int gpt_read_partitions(gpt_label_t *);104 extern int 105 extern gpt_part_t * gpt_alloc_partition(void);106 extern gpt_part_t * gpt_get_partition(gpt_label_t *);107 extern gpt_part_t * 108 extern int gpt_add_partition(gpt_label_t *, gpt_part_t *);109 extern int 106 extern gpt_partitions_t *gpt_alloc_partitions(void); 107 extern int gpt_read_partitions(gpt_label_t *); 108 extern int gpt_write_partitions(gpt_label_t *, service_id_t); 109 extern gpt_part_t *gpt_alloc_partition(void); 110 extern gpt_part_t *gpt_get_partition(gpt_label_t *); 111 extern gpt_part_t *gpt_get_partition_at(gpt_label_t *, size_t); 112 extern int gpt_add_partition(gpt_label_t *, gpt_part_t *); 113 extern int gpt_remove_partition(gpt_label_t *, size_t); 110 114 111 extern size_t 112 extern void 113 extern void 114 extern uint64_t 115 extern void gpt_set_end_lba(gpt_part_t *, uint64_t);116 extern uint64_t gpt_get_end_lba(gpt_part_t *);117 extern unsigned char * 118 extern void 119 extern bool gpt_get_flag (gpt_part_t *, GPT_ATTR);120 extern void gpt_set_flag (gpt_part_t *, GPT_ATTR, bool);115 extern size_t gpt_get_part_type(gpt_part_t *); 116 extern void gpt_set_part_type(gpt_part_t *, size_t); 117 extern void gpt_set_start_lba(gpt_part_t *, uint64_t); 118 extern uint64_t gpt_get_start_lba(gpt_part_t *); 119 extern void gpt_set_end_lba(gpt_part_t *, uint64_t); 120 extern uint64_t gpt_get_end_lba(gpt_part_t *); 121 extern unsigned char *gpt_get_part_name(gpt_part_t *); 122 extern void gpt_set_part_name(gpt_part_t *, char *, size_t); 123 extern bool gpt_get_flag(gpt_part_t *, gpt_attr_t); 124 extern void gpt_set_flag(gpt_part_t *, gpt_attr_t, bool); 121 125 122 extern void 123 extern uint64_t 126 extern void gpt_set_random_uuid(uint8_t *); 127 extern uint64_t gpt_get_next_aligned(uint64_t, unsigned int); 124 128 125 129 126 130 #define gpt_part_foreach(label, iterator) \ 127 for(gpt_part_t * iterator = (label)->parts->part_array; \ 128 iterator < (label)->parts->part_array + (label)->parts->arr_size; ++iterator) 131 for (gpt_part_t *iterator = (label)->parts->part_array; \ 132 iterator < (label)->parts->part_array + (label)->parts->arr_size; \ 133 iterator++) 129 134 130 135 extern void gpt_free_gpt(gpt_t *); … … 132 137 133 138 #endif 134
Note:
See TracChangeset
for help on using the changeset viewer.