Lines Matching defs:partition

48 block_align(partition_data* partition, off_t offset, bool upwards)
52 uint32 blockSize = max_c(partition->block_size, 4096);
78 efi_gpt_identify_partition(int fd, partition_data* partition, void** _cookie)
81 (partition->size - 1) / partition->block_size, partition->block_size);
103 efi_gpt_scan_partition(int fd, partition_data* partition, void* _cookie)
108 partition->status = B_PARTITION_VALID;
109 partition->flags |= B_PARTITION_PARTITIONING_SYSTEM;
110 partition->content_size = partition->size;
111 partition->content_cookie = header;
123 if (entry.EndBlock() * partition->block_size
124 > (uint64)partition->size) {
125 TRACE(("efi_gpt: child partition exceeds existing space (ends at "
130 if (entry.StartBlock() * partition->block_size == 0) {
131 TRACE(("efi_gpt: child partition starts at 0 (recursive entry)\n"));
135 partition_data* child = create_child_partition(partition->id, index++,
136 partition->offset + entry.StartBlock() * partition->block_size,
137 entry.BlockCount() * partition->block_size, -1);
148 child->block_size = partition->block_size;
158 efi_gpt_free_identify_partition_cookie(partition_data* partition, void* _cookie)
165 efi_gpt_free_partition_content_cookie(partition_data* partition)
167 delete (EFI::Header*)partition->content_cookie;
173 efi_gpt_get_supported_operations(partition_data* partition, uint32 mask)
188 efi_gpt_get_supported_child_operations(partition_data* partition,
199 efi_gpt_is_sub_system_for(partition_data* partition)
201 // a GUID Partition Table doesn't usually live inside another partition
207 efi_gpt_validate_resize(partition_data* partition, off_t* size)
210 if (newSize == partition->size)
216 newSize = block_align(partition, newSize, false);
219 if (newSize > partition->size) {
225 off_t newEnd = partition->offset + newSize;
226 for (int32 i = 0; i < partition->child_count; i++) {
227 partition_data* child = get_child_partition(partition->id, i);
235 newSize = block_align(partition, newEnd - partition->offset, true);
242 efi_gpt_validate_resize_child(partition_data* partition, partition_data* child,
254 *size = block_align(partition, newSize, false);
260 if (child->offset + newSize > partition->offset + partition->size)
261 newSize = partition->offset + partition->size - child->offset;
265 for (int32 i = 0; i < partition->child_count; i++) {
266 partition_data* other = get_child_partition(partition->id, i);
275 *size = block_align(partition, newEnd - child->offset, false);
281 efi_gpt_validate_move(partition_data* partition, off_t* start)
289 efi_gpt_validate_move_child(partition_data* partition, partition_data* child,
296 if (newStart + child->size > partition->size)
297 newStart = partition->size - child->size;
299 newStart = block_align(partition, newStart, false);
301 for (int32 i = 0; i < partition->child_count; i++) {
302 partition_data* other = get_child_partition(partition->id, i);
311 newStart = block_align(partition, newStart, false);
313 for (int32 i = 0; i < partition->child_count; i++) {
314 partition_data* other = get_child_partition(partition->id, i);
323 newStart = block_align(partition, newStart, true);
332 efi_gpt_validate_set_name(partition_data* partition, char* name)
343 efi_gpt_validate_set_type(partition_data* partition, const char* type)
351 efi_gpt_validate_initialize(partition_data* partition, char* name,
354 if ((efi_gpt_get_supported_operations(partition, ~0)
367 efi_gpt_validate_create_child(partition_data* partition, off_t* start,
371 if ((efi_gpt_get_supported_operations(partition, ~0)
375 if (!efi_gpt_validate_set_type(partition, type))
378 EFI::Header* header = (EFI::Header*)partition->content_cookie;
394 off_t firstUsable = header->FirstUsableBlock() * partition->block_size;
398 off_t lastUsable = header->LastUsableBlock() * partition->block_size;
407 for (int32 i = 0; i < partition->child_count; i++) {
408 partition_data* other = get_child_partition(partition->id, i);
419 *start = block_align(partition, *start, true);
420 *size = block_align(partition, *size, false);
428 efi_gpt_get_partitionable_spaces(partition_data* partition,
437 efi_gpt_get_next_supported_type(partition_data* partition, int32* cookie,
446 efi_gpt_shadow_changed(partition_data* partition, partition_data* child,
455 efi_gpt_repair(int fd, partition_id partition, bool checkOnly, disk_job_id job)
472 partition_data* partition = get_partition(partitionID);
473 if (partition == NULL)
477 if (!efi_gpt_validate_resize(partition, &validatedSize))
482 partition->size = validatedSize;
483 partition->content_size = validatedSize;
506 partition_data* partition = get_parent_partition(partitionID);
507 if (partition == NULL)
510 EFI::Header* header = (EFI::Header*)partition->content_cookie;
519 if (!efi_gpt_validate_resize_child(partition, child, &validatedSize))
528 entry.SetBlockCount(validatedSize / partition->block_size);
532 entry.SetBlockCount(child->size / partition->block_size);
545 efi_gpt_move(int fd, partition_id partition, off_t offset, disk_job_id job)
563 partition_data* partition = get_partition(partitionID);
564 if (partition == NULL)
571 EFI::Header* header = (EFI::Header*)partition->content_cookie;
580 if (!efi_gpt_validate_move_child(partition, child, &validatedOffset))
586 // TODO: implement actual moving, need to move the partition content
594 entry.SetStartBlock((validatedOffset - partition->offset)
595 / partition->block_size);
600 // fatal error: the data has been moved but the partition table could
628 partition_data* partition = get_parent_partition(partitionID);
629 if (partition == NULL)
632 EFI::Header* header = (EFI::Header*)partition->content_cookie;
674 partition_data* partition = get_parent_partition(partitionID);
675 if (partition == NULL)
678 EFI::Header* header = (EFI::Header*)partition->content_cookie;
714 partition_data* partition = get_partition(partitionID);
715 if (partition == NULL)
720 EFI::Header header((partitionSize - 1) / partition->block_size,
721 partition->block_size);
747 partition_data* partition = get_partition(partitionID);
748 if (partition == NULL)
753 const int headerSize = partition->block_size * 3;
756 // The third block is the start of the partition list (it can span more
768 if (write_pos(fd, partitionSize - 2 * partition->block_size,
769 &buffer, 2 * partition->block_size) < 0) {
791 partition_data* partition = get_partition(partitionID);
792 if (partition == NULL)
795 EFI::Header* header = (EFI::Header*)partition->content_cookie;
803 if (!efi_gpt_validate_create_child(partition, &validatedOffset,
813 partition_data* child = create_child_partition(partition->id, entryIndex,
824 entry.SetStartBlock((validatedOffset - partition->offset)
825 / partition->block_size);
826 entry.SetBlockCount(validatedSize / partition->block_size);
836 child->block_size = partition->block_size;
864 partition_data* partition = get_partition(partitionID);
865 if (partition == NULL)
872 EFI::Header* header = (EFI::Header*)partition->content_cookie;
954 // shadow partition modification