blob: 6297ee2bc262d8d3d8bc62da650957962a822d0e [file] [log] [blame]
// Copyright 2018 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 <fbl/unique_fd.h>
#include <fbl/unique_ptr.h>
#include <zircon/types.h>
#include "device-partitioner.h"
namespace paver {
// List of commands supported by paver utility.
enum class Command {
kUnknown,
kInstallBootloader,
kInstallEfi,
kInstallKernc,
kInstallZirconA,
kInstallZirconB,
kInstallZirconR,
kInstallVbMetaA,
kInstallVbMetaB,
kInstallDataFile,
kInstallFvm,
kWipe,
};
// Architecture of device being paved. Used for payload validation.
enum class Arch {
X64,
ARM64,
};
struct Flags {
Command cmd = Command::kUnknown;
Arch arch = Arch::X64;
bool force = false;
fbl::unique_fd payload_fd;
char* path = nullptr;
};
// Paves an image onto the disk.
extern zx_status_t PartitionPave(fbl::unique_ptr<DevicePartitioner> partitioner,
fbl::unique_fd payload_fd, Partition partition_type, Arch arch);
// Paves |fd| to a target |data_path| within the /data partition.
zx_status_t DataFilePave(fbl::unique_ptr<DevicePartitioner> partitioner,
fbl::unique_fd payload_fd, char* data_path);
// Reads the entire file from supplied file descriptor. This is necessary due to
// implementation of streaming protocol which forces entire file to be
// transferred.
extern void Drain(fbl::unique_fd fd);
// Implements tool commands.
extern zx_status_t RealMain(Flags flags);
} // namespace paver