/* Copyright (c) 2013 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_CGPT_PARAMS_H_
#define VBOOT_REFERENCE_CGPT_CGPT_PARAMS_H_

#include <stdint.h>

#include "gpt.h"

#ifdef __cplusplus
extern "C" {
#endif  /* __cplusplus */

enum {
	CGPT_OK = 0,
	CGPT_FAILED,
};

typedef struct CgptCreateParams {
	const char *drive_name;
	uint64_t drive_size;
	int zap;
	uint64_t padding;
} CgptCreateParams;

typedef struct CgptAddParams {
	const char *drive_name;
	uint64_t drive_size;
	uint32_t partition;
	uint64_t begin;
	uint64_t size;
	Guid type_guid;
	Guid unique_guid;
	const char *label;
	int successful;
	int tries;
	int priority;
	int required;
	int legacy_boot;
	uint32_t raw_value;
	int set_begin;
	int set_size;
	int set_type;
	int set_unique;
	int set_successful;
	int set_tries;
	int set_priority;
	int set_required;
	int set_legacy_boot;
	int set_raw;
} CgptAddParams;

typedef struct CgptEditParams {
	const char *drive_name;
	uint64_t drive_size;
	Guid unique_guid;
	int set_unique;
} CgptEditParams;

typedef struct CgptShowParams {
	const char *drive_name;
	uint64_t drive_size;
	int numeric;
	int verbose;
	int quick;
	uint32_t partition;
	int single_item;
	int debug;
	int num_partitions;
} CgptShowParams;

typedef struct CgptRepairParams {
	const char *drive_name;
	uint64_t drive_size;
	int verbose;
} CgptRepairParams;

typedef struct CgptBootParams {
	const char *drive_name;
	uint64_t drive_size;
	uint32_t partition;
	const char *bootfile;
	int create_pmbr;
} CgptBootParams;

typedef struct CgptPrioritizeParams {
	const char *drive_name;
	uint64_t drive_size;
	uint32_t set_partition;
	int set_friends;
	int max_priority;
	int orig_priority;
} CgptPrioritizeParams;

struct CgptFindParams;
typedef void (*CgptFindShowFn)(struct CgptFindParams *params,
			       const char *filename, int partnum,
			       GptEntry *entry);
typedef struct CgptFindParams {
	const char *drive_name;
	uint64_t drive_size;
	int verbose;
	int set_unique;
	int set_type;
	int set_label;
	int oneonly;
	int numeric;
	uint8_t *matchbuf;
	uint64_t matchlen;
	uint64_t matchoffset;
	uint8_t *comparebuf;
	Guid unique_guid;
	Guid type_guid;
	const char *label;
	int hits;
	int match_partnum;           /* 1-based; 0 means no match */
	/* when working with MTD, we actually work on a temp file, but we still
	 * need to print the device name. so this parameter is here to properly
	 * show the correct device name in that special case. */
	CgptFindShowFn show_fn;
} CgptFindParams;

enum {
	CGPT_LEGACY_MODE_LEGACY = 0,
	CGPT_LEGACY_MODE_EFIPART,
	CGPT_LEGACY_MODE_IGNORE_PRIMARY,
};

typedef struct CgptLegacyParams {
	const char *drive_name;
	uint64_t drive_size;
	int mode;
} CgptLegacyParams;

#ifdef __cplusplus
}
#endif  /* __cplusplus */

#endif  /* VBOOT_REFERENCE_CGPT_CGPT_PARAMS_H_ */
