usr/src/cmd/boot/bootadm/bootadm.h
changeset 6448 dfd58b2129f6
parent 6423 437422a29d3a
child 6582 1ece598243e4
--- a/usr/src/cmd/boot/bootadm/bootadm.h	Mon Apr 14 20:07:05 2008 -0700
+++ b/usr/src/cmd/boot/bootadm/bootadm.h	Mon Apr 14 21:05:05 2008 -0700
@@ -32,6 +32,8 @@
 extern "C" {
 #endif
 
+#include <assert.h>
+
 #ifndef	TEXT_DOMAIN
 #define	TEXT_DOMAIN	"SUNW_OST_OSCMD"
 #endif  /* TEXT_DOMAIN */
@@ -67,7 +69,7 @@
 	line_t *start;
 	line_t *end;
 	int	entryNum;
-	uint8_t	flags;
+	uint_t	flags;
 } entry_t;
 
 /* For flags value in entry_t */
@@ -75,10 +77,13 @@
 #define	BAM_ENTRY_LU		0x02	/* entry created by Live Upgrade */
 #define	BAM_ENTRY_CHAINLOADER	0x04	/* chainloader entry; do not disturb */
 #define	BAM_ENTRY_ROOT		0x08	/* entry has a root line */
-#define	BAM_ENTRY_MINIROOT	0x10	/* entry uses the failsafe miniroot */
-#define	BAM_ENTRY_DBOOT		0x20	/* Is a dboot entry */
+#define	BAM_ENTRY_FAILSAFE	0x10	/* failsafe entry  */
+#define	BAM_ENTRY_DBOOT		0x20	/* Is dboot (normal or failsafe) */
 #define	BAM_ENTRY_32BIT		0x40	/* Is a 32-bit entry */
 #define	BAM_ENTRY_HV		0x80	/* Is a hypervisor entry */
+#define	BAM_ENTRY_FINDROOT	0x100	/* entry has a findroot line */
+#define	BAM_ENTRY_MULTIBOOT	0x200	/* is multiboot (normal or failsafe) */
+#define	BAM_ENTRY_64BIT		0x400	/* Is a 64-bit entry */
 
 typedef struct {
 	line_t	*start;
@@ -93,7 +98,7 @@
 	BAM_ERROR = -1,	/* Must be negative. add_boot_entry() depends on it */
 	BAM_SUCCESS = 0,
 	BAM_WRITE = 2,
-	BAM_SKIP	/* Used by upgrade_menu() */
+	BAM_MSG	/* Used by upgrade_menu() */
 } error_t;
 
 /*
@@ -115,7 +120,8 @@
 	SEP_CMD,
 	COMMENT_CMD,
 	CHAINLOADER_CMD,
-	ARGS_CMD
+	ARGS_CMD,
+	FINDROOT_CMD
 } menu_cmd_t;
 
 extern char *menu_cmds[];
@@ -134,23 +140,43 @@
 	BAM_HV_PRESENT
 } hv_t;
 
+/* Is there findroot capability present ? */
+typedef enum {
+	BAM_FINDROOT_UNKNOWN,
+	BAM_FINDROOT_ABSENT,
+	BAM_FINDROOT_PRESENT
+} findroot_t;
+
 extern int bam_verbose;
 extern int bam_force;
 extern direct_or_multi_t bam_direct;
 extern hv_t bam_is_hv;
+extern findroot_t bam_is_findroot;
+extern int bam_debug;
 
+extern void bam_add_line(menu_t *mp, entry_t *entry, line_t *prev, line_t *lp);
+extern void update_numbering(menu_t *mp);
 extern error_t upgrade_menu(menu_t *, char *, char *);
 extern void *s_calloc(size_t, size_t);
 extern void *s_realloc(void *, size_t);
 extern char *s_fgets(char *buf, int n, FILE *fp);
 extern void bam_error(char *format, ...);
+extern void bam_print(char *, ...);
 extern void bam_print_stderr(char *format, ...);
-extern error_t dboot_or_multiboot(const char *);
+extern void bam_derror(char *format, ...);
+extern error_t get_boot_cap(const char *osroot);
 extern char *get_special(char *);
 extern char *os_to_grubdisk(char *, int);
 extern void update_line(line_t *);
 extern int add_boot_entry(menu_t *, char *, char *, char *, char *, char *);
 extern int is_grub(const char *);
+extern char *get_grubsign(char *osroot, char *osdev);
+extern char *get_grubroot(char *osroot, char *osdev, char *menu_root);
+extern int root_optional(char *osroot, char *menu_root);
+extern void unlink_line(menu_t *mp, line_t *lp);
+extern void line_free(line_t *lp);
+extern char *s_strdup(char *);
+extern int is_sparc(void);
 
 #define	BAM_MAXLINE	8192
 
@@ -192,24 +218,56 @@
 #define	DIRECT_BOOT_KERNEL_ZFS	DIRECT_BOOT_KERNEL " " ZFS_BOOT
 #define	DIRECT_BOOT_FAILSAFE_LINE_ZFS	DIRECT_BOOT_FAILSAFE_LINE " " ZFS_BOOT
 
+/* xVM kernels */
+#define	XEN_KERNEL_SUBSTR "xen.gz"
+
 /* Boot archives */
 #define	SUN4U_ARCHIVE		"/platform/sun4u/boot_archive"
 #define	SUN4V_ARCHIVE		"/platform/sun4v/boot_archive"
 #define	DIRECT_BOOT_ARCHIVE	"/platform/i86pc/$ISADIR/boot_archive"
 #define	DIRECT_BOOT_ARCHIVE_32	"/platform/i86pc/boot_archive"
 #define	DIRECT_BOOT_ARCHIVE_64	"/platform/i86pc/amd64/boot_archive"
-#define	MULTI_BOOT_ARCHIVE	DIRECT_BOOT_ARCHIVE_32
-#define	MINIROOT	"/boot/x86.miniroot-safe"
+#define	MULTIBOOT_ARCHIVE	DIRECT_BOOT_ARCHIVE_32
+#define	FAILSAFE_ARCHIVE	"/boot/x86.miniroot-safe"
 
 /* Hypervisors */
 #define	XEN_32			"/boot/xen.gz"
 #define	XEN_64			"/boot/amd64/xen.gz"
 #define	XEN_MENU		"/boot/$ISADIR/xen.gz"
 #define	HYPERVISOR_KERNEL	"/platform/i86xpv/kernel/$ISADIR/unix"
-#define	KERNEL_MODULE_LINE	HYPERVISOR_KERNEL " " HYPERVISOR_KERNEL
-#define	KERNEL_MODULE_LINE_ZFS	\
+#define	XEN_KERNEL_MODULE_LINE	HYPERVISOR_KERNEL " " HYPERVISOR_KERNEL
+#define	XEN_KERNEL_MODULE_LINE_ZFS	\
 	HYPERVISOR_KERNEL " " HYPERVISOR_KERNEL " " ZFS_BOOT
 
+/* A first guess at the number of entries in a menu */
+#define	BAM_ENTRY_NUM		10
+
+/*
+ * Debugging defines
+ */
+#define	INJECT_ERROR1(x, y)	\
+{ \
+	if (bam_debug) { \
+		char *inj = getenv("_BOOTADM_INJECT"); \
+		if (inj && strcmp(inj, (x)) == 0) {  \
+			y;	\
+		} \
+	} \
+}
+
+#define	INJECT_ERROR2(x, y, z)	\
+{ \
+	if (bam_debug) { \
+		char *inj = getenv("_BOOTADM_INJECT"); \
+		if (inj && strcmp(inj, (x)) == 0) {  \
+			y;	\
+			z;	\
+		} \
+	} \
+}
+
+#define	BAM_DPRINTF(x)	{if (bam_debug)  bam_derror x; }
+
 #ifdef __cplusplus
 }
 #endif