Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Unified Diff: src/platform/vboot_reference/vboot_firmware/lib/cgptlib/include/cgptlib_internal.h

Issue 2438005: Much rearranging of cgptlib. Passes all its (new) unit tests. (Closed) Base URL: ssh://gitrw.chromium.org/chromiumos
Patch Set: Pre commit Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/platform/vboot_reference/vboot_firmware/lib/cgptlib/include/cgptlib_internal.h
diff --git a/src/platform/vboot_reference/vboot_firmware/lib/cgptlib/include/cgptlib_internal.h b/src/platform/vboot_reference/vboot_firmware/lib/cgptlib/include/cgptlib_internal.h
index b4b63c535de930e29618f803e7ecdb4a5d072af3..195f4d6c33891a6b31541996687d0c11159c593a 100644
--- a/src/platform/vboot_reference/vboot_firmware/lib/cgptlib/include/cgptlib_internal.h
+++ b/src/platform/vboot_reference/vboot_firmware/lib/cgptlib/include/cgptlib_internal.h
@@ -8,46 +8,7 @@
#include <stdint.h>
#include "cgptlib.h"
-
-int CheckParameters(GptData *gpt);
-uint32_t CheckHeaderSignature(GptData *gpt);
-uint32_t CheckRevision(GptData *gpt);
-uint32_t CheckSize(GptData *gpt);
-uint32_t CheckReservedFields(GptData *gpt);
-uint32_t CheckMyLba(GptData *gpt);
-uint32_t CheckSizeOfPartitionEntry(GptData *gpt);
-uint32_t CheckNumberOfEntries(GptData *gpt);
-uint32_t CheckEntriesLba(GptData *gpt);
-uint32_t CheckValidUsableLbas(GptData *gpt);
-uint32_t CheckHeaderCrc(GptData *gpt);
-uint32_t CheckEntriesCrc(GptData *gpt);
-int NonZeroGuid(const Guid *guid);
-uint32_t CheckValidEntries(GptData *gpt);
-typedef struct {
- uint64_t starting;
- uint64_t ending;
-} pair_t;
-int OverlappedEntries(GptEntry *entries, uint32_t number_of_entries);
-uint32_t CheckOverlappedPartition(GptData *gpt);
-int IsSynonymous(const GptHeader* a, const GptHeader* b);
-uint8_t RepairEntries(GptData *gpt, const uint32_t valid_entries);
-uint8_t RepairHeader(GptData *gpt, const uint32_t valid_headers);
-void UpdateCrc(GptData *gpt);
-int GptSanityCheck(GptData *gpt);
-void GptRepair(GptData *gpt);
-
-GptEntry *GetEntry(GptData *gpt, int secondary, int entry_index);
-void SetPriority(GptData *gpt, int secondary, int entry_index, int priority);
-int GetPriority(GptData *gpt, int secondary, int entry_index);
-void SetBad(GptData *gpt, int secondary, int entry_index, int bad);
-int GetBad(GptData *gpt, int secondary, int entry_index);
-void SetTries(GptData *gpt, int secondary, int entry_index, int tries);
-int GetTries(GptData *gpt, int secondary, int entry_index);
-void SetSuccessful(GptData *gpt, int secondary, int entry_index, int success);
-int GetSuccessful(GptData *gpt, int secondary, int entry_index);
-
-/* Get number of entries value in primary header */
-uint32_t GetNumberOfEntries(const GptData *gpt);
+#include "gpt.h"
/* If gpt->current_kernel is this value, means either:
* 1. an initial value before scanning GPT entries,
@@ -61,17 +22,11 @@ uint32_t GetNumberOfEntries(const GptData *gpt);
* 62 -- hidden
* 60 -- read-only
* :
- * 57 -- bad kernel entry
* 56 -- success
* 55,52 -- tries
* 51,48 -- priority
* 0 -- system partition
*/
-#define CGPT_ATTRIBUTE_BAD_OFFSET 57
-#define CGPT_ATTRIBUTE_MAX_BAD (1ULL)
-#define CGPT_ATTRIBUTE_BAD_MASK (CGPT_ATTRIBUTE_MAX_BAD << \
- CGPT_ATTRIBUTE_BAD_OFFSET)
-
#define CGPT_ATTRIBUTE_SUCCESSFUL_OFFSET 56
#define CGPT_ATTRIBUTE_MAX_SUCCESSFUL (1ULL)
#define CGPT_ATTRIBUTE_SUCCESSFUL_MASK (CGPT_ATTRIBUTE_MAX_SUCCESSFUL << \
@@ -87,4 +42,75 @@ uint32_t GetNumberOfEntries(const GptData *gpt);
#define CGPT_ATTRIBUTE_PRIORITY_MASK (CGPT_ATTRIBUTE_MAX_PRIORITY << \
CGPT_ATTRIBUTE_PRIORITY_OFFSET)
+/* Defines ChromeOS-specific limitation on GPT */
+/* TODO: Move these to cgptlib_internal.h */
+#define MIN_SIZE_OF_HEADER 92
+#define MAX_SIZE_OF_HEADER 512
+#define MIN_SIZE_OF_ENTRY 128
+#define MAX_SIZE_OF_ENTRY 512
+#define SIZE_OF_ENTRY_MULTIPLE 8
+#define MIN_NUMBER_OF_ENTRIES 32
+#define MAX_NUMBER_OF_ENTRIES 512
+#define TOTAL_ENTRIES_SIZE 16384 /* usual case is 128 bytes * 128 entries */
+
+/* Defines GPT sizes */
+#define GPT_PMBR_SECTOR 1 /* size (in sectors) of PMBR */
+#define GPT_HEADER_SECTOR 1
+#define GPT_ENTRIES_SECTORS 32 /* assume sector size if 512 bytes, then
+ * (TOTAL_ENTRIES_SIZE / 512) = 32 */
+
+/* alias name of index in internal array for primary and secondary header and
+ * entries. */
+enum {
+ PRIMARY = 0,
+ SECONDARY = 1,
+ MASK_NONE = 0,
+ MASK_PRIMARY = 1,
+ MASK_SECONDARY = 2,
+ MASK_BOTH = 3,
+};
+
+/* Verify GptData parameters are sane. */
+int CheckParameters(GptData* gpt);
+
+/* Check header fields.
+ *
+ * Returns 0 if header is valid, 1 if invalid. */
+int CheckHeader(GptHeader* h, int is_secondary, uint64_t drive_sectors);
+
+/* Calculate and return the header CRC. */
+uint32_t HeaderCrc(GptHeader* h);
+
+/* Check entries.
+ *
+ * Returns 0 if entries are valid, 1 if invalid. */
+int CheckEntries(GptEntry* entries, GptHeader* h, uint64_t drive_sectors);
+
+/* Check GptData, headers, entries.
+ *
+ * If successful, sets gpt->valid_headers and gpt->valid_entries and returns
+ * GPT_SUCCESS.
+ *
+ * On error, returns a GPT_ERROR_* return code. */
+int GptSanityCheck(GptData* gpt);
+
+/* Repairs GPT data by copying from one set of valid headers/entries to the
+ * other. Assumes GptSanityCheck() has been run to determine which headers
+ * and/or entries are already valid. */
+void GptRepair(GptData* gpt);
+
+/* Getters and setters for partition attribute fields. */
+int GetEntrySuccessful(const GptEntry* e);
+int GetEntryPriority(const GptEntry* e);
+int GetEntryTries(const GptEntry* e);
+void SetEntrySuccessful(GptEntry* e, int successful);
+void SetEntryPriority(GptEntry* e, int priority);
+void SetEntryTries(GptEntry* e, int tries);
+
+/* Return 1 if the entry is unused, 0 if it is used. */
+int IsUnusedEntry(const GptEntry* e);
+
+/* Returns 1 if the entry is a Chrome OS kernel partition, else 0. */
+int IsKernelEntry(const GptEntry* e);
+
#endif /* VBOOT_REFERENCE_CGPTLIB_INTERNAL_H_ */

Powered by Google App Engine
This is Rietveld 408576698