changeset 25:83a8af2dd475

PSARC 2005/373 Contract for the Miniroot Repository 6263254 console output gets graphically corrupted after the newboot 6270368 grub does not honor vendor option 150 to specify menu.lst file 6271324 boot-archive.xml is delivered into the wrong directory 6271395 grub should show progress when loading the root archive from slow devices 6272654 gcc and krtld don't get along 6273069 net install fails on v40z with external 3310 disk array 6280557 serial console redirection does not work right in some corner cases 6280646 amd64 memlist structure mismatch causes panic 6284029 boot may generate supurious warning on disabled pci config space 6285006 pxegrub truncates DHCPREQUEST packet
author szhou
date Fri, 17 Jun 2005 11:21:00 -0700
parents 8cc2334c5289
children e6f2b1b7e64c
files usr/src/cmd/svc/milestone/Makefile usr/src/cmd/svc/seed/Makefile usr/src/grub/grub-0.95/netboot/nic.c usr/src/grub/grub-0.95/stage2/builtins.c usr/src/grub/grub-0.95/stage2/fsys_iso9660.c usr/src/pkgdefs/SUNWcsr/prototype_com usr/src/pkgdefs/SUNWcsu/prototype_com usr/src/psm/stand/boot/amd64/amd64/bootops64.h usr/src/psm/stand/boot/i386/common/console.c usr/src/tools/scripts/bfu.sh usr/src/uts/common/krtld/bootrd.c usr/src/uts/i86pc/io/pci/pci_boot.c usr/src/uts/intel/io/vgatext/vgatext.c usr/src/uts/intel/promif/prom_version.c
diffstat 14 files changed, 157 insertions(+), 73 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/svc/milestone/Makefile	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/cmd/svc/milestone/Makefile	Fri Jun 17 11:21:00 2005 -0700
@@ -35,7 +35,6 @@
 	console-login.xml
 
 FSSVCS= \
-	boot-archive.xml \
 	local-fs.xml \
 	minimal-fs.xml \
 	root-fs.xml \
@@ -70,6 +69,7 @@
 SYSDEVMANIFESTS= $(SYSDEVSVCS:%=$(ROOTSVCSYSTEMDEVICE)/%)
 
 SYSTEMSVCS= \
+	boot-archive.xml \
 	console-login.xml \
 	identity.xml \
 	manifest-import.xml \
--- a/usr/src/cmd/svc/seed/Makefile	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/cmd/svc/seed/Makefile	Fri Jun 17 11:21:00 2005 -0700
@@ -29,6 +29,7 @@
 
 ETCSVC = $(ROOTETC)/svc
 LIBSVCSEED = $(ROOT)/lib/svc/seed
+INSTALLSEED = $(ROOT)/usr/sadm/install
 
 #
 # Because seed repository construction requires a functioning repository, a
@@ -37,26 +38,29 @@
 #
 
 #
-# GLOBAL_ZONE_DESCRIPTIONS and NONGLOBAL_ZONE_DESCRIPTIONS contain the
-# services used to define a 'seed repository' for a standalone Solaris
-# instance or for a zone, respectively.  A service needed for either one of
-# these seeds must be added to the appropriate macro.  The definition of a seed
-# repository is a self-consistent set of services that can boot.
+# We build and deliver 3 seed repositories:
+#	global.db	-- for a standalone Solaris (global zone)
+#	nonglobal.db	-- for a Solaris Zone
+#	miniroot.db	-- for the install miniroot
+# COMMON_DESCRIPTIONS contains manifests needed by all 3 repositories.
+# GLOBAL_ZONE_DESCRIPTIONS/NONGLOBAL_ZONE_DESCRIPTIONS/MINIROOT_DESCRIPTIONS
+# contain additional manifests needed.
 #
-GLOBAL_ZONE_DESCRIPTIONS = \
+
+#
+# Manifests needed by all seed repositories. If you change this, you
+# must test Solaris standalone, Solaris zone, and Install miniroot.
+#
+COMMON_DESCRIPTIONS = \
 	../milestone/boot-archive.xml \
-	../milestone/console-login.xml \
 	../milestone/datalink.xml \
-	../milestone/datalink-init.xml \
 	../milestone/devices-local.xml \
 	../milestone/identity.xml \
 	../milestone/local-fs.xml \
 	../milestone/manifest-import.xml \
 	../milestone/minimal-fs.xml \
-	../milestone/multi-user-server.xml \
 	../milestone/multi-user.xml \
 	../milestone/name-services.xml \
-	../milestone/aggregation.xml \
 	../milestone/network-initial.xml \
 	../milestone/network-loopback.xml \
 	../milestone/network-physical.xml \
@@ -65,34 +69,49 @@
 	../milestone/single-user.xml \
 	../milestone/usr-fs.xml \
 	../../rpcbind/bind.xml \
+
+#
+# Additional manifests for standalone Solaris
+#
+GLOBAL_ZONE_DESCRIPTIONS = \
+	../milestone/console-login.xml \
+	../milestone/datalink-init.xml \
+	../milestone/multi-user-server.xml \
+	../milestone/aggregation.xml \
 	../../cmd-inet/usr.lib/inetd/inetd-upgrade.xml \
 	../../utmpd/utmp.xml \
 	../../lvm/util/metainit.xml \
 	../../ipf/svc/pfil.xml
 
+#
+# Additional manifests for a Solaris zone
+#
 NONGLOBAL_ZONE_DESCRIPTIONS = \
-	../milestone/boot-archive.xml \
 	../milestone/console-login.xml \
-	../milestone/datalink.xml \
-	../milestone/devices-local.xml \
-	../milestone/identity.xml \
-	../milestone/local-fs.xml \
-	../milestone/manifest-import.xml \
-	../milestone/minimal-fs.xml \
 	../milestone/multi-user-server.xml \
-	../milestone/multi-user.xml \
-	../milestone/name-services.xml \
 	../milestone/aggregation.xml \
-	../milestone/network-initial.xml \
-	../milestone/network-loopback.xml \
-	../milestone/network-physical.xml \
-	../milestone/restarter.xml \
-	../milestone/root-fs.xml \
-	../milestone/single-user.xml \
-	../milestone/usr-fs.xml \
-	../../rpcbind/bind.xml \
 	../../utmpd/utmp.xml
 
+#
+# Additional manifests for the install miniroot.
+#
+MINIROOT_DESCRIPTIONS= \
+	../milestone/datalink-init.xml \
+	../milestone/sysconfig.xml \
+	../../cmd-inet/usr.lib/inetd/inetd.xml \
+	../../cmd-inet/usr.sbin/login.xml \
+	../milestone/network-service.xml \
+	../../cmd-inet/usr.sbin/telnet.xml \
+	../../../lib/libresolv2/client.xml \
+	../../ldapcachemgr/client.xml \
+	../../ypcmd/client.xml \
+	../../ypcmd/server.xml \
+	../../keyserv/keyserv.xml \
+	../../rpcsvc/nisplus.xml \
+	../../cmd-crypto/scripts/cryptosvc.xml \
+	../../nscd/name-service-cache.xml \
+	../../syslogd/system-log.xml
+
 OWNER = root
 GROUP = sys
 FILEMODE = 0600
@@ -104,7 +123,7 @@
 
 .KEEP_STATE:
 
-all: global.db nonglobal.db
+all: global.db nonglobal.db miniroot.db
 
 $(CONFIGD): FRC
 	@cd ../configd; pwd; $(MAKE) $(MFLAGS) native
@@ -115,8 +134,19 @@
 ../milestone/console-login.xml:
 	@cd ../milestone; pwd; $(MAKE) $(MFLAGS) console-login.xml
 
-global.db: $(GLOBAL_ZONE_DESCRIPTIONS) $(CONFIGD) $(SVCCFG)
+common.db: $(COMMON_DESCRIPTIONS) $(CONFIGD) $(SVCCFG)
+	$(RM) -f common.db common.db-journal
+	for m in $(COMMON_DESCRIPTIONS); do \
+		echo $$m; \
+		SVCCFG_DTD=../dtd/service_bundle.dtd.1 \
+		SVCCFG_REPOSITORY=$(SRC)/cmd/svc/seed/common.db \
+		SVCCFG_CONFIGD_PATH=$(CONFIGD) \
+		$(SVCCFG) import $$m; \
+	done
+
+global.db: common.db $(GLOBAL_ZONE_DESCRIPTIONS) $(CONFIGD) $(SVCCFG)
 	$(RM) -f global.db global.db-journal
+	$(CP) common.db global.db
 	for m in $(GLOBAL_ZONE_DESCRIPTIONS); do \
 		echo $$m; \
 		SVCCFG_DTD=../dtd/service_bundle.dtd.1 \
@@ -125,8 +155,9 @@
 		$(SVCCFG) import $$m; \
 	done
 
-nonglobal.db: $(NONGLOBAL_ZONE_DESCRIPTIONS) $(CONFIGD) $(SVCCFG)
-	$(RM) -f nonglobal.db global.db-journal
+nonglobal.db: common.db $(NONGLOBAL_ZONE_DESCRIPTIONS) $(CONFIGD) $(SVCCFG)
+	$(RM) -f nonglobal.db nonglobal.db-journal
+	$(CP) common.db nonglobal.db
 	for m in $(NONGLOBAL_ZONE_DESCRIPTIONS); do \
 		echo $$m; \
 		SVCCFG_DTD=../dtd/service_bundle.dtd.1 \
@@ -135,7 +166,18 @@
 		$(SVCCFG) import $$m; \
 	done
 
-install: install_global install_nonglobal
+miniroot.db: common.db $(MINIROOT_DESCRIPTIONS) $(CONFIGD) $(SVCCFG)
+	$(RM) -f miniroot.db miniroot.db-journal
+	$(CP) common.db miniroot.db
+	for m in $(MINIROOT_DESCRIPTIONS); do \
+		echo $$m; \
+		SVCCFG_DTD=../dtd/service_bundle.dtd.1 \
+		SVCCFG_REPOSITORY=$(SRC)/cmd/svc/seed/miniroot.db \
+		SVCCFG_CONFIGD_PATH=$(CONFIGD) \
+		$(SVCCFG) import $$m; \
+	done
+
+install: install_global install_nonglobal install_miniroot
 
 install_global: global.db
 	$(RM) $(LIBSVCSEED)/global.db
@@ -145,9 +187,17 @@
 	$(RM) $(LIBSVCSEED)/nonglobal.db
 	$(INS) -f $(LIBSVCSEED) -m $(SEEDFILEMODE) -s nonglobal.db
 
+install_miniroot: $(INSTALLSEED) miniroot.db
+	$(RM) $(INSTALLSEED)/miniroot.db
+	$(INS) -f $(INSTALLSEED) -m $(SEEDFILEMODE) -s miniroot.db
+
+$(INSTALLSEED):
+	$(INS.dir)
+
 clean lint:
+	$(RM) common.db
 
 clobber:
-	$(RM) global.db nonglobal.db
+	$(RM) common.db global.db nonglobal.db miniroot.db
 
 FRC:
--- a/usr/src/grub/grub-0.95/netboot/nic.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/grub/grub-0.95/netboot/nic.c	Fri Jun 17 11:21:00 2005 -0700
@@ -460,6 +460,7 @@
 		memcpy(arptable[ARP_SERVER].node, arpreply->shwaddr, ETH_ALEN);
 		memcpy(&arptable[ARP_SERVER].ipaddr, arpreply->sipaddr, sizeof(in_addr));
 		memcpy(&arptable[ARP_CLIENT].ipaddr, arpreply->tipaddr, sizeof(in_addr));
+		memset(&arptable[ARP_GATEWAY].ipaddr, 0, sizeof(in_addr));
 		return 1;
 	}
 	return 0;
@@ -671,7 +672,7 @@
 
 	network_ready = 0;
 
-	memset(&ip, 0, sizeof(struct dhcpip_t));
+	memset(&ip, 0, sizeof(ip));
 	ip.bp.bp_op = BOOTP_REQUEST;
 	ip.bp.bp_htype = 1;
 	ip.bp.bp_hlen = ETH_ALEN;
@@ -690,7 +691,7 @@
 		rx_qdrain();
 
 		udp_transmit(IP_BROADCAST, BOOTP_CLIENT, BOOTP_SERVER,
-			     sizeof(struct bootpip_t), &ip);
+			     sizeof(ip), &ip);
 		timeout = rfc2131_sleep_interval(TIMEOUT, retry++);
 		if (await_reply(await_dhcp, 0, NULL, timeout)) {
 			/* If not a DHCPOFFER then must be just a
@@ -710,7 +711,7 @@
 			memcpy(&ip.bp.bp_vend[15], &dhcp_addr, sizeof(in_addr));
 			for (reqretry = 0; reqretry < MAX_BOOTP_RETRIES; ) {
 				udp_transmit(IP_BROADCAST, BOOTP_CLIENT, BOOTP_SERVER,
-					     sizeof(struct bootpip_t), &ip);
+					     sizeof(ip), &ip);
 				dhcp_reply=0;
 				timeout = rfc2131_sleep_interval(TIMEOUT, reqretry++);
 				if (await_reply(await_dhcp, 0, NULL, timeout))
--- a/usr/src/grub/grub-0.95/stage2/builtins.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/grub/grub-0.95/stage2/builtins.c	Fri Jun 17 11:21:00 2005 -0700
@@ -934,8 +934,8 @@
 	if (grub_strcmp(config_file, "/boot/grub/menu.lst") != 0)
 		return;
 
-	/* default solaris configfile name /menu.lst.01<ether_addr> */
-	grub_strcpy(c, "/menu.lst.01");
+	/* default solaris configfile name menu.lst.01<ether_addr> */
+	grub_strcpy(c, "menu.lst.01");
 	c += grub_strlen(c);
 	for (i = 0; i < ETH_ALEN; i++) {
 		unsigned char b = arptable[ARP_CLIENT].node[i];
@@ -950,6 +950,12 @@
 	if (grub_open(menufile)) {
 		grub_strcpy(config_file, menufile);
 		grub_close();
+	} else {
+		char *cp = config_file;
+		/* skip leading slashes for tftp */
+		while (*cp++ == '/')
+			;
+	  	grub_memmove (config_file, cp, strlen(cp) + 1);
 	}
 }
 
--- a/usr/src/grub/grub-0.95/stage2/fsys_iso9660.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/grub/grub-0.95/stage2/fsys_iso9660.c	Fri Jun 17 11:21:00 2005 -0700
@@ -69,6 +69,7 @@
 static int
 iso9660_devread (int sector, int byte_offset, int byte_len, char *buf)
 {
+  static int read_count = 0, threshold = 2;
   unsigned short sector_size_lg2 = log2(buf_geom.sector_size);
 
   /*
@@ -94,6 +95,11 @@
     printf ("<%d, %d, %d>", sector, byte_offset, byte_len);
 #endif /* !STAGE1_5 */
 
+  read_count += (byte_len >> 9);
+  if ((read_count >> 11) > threshold) {
+	printf(".");
+	threshold += 2;	/* one dot every 2 MB */
+  }
   return rawread(current_drive, part_start + sector, byte_offset, byte_len, buf);
 }
 
--- a/usr/src/pkgdefs/SUNWcsr/prototype_com	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/pkgdefs/SUNWcsr/prototype_com	Fri Jun 17 11:21:00 2005 -0700
@@ -482,10 +482,10 @@
 d none var/svc/manifest/platform 755 root sys
 d none var/svc/manifest/site 755 root sys
 d none var/svc/manifest/system 755 root sys
+f manifest var/svc/manifest/system/boot-archive.xml 0444 root sys
 d none var/svc/manifest/system/device 755 root sys
 f manifest var/svc/manifest/system/device/devices-local.xml 0444 root sys
 d none var/svc/manifest/system/filesystem 0755 root sys
-f manifest var/svc/manifest/system/filesystem/boot-archive.xml 0444 root sys
 f manifest var/svc/manifest/system/filesystem/local-fs.xml 0444 root sys
 f manifest var/svc/manifest/system/filesystem/minimal-fs.xml 0444 root sys
 f manifest var/svc/manifest/system/filesystem/root-fs.xml 0444 root sys
--- a/usr/src/pkgdefs/SUNWcsu/prototype_com	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/pkgdefs/SUNWcsu/prototype_com	Fri Jun 17 11:21:00 2005 -0700
@@ -651,6 +651,7 @@
 l none usr/sadm/bin/valuid=../../../usr/bin/ckuid
 l none usr/sadm/bin/valyorn=../../../usr/bin/ckyorn
 d none usr/sadm/install 755 root bin
+f none usr/sadm/install/miniroot.db 444 root sys
 d none usr/sadm/install/scripts 755 root bin
 f none usr/sadm/install/scripts/i.ipsecalgs 555 root sys
 f none usr/sadm/install/scripts/r.ipsecalgs 555 root sys
--- a/usr/src/psm/stand/boot/amd64/amd64/bootops64.h	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/psm/stand/boot/amd64/amd64/bootops64.h	Fri Jun 17 11:21:00 2005 -0700
@@ -41,7 +41,10 @@
 struct bsys_mem64 {
 	caddr64_t	physinstalled;	/* struct memlist64 pointer */
 	caddr64_t	physavail;	/* struct memlist64 pointer */
+	caddr64_t	virtavail;	/* struct memlist64 pointer */
 	caddr64_t	pcimem;		/* struct memlist64 pointer */
+	uint32_t	extent;		/* unused */
+	uint32_t	__bsys_pad0;
 };
 
 /*
--- a/usr/src/psm/stand/boot/i386/common/console.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/psm/stand/boot/i386/common/console.c	Fri Jun 17 11:21:00 2005 -0700
@@ -204,12 +204,17 @@
 	    'a' + console - CONS_TTYA);
 	plen = bgetproplen(NULL, propname);
 	if (plen > 0 && plen <= sizeof (propval)) {
+		bgetprop(NULL, propname, propval);
+	} else {
+		strcpy(propval, "9600,8,n,1,-");
+	}
+
+	{
 		char *p;
 		ulong_t baud;
 		uchar_t lcr = 0;
 
 		/* property is of the form: "9600,8,n,1,-" */
-		bgetprop(NULL, propname, propval);
 		p = strtok(propval, ",");
 		if (strcmp(p, "110") == 0)
 			baud = ASY110;
@@ -296,9 +301,14 @@
 	    "tty%c-rts-dtr-off", 'a' + console - CONS_TTYA);
 	plen = bgetproplen(NULL, propname);
 	if (plen > 0 && plen <= sizeof (propval)) {
+		bgetprop(NULL, propname, propval);
+	} else {
+		strcpy(propval, "false");
+	}
+
+	{
 		char *p;
 		uchar_t mcr = DTR | RTS;
-		bgetprop(NULL, propname, propval);
 		if (propval[0] != 'f' && propval[0] != 'F')
 			mcr = 0;
 		/* set modem control bits */
@@ -314,8 +324,14 @@
 	console = CONS_INVALID;
 
 	cons = strstr(bootstr, "console=");
+	if (cons)
+		cons += strlen("console=");
+	else {
+		cons = strstr(bootstr, "output-device=");
+		if (cons)
+			cons += strlen("output-device=");
+	}
 	if (cons) {
-		cons += strlen("console=");
 		if (strncmp(cons, "ttya", 4) == 0)
 			console = CONS_TTYA;
 		else if (strncmp(cons, "ttyb", 4) == 0)
--- a/usr/src/tools/scripts/bfu.sh	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/tools/scripts/bfu.sh	Fri Jun 17 11:21:00 2005 -0700
@@ -982,6 +982,7 @@
 # smf services whose manifests have been renamed
 smf_renamed_manifests="
 	var/svc/manifest/milestone/name-service.xml
+	var/svc/manifest/system/filesystem/boot-archive.xml
 "
 
 # Obsolete smf methods
--- a/usr/src/uts/common/krtld/bootrd.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/uts/common/krtld/bootrd.c	Fri Jun 17 11:21:00 2005 -0700
@@ -65,8 +65,8 @@
 	/* add in offset of root slice */
 	blocknum = filep->fi_blocknum;
 
-	diskloc = (caddr_t)rd_start + blocknum * DEV_BSIZE;
-	if (diskloc + filep->fi_count > (caddr_t)rd_end) {
+	diskloc = (caddr_t)(uintptr_t)rd_start + blocknum * DEV_BSIZE;
+	if (diskloc + filep->fi_count > (caddr_t)(uintptr_t)rd_end) {
 		_kobj_printf(ops, "diskread: start = 0x%p, size = 0x%x\n",
 		    diskloc, filep->fi_count);
 		_kobj_printf(ops, "reading beyond end of ramdisk\n");
@@ -132,8 +132,8 @@
 
 	addr = BOP_ALLOC(ops, 0, size, 0);
 #ifdef	DEBUG
-	if (scratch_max < (uint64_t)addr + size)
-		scratch_max = (uint64_t)addr + size;
+	if (scratch_max < (uintptr_t)addr + size)
+		scratch_max = (uintptr_t)addr + size;
 #endif
 	return (addr);
 }
--- a/usr/src/uts/i86pc/io/pci/pci_boot.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/uts/i86pc/io/pci/pci_boot.c	Fri Jun 17 11:21:00 2005 -0700
@@ -1017,12 +1017,6 @@
 	 */
 	/* io range */
 	val = (uint_t)pci_getb(bus, dev, func, PCI_BCNF_IO_BASE_LOW);
-	/* if 32-bit supported, make sure upper bits are not set */
-	if ((val & 0xf) == 1 &&
-	    pci_getw(bus, dev, func, PCI_BCNF_IO_BASE_HI)) {
-		cmn_err(CE_NOTE, "unsupported 32-bit IO address on"
-		    " pci-pci bridge [%d/%d/%d]", bus, dev, func);
-	}
 	io_range[0] = ((val & 0xf0) << 8);
 	val = (uint_t)pci_getb(bus, dev, func, PCI_BCNF_IO_LIMIT_LOW);
 	io_range[1]  = ((val & 0xf0) << 8) | 0xFFF;
@@ -1037,6 +1031,12 @@
 		}
 		dcmn_err(CE_NOTE, "bus %d io-range: 0x%x-%x",
 		    secbus, io_range[0], io_range[1]);
+		/* if 32-bit supported, make sure upper bits are not set */
+		if ((val & 0xf) == 1 &&
+		    pci_getw(bus, dev, func, PCI_BCNF_IO_BASE_HI)) {
+			cmn_err(CE_NOTE, "unsupported 32-bit IO address on"
+			    " pci-pci bridge [%d/%d/%d]", bus, dev, func);
+		}
 	}
 
 	/* mem range */
@@ -1060,12 +1060,6 @@
 
 	/* prefetchable memory range */
 	val = (uint_t)pci_getw(bus, dev, func, PCI_BCNF_PF_BASE_LOW);
-	/* if 64-bit supported, make sure upper bits are not set */
-	if ((val & 0xf) == 1 &&
-	    pci_getl(bus, dev, func, PCI_BCNF_PF_BASE_HIGH)) {
-		cmn_err(CE_NOTE, "unsupported 64-bit prefetch memory on"
-		    " pci-pci bridge [%d/%d/%d]", bus, dev, func);
-	}
 	pmem_range[0] = ((val & 0xFFF0) << 16);
 	val = (uint_t)pci_getw(bus, dev, func, PCI_BCNF_PF_LIMIT_LOW);
 	pmem_range[1] = ((val & 0xFFF0) << 16) | 0xFFFFF;
@@ -1080,6 +1074,12 @@
 		}
 		dcmn_err(CE_NOTE, "bus %d pmem-range: 0x%x-%x",
 		    secbus, pmem_range[0], pmem_range[1]);
+		/* if 64-bit supported, make sure upper bits are not set */
+		if ((val & 0xf) == 1 &&
+		    pci_getl(bus, dev, func, PCI_BCNF_PF_BASE_HIGH)) {
+			cmn_err(CE_NOTE, "unsupported 64-bit prefetch memory on"
+			    " pci-pci bridge [%d/%d/%d]", bus, dev, func);
+		}
 	}
 
 	add_bus_range_prop(secbus);
--- a/usr/src/uts/intel/io/vgatext/vgatext.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/uts/intel/io/vgatext/vgatext.c	Fri Jun 17 11:21:00 2005 -0700
@@ -1375,15 +1375,18 @@
 }
 #endif
 
+static char vga_fontslot = 0;
+
 static void
 vgatext_setfont(struct vgatext_softc *softc)
 {
+	static uchar_t fsreg[8] = {0x0, 0x30, 0x5, 0x35, 0xa, 0x3a, 0xf, 0x3f};
+
 	extern unsigned char *ENCODINGS[];
-	unsigned char *from;
-	unsigned char *to;
-	int	i;
-	int	j;
-	int	bpc;
+	uchar_t *from;
+	uchar_t volatile *to;
+	int	i, j, s;
+	int	bpc, f_offset;
 
 	/* Sync-reset the sequencer registers */
 	vga_set_seq(&softc->regs, 0x00, 0x01);
@@ -1418,15 +1421,13 @@
 	/*
 	 * This assumes 8x16 characters, which yield the traditional 80x25
 	 * screen.  It really should support other character heights.
-	 *
-	 * plane2 may contain 8 font sets, we shouldn't touch font set 0,
-	 * which is default font and kept in slot 0. we will load our own
-	 * font in slot 2, which is 4*8K offset to slot 0;
 	 */
 	bpc = 16;
+	s = vga_fontslot;
+	f_offset = s * 8 * 1024;
 	for (i = 0; i < 256; i++) {
 		from = ENCODINGS[i];
-		to = (unsigned char *)softc->fb.addr + 32768 + i * 0x20;
+		to = (unsigned char *)softc->fb.addr + f_offset + i * 0x20;
 		for (j = 0; j < bpc; j++)
 			*to++ = *from++;
 	}
@@ -1441,10 +1442,9 @@
 	 */
 	vga_set_seq(&softc->regs, 0x04, 0x03);
 	/*
-	 * select font map that resides in slot 2
-	 * 010b -- font residing at 8000h - 9FFFh
+	 * select font map
 	 */
-	vga_set_seq(&softc->regs, 0x03, 0x0a);
+	vga_set_seq(&softc->regs, 0x03, fsreg[s]);
 	/* Sync-reset ended, and allow the sequencer to operate */
 	vga_set_seq(&softc->regs, 0x00, 0x03);
 
--- a/usr/src/uts/intel/promif/prom_version.c	Fri Jun 17 10:44:30 2005 -0700
+++ b/usr/src/uts/intel/promif/prom_version.c	Fri Jun 17 11:21:00 2005 -0700
@@ -57,7 +57,7 @@
 int
 prom_version_name(char *buf, int len)
 {
-	static char *prom_versionstr = "DevConf 2.0";
+	static char prom_versionstr[] = "DevConf 2.0";
 	extern size_t strlcpy(char *, const char *, size_t);
 
 	(void) strlcpy(buf, prom_versionstr, len - 1);