/*
 * s390-tools/zipl/include/zipl.h
 *   zSeries Initial Program Loader tool.
 *
 * Copyright IBM Corp. 2001, 2017
 *
 * s390-tools is free software; you can redistribute it and/or modify
 * it under the terms of the MIT license. See LICENSE for details.
 *
 */

#ifndef ZIPL_H
#define ZIPL_H

#include <stdint.h>
#include "lib/zt_common.h"
#include "lib/util_base.h"
#include "boot/loaders_layout.h"

#define ADDRESS_LIMIT			0x80000000UL
#define UNSPECIFIED_ADDRESS		-1UL
#define LEGACY_MAXIMUM_PARMLINE_SIZE	0x380UL
#define MAXIMUM_PARMLINE_SIZE		0x10000UL
#define MAXIMUM_PHYSICAL_BLOCKSIZE	0x1000UL

#define BOOTMAP_FILENAME		"bootmap"
#define BOOTMAP_TEMPLATE_FILENAME	"bootmap_temp.XXXXXX"
#define DUMP_TEMP_MOUNT_POINT_DIR	"/tmp"
#define DUMP_TEMP_MOUNT_POINT_NAME	"zipl-dump-mount-point-XXXXXX"
#define DUMP_META_FILE_NAME		"ngdump.meta"

#define DEFAULTBOOT_SECTION		"defaultboot"

#define ZIPL_CONF_VAR			"ZIPLCONF"
#define ZIPL_RUNTIME_CONF		"/run/zipl/zipl.conf"
#define ZIPL_DEFAULT_CONF		TOOLS_SYSCONFDIR "/zipl.conf"
#define ZIPL_MINIMAL_CONF		TOOLS_LIBDIR "/zipl.conf"
#define ZIPL_DEFAULT_BLSDIR		"/boot/loader/entries"
#define ZIPL_STAGE3_PATH		util_libdir_path("stage3.bin")
#define ZIPL_SIPL_PATH			"/sys/firmware/ipl/has_secure"

#define MENU_DEFAULT_PROMPT		0
#define MENU_DEFAULT_TIMEOUT		0

#define MAX_DUMP_VOLUMES		32
#define MAX_TARGETS			32
#define FIRST_MIRROR_ID                 0

#define SECURE_BOOT_UNDEFINED	       -1
#define SECURE_BOOT_DISABLED		0
#define SECURE_BOOT_ENABLED		1
#define SECURE_BOOT_AUTO		2

/* Internal component load address type */
typedef uint64_t address_t;

/* Type for address calculations */
#define VOID_ADD(ptr, offset)	((void *) (((unsigned long) ptr) + \
				((unsigned long) offset)))

/* Call a function depending on the value of dry_run and return either the
 * resulting return code or 0. */
#define	DRY_RUN_FUNC(x)	(dry_run ? 0 : (x))

extern int verbose;
extern int interactive;
extern int dry_run;

/* Verbosity levels/classes */
#define VERBOSITY_STANDARD 0
#define VERBOSITY_EXTENDED 1
#define VERBOSITY_DEBUG    2

/*
 * Macro for messages with assigned verbosity classes
 *
 * NOTE: Verbosity levels/classes 3 and higher are "reserved". To implement
 * them, make "--debug" zipl option accept arguments.
 */
#define pr_class(class_id, ...)		\
do {					\
	if (verbose >= (class_id))	\
		printf(__VA_ARGS__);	\
} while (0)

#define pr_verbose(...) pr_class(VERBOSITY_EXTENDED, __VA_ARGS__)
#define pr_debug(...)   pr_class(VERBOSITY_DEBUG, __VA_ARGS__)

#endif /* not ZIPL_H */
