Changeset 8c95dff in mainline
- Timestamp:
- 2013-11-30T17:49:09Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f4a47e52
- Parents:
- 802898f
- Location:
- uspace
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hdisk/common.h
r802898f r8c95dff 54 54 struct label { 55 55 layouts_t layout; 56 aoff64_t nblocks; 57 service_id_t device; 56 58 union label_data data; 57 59 unsigned int alignment; … … 61 63 int (* new_label) (label_t *); 62 64 int (* print_parts) (label_t *); 63 int (* read_parts) (label_t * , service_id_t);64 int (* write_parts) (label_t * , service_id_t);65 int (* extra_funcs) (label_t *, tinput_t * , service_id_t);65 int (* read_parts) (label_t *); 66 int (* write_parts) (label_t *); 67 int (* extra_funcs) (label_t *, tinput_t *); 66 68 }; 67 69 -
uspace/app/hdisk/func_gpt.c
r802898f r8c95dff 43 43 #include "input.h" 44 44 45 static int set_gpt_partition(tinput_t *, gpt_part_t *, unsigned int); 45 static void print_part_types(void); 46 static int set_gpt_partition(tinput_t *, gpt_part_t *, label_t *); 46 47 47 48 int construct_gpt_label(label_t *this) … … 69 70 } 70 71 71 return set_gpt_partition(in, p, this ->alignment);72 return set_gpt_partition(in, p, this); 72 73 } 73 74 … … 106 107 int print_gpt_parts(label_t *this) 107 108 { 108 printf("Current partition scheme (GPT) :\n");109 printf("Current partition scheme (GPT)(number of blocks: %" PRIu64 "):\n", this->nblocks); 109 110 printf("%15s %10s %10s Type: Name:\n", "Start:", "End:", "Length:"); 110 111 … … 131 132 } 132 133 133 int read_gpt_parts(label_t *this , service_id_t dev_handle)134 { 135 int rc; 136 137 rc = gpt_read_header(this->data.gpt, dev_handle);134 int read_gpt_parts(label_t *this) 135 { 136 int rc; 137 138 rc = gpt_read_header(this->data.gpt, this->device); 138 139 if (rc != EOK) { 139 140 printf("Error: Reading header failed: %d (%s)\n", rc, str_error(rc)); … … 150 151 } 151 152 152 int write_gpt_parts(label_t *this , service_id_t dev_handle)153 { 154 int rc; 155 156 rc = gpt_write_partitions(this->data.gpt, dev_handle);153 int write_gpt_parts(label_t *this) 154 { 155 int rc; 156 printf("test1\n"); 157 rc = gpt_write_partitions(this->data.gpt, this->device); 157 158 if (rc != EOK) { 158 159 printf("Error: Writing partitions failed: %d (%s)\n", rc, str_error(rc)); 159 160 return rc; 160 161 } 161 162 rc = gpt_write_header(this->data.gpt, dev_handle); 163 if (rc != EOK) { 164 printf("Error: Writing header failed: %d (%s)\n", rc, str_error(rc)); 165 return rc; 166 } 167 168 return EOK; 169 } 170 171 int extra_gpt_funcs(label_t *this, tinput_t *in, service_id_t dev_handle) 162 printf("test2\n"); 163 return EOK; 164 } 165 166 int extra_gpt_funcs(label_t *this, tinput_t *in) 172 167 { 173 168 printf("Not implemented.\n"); … … 175 170 } 176 171 177 static int set_gpt_partition(tinput_t *in, gpt_part_t *p, unsigned int alignment)172 static int set_gpt_partition(tinput_t *in, gpt_part_t *p, label_t * this) 178 173 { 179 174 int rc; … … 181 176 uint64_t sa, ea; 182 177 183 printf("Set starting address (number): ");178 printf("Set starting address: "); 184 179 sa = get_input_uint64(in); 185 if ( sa %alignment != 0)186 sa = gpt_get_next_aligned(sa, alignment);187 188 printf("Set end address ( number): ");180 if (this->alignment != 0 && this->alignment != 1 && sa % this->alignment != 0) 181 sa = gpt_get_next_aligned(sa, this->alignment); 182 183 printf("Set end address (max: %" PRIu64 "): ", this->nblocks); 189 184 ea = get_input_uint64(in); 190 185 … … 198 193 199 194 /* See global.c from libgpt for all partition types. */ 195 printf("Choose type: "); 196 print_part_types(); 200 197 printf("Set type (1 for HelenOS System): "); 201 198 size_t idx = get_input_size_t(in); 202 199 gpt_set_part_type(p, idx); 203 200 204 gpt_set_random_uuid(p->part_type);205 201 gpt_set_random_uuid(p->part_id); 206 202 … … 218 214 } 219 215 216 static void print_part_types(void) 217 { 218 int c; 219 int count = 0; 220 const struct partition_type * ptype = gpt_ptypes; 221 222 do { 223 if (count % 10 == 0) { 224 printf("Print (more) partition types? (y/n)\n"); 225 c = getchar(); 226 if (c == 'n') 227 return; 228 } 229 230 printf("%d: %s\n", count, ptype->desc); 231 ++count; 232 ++ptype; 233 } while (ptype->guid != NULL); 234 } 235 -
uspace/app/hdisk/func_gpt.h
r802898f r8c95dff 48 48 extern int new_gpt_label (label_t *); 49 49 extern int print_gpt_parts (label_t *); 50 extern int read_gpt_parts (label_t * , service_id_t);51 extern int write_gpt_parts (label_t * , service_id_t);52 extern int extra_gpt_funcs (label_t *, tinput_t * , service_id_t);50 extern int read_gpt_parts (label_t *); 51 extern int write_gpt_parts (label_t *); 52 extern int extra_gpt_funcs (label_t *, tinput_t *); 53 53 54 54 #endif -
uspace/app/hdisk/func_mbr.c
r802898f r8c95dff 41 41 #include "input.h" 42 42 43 static int set_mbr_partition(tinput_t * in, mbr_part_t *p, unsigned int alignment);43 static int set_mbr_partition(tinput_t *, mbr_part_t *, label_t *); 44 44 45 45 int construct_mbr_label(label_t *this) … … 66 66 mbr_part_t *part = mbr_alloc_partition(); 67 67 68 set_mbr_partition(in, part, this->alignment); 68 rc = set_mbr_partition(in, part, this); 69 if (rc != EOK) 70 return rc; 69 71 70 72 rc = mbr_add_partition(this->data.mbr, part); … … 89 91 rc = mbr_remove_partition(this->data.mbr, idx); 90 92 if (rc != EOK) { 91 printf("Error: something.\n");93 printf("Error: partition does not exist?\n"); 92 94 } 93 95 … … 106 108 if (this->data.mbr == NULL) 107 109 return ENOMEM; 108 else 109 return EOK; 110 111 mbr_set_device(this->data.mbr, this->device); 112 return EOK; 110 113 } 111 114 … … 115 118 int num = 0; 116 119 117 printf("Current partition scheme (MBR) :\n");120 printf("Current partition scheme (MBR)(number of blocks: %" PRIu64 "):\n", this->nblocks); 118 121 printf("\t\t%10s %10s %10s %10s %7s\n", "Bootable:", "Start:", "End:", "Length:", "Type:"); 119 122 … … 121 124 122 125 for (it = mbr_get_first_partition(this->data.mbr); it != NULL; 123 it = mbr_get_next_partition(this->data.mbr, it) , ++num) {126 it = mbr_get_next_partition(this->data.mbr, it)) { 124 127 if (it->type == PT_UNUSED) 125 128 continue; … … 133 136 printf("\t%10u %10u %10u %7u\n", it->start_addr, it->start_addr + it->length, it->length, it->type); 134 137 138 num++; 135 139 } 136 140 … … 140 144 } 141 145 142 int read_mbr_parts(label_t *this , service_id_t dev_handle)146 int read_mbr_parts(label_t *this) 143 147 { 144 148 int rc; 145 rc = mbr_read_mbr(this->data.mbr, dev_handle);149 rc = mbr_read_mbr(this->data.mbr, this->device); 146 150 if (rc != EOK) 147 151 return rc; … … 157 161 } 158 162 159 int write_mbr_parts(label_t *this , service_id_t dev_handle)160 { 161 int rc = mbr_write_partitions(this->data.mbr, dev_handle);163 int write_mbr_parts(label_t *this) 164 { 165 int rc = mbr_write_partitions(this->data.mbr, this->device); 162 166 if (rc != EOK) { 163 167 printf("Error occured during writing: ERR: %d: %s\n", rc, str_error(rc)); … … 167 171 } 168 172 169 int extra_mbr_funcs(label_t *this, tinput_t *in , service_id_t dev_handle)173 int extra_mbr_funcs(label_t *this, tinput_t *in) 170 174 { 171 175 printf("Not implemented.\n"); … … 173 177 } 174 178 175 static int set_mbr_partition(tinput_t *in, mbr_part_t *p, unsigned int alignment)179 static int set_mbr_partition(tinput_t *in, mbr_part_t *p, label_t * this) 176 180 { 177 181 int c; … … 214 218 uint32_t sa, ea; 215 219 216 printf("Set starting address (number): ");220 printf("Set starting address: "); 217 221 sa = get_input_uint32(in); 218 222 if (sa == 0 && errno != EOK) 219 223 return errno; 220 224 221 if ( alignment != 0 && alignment != 1) {222 sa = mbr_get_next_aligned(sa, alignment);225 if (this->alignment != 0 && this->alignment != 1 && sa % this->alignment != 0) { 226 sa = mbr_get_next_aligned(sa, this->alignment); 223 227 printf("Starting address was aligned to %u.\n", sa); 224 228 } 225 226 printf("Set end addres ( number): ");229 230 printf("Set end addres (max: %" PRIu64 "): ", this->nblocks); 227 231 ea = get_input_uint32(in); 228 232 if (ea == 0 && errno != EOK) … … 233 237 return EINVAL; 234 238 } 235 239 236 240 p->type = type; 237 241 p->start_addr = sa; -
uspace/app/hdisk/func_mbr.h
r802898f r8c95dff 48 48 extern int new_mbr_label (label_t *); 49 49 extern int print_mbr_parts (label_t *); 50 extern int read_mbr_parts (label_t * , service_id_t);51 extern int write_mbr_parts (label_t * , service_id_t);52 extern int extra_mbr_funcs (label_t *, tinput_t * , service_id_t);50 extern int read_mbr_parts (label_t *); 51 extern int write_mbr_parts (label_t *); 52 extern int extra_mbr_funcs (label_t *, tinput_t *); 53 53 54 54 #endif -
uspace/app/hdisk/func_none.c
r802898f r8c95dff 86 86 } 87 87 88 int read_none_parts(label_t *this , service_id_t dev_handle)88 int read_none_parts(label_t *this) 89 89 { 90 90 not_implemented(); … … 92 92 } 93 93 94 int write_none_parts(label_t *this , service_id_t dev_handle)94 int write_none_parts(label_t *this) 95 95 { 96 96 not_implemented(); … … 98 98 } 99 99 100 int extra_none_funcs(label_t *this, tinput_t * in , service_id_t dev_handle)100 int extra_none_funcs(label_t *this, tinput_t * in) 101 101 { 102 102 not_implemented(); -
uspace/app/hdisk/func_none.h
r802898f r8c95dff 47 47 extern int new_none_label (label_t *); 48 48 extern int print_none_parts (label_t *); 49 extern int read_none_parts (label_t * , service_id_t);50 extern int write_none_parts (label_t * , service_id_t);51 extern int extra_none_funcs (label_t *, tinput_t * , service_id_t);49 extern int read_none_parts (label_t *); 50 extern int write_none_parts (label_t *); 51 extern int extra_none_funcs (label_t *, tinput_t *); 52 52 53 53 #endif -
uspace/app/hdisk/hdisk.c
r802898f r8c95dff 46 46 #include <libgpt.h> 47 47 #include <tinput.h> 48 #include <str_error.h> 48 49 49 50 #include "hdisk.h" … … 53 54 #include "func_none.h" 54 55 55 int interact( service_id_t);56 int interact(void); 56 57 void print_help(void); 57 58 void select_label_format(tinput_t *); 58 59 void construct_label(layouts_t); 59 60 void free_label(void); 60 int try_read( service_id_t);61 int try_read_mbr( service_id_t);62 int try_read_gpt( service_id_t);61 int try_read(void); 62 int try_read_mbr(void); 63 int try_read_gpt(void); 63 64 void set_alignment(tinput_t *); 64 65 … … 83 84 84 85 init_label(); 85 86 rc = try_read_mbr(dev_handle); 86 label.device = dev_handle; 87 88 rc = block_init(EXCHANGE_ATOMIC, dev_handle, 512); 89 if (rc != EOK) { 90 printf("Error during libblock init: %d - %s.\n", rc, str_error(rc)); 91 return -1; 92 } 93 94 aoff64_t nblocks; 95 rc = block_get_nblocks(dev_handle, &nblocks); 96 block_fini(dev_handle); 97 if (rc != EOK) { 98 printf(LIBMBR_NAME ": Error while getting number of blocks: %d - %s.\n", rc, str_error(rc)); 99 return -1; 100 } 101 102 label.nblocks = nblocks; 103 104 rc = try_read_mbr(); 87 105 if (rc == EOK) 88 106 goto interact; 89 107 90 rc = try_read_gpt(dev_handle); 108 free_label(); 109 110 rc = try_read_gpt(); 91 111 if (rc == EOK) 92 112 goto interact; 93 113 94 114 printf("No label recognized. Create a new one.\n"); 95 label.layout = LYT_NONE;115 construct_label(LYT_NONE); 96 116 97 117 interact: 98 118 99 rc = interact( dev_handle);119 rc = interact(); 100 120 101 121 return rc; … … 103 123 104 124 /** Interact with user */ 105 int interact( service_id_t dev_handle)125 int interact() 106 126 { 107 127 int input; … … 130 150 break; 131 151 case 'e': 132 label.extra_funcs(&label, in , dev_handle);152 label.extra_funcs(&label, in); 133 153 break; 134 154 case 'f': 155 free_label(); 135 156 select_label_format(in); 136 157 break; … … 154 175 goto end; 155 176 case 'r': 156 label.read_parts(&label , dev_handle);177 label.read_parts(&label); 157 178 case 'w': 158 label.write_parts(&label , dev_handle);179 label.write_parts(&label); 159 180 break; 160 181 default: … … 197 218 uint8_t val = get_input_uint8(in); 198 219 switch (val) { 199 case 0: 200 free_label(); 220 case 1: 221 construct_label(LYT_MBR); 222 break; 223 case 2: 224 construct_label(LYT_GPT); 225 break; 226 default: 201 227 construct_label(LYT_NONE); 202 break;203 case 1:204 free_label();205 construct_label(LYT_MBR);206 break;207 case 2:208 free_label();209 construct_label(LYT_GPT);210 228 break; 211 229 } … … 235 253 } 236 254 237 int try_read(service_id_t dev_handle) 238 { 239 return label.read_parts(&label, dev_handle); 240 } 241 242 int try_read_mbr(service_id_t dev_handle) 255 int try_read() 256 { 257 258 return label.read_parts(&label); 259 } 260 261 int try_read_mbr() 243 262 { 244 263 construct_label(LYT_MBR); 245 return try_read( dev_handle);246 } 247 248 int try_read_gpt( service_id_t dev_handle)264 return try_read(); 265 } 266 267 int try_read_gpt() 249 268 { 250 269 construct_label(LYT_GPT); 251 return try_read( dev_handle);270 return try_read(); 252 271 } 253 272 -
uspace/lib/gpt/Makefile
r802898f r8c95dff 28 28 29 29 USPACE_PREFIX = ../.. 30 EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX) 30 EXTRA_CFLAGS = -I$(LIBBLOCK_PREFIX) -I$(LIBMBR_PREFIX) 31 31 LIBRARY = libgpt 32 32 -
uspace/lib/gpt/global.c
r802898f r8c95dff 40 40 }; 41 41 42 const uint8_t revision[4] = { 43 00, 00, 01, 00 44 }; 45 42 46 const struct partition_type gpt_ptypes[] = { 43 47 { "Unused entry", "00000000" "0000" "0000" "0000000000000000" }, /* 0 */ … … 55 59 { "HP-UX Data", "75894C1E" "3AEB" "11D3" "B7C17B03A0000000" }, 56 60 { "HP-UX Service", "E2A1E728" "32E3" "11D6" "A6827B03A0000000" }, 57 { "Linux filesystem data", "EBD0A0A2" "B9E5" "4433" "87C068B6B72699C7" },58 61 { "Linux filesystem data", "0FC63DAF" "8483" "4772" "8E793D69D8477DE4" }, 59 62 { "Linux RAID", "A19D880F" "05FC" "4D3B" "A006743F0F84911E" }, 60 63 { "Linux Swap", "0657FD6D" "A4AB" "43C4" "84E50933C84B4F4F" }, 61 64 { "Linux LVM", "E6D6D379" "F507" "44C2" "A23C238F2A3DF928" }, 65 { "Linux filesystem data", "933AC7E1" "2EB4" "4F13" "B8440E14E2AEF915" }, 62 66 { "Linux Reserved", "8DA63339" "0007" "60C0" "C436083AC8230908" }, 63 67 { "FreeBSD Boot", "83BD6B9D" "7F41" "11DC" "BE0B001560B84F0F" }, /* 20 */ -
uspace/lib/gpt/gpt.h
r802898f r8c95dff 50 50 typedef struct { 51 51 uint8_t efi_signature[8]; 52 uint 32_t revision;52 uint8_t revision[4]; 53 53 uint32_t header_size; 54 54 uint32_t header_crc32; -
uspace/lib/gpt/libgpt.c
r802898f r8c95dff 49 49 #include <mem.h> 50 50 #include <sys/typefmt.h> 51 #include <mbr.h> 51 52 52 53 … … 112 113 } 113 114 115 /* Enter some sane defaults. */ 114 116 memset(gpt->header, 0, final_size); 117 memcpy(gpt->header->efi_signature, efi_signature, 8); 118 memcpy(gpt->header->revision, revision, 4); 119 gpt->header->header_size = host2uint32_t_le(final_size); 120 gpt->header->entry_lba = host2uint64_t_le((uint64_t) 2); 121 gpt->header->entry_size = host2uint32_t_le(sizeof(gpt_entry_t)); 122 115 123 116 124 return gpt; … … 207 215 uint64_t tmp; 208 216 217 gpt_set_random_uuid(label->gpt->header->disk_guid); 218 209 219 /* Prepare the backup header */ 210 220 label->gpt->header->alternate_lba = label->gpt->header->my_lba; … … 243 253 /* Write to main GPT header location */ 244 254 rc = block_write_direct(dev_handle, GPT_HDR_BA, GPT_HDR_BS, label->gpt->header); 255 if (rc != EOK) 256 return rc; 257 258 /* Write Protective MBR */ 259 br_block_t mbr; 260 memset(&mbr, 0, 512); 261 memset(mbr.pte[0].first_chs, 1, 3); 262 mbr.pte[0].ptype = 0xEE; 263 memset(mbr.pte[0].last_chs, 0xFF, 3); 264 mbr.pte[0].first_lba = host2uint32_t_le(1); 265 mbr.pte[0].length = 0xFFFFFFFF; 266 mbr.signature = host2uint16_t_le(BR_SIGNATURE); 267 268 rc = block_write_direct(dev_handle, 0, 1, &mbr); 245 269 block_fini(dev_handle); 246 270 if (rc != EOK) 247 271 return rc; 248 249 272 250 273 return 0; … … 343 366 int rc; 344 367 size_t b_size; 345 uint32_t e_size = uint32_t_le2host(label->gpt->header->entry_size);346 size_t fillries = label->parts->fill > GPT_MIN_PART_NUM ? label->parts->fill : GPT_MIN_PART_NUM;347 348 if (e_size != sizeof(gpt_entry_t))349 return ENOTSUP;350 368 351 369 /* comm_size of 4096 is ignored */ … … 363 381 goto fail; 364 382 383 /* When we're creating a new label from scratch, we need to fill 384 * the header with sensible defaults. */ 385 if (label->gpt == NULL) { 386 label->gpt = gpt_alloc_header(b_size); 387 } 388 389 printf("test1.0\n"); 390 uint32_t e_size = uint32_t_le2host(label->gpt->header->entry_size); 391 printf("test1.025\n"); 392 size_t fillries = label->parts->fill > GPT_MIN_PART_NUM ? label->parts->fill : GPT_MIN_PART_NUM; 393 printf("test1.05\n"); 394 if (e_size != sizeof(gpt_entry_t)) 395 return ENOTSUP; 396 365 397 label->gpt->header->fillries = host2uint32_t_le(fillries); 366 398 uint64_t arr_blocks = (fillries * sizeof(gpt_entry_t)) / b_size; … … 368 400 label->gpt->header->first_usable_lba = host2uint64_t_le(gpt_space); 369 401 label->gpt->header->last_usable_lba = host2uint64_t_le(n_blocks - gpt_space - 1); 370 402 printf("test1.5\n"); 371 403 /* Perform checks */ 372 404 gpt_part_foreach (label, p) { … … 395 427 } 396 428 } 397 429 printf("test1.6\n"); 398 430 label->gpt->header->pe_array_crc32 = host2uint32_t_le(compute_crc32( 399 431 (uint8_t *) label->parts->part_array, 400 432 fillries * e_size)); 401 433 402 434 printf("test1.7\n"); 403 435 /* Write to backup GPT partition array location */ 404 436 rc = block_write_direct(dev_handle, n_blocks - arr_blocks - 1, … … 406 438 if (rc != EOK) 407 439 goto fail; 408 440 printf("test1.8\n"); 409 441 /* Write to main GPT partition array location */ 410 442 rc = block_write_direct(dev_handle, uint64_t_le2host(label->gpt->header->entry_lba), … … 412 444 if (rc != EOK) 413 445 goto fail; 414 446 printf("test1.9\n"); 415 447 return gpt_write_header(label, dev_handle); 416 448 … … 594 626 595 627 for (i = 0; gpt_ptypes[i].guid != NULL; i++) { 628 //printf("%x =?= %x\n", p->part_type[3], get_byte(gpt_ptypes[i].guid +0)); 629 //printf("%x =?= %x\n", p->part_type[2], get_byte(gpt_ptypes[i].guid +2)); 630 //printf("%x =?= %x\n", p->part_type[1], get_byte(gpt_ptypes[i].guid +4)); 631 //printf("%x =?= %x\n", p->part_type[0], get_byte(gpt_ptypes[i].guid +6)); 632 //getchar(); 596 633 if (p->part_type[3] == get_byte(gpt_ptypes[i].guid +0) && 597 634 p->part_type[2] == get_byte(gpt_ptypes[i].guid +2) && … … 627 664 { 628 665 /* Beware: first 3 blocks are byteswapped! */ 629 p->part_type[3] = g pt_ptypes[type].guid[0];630 p->part_type[2] = g pt_ptypes[type].guid[1];631 p->part_type[1] = g pt_ptypes[type].guid[2];632 p->part_type[0] = g pt_ptypes[type].guid[3];633 634 p->part_type[5] = g pt_ptypes[type].guid[4];635 p->part_type[4] = g pt_ptypes[type].guid[5];636 637 p->part_type[7] = g pt_ptypes[type].guid[6];638 p->part_type[6] = g pt_ptypes[type].guid[7];639 640 p->part_type[8] = g pt_ptypes[type].guid[8];641 p->part_type[9] = g pt_ptypes[type].guid[9];642 p->part_type[10] = g pt_ptypes[type].guid[10];643 p->part_type[11] = g pt_ptypes[type].guid[11];644 p->part_type[12] = g pt_ptypes[type].guid[12];645 p->part_type[13] = g pt_ptypes[type].guid[13];646 p->part_type[14] = g pt_ptypes[type].guid[14];647 p->part_type[15] = g pt_ptypes[type].guid[15];666 p->part_type[3] = get_byte(gpt_ptypes[type].guid +0); 667 p->part_type[2] = get_byte(gpt_ptypes[type].guid +2); 668 p->part_type[1] = get_byte(gpt_ptypes[type].guid +4); 669 p->part_type[0] = get_byte(gpt_ptypes[type].guid +6); 670 671 p->part_type[5] = get_byte(gpt_ptypes[type].guid +8); 672 p->part_type[4] = get_byte(gpt_ptypes[type].guid +10); 673 674 p->part_type[7] = get_byte(gpt_ptypes[type].guid +12); 675 p->part_type[6] = get_byte(gpt_ptypes[type].guid +14); 676 677 p->part_type[8] = get_byte(gpt_ptypes[type].guid +16); 678 p->part_type[9] = get_byte(gpt_ptypes[type].guid +18); 679 p->part_type[10] = get_byte(gpt_ptypes[type].guid +20); 680 p->part_type[11] = get_byte(gpt_ptypes[type].guid +22); 681 p->part_type[12] = get_byte(gpt_ptypes[type].guid +24); 682 p->part_type[13] = get_byte(gpt_ptypes[type].guid +26); 683 p->part_type[14] = get_byte(gpt_ptypes[type].guid +28); 684 p->part_type[15] = get_byte(gpt_ptypes[type].guid +30); 648 685 } 649 686 -
uspace/lib/gpt/libgpt.h
r802898f r8c95dff 60 60 /** GPT header signature ("EFI PART" in ASCII) */ 61 61 extern const uint8_t efi_signature[8]; 62 extern const uint8_t revision[4]; 62 63 63 64 typedef struct { -
uspace/lib/mbr/libmbr.c
r802898f r8c95dff 70 70 } 71 71 72 void mbr_set_device(mbr_label_t *label, service_id_t dev_handle) 73 { 74 label->device = dev_handle; 75 } 76 72 77 /** Free mbr_label_t structure */ 73 78 void mbr_free_label(mbr_label_t *label) … … 253 258 } 254 259 260 label->mbr->raw_data.signature = host2uint16_t_le(BR_SIGNATURE); 261 255 262 /* Writing MBR */ 256 263 rc = block_write_direct(dev_handle, 0, 1, &(label->mbr->raw_data)); … … 271 278 * and implementation. If you don't have to change it, don't. Other 272 279 * designs have been tried, this came out as the least horror with 273 * as much power over it as you can get. Thanks.*/280 * as much power over it as you can get. */ 274 281 275 282 /* Encoding and writing first logical partition */ -
uspace/lib/mbr/libmbr.h
r802898f r8c95dff 120 120 /* Alloc complete label structure */ 121 121 extern mbr_label_t * mbr_alloc_label(void); 122 extern void mbr_set_device(mbr_label_t *, service_id_t); 122 123 123 124 /* Read/Write MBR header.
Note:
See TracChangeset
for help on using the changeset viewer.