diff -X exclude -Naur freebsd_R6/src/sys/conf/files kgi6/src/sys/conf/files
--- freebsd_R6/src/sys/conf/files	2006-02-05 10:14:23.383306224 +0100
+++ kgi6/src/sys/conf/files	2006-02-01 01:01:58.000000000 +0100
@@ -800,7 +800,7 @@
 dev/pci/pci_pci.c		optional pci
 dev/pci/pci_user.c		optional pci
 dev/pci/pcib_if.m		standard
-dev/pci/vga_pci.c		optional pci
+#dev/pci/vga_pci.c		optional pci
 dev/pdq/if_fea.c		optional fea eisa
 dev/pdq/if_fpa.c		optional fpa pci
 dev/pdq/pdq.c			optional nowerror fea eisa | fpa pci
diff -X exclude -Naur freebsd_R6/src/sys/dev/kbd/kbd.c kgi6/src/sys/dev/kbd/kbd.c
--- freebsd_R6/src/sys/dev/kbd/kbd.c	2005-07-14 02:00:48.000000000 +0200
+++ kgi6/src/sys/dev/kbd/kbd.c	2006-01-31 21:51:30.000000000 +0100
@@ -179,6 +179,8 @@
 	return (0);
 }
 
+void kip_kbd_register(keyboard_t *kbd, int index);
+
 /* register a keyboard and associate it with a function table */
 int
 kbd_register(keyboard_t *kbd)
@@ -208,7 +210,7 @@
 		if (strcmp(p->name, kbd->kb_name) == 0) {
 			keyboard[index] = kbd;
 			kbdsw[index] = p->kbdsw;
-			return (index);
+			goto found;
 		}
 	}
 	SET_FOREACH(list, kbddriver_set) {
@@ -216,11 +218,15 @@
 		if (strcmp(p->name, kbd->kb_name) == 0) {
 			keyboard[index] = kbd;
 			kbdsw[index] = p->kbdsw;
-			return (index);
+			goto found;
 		}
 	}
 
 	return (-1);
+
+ found:
+	kip_kbd_register(kbd, index);                         /* XXX hardwired */
+	return (index);
 }
 
 int
diff -X exclude -Naur freebsd_R6/src/sys/dev/kgc/kgc_render.h kgi6/src/sys/dev/kgc/kgc_render.h
--- freebsd_R6/src/sys/dev/kgc/kgc_render.h	2006-02-05 10:14:23.438297864 +0100
+++ kgi6/src/sys/dev/kgc/kgc_render.h	2006-02-04 22:44:54.000000000 +0100
@@ -62,7 +62,7 @@
 		if (cons)							\
 			cons->render = &console_render;				\
 		kgc_render_register(&driver, 0, 1);				\
-		kgc_render_register(&driver, 1, 1);				\
+		kgc_render_register(&driver, 2, 1);				\
 		kgc_render_alloc(0, &console_render);				\
 	}
 
diff -X exclude -Naur freebsd_R6/src/sys/dev/kgc/kgc_scroller.h kgi6/src/sys/dev/kgc/kgc_scroller.h
--- freebsd_R6/src/sys/dev/kgc/kgc_scroller.h	2006-02-05 10:14:23.440297560 +0100
+++ kgi6/src/sys/dev/kgc/kgc_scroller.h	2006-02-04 23:18:45.000000000 +0100
@@ -58,7 +58,7 @@
 	if (cons)								\
 		cons->scroller = &console_scroller;				\
 	kgc_scroller_register(&driver, 0, 1);					\
-	kgc_scroller_register(&driver, 1, 1);					\
+	kgc_scroller_register(&driver, 2, 1);					\
 	kgc_scroller_alloc(0, &console_scroller);				\
 	}
 
diff -X exclude -Naur freebsd_R6/src/sys/dev/kgi/kgii.h kgi6/src/sys/dev/kgi/kgii.h
--- freebsd_R6/src/sys/dev/kgi/kgii.h	2006-02-05 10:14:23.454295432 +0100
+++ kgi6/src/sys/dev/kgi/kgii.h	2006-02-04 22:41:59.000000000 +0100
@@ -26,8 +26,8 @@
 */
 #define	CONFIG_KGII_MAX_NR_DISPLAYS	8
 #define	CONFIG_KGII_MAX_NR_INPUTS	255
-#define	CONFIG_KGII_MAX_NR_FOCUSES	4
-#define	CONFIG_KGII_MAX_NR_CONSOLES	64
+#define	CONFIG_KGII_MAX_NR_FOCUSES	8
+#define	CONFIG_KGII_MAX_NR_CONSOLES	96
 #define	CONFIG_KGII_MAX_NR_DEVICES	(2*CONFIG_KGII_MAX_NR_CONSOLES)
 
 #define	INVALID_DISPLAY	((unsigned)-1)
diff -X exclude -Naur freebsd_R6/src/sys/dev/kgi/kgi_sysmem.c kgi6/src/sys/dev/kgi/kgi_sysmem.c
--- freebsd_R6/src/sys/dev/kgi/kgi_sysmem.c	2006-02-05 10:14:23.456295128 +0100
+++ kgi6/src/sys/dev/kgi/kgi_sysmem.c	2006-02-04 15:03:18.000000000 +0100
@@ -90,7 +90,7 @@
 void *
 kgi_kmalloc(__kgi_size_t size)
 {
-	void *ptr = malloc(size, M_KGI, M_WAITOK);
+	void *ptr = malloc(size, M_KGI, M_NOWAIT);
 	KRN_DEBUG(3, "Allocating %p (%d)", (void *)ptr, size);
 	return ptr;
 }
diff -X exclude -Naur freebsd_R6/src/sys/dev/kip/kip.h kgi6/src/sys/dev/kip/kip.h
--- freebsd_R6/src/sys/dev/kip/kip.h	2006-02-05 10:14:23.487290416 +0100
+++ kgi6/src/sys/dev/kip/kip.h	2006-01-31 21:50:55.000000000 +0100
@@ -18,4 +18,7 @@
 #ifndef _DEV_KGI_KIP_H
 #define _DEV_KGI_KIP_H
 
+/* Enable KII registration of a kbd freshly registered */
+void kip_kbd_register(keyboard_t *kbd, int index);
+
 #endif /* !_DEV_KGI_KIP_H */
diff -X exclude -Naur freebsd_R6/src/sys/dev/kip/kip_kbdriver.c kgi6/src/sys/dev/kip/kip_kbdriver.c
--- freebsd_R6/src/sys/dev/kip/kip_kbdriver.c	2006-02-05 10:14:23.488290264 +0100
+++ kgi6/src/sys/dev/kip/kip_kbdriver.c	2006-01-31 22:12:57.000000000 +0100
@@ -46,7 +46,7 @@
 	kii_input_t	kii_input;
 } kbdriver_softc;
 
-static int kbdriver_index = -1;
+static int kbdriver_nr = 0;
 static kii_s_t initialized = 0;
 static kbdriver_softc kbdriver_data[MAX_KBD_DRIVERS];
 
@@ -387,35 +387,16 @@
 	return c;
 }
 
-static void
-kbdriver_init(void)
+void
+kip_kbd_register(keyboard_t *kbd, int index) 
 {
-	kbdriver_softc *sc = NULL;
-	keyboard_t *kbd;
+	kbdriver_softc *sc;
 	kii_error_t kii_error;
-	int kbd_mode;
-	int s, i;
+	int kbd_mode, i;
 
-	if (initialized)
-		return;
+	sc = &kbdriver_data[index];
 
-	initialized = 1;
-
-	/* Give a chance to keyboard drivers to register themselves
-	 * if kbdriver_init is called very early.
-	 */
-	kbd_configure(KB_CONF_PROBE_ONLY);
-
-	s = spltty();
-
-	/* XXX Loop on keyboard types: atkbd, ukbd... */
-
-	kbdriver_index = kbd_find_keyboard("atkbd", -1);
-	kbd = kbd_get_keyboard(kbdriver_index);
-
-	if (kbd) {
-		sc = &kbdriver_data[kbdriver_index];
-		bzero(sc, sizeof(kbdriver_softc));
+	if (!sc->kbd) {
 
 		sc->kbd = kbd;
 
@@ -426,8 +407,9 @@
 			  kbd->kb_name);
 
 		i = kbd_allocate(kbd->kb_name, kbd->kb_unit, sc,
-				    kbdriver_event, (void *)sc);
+				 kbdriver_event, (void *)sc);
 
+		/* Check if allocation succeeded */
 		if (i >= 0) {
 			/*
 			** Put the keyboard in raw mode so that we'll
@@ -436,25 +418,47 @@
 			*/
 			kbd_mode = K_RAW;
 			(*kbdsw[kbd->kb_index]->ioctl)(kbd, KDSKBMODE,
-							  (caddr_t)&kbd_mode);
+						       (caddr_t)&kbd_mode);
+
+			snprintf(sc->kii_input.vendor, KII_MAX_VENDOR_STRING,
+				 "KII FreeBSD keyboard");
+			snprintf(sc->kii_input.model, KII_MAX_VENDOR_STRING,
+				 kbd->kb_name);
 
-			
-			snprintf(sc->kii_input.vendor, KII_MAX_VENDOR_STRING, "KII FreeBSD keyboard");
-			snprintf(sc->kii_input.model, KII_MAX_VENDOR_STRING, kbd->kb_name);
 			sc->kii_input.events = KII_EM_KEY | KII_EM_RAW_DATA;
 			sc->kii_input.report = KII_EM_KEY | KII_EM_RAW_DATA;
 			sc->kii_input.priv.priv_ptr = sc;
 			sc->kii_input.Poll = kbdriver_poll;
 			sc->kii_input.Parse = kbdriver_parser;
 
-			kii_error = kii_register_input((~0), &sc->kii_input);
+			/* Register to the focus with same id as the kbd */
+			kii_error = kii_register_input(kbdriver_nr, &sc->kii_input);
+
+			KRN_NOTICE("%s: keyboard %d registered on focus %d with error %d",
+				   __FUNCTION__, index, kbdriver_nr, kii_error);
 
-			KRN_NOTICE("%s: keyboard %d registered",
-				   __FUNCTION__, kbdriver_index);
+			kbdriver_nr ++;
+
+		} else {
+			/* Free the kbdriver_data entry */
+			sc->kbd = NULL;
 		}
+		
 	}
+}
+
+static void
+kbdriver_init(void)
+{
 
-	splx(s);
+	if (initialized)
+		return;
+
+	initialized = 1;
+
+	/* RAZ the allocation area especially to have kbd field NULL */
+	bzero(kbdriver_data, sizeof(kbdriver_data));
+	kbdriver_nr = 0;
 
 	return;
 }
@@ -468,25 +472,27 @@
 	switch (type) {
 
 	case MOD_LOAD:
+		/* Grab any kbd already registered */
 		kbdriver_init();
 		break;
 
 	case MOD_UNLOAD:
 		s = spltty();
 
-		while (kbdriver_index >= 0 && kbdriver_index < MAX_KBD_DRIVERS) {
+		while (kbdriver_nr>0) {
+
+			sc = &kbdriver_data[kbdriver_nr];
 
 			if (sc->kbd && KBD_IS_VALID(sc->kbd)) {
-				sc = &kbdriver_data[kbdriver_index];
 				kii_unregister_input(&sc->kii_input);
 
 				kbd_release(sc->kbd, (void *)sc);
 
 				KRN_NOTICE("%s: keyboard %d unregistered",
-					__FUNCTION__, kbdriver_index);
+					__FUNCTION__, kbdriver_nr);
 			}
-
-			kbdriver_index --;
+			sc->kbd = NULL;
+			kbdriver_nr --;
 		}
 
 		splx(s);
diff -X exclude -Naur freebsd_R6/src/sys/dev/scemul/sce_vtconsole.c kgi6/src/sys/dev/scemul/sce_vtconsole.c
--- freebsd_R6/src/sys/dev/scemul/sce_vtconsole.c	2006-02-05 10:14:23.494289352 +0100
+++ kgi6/src/sys/dev/scemul/sce_vtconsole.c	2006-02-04 22:58:19.000000000 +0100
@@ -510,7 +510,7 @@
 
 	switch (type) {
 	case MOD_LOAD:
-		for(i = 0; i < 12 /* XXX */; i++)
+		for(i = 0; i < 24 /* XXX should be automatic at kbd plug */; i++)
 		{
 			make_dev(&scevt_cdevsw, i, UID_ROOT, GID_WHEEL,
 				 0600, "ttyv%r", i);
diff -X exclude -Naur freebsd_R6/src/sys/diff_se kgi6/src/sys/diff_se
--- freebsd_R6/src/sys/diff_se	1970-01-01 01:00:00.000000000 +0100
+++ kgi6/src/sys/diff_se	2006-02-05 00:02:04.022538016 +0100
@@ -0,0 +1 @@
+/data/build/p4/armor/kgi6/src/sys/i386/conf/KGI4BSD
diff -X exclude -Naur freebsd_R6/src/sys/i386/conf/KGI4BSD kgi6/src/sys/i386/conf/KGI4BSD
--- freebsd_R6/src/sys/i386/conf/KGI4BSD	2006-02-05 10:14:23.496289048 +0100
+++ kgi6/src/sys/i386/conf/KGI4BSD	2006-01-26 21:35:35.000000000 +0100
@@ -1,5 +1,5 @@
 #
-# KGI4BSD
+# KGIBSD
 #
 # For more information on this file, please read the handbook section on
 # Kernel Configuration Files:
@@ -61,6 +61,7 @@
 options 	AHD_REG_PRETTY_PRINT	# Print register bitfields in debug
 					# output.  Adds ~215k to driver.
 options 	ADAPTIVE_GIANT		# Giant mutex is adaptive.
+options 	STOP_NMI		# Stop CPUS using NMI instead of IPI
 
 # Debugging for use in -current
 options 	KDB			# Enable kernel debugger support.
@@ -71,12 +72,11 @@
 options 	WITNESS			# Enable checks to detect deadlocks and cycles
 options 	WITNESS_SKIPSPIN	# Don't run witness on spinlocks for speed
 
-# To make an SMP kernel, the next two are needed
-options 	SMP		# Symmetric MultiProcessor Kernel
-device		apic		# I/O APIC
+# To make an SMP kernel, the next two lines are needed
+options 	SMP			# Symmetric MultiProcessor Kernel
+device		apic			# I/O APIC
 
-# Bus support.  Do not remove isa, even if you have no isa slots
-device		isa
+# Bus support.
 device		eisa
 device		pci
 
@@ -98,6 +98,7 @@
 device		ahd		# AHA39320/29320 and onboard AIC79xx devices
 device		amd		# AMD 53C974 (Tekram DC-390(T))
 device		isp		# Qlogic family
+#device 	ispfw		# Firmware for QLogic HBAs- normally a module
 device		mpt		# LSI-Logic MPT-Fusion
 #device		ncr		# NCR/Symbios Logic
 device		sym		# NCR/Symbios Logic (newer chipsets + those of `ncr')
@@ -124,9 +125,11 @@
 
 # RAID controllers interfaced to the SCSI subsystem
 device		amr		# AMI MegaRAID
+device		arcmsr		# Areca SATA II RAID
 device		asr		# DPT SmartRAID V, VI and Adaptec SCSI RAID
 device		ciss		# Compaq Smart RAID 5*
 device		dpt		# DPT Smartcache III, IV - See NOTES for options
+device		hptmv		# Highpoint RocketRAID 182x
 device		iir		# Intel Integrated RAID
 device		ips		# IBM (Adaptec) ServeRAID
 device		mly		# Mylex AcceleRAID/eXtremeRAID
@@ -177,9 +180,6 @@
 
 device		agp		# support several AGP chipsets
 
-# Floating point support - do not disable.
-device		npx
-
 # Power management support (see NOTES for more options)
 #device		apm
 # Add suspend/resume support for the i8254.
@@ -193,6 +193,7 @@
 
 # Serial (COM) ports
 device		sio		# 8250, 16[45]50 based serial ports
+device		uart		# Generic UART driver
 
 # Parallel port
 device		ppc
@@ -204,8 +205,8 @@
 
 # If you've got a "dumb" serial or parallel PCI card that is
 # supported by the puc(4) glue driver, uncomment the following
-# line to enable it (connects to the sio and/or ppc drivers):
-#device         puc
+# line to enable it (connects to sio, uart and/or ppc drivers):
+#device		puc
 
 # PCI Ethernet NICs.
 device		de		# DEC/Intel DC21x4x (``Tulip'')
@@ -221,7 +222,10 @@
 device		bge		# Broadcom BCM570xx Gigabit Ethernet
 device		dc		# DEC/Intel 21143 and various workalikes
 device		fxp		# Intel EtherExpress PRO/100B (82557, 82558)
-device		pcn		# AMD Am79C97x PCI 10/100 (precedence over 'lnc')
+device		lge		# Level 1 LXT1001 gigabit Ethernet
+device		nge		# NatSemi DP83820 gigabit Ethernet
+device		nve		# nVidia nForce MCP on-board Ethernet Networking
+device		pcn		# AMD Am79C97x PCI 10/100(precedence over 'lnc')
 device		re		# RealTek 8139C+/8169/8169S/8110S
 device		rl		# RealTek 8129/8139
 device		sf		# Adaptec AIC-6915 (``Starfire'')
@@ -231,6 +235,7 @@
 device		ti		# Alteon Networks Tigon I/II gigabit Ethernet
 device		tl		# Texas Instruments ThunderLAN
 device		tx		# SMC EtherPower II (83c170 ``EPIC'')
+device		vge		# VIA VT612x gigabit Ethernet
 device		vr		# VIA Rhine, Rhine II
 device		wb		# Winbond W89C840F
 device		xl		# 3Com 3c90x (``Boomerang'', ``Cyclone'')
@@ -254,13 +259,12 @@
 device		wlan		# 802.11 support
 device		an		# Aironet 4500/4800 802.11 wireless NICs.
 device		awi		# BayStack 660 and others
+device		ral		# Ralink Technology RT2500 wireless NICs.
 device		wi		# WaveLAN/Intersil/Symbol 802.11 wireless NICs.
 #device		wl		# Older non 802.11 Wavelan wireless NIC.
 
 # Pseudo devices.
 device		loop		# Network loopback
-device		mem		# Memory and kernel memory devices
-device		io		# I/O device
 device		random		# Entropy device
 device		ether		# Ethernet support
 device		sl		# Kernel SLIP
@@ -273,11 +277,13 @@
 
 # The `bpf' device enables the Berkeley Packet Filter.
 # Be aware of the administrative consequences of enabling this!
+# Note that 'bpf' is required for DHCP.
 device		bpf		# Berkeley packet filter
 
 # USB support
 device		uhci		# UHCI PCI->USB interface
 device		ohci		# OHCI PCI->USB interface
+device		ehci		# EHCI PCI->USB interface (USB 2.0)
 device		usb		# USB Bus (required)
 #device		udbp		# USB Double Bulk Pipe devices
 device		ugen		# Generic
@@ -286,11 +292,13 @@
 device		ulpt		# Printer
 device		umass		# Disks/Mass storage - Requires scbus and da
 device		ums		# Mouse
+device		ural		# Ralink Technology RT2500USB wireless NICs
 device		urio		# Diamond Rio 500 MP3 player
 device		uscanner	# Scanners
-# USB Ethernet, requires mii
+# USB Ethernet, requires miibus
 device		aue		# ADMtek USB Ethernet
 device		axe		# ASIX Electronics USB Ethernet
+device		cdce		# Generic USB over Ethernet
 device		cue		# CATC USB Ethernet
 device		kue		# Kawasaki LSI USB Ethernet
 device		rue		# RealTek RTL8150 USB Ethernet
