Changeset deacc58d in mainline for uspace/lib/label/src
- Timestamp:
- 2017-06-20T17:34:02Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 80da8f70
- Parents:
- 63e27ef
- Location:
- uspace/lib/label/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/label/src/dummy.c
r63e27ef rdeacc58d 34 34 */ 35 35 36 #include <block.h>37 36 #include <errno.h> 38 37 #include <mem.h> … … 41 40 #include "dummy.h" 42 41 43 static int dummy_open( service_id_t, label_t **);44 static int dummy_create( service_id_t, label_t **);42 static int dummy_open(label_bd_t *, label_t **); 43 static int dummy_create(label_bd_t *, label_t **); 45 44 static void dummy_close(label_t *); 46 45 static int dummy_destroy(label_t *); … … 67 66 }; 68 67 69 static int dummy_open( service_id_t sid, label_t **rlabel)68 static int dummy_open(label_bd_t *bd, label_t **rlabel) 70 69 { 71 70 label_t *label = NULL; … … 76 75 int rc; 77 76 78 rc = b lock_get_bsize(sid, &bsize);77 rc = bd->ops->get_bsize(bd->arg, &bsize); 79 78 if (rc != EOK) { 80 79 rc = EIO; … … 82 81 } 83 82 84 rc = b lock_get_nblocks(sid, &nblocks);83 rc = bd->ops->get_nblocks(bd->arg, &nblocks); 85 84 if (rc != EOK) { 86 85 rc = EIO; … … 101 100 label->ops = &dummy_label_ops; 102 101 label->ltype = lt_none; 103 label-> svc_id = sid;102 label->bd = *bd; 104 103 label->ablock0 = ba_min; 105 104 label->anblocks = ba_max - ba_min + 1; … … 129 128 } 130 129 131 static int dummy_create( service_id_t sid, label_t **rlabel)130 static int dummy_create(label_bd_t *bd, label_t **rlabel) 132 131 { 133 132 return ENOTSUP; -
uspace/lib/label/src/gpt.c
r63e27ef rdeacc58d 35 35 36 36 #include <adt/checksum.h> 37 #include <block.h>38 37 #include <byteorder.h> 39 38 #include <errno.h> … … 47 46 #include "gpt.h" 48 47 49 static int gpt_open( service_id_t, label_t **);50 static int gpt_create( service_id_t, label_t **);48 static int gpt_open(label_bd_t *, label_t **); 49 static int gpt_create(label_bd_t *, label_t **); 51 50 static void gpt_close(label_t *); 52 51 static int gpt_destroy(label_t *); … … 71 70 static int gpt_hdr_get_crc(gpt_header_t *, size_t, uint32_t *); 72 71 73 static int gpt_pmbr_create( service_id_t, size_t, uint64_t);74 static int gpt_pmbr_destroy( service_id_t, size_t);72 static int gpt_pmbr_create(label_bd_t *, size_t, uint64_t); 73 static int gpt_pmbr_destroy(label_bd_t *, size_t); 75 74 76 75 const uint8_t efi_signature[8] = { … … 93 92 }; 94 93 95 static int gpt_open( service_id_t sid, label_t **rlabel)94 static int gpt_open(label_bd_t *bd, label_t **rlabel) 96 95 { 97 96 label_t *label = NULL; … … 118 117 etable[1] = NULL; 119 118 120 rc = b lock_get_bsize(sid, &bsize);119 rc = bd->ops->get_bsize(bd->arg, &bsize); 121 120 if (rc != EOK) { 122 121 rc = EIO; … … 141 140 } 142 141 143 rc = b lock_read_direct(sid, gpt_hdr_ba, 1, gpt_hdr[0]);142 rc = bd->ops->read(bd->arg, gpt_hdr_ba, 1, gpt_hdr[0]); 144 143 if (rc != EOK) { 145 144 rc = EIO; … … 149 148 h1ba = uint64_t_le2host(gpt_hdr[0]->alternate_lba); 150 149 151 rc = b lock_read_direct(sid, h1ba, 1, gpt_hdr[1]);150 rc = bd->ops->read(bd->arg, h1ba, 1, gpt_hdr[1]); 152 151 if (rc != EOK) { 153 152 rc = EIO; … … 277 276 } 278 277 279 rc = b lock_read_direct(sid, ptba[j], pt_blocks / 2, etable[j]);278 rc = bd->ops->read(bd->arg, ptba[j], pt_blocks / 2, etable[j]); 280 279 if (rc != EOK) { 281 280 rc = EIO; … … 308 307 label->ops = &gpt_label_ops; 309 308 label->ltype = lt_gpt; 310 label-> svc_id = sid;309 label->bd = *bd; 311 310 label->ablock0 = ba_min; 312 311 label->anblocks = ba_max - ba_min + 1; … … 334 333 } 335 334 336 static int gpt_create( service_id_t sid, label_t **rlabel)335 static int gpt_create(label_bd_t *bd, label_t **rlabel) 337 336 { 338 337 label_t *label = NULL; … … 353 352 int rc; 354 353 355 rc = b lock_get_bsize(sid, &bsize);354 rc = bd->ops->get_bsize(bd->arg, &bsize); 356 355 if (rc != EOK) { 357 356 rc = EIO; … … 364 363 } 365 364 366 rc = b lock_get_nblocks(sid, &nblocks);365 rc = bd->ops->get_nblocks(bd->arg, &nblocks); 367 366 if (rc != EOK) { 368 367 rc = EIO; … … 380 379 } 381 380 382 rc = gpt_pmbr_create( sid, bsize, nblocks);381 rc = gpt_pmbr_create(bd, bsize, nblocks); 383 382 if (rc != EOK) { 384 383 rc = EIO; … … 405 404 } 406 405 407 rc = b lock_write_direct(sid, ptba[i], pt_blocks, etable);406 rc = bd->ops->write(bd->arg, ptba[i], pt_blocks, etable); 408 407 if (rc != EOK) { 409 408 rc = EIO; … … 440 439 gpt_hdr_compute_crc(gpt_hdr, sizeof(gpt_header_t)); 441 440 442 rc = b lock_write_direct(sid, hdr_ba[i], 1, gpt_hdr);441 rc = bd->ops->write(bd->arg, hdr_ba[i], 1, gpt_hdr); 443 442 if (rc != EOK) { 444 443 rc = EIO; … … 460 459 label->ops = &gpt_label_ops; 461 460 label->ltype = lt_gpt; 462 label-> svc_id = sid;461 label->bd = *bd; 463 462 label->ablock0 = ba_min; 464 463 label->anblocks = ba_max - ba_min + 1; … … 520 519 } 521 520 522 rc = block_write_direct(label->svc_id, label->lt.gpt.hdr_ba[i],521 rc = label->bd.ops->write(label->bd.arg, label->lt.gpt.hdr_ba[i], 523 522 1, gpt_hdr); 524 523 if (rc != EOK) { … … 537 536 } 538 537 539 rc = block_write_direct(label->svc_id,538 rc = label->bd.ops->write(label->bd.arg, 540 539 label->lt.gpt.ptable_ba[i], label->lt.gpt.pt_blocks, 541 540 etable); … … 549 548 } 550 549 551 rc = gpt_pmbr_destroy( label->svc_id, label->block_size);550 rc = gpt_pmbr_destroy(&label->bd, label->block_size); 552 551 if (rc != EOK) 553 552 goto error; … … 871 870 nblocks = label->lt.gpt.pt_blocks; 872 871 873 rc = block_read_direct(label->svc_id, ba, nblocks, buf);872 rc = label->bd.ops->read(label->bd.arg, ba, nblocks, buf); 874 873 if (rc != EOK) { 875 874 rc = EIO; … … 888 887 *e = *pte; 889 888 890 rc = block_write_direct(label->svc_id, ba, nblocks, buf);889 rc = label->bd.ops->write(label->bd.arg, ba, nblocks, buf); 891 890 if (rc != EOK) { 892 891 rc = EIO; … … 923 922 924 923 for (i = 0; i < 2; i++) { 925 rc = block_read_direct(label->svc_id,924 rc = label->bd.ops->read(label->bd.arg, 926 925 label->lt.gpt.hdr_ba[i], 1, gpt_hdr); 927 926 if (rc != EOK) { … … 933 932 gpt_hdr_compute_crc(gpt_hdr, label->lt.gpt.hdr_size); 934 933 935 rc = block_write_direct(label->svc_id,934 rc = label->bd.ops->write(label->bd.arg, 936 935 label->lt.gpt.hdr_ba[i], 1, gpt_hdr); 937 936 if (rc != EOK) { … … 940 939 } 941 940 } 942 941 943 942 rc = EOK; 944 943 945 944 exit: 946 945 free(gpt_hdr); … … 974 973 975 974 /** Create GPT Protective MBR */ 976 static int gpt_pmbr_create( service_id_t sid, size_t bsize, uint64_t nblocks)975 static int gpt_pmbr_create(label_bd_t *bd, size_t bsize, uint64_t nblocks) 977 976 { 978 977 mbr_br_block_t *pmbr = NULL; … … 998 997 pmbr->signature = host2uint16_t_le(mbr_br_signature); 999 998 1000 rc = b lock_write_direct(sid, mbr_ba, 1, pmbr);999 rc = bd->ops->write(bd->arg, mbr_ba, 1, pmbr); 1001 1000 if (rc != EOK) { 1002 1001 rc = EIO; … … 1012 1011 1013 1012 /** Destroy GPT Protective MBR */ 1014 static int gpt_pmbr_destroy( service_id_t sid, size_t bsize)1013 static int gpt_pmbr_destroy(label_bd_t *bd, size_t bsize) 1015 1014 { 1016 1015 mbr_br_block_t *pmbr = NULL; … … 1023 1022 } 1024 1023 1025 rc = b lock_write_direct(sid, mbr_ba, 1, pmbr);1024 rc = bd->ops->write(bd->arg, mbr_ba, 1, pmbr); 1026 1025 if (rc != EOK) { 1027 1026 rc = EIO; -
uspace/lib/label/src/label.c
r63e27ef rdeacc58d 51 51 }; 52 52 53 int label_open( service_id_t sid, label_t **rlabel)53 int label_open(label_bd_t *bd, label_t **rlabel) 54 54 { 55 55 label_ops_t **ops; … … 58 58 ops = &probe_list[0]; 59 59 while (ops[0] != NULL) { 60 rc = ops[0]->open( sid, rlabel);60 rc = ops[0]->open(bd, rlabel); 61 61 if (rc == EOK) 62 62 return EOK; … … 67 67 } 68 68 69 int label_create( service_id_t sid, label_type_t ltype, label_t **rlabel)69 int label_create(label_bd_t *bd, label_type_t ltype, label_t **rlabel) 70 70 { 71 71 label_ops_t *ops = NULL; … … 85 85 return ENOTSUP; 86 86 87 return ops->create( sid, rlabel);87 return ops->create(bd, rlabel); 88 88 } 89 89 -
uspace/lib/label/src/mbr.c
r63e27ef rdeacc58d 34 34 */ 35 35 36 #include <block.h>37 36 #include <byteorder.h> 38 37 #include <errno.h> … … 43 42 #include "mbr.h" 44 43 45 static int mbr_open( service_id_t, label_t **);44 static int mbr_open(label_bd_t *, label_t **); 46 45 static int mbr_open_ext(label_t *); 47 static int mbr_create( service_id_t, label_t **);46 static int mbr_create(label_bd_t *, label_t **); 48 47 static void mbr_close(label_t *); 49 48 static int mbr_destroy(label_t *); … … 86 85 }; 87 86 88 static int mbr_open( service_id_t sid, label_t **rlabel)87 static int mbr_open(label_bd_t *bd, label_t **rlabel) 89 88 { 90 89 label_t *label = NULL; … … 97 96 int rc; 98 97 99 rc = b lock_get_bsize(sid, &bsize);100 if (rc != EOK) { 101 rc = EIO; 102 goto error; 103 } 104 105 rc = b lock_get_nblocks(sid, &nblocks);98 rc = bd->ops->get_bsize(bd->arg, &bsize); 99 if (rc != EOK) { 100 rc = EIO; 101 goto error; 102 } 103 104 rc = bd->ops->get_nblocks(bd->arg, &nblocks); 106 105 if (rc != EOK) { 107 106 rc = EIO; … … 125 124 } 126 125 127 rc = b lock_read_direct(sid, mbr_ba, 1, mbr);126 rc = bd->ops->read(bd->arg, mbr_ba, 1, mbr); 128 127 if (rc != EOK) { 129 128 rc = EIO; … … 160 159 label->ops = &mbr_label_ops; 161 160 label->ltype = lt_mbr; 162 label-> svc_id = sid;161 label->bd = *bd; 163 162 label->block_size = bsize; 164 163 label->ablock0 = mbr_ablock0; … … 219 218 while (true) { 220 219 /* Read EBR */ 221 rc = block_read_direct(label->svc_id, ebr_b0, 1, ebr);220 rc = label->bd.ops->read(label->bd.arg, ebr_b0, 1, ebr); 222 221 if (rc != EOK) { 223 222 rc = EIO; … … 280 279 } 281 280 282 static int mbr_create( service_id_t sid, label_t **rlabel)281 static int mbr_create(label_bd_t *bd, label_t **rlabel) 283 282 { 284 283 label_t *label = NULL; … … 289 288 int rc; 290 289 291 rc = b lock_get_bsize(sid, &bsize);292 if (rc != EOK) { 293 rc = EIO; 294 goto error; 295 } 296 297 rc = b lock_get_nblocks(sid, &nblocks);290 rc = bd->ops->get_bsize(bd->arg, &bsize); 291 if (rc != EOK) { 292 rc = EIO; 293 goto error; 294 } 295 296 rc = bd->ops->get_nblocks(bd->arg, &nblocks); 298 297 if (rc != EOK) { 299 298 rc = EIO; … … 321 320 mbr->signature = host2uint16_t_le(mbr_br_signature); 322 321 323 rc = b lock_write_direct(sid, mbr_ba, 1, mbr);322 rc = bd->ops->write(bd->arg, mbr_ba, 1, mbr); 324 323 if (rc != EOK) { 325 324 rc = EIO; … … 333 332 label->ltype = lt_mbr; 334 333 label->block_size = bsize; 335 label-> svc_id = sid;334 label->bd = *bd; 336 335 label->ablock0 = mbr_ablock0; 337 336 label->anblocks = nblocks - mbr_ablock0; … … 387 386 } 388 387 389 rc = block_write_direct(label->svc_id, mbr_ba, 1, mbr);388 rc = label->bd.ops->write(label->bd.arg, mbr_ba, 1, mbr); 390 389 if (rc != EOK) { 391 390 rc = EIO; … … 998 997 return ENOMEM; 999 998 1000 rc = block_read_direct(label->svc_id, mbr_ba, 1, br);999 rc = label->bd.ops->read(label->bd.arg, mbr_ba, 1, br); 1001 1000 if (rc != EOK) { 1002 1001 rc = EIO; … … 1006 1005 br->pte[index] = *pte; 1007 1006 1008 rc = block_write_direct(label->svc_id, mbr_ba, 1, br);1007 rc = label->bd.ops->write(label->bd.arg, mbr_ba, 1, br); 1009 1008 if (rc != EOK) { 1010 1009 rc = EIO; … … 1066 1065 br->signature = host2uint16_t_le(mbr_br_signature); 1067 1066 1068 rc = block_write_direct(label->svc_id, ba, 1, br);1067 rc = label->bd.ops->write(label->bd.arg, ba, 1, br); 1069 1068 if (rc != EOK) { 1070 1069 rc = EIO; … … 1091 1090 ba = part->block0 - part->hdr_blocks; 1092 1091 1093 rc = block_write_direct(label->svc_id, ba, 1, br);1092 rc = label->bd.ops->write(label->bd.arg, ba, 1, br); 1094 1093 if (rc != EOK) { 1095 1094 rc = EIO; … … 1118 1117 return ENOMEM; 1119 1118 1120 rc = block_read_direct(label->svc_id, ba, 1, br);1119 rc = label->bd.ops->read(label->bd.arg, ba, 1, br); 1121 1120 if (rc != EOK) { 1122 1121 rc = EIO; … … 1133 1132 mbr_log_part_to_ptes(part, NULL, &br->pte[mbr_ebr_pte_next]); 1134 1133 1135 rc = block_write_direct(label->svc_id, ba, 1, br);1134 rc = label->bd.ops->write(label->bd.arg, ba, 1, br); 1136 1135 if (rc != EOK) { 1137 1136 rc = EIO;
Note:
See TracChangeset
for help on using the changeset viewer.