| /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef VBOOT_REFERENCE_CGPT_INTERNAL_H_ |
| #define VBOOT_REFERENCE_CGPT_INTERNAL_H_ |
| |
| #include <stdint.h> |
| #include "cgpt.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); |
| uint32_t CheckValidEntries(GptData *gpt); |
| int OverlappedEntries(GptEntry *entries, uint32_t number_of_entries); |
| uint32_t CheckOverlappedPartition(GptData *gpt); |
| uint8_t RepairEntries(GptData *gpt, const uint32_t valid_entries); |
| uint8_t RepairHeader(GptData *gpt, const uint32_t valid_headers); |
| typedef struct { |
| uint64_t starting; |
| uint64_t ending; |
| } pair_t; |
| |
| 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 SetSuccess(GptData *gpt, int secondary, int entry_index, int success); |
| int GetSuccess(GptData *gpt, int secondary, int entry_index); |
| |
| /* If gpt->current_kernel is this value, means either: |
| * 1. an initial value before scanning GPT entries, |
| * 2. after scanning, no any valid kernel is found. |
| */ |
| #define CGPT_KERNEL_ENTRY_NOT_FOUND (-1) |
| |
| /* Bit definitions and masks for GPT attributes. |
| * |
| * 63 -- do not automounting |
| * 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_SUCCESS_OFFSET 56 |
| #define CGPT_ATTRIBUTE_MAX_SUCCESS (1ULL) |
| #define CGPT_ATTRIBUTE_SUCCESS_MASK (CGPT_ATTRIBUTE_MAX_SUCCESS << \ |
| CGPT_ATTRIBUTE_SUCCESS_OFFSET) |
| |
| #define CGPT_ATTRIBUTE_TRIES_OFFSET 52 |
| #define CGPT_ATTRIBUTE_MAX_TRIES (15ULL) |
| #define CGPT_ATTRIBUTE_TRIES_MASK (CGPT_ATTRIBUTE_MAX_TRIES << \ |
| CGPT_ATTRIBUTE_TRIES_OFFSET) |
| |
| #define CGPT_ATTRIBUTE_PRIORITY_OFFSET 48 |
| #define CGPT_ATTRIBUTE_MAX_PRIORITY (15ULL) |
| #define CGPT_ATTRIBUTE_PRIORITY_MASK (CGPT_ATTRIBUTE_MAX_PRIORITY << \ |
| CGPT_ATTRIBUTE_PRIORITY_OFFSET) |
| |
| #endif /* VBOOT_REFERENCE_CGPT_INTERNAL_H_ */ |