Lines Matching refs:disk
63 static rt_size_t last_lba(struct rt_blk_disk *disk) in last_lba() argument
65 return rt_blk_disk_get_capacity(disk) - 1ULL; in last_lba()
171 static rt_size_t read_lba(struct rt_blk_disk *disk, in read_lba() argument
176 if (!buffer || lba > last_lba(disk)) in read_lba()
185 disk->ops->read(disk, n, buffer, 1); in read_lba()
207 static gpt_entry *alloc_read_gpt_entries(struct rt_blk_disk *disk, in alloc_read_gpt_entries() argument
236 if (read_lba(disk, entry_lba, (rt_uint8_t *)pte, count) < count) in alloc_read_gpt_entries()
255 static gpt_header *alloc_read_gpt_header(struct rt_blk_disk *disk, rt_uint64_t lba) in alloc_read_gpt_header() argument
258 rt_uint32_t ssz = rt_blk_disk_get_logical_block_size(disk); in alloc_read_gpt_header()
267 if (read_lba(disk, lba, (rt_uint8_t *)gpt, ssz) < ssz) in alloc_read_gpt_header()
289 static rt_bool_t is_gpt_valid(struct rt_blk_disk *disk, in is_gpt_valid() argument
301 if (!(*gpt = alloc_read_gpt_header(disk, lba))) in is_gpt_valid()
310 to_disk_name(disk), in is_gpt_valid()
318 logical_block_size = rt_blk_disk_get_logical_block_size(disk); in is_gpt_valid()
323 to_disk_name(disk), in is_gpt_valid()
334 to_disk_name(disk), in is_gpt_valid()
349 to_disk_name(disk), crc, origcrc); in is_gpt_valid()
363 to_disk_name(disk), in is_gpt_valid()
371 lastlba = last_lba(disk); in is_gpt_valid()
376 to_disk_name(disk), in is_gpt_valid()
386 to_disk_name(disk), in is_gpt_valid()
395 to_disk_name(disk), in is_gpt_valid()
405 LOG_D("%s: GUID Partition Entry Size check failed", to_disk_name(disk)); in is_gpt_valid()
414 if (!(*ptes = alloc_read_gpt_entries(disk, *gpt))) in is_gpt_valid()
424 LOG_D("%s: GUID Partition Entry Array CRC check failed", to_disk_name(disk)); in is_gpt_valid()
470 static void compare_gpts(struct rt_blk_disk *disk, in compare_gpts() argument
483 to_disk_name(disk), in compare_gpts()
493 to_disk_name(disk), in compare_gpts()
503 to_disk_name(disk), in compare_gpts()
513 to_disk_name(disk), in compare_gpts()
522 LOG_W("%s: GPT:disk_guids don't match", to_disk_name(disk)); in compare_gpts()
531 to_disk_name(disk), in compare_gpts()
542 to_disk_name(disk), in compare_gpts()
553 to_disk_name(disk), in compare_gpts()
563 to_disk_name(disk), in compare_gpts()
573 to_disk_name(disk), in compare_gpts()
602 static rt_bool_t find_valid_gpt(struct rt_blk_disk *disk, in find_valid_gpt() argument
609 rt_size_t total_sectors = rt_blk_disk_get_capacity(disk); in find_valid_gpt()
617 lastlba = last_lba(disk); in find_valid_gpt()
629 read_lba(disk, 0, (rt_uint8_t *)legacymbr, sizeof(*legacymbr)); in find_valid_gpt()
638 LOG_D("%s: Device has a %s MBR", to_disk_name(disk), in find_valid_gpt()
642 good_pgpt = is_gpt_valid(disk, GPT_PRIMARY_PARTITION_TABLE_LBA, &pgpt, &pptes); in find_valid_gpt()
646 good_agpt = is_gpt_valid(disk, rt_le64_to_cpu(pgpt->alternate_lba), &agpt, &aptes); in find_valid_gpt()
651 good_agpt = is_gpt_valid(disk, lastlba, &agpt, &aptes); in find_valid_gpt()
660 compare_gpts(disk, pgpt, agpt, lastlba); in find_valid_gpt()
672 LOG_D("%s: Alternate GPT is invalid, using primary GPT", to_disk_name(disk)); in find_valid_gpt()
684 LOG_D("%s: Primary GPT is invalid, using alternate GPT", to_disk_name(disk)); in find_valid_gpt()
701 rt_err_t efi_partition(struct rt_blk_disk *disk) in efi_partition() argument
707 if (!find_valid_gpt(disk, &gpt, &ptes) || !gpt || !ptes) in efi_partition()
717 for (int i = 0; i < entries_nr && i < disk->max_partitions; ++i) in efi_partition()
723 if (!is_pte_valid(&ptes[i], last_lba(disk))) in efi_partition()
728 if (blk_put_partition(disk, "gpt", start, size, i) == -RT_ENOMEM) in efi_partition()