--- 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