blob: 2bf633c33a08ada76f8bcfc4f34197f6d30b1992 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <fuchsia/hardware/block/c/fidl.h>
#include <gpt/gpt.h>
#include <zircon/device/block.h>
#include <zircon/types.h>
// Recommended default size of the Zircon kernel partition
#define SZ_ZX_PART (64 * ((uint64_t)1) << 20)
// Recommended default size of the root partition
#define SZ_ROOT_PART (4 * ((uint64_t)1) << 30)
// Recommended minimum size of the ChromeOS state partition
#define MIN_SZ_STATE (5 * ((uint64_t)1) << 30)
__BEGIN_CDECLS
// determine if this looks like a ChromeOS partition layout
bool is_cros(const gpt::GptDevice* gpt);
// We define that we're ready to pave if
// - ZIRCON-A, ZIRCON-B, and ZIRCON-R are present and at least sz_kern bytes
// - An FVM a partition is present
bool is_ready_to_pave(const gpt::GptDevice* gpt, const fuchsia_hardware_block_BlockInfo* block_info,
const uint64_t sz_kern);
// Configure the GPT for a dual-boot of Fuchsia and ChromeOS.
//
// Partitions ZIRCON-A, ZIRCON-B, ZIRCON-R, and FVM will be created.
//
// If space is required to create the above partitions, KERN-C and ROOT-C may be
// deleted, and STATE may be resized.
//
// Returns ZX_OK if reconfiguration succeeds and then the GPT should be
// persisted. Returns ZX_ERR_BAD_STATE if the partition table can't be
// reconfigured. In the case of error, the GPT should NOT be written back to
// disk and should be discarded.
zx_status_t config_cros_for_fuchsia(gpt::GptDevice* gpt,
const fuchsia_hardware_block_BlockInfo* blk_info,
const uint64_t sz_kern);
__END_CDECLS