--- old/usr/src/cmd/eeprom/i386/benv.c	2012-07-27 03:18:24.032552407 +0400
+++ new/usr/src/cmd/eeprom/i386/benv.c	2012-07-27 03:18:22.577581328 +0400
@@ -300,18 +300,18 @@
 	}
 }
 
-#define	BOOTADM_STR	"bootadm: "
+#define	GRUBADM_STR	"grubadm: "
 
 /*
- * bootadm starts all error messages with "bootadm: ".
- * Add a note so users don't get confused on how they ran bootadm.
+ * grubadm starts all error messages with "grubadm: ".
+ * Add a note so users don't get confused on how they ran grubadm.
  */
 static void
 output_error_msg(const char *msg)
 {
-	size_t len = sizeof (BOOTADM_STR) - 1;
+	size_t len = sizeof (GRUBADM_STR) - 1;
 
-	if (strncmp(msg, BOOTADM_STR, len) == 0) {
+	if (strncmp(msg, GRUBADM_STR, len) == 0) {
 		eeprom_error("error returned from %s\n", msg);
 	} else if (msg[0] != '\0') {
 		eeprom_error("%s\n", msg);
@@ -319,7 +319,7 @@
 }
 
 static char *
-get_bootadm_value(char *name, const int quiet)
+get_grubadm_value(char *name, const int quiet)
 {
 	char *ptr, *ret_str, *end_ptr, *orig_ptr;
 	char output[BUFSIZ];
@@ -330,11 +330,11 @@
 
 	if (strcmp(name, "boot-file") == 0) {
 		is_kernel = 1;
-		ptr = "/sbin/bootadm set-menu kernel 2>&1";
+		ptr = "/sbin/grubadm --number -1 --get-kernel 2>&1";
 	} else if (is_console || (strcmp(name, "boot-args") == 0)) {
-		ptr = "/sbin/bootadm set-menu args 2>&1";
+		ptr = "/sbin/grubadm --number -1 --get-opts 2>&1";
 	} else {
-		eeprom_error("Unknown value in get_bootadm_value: %s\n", name);
+		eeprom_error("Unknown value in get_grubadm_value: %s\n", name);
 		return (NULL);
 	}
 
@@ -417,10 +417,10 @@
  * a message.  Return 1 if the value is printed, 0 otherwise.
  */
 static int
-print_bootadm_value(char *name, const int quiet)
+print_grubadm_value(char *name, const int quiet)
 {
 	int rv = 0;
-	char *value = get_bootadm_value(name, quiet);
+	char *value = get_grubadm_value(name, quiet);
 
 	if ((value != NULL) && (value[0] != '\0')) {
 		(void) printf("%s=%s\n", name, value);
@@ -445,7 +445,7 @@
 	 * menu.lst value takes precedence.
 	 */
 	if (strcmp(name, "console") == 0) {
-		if (print_bootadm_value(name, 1) == 0) {
+		if (print_grubadm_value(name, 1) == 0) {
 			if ((p = get_var(name, list)) != NULL) {
 				(void) printf("%s=%s\n", name, p->val ?
 				    p->val : "");
@@ -459,7 +459,7 @@
 		(void) printf("%s=%s\n", name, bootcmd ? bootcmd : "");
 	} else if ((strcmp(name, "boot-file") == 0) ||
 	    (strcmp(name, "boot-args") == 0)) {
-		(void) print_bootadm_value(name, 0);
+		(void) print_grubadm_value(name, 0);
 	} else if ((p = get_var(name, list)) == NULL) {
 		(void) printf("%s: data not available.\n", name);
 	} else {
@@ -479,7 +479,7 @@
 	 * The menu.lst value takes precedence, so try printing that one
 	 * first.
 	 */
-	console_printed = print_bootadm_value("console", 1);
+	console_printed = print_grubadm_value("console", 1);
 
 	for (e = list->next; e != list; e = e->next) {
 		p = (benv_ent_t *)e->item;
@@ -494,8 +494,8 @@
 			(void) printf("%s=%s\n", p->name, p->val ? p->val : "");
 		}
 	}
-	(void) print_bootadm_value("boot-file", 1);
-	(void) print_bootadm_value("boot-args", 1);
+	(void) print_grubadm_value("boot-file", 1);
+	(void) print_grubadm_value("boot-args", 1);
 }
 
 /*
@@ -523,7 +523,7 @@
 }
 
 static void
-set_bootadm_var(char *name, char *value)
+set_grubadm_var(char *name, char *value)
 {
 	char buf[BUFSIZ];
 	char output[BUFSIZ] = "";
@@ -532,7 +532,7 @@
 
 	if (verbose) {
 		(void) printf("old:");
-		(void) print_bootadm_value(name, 0);
+		(void) print_grubadm_value(name, 0);
 	}
 
 	/*
@@ -547,38 +547,38 @@
 
 	is_console = (strcmp(name, "console") == 0);
 	if (strcmp(name, "boot-file") == 0) {
-		(void) snprintf(buf, BUFSIZ, "/sbin/bootadm set-menu "
-		    "kernel='%s' 2>&1", value);
+		(void) snprintf(buf, BUFSIZ, "/sbin/grubadm --number -1 "
+		    "--set-kernel '%s' 2>&1", value);
 	} else if (is_console || (strcmp(name, "boot-args") == 0)) {
 		if (is_console) {
-			args = get_bootadm_value("boot-args", 1);
+			args = get_grubadm_value("boot-args", 1);
 			console = value;
 		} else {
 			args = value;
-			console = get_bootadm_value("console", 1);
+			console = get_grubadm_value("console", 1);
 		}
 		if (((args == NULL) || (args[0] == '\0')) &&
 		    ((console == NULL) || (console[0] == '\0'))) {
-			(void) snprintf(buf, BUFSIZ, "/sbin/bootadm set-menu "
-			    "args= 2>&1");
+			(void) snprintf(buf, BUFSIZ, "/sbin/grubadm --number -1 "
+			    "--set-opts '-B $ZFS_BOOTFS' 2>&1");
 		} else if ((args == NULL) || (args[0] == '\0')) {
-			(void) snprintf(buf, BUFSIZ, "/sbin/bootadm "
-			    "set-menu args='-B console=%s' 2>&1",
+			(void) snprintf(buf, BUFSIZ, "/sbin/grubadm --number -1 "
+			    "--set-opts '-B console=%s' 2>&1",
 			    console);
 		} else if ((console == NULL) || (console[0] == '\0')) {
-			(void) snprintf(buf, BUFSIZ, "/sbin/bootadm "
-			    "set-menu args='%s' 2>&1", args);
+			(void) snprintf(buf, BUFSIZ, "/sbin/grubadm --number -1 "
+			    "--set-opts '%s' 2>&1", args);
 		} else if (strncmp(args, "-B ", 3) != 0) {
-			(void) snprintf(buf, BUFSIZ, "/sbin/bootadm "
-			    "set-menu args='-B console=%s %s' 2>&1",
+			(void) snprintf(buf, BUFSIZ, "/sbin/grubadm --number -1 "
+			    "--set-opts '-B console=%s %s' 2>&1",
 			    console, args);
 		} else {
-			(void) snprintf(buf, BUFSIZ, "/sbin/bootadm "
-			    "set-menu args='-B console=%s,%s' 2>&1",
+			(void) snprintf(buf, BUFSIZ, "/sbin/grubadm --number -1 "
+			    "--set-opts '-B console=%s,%s' 2>&1",
 			    console, args + 3);
 		}
 	} else {
-		eeprom_error("Unknown value in set_bootadm_value: %s\n", name);
+		eeprom_error("Unknown value in set_grubadm_value: %s\n", name);
 		return;
 	}
 
@@ -589,7 +589,7 @@
 
 	if (verbose) {
 		(void) printf("new:");
-		(void) print_bootadm_value(name, 0);
+		(void) print_grubadm_value(name, 0);
 	}
 }
 
@@ -607,7 +607,7 @@
 
 	if ((strcmp(name, "boot-file") == 0) ||
 	    (strcmp(name, "boot-args") == 0)) {
-		set_bootadm_var(name, val);
+		set_grubadm_var(name, val);
 		return (0);
 	}
 
@@ -618,7 +618,7 @@
 	if (strcmp(name, "console") == 0) {
 		old_verbose = verbose;
 		verbose = 0;
-		set_bootadm_var(name, val);
+		set_grubadm_var(name, val);
 		verbose = old_verbose;
 	}
 
