1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2017 Intel Corporation. 3 * All rights reserved. 4 */ 5 6 /** \file 7 * GPT internal Interface 8 */ 9 10 #ifndef SPDK_INTERNAL_GPT_H 11 #define SPDK_INTERNAL_GPT_H 12 13 #include "spdk/stdinc.h" 14 15 #include "spdk/gpt_spec.h" 16 #include "spdk/log.h" 17 18 #define SPDK_GPT_PART_TYPE_GUID SPDK_GPT_GUID(0x6527994e, 0x2c5a, 0x4eec, 0x9613, 0x8f5944074e8b) 19 20 /* PART_TYPE_GUID_OLD partitions will be constructed as bdevs with one fewer block than expected. 21 * See GitHub issue #2801. 22 */ 23 #ifdef REGISTER_GUID_DEPRECATION 24 /* Register the deprecation in the header file, to make it clear to readers that this GUID 25 * shouldn't be used for new SPDK GPT partitions. We will never actually log this deprecation 26 * though, since we are not recommending that users try to migrate existing partitions with the 27 * old GUID to the new GUID. Wrap it in this REGISTER_GUID_DEPRECATION flag to avoid defining 28 * this deprecation in multiple compilation units. 29 */ 30 SPDK_LOG_DEPRECATION_REGISTER(old_gpt_guid, "old gpt guid", "Never", 0) 31 #endif 32 #define SPDK_GPT_PART_TYPE_GUID_OLD SPDK_GPT_GUID(0x7c5222bd, 0x8f5d, 0x4087, 0x9c00, 0xbf9843c7b58c) 33 34 #define SPDK_GPT_BUFFER_SIZE 32768 /* 32KB */ 35 #define SPDK_GPT_GUID_EQUAL(x,y) (memcmp(x, y, sizeof(struct spdk_gpt_guid)) == 0) 36 37 enum spdk_gpt_parse_phase { 38 SPDK_GPT_PARSE_PHASE_INVALID = 0, 39 SPDK_GPT_PARSE_PHASE_PRIMARY, 40 SPDK_GPT_PARSE_PHASE_SECONDARY, 41 }; 42 43 struct spdk_gpt { 44 uint8_t parse_phase; 45 unsigned char *buf; 46 uint64_t buf_size; 47 uint64_t lba_start; 48 uint64_t lba_end; 49 uint64_t total_sectors; 50 uint32_t sector_size; 51 struct spdk_gpt_header *header; 52 struct spdk_gpt_partition_entry *partitions; 53 }; 54 55 int gpt_parse_mbr(struct spdk_gpt *gpt); 56 int gpt_parse_partition_table(struct spdk_gpt *gpt); 57 58 #endif /* SPDK_INTERNAL_GPT_H */ 59