Index: boot/arch/amd64/Makefile.inc
===================================================================
--- boot/arch/amd64/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/amd64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -28,13 +28,13 @@
 
 TASKS = \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/pci/pci \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/tetris/tetris \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/pci/pci \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tetris/tetris \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog
 
 build: $(BASE)/image.iso
Index: boot/arch/arm32/loader/Makefile
===================================================================
--- boot/arch/arm32/loader/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/arm32/loader/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -79,12 +79,12 @@
 COMPONENTS = \
 	$(KERNELDIR)/kernel.bin \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog \
-	$(USPACEDIR)/tetris/tetris
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog \
+	$(USPACEDIR)/app/tetris/tetris
 
 OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
Index: boot/arch/ia32/Makefile.inc
===================================================================
--- boot/arch/ia32/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/ia32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -28,13 +28,13 @@
 
 TASKS = \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/pci/pci \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/tetris/tetris \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/pci/pci \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tetris/tetris \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog
 
 build: $(BASE)/image.iso
Index: boot/arch/ia32xen/Makefile.inc
===================================================================
--- boot/arch/ia32xen/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/ia32xen/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -28,13 +28,13 @@
 
 TASKS = \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/pci/pci \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/tetris/tetris \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/pci/pci \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tetris/tetris \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog
 
 build: $(BASE)/image.iso
Index: boot/arch/mips32/loader/Makefile
===================================================================
--- boot/arch/mips32/loader/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/mips32/loader/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -79,12 +79,12 @@
 COMPONENTS = \
 	$(KERNELDIR)/kernel.bin \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/tetris/tetris \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tetris/tetris \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog
 
 OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
Index: boot/arch/ppc32/loader/Makefile
===================================================================
--- boot/arch/ppc32/loader/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/ppc32/loader/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -80,12 +80,12 @@
 COMPONENTS = \
 	$(KERNELDIR)/kernel.bin \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/tetris/tetris \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tetris/tetris \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog
 
 OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
Index: boot/arch/ppc64/loader/Makefile
===================================================================
--- boot/arch/ppc64/loader/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/ppc64/loader/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -80,12 +80,12 @@
 COMPONENTS = \
 	$(KERNELDIR)/kernel.bin \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/tetris/tetris \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tetris/tetris \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog
 
 OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
Index: boot/arch/sparc64/loader/Makefile
===================================================================
--- boot/arch/sparc64/loader/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ boot/arch/sparc64/loader/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -83,12 +83,12 @@
 COMPONENTS = \
 	$(KERNELDIR)/kernel.bin \
-	$(USPACEDIR)/ns/ns \
-	$(USPACEDIR)/init/init \
-	$(USPACEDIR)/fb/fb \
-	$(USPACEDIR)/kbd/kbd \
-	$(USPACEDIR)/console/console \
-	$(USPACEDIR)/tetris/tetris \
-	$(USPACEDIR)/tester/tester \
-	$(USPACEDIR)/klog/klog
+	$(USPACEDIR)/srv/ns/ns \
+	$(USPACEDIR)/srv/fb/fb \
+	$(USPACEDIR)/srv/kbd/kbd \
+	$(USPACEDIR)/srv/console/console \
+	$(USPACEDIR)/app/init/init \
+	$(USPACEDIR)/app/tetris/tetris \
+	$(USPACEDIR)/app/tester/tester \
+	$(USPACEDIR)/app/klog/klog
 
 OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
Index: contrib/conf/ski.conf
===================================================================
--- contrib/conf/ski.conf	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ contrib/conf/ski.conf	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -1,11 +1,11 @@
 load HelenOS/boot/kernel.bin
-romload HelenOS/uspace/ns/ns 0x400000
-romload HelenOS/uspace/init/init 0x800000
-romload HelenOS/uspace/console/console 0xc00000
-romload HelenOS/uspace/fb/fb 0x1000000
-romload HelenOS/uspace/kbd/kbd 0x1400000
-romload HelenOS/uspace/tetris/tetris 0x1800000
-romload HelenOS/uspace/klog/klog 0x1c00000
-romload HelenOS/uspace/tester/tester 0x2000000
+romload HelenOS/uspace/srv/ns/ns 0x400000
+romload HelenOS/uspace/app/init/init 0x800000
+romload HelenOS/uspace/srv/console/console 0xc00000
+romload HelenOS/uspace/srv/fb/fb 0x1000000
+romload HelenOS/uspace/srv/kbd/kbd 0x1400000
+romload HelenOS/uspace/app/tetris/tetris 0x1800000
+romload HelenOS/uspace/app/klog/klog 0x1c00000
+romload HelenOS/uspace/app/tester/tester 0x2000000
 
 
Index: uspace/Makefile
===================================================================
--- uspace/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ uspace/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -33,24 +33,24 @@
 
 DIRS = \
-	libc \
-	softint \
-	softfloat \
-	init \
-	ns \
-	fb \
-	kbd \
-	console \
-	tetris \
-	tester \
-	klog \
-	rd \
-	fs
+	lib/libc \
+	lib/softint \
+	lib/softfloat \
+	srv/ns \
+	srv/fb \
+	srv/kbd \
+	srv/console \
+	srv/rd \
+	srv/fs \
+	app/tetris \
+	app/tester \
+	app/klog \
+	app/init
 
 ifeq ($(ARCH), amd64)
-	DIRS += pci
+	DIRS += srv/pci
 endif
 
 ifeq ($(ARCH), ia32)
-	DIRS += pci
+	DIRS += srv/pci
 endif
 
Index: uspace/app/init/Makefile
===================================================================
--- uspace/app/init/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/init/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,87 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+include ../../../version
+include ../../Makefile.config
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+CFLAGS += -I../../srv/kbd/include
+
+LIBS = $(LIBC_PREFIX)/libc.a
+DEFS += -DRELEASE=\"$(RELEASE)\"
+
+ifdef REVISION
+	DEFS += "-DREVISION=\"$(REVISION)\""
+endif
+
+ifdef TIMESTAMP
+	DEFS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
+endif
+
+## Sources
+#
+
+OUTPUT = init
+SOURCES = \
+	init.c \
+	version.c
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/app/init/init.c
===================================================================
--- uspace/app/init/init.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/init/init.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup init Init
+ * @brief	Init process for testing purposes.
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#include "version.h"
+#include <stdio.h>
+
+static void test_console(void)
+{
+	int c;
+
+	while ((c = getchar()) != EOF)
+		putchar(c);
+}
+
+int main(int argc, char *argv[])
+{
+	version_print();
+
+	printf("This is init\n");
+	
+	test_console();
+
+	printf("\nBye.\n");
+
+	return 0;
+}
+
+/** @}
+ */
+
Index: uspace/app/init/init.h
===================================================================
--- uspace/app/init/init.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/init/init.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup init
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#ifndef __INIT_H__
+#define __INIT_H__
+
+#include "version.h"
+
+#endif
+
+/** @}
+ */
+
Index: uspace/app/init/version.c
===================================================================
--- uspace/app/init/version.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/init/version.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup init
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include "version.h"
+
+char *release = RELEASE;
+
+#ifdef REVISION
+	char *revision = ", revision " REVISION;
+#else
+	char *revision = "";
+#endif
+
+#ifdef TIMESTAMP
+	char *timestamp = "\nBuilt on " TIMESTAMP;
+#else
+	char *timestamp = "";
+#endif
+
+/** Print version information. */
+void version_print(void)
+{
+	printf("HelenOS init\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp);
+}
+
+/** @}
+ */
Index: uspace/app/init/version.h
===================================================================
--- uspace/app/init/version.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/init/version.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup init
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#ifndef __VERSION_H__
+#define __VERSION_H__
+
+extern void version_print(void);
+
+#endif
+
+/** @}
+ */
+
Index: uspace/app/klog/Makefile
===================================================================
--- uspace/app/klog/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/klog/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,73 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = klog
+SOURCES = \
+	klog.c
+
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/app/klog/klog.c
===================================================================
--- uspace/app/klog/klog.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/klog/klog.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup klog KLog
+ * @brief	HelenOS KLog
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#include <stdio.h>
+#include <ipc/ipc.h>
+#include <async.h>
+#include <ipc/services.h>
+#include <as.h>
+#include <sysinfo.h>
+
+/* Pointer to klog area */
+static char *klog;
+
+static void interrupt_received(ipc_callid_t callid, ipc_call_t *call)
+{
+	int i;
+	
+	async_serialize_start();
+	for (i=0; klog[i + IPC_GET_ARG1(*call)] && i < IPC_GET_ARG2(*call); i++)
+		putchar(klog[i + IPC_GET_ARG1(*call)]);
+	putchar('\n');
+	async_serialize_end();
+}
+
+int main(int argc, char *argv[])
+{
+	int res;
+	void *mapping;
+
+	printf("Kernel console output.\n");
+	
+	mapping = as_get_mappable_page(PAGE_SIZE);
+	res = ipc_call_sync_3(PHONE_NS, IPC_M_AS_AREA_RECV, 
+			      (sysarg_t) mapping, PAGE_SIZE, SERVICE_MEM_KLOG,
+			      NULL, NULL, NULL);
+	if (res) {
+		printf("Failed to initialize klog memarea\n");
+		_exit(1);
+	}
+	klog = mapping;
+
+	int inr = sysinfo_value("klog.inr");
+	int devno = sysinfo_value("klog.devno");
+	if (ipc_register_irq(inr, devno, 0, NULL)) {
+		printf("Error registering for klog service.\n");
+		return 0;
+	}
+
+	async_set_interrupt_received(interrupt_received);
+
+	async_manager();
+
+	return 0;
+}
+
+/** @}
+ */
Index: uspace/app/tester/Makefile
===================================================================
--- uspace/app/tester/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,83 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+CFLAGS += -I../../srv/kbd/include
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = tester
+SOURCES = tester.c \
+	thread/thread1.c \
+	print/print1.c \
+	fault/fault1.c \
+	fault/fault2.c \
+	ipc/register.c \
+	ipc/connect.c \
+	ipc/send_async.c \
+	ipc/send_sync.c \
+	ipc/answer.c \
+	ipc/hangup.c
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/app/tester/fault/fault1.c
===================================================================
--- uspace/app/tester/fault/fault1.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/fault/fault1.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2005 Jakub Vana
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "../tester.h"
+
+char * test_fault1(bool quiet)
+{
+	((int *)(0))[1] = 0;
+	
+	return "Survived write to NULL";
+}
Index: uspace/app/tester/fault/fault1.def
===================================================================
--- uspace/app/tester/fault/fault1.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/fault/fault1.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"fault1",
+	"Write to NULL",
+	&test_fault1,
+	false
+},
Index: uspace/app/tester/fault/fault2.c
===================================================================
--- uspace/app/tester/fault/fault2.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/fault/fault2.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2005 Jakub Vana
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "../tester.h"
+
+char * test_fault2(bool quiet)
+{
+	volatile long long var;
+	volatile int var1;
+	
+	var1 = *((int *) (((char *) (&var)) + 1));
+	
+	return "Survived unaligned read";
+}
Index: uspace/app/tester/fault/fault2.def
===================================================================
--- uspace/app/tester/fault/fault2.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/fault/fault2.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"fault2",
+	"Unaligned read",
+	&test_fault2,
+	false
+},
Index: uspace/app/tester/ipc/answer.c
===================================================================
--- uspace/app/tester/ipc/answer.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/answer.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include "../tester.h"
+
+char * test_answer(bool quiet)
+{
+	int i,cnt, errn = 0;
+	char c;
+
+	cnt = 0;
+	for (i = 0;i < 50; i++) {
+		if (callids[i]) {
+			printf("%d: %P\n", cnt, callids[i]);
+			cnt++;
+		}
+		if (cnt >= 10)
+			break;
+	}
+	if (!cnt)
+		return;
+	printf("Choose message:\n");
+	do {
+		c = getchar();
+	} while (c < '0' || (c-'0') >= cnt);
+	cnt = c - '0' + 1;
+	
+	for (i = 0; cnt; i++)
+		if (callids[i])
+			cnt--;
+	i -= 1;
+
+	printf("Normal (n) or hangup (h) or error(e) message?\n");
+	do {
+		c = getchar();
+	} while (c != 'n' && c != 'h' && c != 'e');
+	if (c == 'n')
+		errn = 0;
+	else if (c == 'h')
+		errn = EHANGUP;
+	else if (c == 'e')
+		errn = ENOENT;
+	printf("Answering %P\n", callids[i]);
+	ipc_answer_fast(callids[i], errn, 0, 0);
+	callids[i] = 0;
+	
+	return NULL;
+}
Index: uspace/app/tester/ipc/answer.def
===================================================================
--- uspace/app/tester/ipc/answer.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/answer.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"answer",
+	"IPC answer message test",
+	&test_answer,
+	true
+},
Index: uspace/app/tester/ipc/connect.c
===================================================================
--- uspace/app/tester/ipc/connect.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/connect.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include "../tester.h"
+
+char * test_connect(bool quiet)
+{
+	char c;
+	int svc;
+	int phid;
+
+	printf("Choose one service: 0:10000....9:10009\n");
+	do {
+		c = getchar();
+	} while (c < '0' || c > '9');
+	
+	svc = IPC_TEST_START + c - '0';
+	if (svc == myservice)
+		return "Currently cannot connect to myself, update test";
+	
+	printf("Connecting to %d..", svc);
+	phid = ipc_connect_me_to(PHONE_NS, svc, 0);
+	if (phid > 0) {
+		printf("phoneid: %d\n", phid);
+		phones[phid] = 1;
+	} else
+		return "Error";
+	
+	return NULL;
+}
Index: uspace/app/tester/ipc/connect.def
===================================================================
--- uspace/app/tester/ipc/connect.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/connect.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"connect",
+	"IPC connection test (connect to other service)",
+	&test_connect,
+	true
+},
Index: uspace/app/tester/ipc/hangup.c
===================================================================
--- uspace/app/tester/ipc/hangup.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/hangup.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include "../tester.h"
+
+char * test_hangup(bool quiet)
+{
+	char c;
+	int res;
+	int phoneid;
+
+	printf("Select phoneid to hangup: 2-9\n");
+	do {
+		c = getchar();
+	} while (c < '2' || c > '9');
+	phoneid = c - '0';
+	
+	printf("Hanging up...");
+	res = ipc_hangup(phoneid);
+	printf("done: %d\n", phoneid);	
+	
+	return NULL;
+}
Index: uspace/app/tester/ipc/hangup.def
===================================================================
--- uspace/app/tester/ipc/hangup.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/hangup.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"hangup",
+	"IPC hangup test",
+	&test_hangup,
+	true
+},
Index: uspace/app/tester/ipc/register.c
===================================================================
--- uspace/app/tester/ipc/register.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/register.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <async.h>
+#include "../tester.h"
+
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	ipc_callid_t callid;
+	ipc_call_t call;
+	ipcarg_t phonehash = icall->in_phone_hash;
+	int retval;
+	int i;
+
+	printf("Connected phone: %P, accepting\n", icall->in_phone_hash);
+	ipc_answer_fast(iid, 0, 0, 0);
+	for (i = 0; i < 1024; i++)
+		if (!connections[i]) {
+			connections[i] = phonehash;
+			break;
+		}
+	
+	while (1) {
+		callid = async_get_call(&call);
+		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			printf("Phone (%P) hung up.\n", phonehash);
+			retval = 0;
+			break;
+		default:
+			printf("Received message from %P: %X\n", phonehash,callid);
+			for (i = 0; i < 1024; i++)
+				if (!callids[i]) {
+					callids[i] = callid;
+					break;
+				}
+			continue;
+		}
+		ipc_answer_fast(callid, retval, 0, 0);
+	}
+}
+
+char * test_register(bool quiet)
+{
+	int i;
+	
+	async_set_client_connection(client_connection);
+
+	for (i = IPC_TEST_START; i < IPC_TEST_START + 10; i++) {
+		ipcarg_t phonead;
+		int res = ipc_connect_to_me(PHONE_NS, i, 0, &phonead);
+		if (!res)
+			break;
+		printf("Failed registering as %d..:%d\n", i, res);
+	}
+	printf("Registered as service: %d\n", i);
+	myservice = i;
+	
+	return NULL;
+}
Index: uspace/app/tester/ipc/register.def
===================================================================
--- uspace/app/tester/ipc/register.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/register.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"register",
+	"IPC registration test",
+	&test_register,
+	true
+},
Index: uspace/app/tester/ipc/send_async.c
===================================================================
--- uspace/app/tester/ipc/send_async.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/send_async.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include "../tester.h"
+
+static void callback(void *_private, int retval, ipc_call_t *data)
+{
+	printf("Received response to msg %d - retval: %d.\n", _private, retval);
+}
+
+char * test_send_async(bool quiet)
+{
+	int phoneid;
+	int res;
+	static int msgid = 1;
+	char c;
+
+	printf("Select phoneid to send msg: 2-9\n");
+	do {
+		c = getchar();
+	} while (c < '2' || c > '9');
+	phoneid = c - '0';
+
+	ipc_call_async(phoneid, 2000, 0, (void *) msgid, callback, 1);
+	printf("Async sent - msg %d\n", msgid);
+	msgid++;
+	
+	return NULL;
+}
Index: uspace/app/tester/ipc/send_async.def
===================================================================
--- uspace/app/tester/ipc/send_async.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/send_async.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"send_async",
+	"IPC send async message test",
+	&test_send_async,
+	true
+},
Index: uspace/app/tester/ipc/send_sync.c
===================================================================
--- uspace/app/tester/ipc/send_sync.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/send_sync.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include "../tester.h"
+
+char * test_send_sync(bool quiet)
+{
+	int phoneid;
+	int res;
+	static int msgid = 1;
+	char c;
+
+	printf("Select phoneid to send msg: 2-9\n");
+	do {
+		c = getchar();
+	} while (c < '2' || c > '9');
+	phoneid = c - '0';
+	
+	printf("Sending msg...");
+	res = ipc_call_sync_2(phoneid, 2000, 0, 0, NULL, NULL);
+	printf("done: %d\n", res);
+	
+	return NULL;
+}
Index: uspace/app/tester/ipc/send_sync.def
===================================================================
--- uspace/app/tester/ipc/send_sync.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/ipc/send_sync.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"send_sync",
+	"IPC send sync message test",
+	&test_send_sync,
+	true
+},
Index: uspace/app/tester/print/print1.c
===================================================================
--- uspace/app/tester/print/print1.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/print/print1.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include "../tester.h"
+
+#define BUFFER_SIZE 32
+
+char * test_print1(bool quiet)
+{
+	if (!quiet) {
+		int retval;
+		unsigned int nat = 0x12345678u;
+		
+		char buffer[BUFFER_SIZE];
+		
+		printf(" text 10.8s %*.*s \n", 5, 3, "text");
+		printf(" very long text 10.8s %10.8s \n", "very long text");
+		printf(" text 8.10s %8.10s \n", "text");
+		printf(" very long text 8.10s %8.10s \n", "very long text");
+		
+		printf(" char: c '%c', 3.2c '%3.2c', -3.2c '%-3.2c', 2.3c '%2.3c', -2.3c '%-2.3c' \n",'a', 'b', 'c', 'd', 'e' );
+		printf(" int: d '%d', 3.2d '%3.2d', -3.2d '%-3.2d', 2.3d '%2.3d', -2.3d '%-2.3d' \n",1, 1, 1, 1, 1 );
+		printf(" -int: d '%d', 3.2d '%3.2d', -3.2d '%-3.2d', 2.3d '%2.3d', -2.3d '%-2.3d' \n",-1, -1, -1, -1, -1 );
+		printf(" 0xint: x '%#x', 5.3x '%#5.3x', -5.3x '%#-5.3x', 3.5x '%#3.5x', -3.5x '%#-3.5x' \n",17, 17, 17, 17, 17 );
+		
+		printf("'%#llx' 64bit, '%#x' 32bit, '%#hhx' 8bit, '%#hx' 16bit, unative_t '%#zx'. '%#llx' 64bit and '%s' string.\n", 0x1234567887654321ll, 0x12345678, 0x12, 0x1234, nat, 0x1234567887654321ull, "Lovely string" );
+		
+		printf(" Print to NULL '%s'\n", NULL);
+		
+		retval = snprintf(buffer, BUFFER_SIZE, "Short text without parameters.");
+		printf("Result is: '%s', retval = %d\n", buffer, retval);
+		
+		retval = snprintf(buffer, BUFFER_SIZE, "Very very very long text without parameters.");
+		printf("Result is: '%s', retval = %d\n", buffer, retval);
+		
+		printf("Print short text to %d char long buffer via snprintf.\n", BUFFER_SIZE);
+		retval = snprintf(buffer, BUFFER_SIZE, "Short %s", "text");
+		printf("Result is: '%s', retval = %d\n", buffer, retval);
+		
+		printf("Print long text to %d char long buffer via snprintf.\n", BUFFER_SIZE);
+		retval = snprintf(buffer, BUFFER_SIZE, "Very long %s. This text`s length is more than %d. We are interested in the result.", "text" , BUFFER_SIZE);
+		printf("Result is: '%s', retval = %d\n", buffer, retval);
+	}
+	
+	return NULL;
+}
Index: uspace/app/tester/print/print1.def
===================================================================
--- uspace/app/tester/print/print1.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/print/print1.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"print1",
+	"Printf test",
+	&test_print1,
+	true
+},
Index: uspace/app/tester/tester.c
===================================================================
--- uspace/app/tester/tester.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/tester.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * Copyright (c) 2007 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup tester User space Tester
+ * @brief	User space testing infrastructure.
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include "tester.h"
+
+int myservice = 0;
+int phones[MAX_PHONES];
+int connections[MAX_CONNECTIONS];
+ipc_callid_t callids[MAX_CONNECTIONS];
+
+test_t tests[] = {
+#include "thread/thread1.def"
+#include "print/print1.def"
+#include "fault/fault1.def"
+#include "fault/fault2.def"
+#include "ipc/register.def"
+#include "ipc/connect.def"
+#include "ipc/send_async.def"
+#include "ipc/send_sync.def"
+#include "ipc/answer.def"
+#include "ipc/hangup.def"
+	{NULL, NULL, NULL}
+};
+
+static bool run_test(test_t *test)
+{
+	printf("%s\t\t%s\n", test->name, test->desc);
+	
+	/* Execute the test */
+	char * ret = test->entry(false);
+	
+	if (ret == NULL) {
+		printf("Test passed\n\n");
+		return true;
+	}
+
+	printf("%s\n\n", ret);
+	return false;
+}
+
+static void run_safe_tests(void)
+{
+}
+
+static void list_tests(void)
+{
+	test_t *test;
+	char c = 'a';
+	
+	for (test = tests; test->name != NULL; test++, c++)
+		printf("%c\t%s\t\t%s%s\n", c, test->name, test->desc, (test->safe ? "" : " (unsafe)"));
+	
+	printf("*\t\t\tRun all safe tests\n");
+}
+
+int main(void)
+{
+	while (1) {
+		char c;
+		test_t *test;
+		
+		list_tests();
+		printf("> ");
+		
+		c = getchar();
+		printf("%c\n", c);
+		
+		if ((c >= 'a') && (c <= 'z')) {
+			for (test = tests; test->name != NULL; test++, c--)
+				if (c == 'a')
+					break;
+			
+			if (c > 'a')
+				printf("Unknown test\n\n");
+			else
+				run_test(test);
+		} else if (c == '*')
+			run_safe_tests();
+		else
+			printf("Invalid test\n\n");
+	}
+}
+
+/** @}
+ */
Index: uspace/app/tester/tester.h
===================================================================
--- uspace/app/tester/tester.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/tester.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2007 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup tester
+ * @{
+ */
+/** @file
+ */
+
+#ifndef TESTER_H_
+#define TESTER_H_
+
+#include <types.h>
+#include <bool.h>
+#include <ipc/ipc.h>
+
+#define IPC_TEST_START	10000
+#define MAX_PHONES		20
+#define MAX_CONNECTIONS 50
+
+extern int myservice;
+extern int phones[MAX_PHONES];
+extern int connections[MAX_CONNECTIONS];
+extern ipc_callid_t callids[MAX_CONNECTIONS];
+
+typedef char * (* test_entry_t)(bool);
+
+typedef struct {
+	char * name;
+	char * desc;
+	test_entry_t entry;
+	bool safe;
+} test_t;
+
+extern char * test_thread1(bool quiet);
+extern char * test_print1(bool quiet);
+extern char * test_fault1(bool quiet);
+extern char * test_fault2(bool quiet);
+extern char * test_register(bool quiet);
+extern char * test_connect(bool quiet);
+extern char * test_send_async(bool quiet);
+extern char * test_send_sync(bool quiet);
+extern char * test_answer(bool quiet);
+extern char * test_hangup(bool quiet);
+
+extern test_t tests[];
+
+#endif
+
+/** @}
+ */
Index: uspace/app/tester/thread/thread1.c
===================================================================
--- uspace/app/tester/thread/thread1.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/thread/thread1.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2005 Jakub Vana
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define THREADS 5
+
+#include <atomic.h>
+#include <thread.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "../tester.h"
+
+static atomic_t finish;
+static atomic_t threads_finished;
+static bool sh_quiet;
+
+static void threadtest(void *data)
+{
+	thread_detach(thread_get_id());
+
+	while (atomic_get(&finish)) {
+		if (!sh_quiet)
+			printf("%llu ", thread_get_id());
+		usleep(100000);
+	}
+	atomic_inc(&threads_finished);
+}
+
+char * test_thread1(bool quiet)
+{
+	unsigned int i, total = 0;
+	sh_quiet = quiet;
+	
+	atomic_set(&finish, 1);
+	atomic_set(&threads_finished, 0);
+
+	for (i = 0; i < THREADS; i++) {  
+		if (thread_create(threadtest, NULL, "threadtest", NULL) < 0) {
+			if (!quiet)
+				printf("Could not create thread %d\n", i);
+			break;
+		}
+		total++;
+	}
+	
+	if (!quiet)
+		printf("Running threads for 10 seconds...\n");
+	sleep(10);
+	
+	atomic_set(&finish, 0);
+	while (atomic_get(&threads_finished) < total) {
+		if (!quiet)
+			printf("Threads left: %d\n", total - atomic_get(&threads_finished));
+		sleep(1);
+	}
+	
+	return NULL;
+}
Index: uspace/app/tester/thread/thread1.def
===================================================================
--- uspace/app/tester/thread/thread1.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tester/thread/thread1.def	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+{
+	"thread1",
+	"Thread test",
+	&test_thread1,
+	true
+},
Index: uspace/app/tetris/Makefile
===================================================================
--- uspace/app/tetris/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,35 @@
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+OUTPUT = tetris
+SOURCES = shapes.c scores.c input.c tetris.c screen.c
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend *.o
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/app/tetris/input.c
===================================================================
--- uspace/app/tetris/input.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/input.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,187 @@
+/*	$OpenBSD: input.c,v 1.12 2005/04/13 02:33:08 deraadt Exp $	*/
+/*    $NetBSD: input.c,v 1.3 1996/02/06 22:47:33 jtc Exp $    */
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)input.c	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+/*
+ * Tetris input.
+ */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <stdio.h>
+
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "input.h"
+#include "tetris.h"
+
+#include <async.h>
+#include "../../srv/console/console.h"
+
+/* return true iff the given timeval is positive */
+#define	TV_POS(tv) \
+	((tv)->tv_sec > 0 || ((tv)->tv_sec == 0 && (tv)->tv_usec > 0))
+
+/* subtract timeval `sub' from `res' */
+#define	TV_SUB(res, sub) \
+	(res)->tv_sec -= (sub)->tv_sec; \
+	(res)->tv_usec -= (sub)->tv_usec; \
+	if ((res)->tv_usec < 0) { \
+		(res)->tv_usec += 1000000; \
+		(res)->tv_sec--; \
+	}
+
+/* We will use a hack here - if lastchar is non-zero, it is
+ * the last character read. We will somehow simulate the select
+ * semantics.
+ */
+static aid_t getchar_inprog = 0;
+static char lastchar = '\0';
+
+/*
+ * Do a `read wait': select for reading from stdin, with timeout *tvp.
+ * On return, modify *tvp to reflect the amount of time spent waiting.
+ * It will be positive only if input appeared before the time ran out;
+ * otherwise it will be zero or perhaps negative.
+ *
+ * If tvp is nil, wait forever, but return if select is interrupted.
+ *
+ * Return 0 => no input, 1 => can read() from stdin
+ *
+ */
+int
+rwait(struct timeval *tvp)
+{
+	struct timeval starttv, endtv, *s;
+	static ipc_call_t charcall;
+	ipcarg_t rc;
+
+	/*
+	 * Someday, select() will do this for us.
+	 * Just in case that day is now, and no one has
+	 * changed this, we use a temporary.
+	 */
+	if (tvp) {
+		(void) gettimeofday(&starttv, NULL);
+		endtv = *tvp;
+		s = &endtv;
+	} else
+		s = NULL;
+
+	if (!lastchar) {
+		if (!getchar_inprog)
+			getchar_inprog = async_send_2(1,CONSOLE_GETCHAR,0,0,&charcall);
+		if (!s) 
+			async_wait_for(getchar_inprog, &rc);
+		else if (async_wait_timeout(getchar_inprog, &rc, s->tv_usec) == ETIMEOUT) {
+			tvp->tv_sec = 0;
+			tvp->tv_usec = 0;
+			return (0);
+		}
+		getchar_inprog = 0;
+		if (rc) {
+			stop("end of file, help");
+		}
+		lastchar = IPC_GET_ARG1(charcall);
+	}
+	if (tvp) {
+		/* since there is input, we may not have timed out */
+		(void) gettimeofday(&endtv, NULL);
+		TV_SUB(&endtv, &starttv);
+		TV_SUB(tvp, &endtv);	/* adjust *tvp by elapsed time */
+	}
+	return (1);
+}
+
+/*
+ * `sleep' for the current turn time (using select).
+ * Eat any input that might be available.
+ */
+void
+tsleep(void)
+{
+	struct timeval tv;
+
+	tv.tv_sec = 0;
+	tv.tv_usec = fallrate;
+	while (TV_POS(&tv))
+		if (rwait(&tv)) {
+			lastchar = '\0';
+		} else
+			break;
+}
+
+/*
+ * getchar with timeout.
+ */
+int
+tgetchar(void)
+{
+	static struct timeval timeleft;
+	char c;
+
+	/*
+	 * Reset timeleft to fallrate whenever it is not positive.
+	 * In any case, wait to see if there is any input.  If so,
+	 * take it, and update timeleft so that the next call to
+	 * tgetchar() will not wait as long.  If there is no input,
+	 * make timeleft zero or negative, and return -1.
+	 *
+	 * Most of the hard work is done by rwait().
+	 */
+	if (!TV_POS(&timeleft)) {
+		faster();	/* go faster */
+		timeleft.tv_sec = 0;
+		timeleft.tv_usec = fallrate;
+	}
+	if (!rwait(&timeleft))
+		return (-1);
+	c = lastchar;
+	lastchar = '\0';
+	return ((int)(unsigned char)c);
+}
+
+/** @}
+ */
+
Index: uspace/app/tetris/input.h
===================================================================
--- uspace/app/tetris/input.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/input.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,50 @@
+/*	$OpenBSD: input.h,v 1.5 2003/06/03 03:01:41 millert Exp $	*/
+/*	$NetBSD: input.h,v 1.2 1995/04/22 07:42:36 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)input.h	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+int	rwait(struct timeval *);
+int	tgetchar(void);
+void	tsleep(void);
+
+/** @}
+ */
+
Index: uspace/app/tetris/pathnames.h
===================================================================
--- uspace/app/tetris/pathnames.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/pathnames.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+/*	$OpenBSD: pathnames.h,v 1.3 2003/06/03 03:01:41 millert Exp $	*/
+/*	$NetBSD: pathnames.h,v 1.2 1995/04/22 07:42:37 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)pathnames.h	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+#define _PATH_SCOREFILE	"/var/games/tetris.scores"
+
+
+/** @}
+ */
+
Index: uspace/app/tetris/scores.c
===================================================================
--- uspace/app/tetris/scores.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/scores.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,543 @@
+/*	$OpenBSD: scores.c,v 1.11 2006/04/20 03:25:36 ray Exp $	*/
+/*	$NetBSD: scores.c,v 1.2 1995/04/22 07:42:38 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)scores.c	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+/*
+ * Score code for Tetris, by Darren Provine (kilroy@gboro.glassboro.edu)
+ * modified 22 January 1992, to limit the number of entries any one
+ * person has.
+ *
+ * Major whacks since then.
+ */
+#include <errno.h>
+/* #include <err.h> */
+/* #include <fcntl.h> */
+/* #include <pwd.h> */
+ #include <stdio.h>
+/* #include <stdlib.h> */
+#include <string.h>
+/* #include <time.h> */
+/* #include <term.h> */
+/* #include <unistd.h> */
+/* #include <sys/param.h> */
+/* #include <sys/stat.h> */
+/* #include <sys/types.h> */
+
+#include "pathnames.h"
+#include "screen.h"
+#include "tetris.h"
+#include "scores.h"
+
+/*
+ * Within this code, we can hang onto one extra "high score", leaving
+ * room for our current score (whether or not it is high).
+ *
+ * We also sometimes keep tabs on the "highest" score on each level.
+ * As long as the scores are kept sorted, this is simply the first one at
+ * that level.
+ */
+#define NUMSPOTS (MAXHISCORES + 1)
+#define	NLEVELS (MAXLEVEL + 1)
+
+/* static time_t now; */
+/* static int nscores; */
+/* static int gotscores; */
+/* static struct highscore scores[NUMSPOTS]; */
+static struct highscore scores[NUMSPOTS];
+
+/* static int checkscores(struct highscore *, int); */
+/* static int cmpscores(const void *, const void *); */
+/* static void getscores(FILE **); */
+/* static void printem(int, int, struct highscore *, int, const char *); */
+/* static char *thisuser(void); */
+
+void showscores(int firstgame)
+{
+	int i;
+	
+	clear_screen();
+	moveto(10, 0);
+	printf("\tRank \tLevel \tName\t                     points\n");
+	printf("\t========================================================\n");
+	for (i = 0; i < NUMSPOTS - 1; i++) {
+		printf("\t%6d %6d %-16s %20d\n", i+1, scores[i].hs_level, scores[i].hs_name, scores[i].hs_score);
+	}
+	if (!firstgame) {
+		printf("\t========================================================\n");
+		printf("\t  Last %6d %-16s %20d\n", scores[NUMSPOTS - 1].hs_level, scores[NUMSPOTS - 1].hs_name, scores[NUMSPOTS - 1].hs_score);
+	}
+	printf("\n\n\n\n\tPress any key to return to main menu.");
+	getchar();
+}
+
+/** Copy from hiscore table score with index src to dest
+ *
+ */
+static void copyhiscore(int dest, int src)
+{
+	strcpy(scores[dest].hs_name, scores[src].hs_name);
+	scores[dest].hs_score = scores[src].hs_score; 	
+	scores[dest].hs_level = scores[src].hs_level; 
+}
+
+void insertscore(int score, int level)
+{
+	int i,j;
+	int key;
+
+	
+	clear_screen();
+	moveto(10 , 10);
+	puts("Insert your name: ");
+	strncpy(scores[NUMSPOTS - 1].hs_name, "Player", MAXLOGNAME);
+	i = 6;
+
+	moveto(10 , 28);
+	printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................");
+	key = getchar();	
+	while(key != '\n') {
+		if (key == '\b') {
+			if (i > 0) 
+				scores[NUMSPOTS - 1].hs_name[--i] = '\0';	
+		} else {
+			if (i < (MAXLOGNAME - 1))
+				scores[NUMSPOTS - 1].hs_name[i++] = key;	
+				scores[NUMSPOTS - 1].hs_name[i] = '\0';	
+		}
+		
+		moveto(10 , 28);
+		printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................");
+	
+		key = getchar();	
+	}
+	
+	scores[NUMSPOTS - 1].hs_score = score;	
+	scores[NUMSPOTS - 1].hs_level = level;
+	
+	i = NUMSPOTS-1;	
+	while ((i > 0) && (scores[i - 1].hs_score < score))
+		i--;
+
+	for (j = NUMSPOTS - 2; j > i; j--) {
+		copyhiscore(j,j-1);
+	}
+	copyhiscore(i, NUMSPOTS - 1);	
+}
+
+void initscores(void)
+{
+	int i;
+	for(i = 0; i < NUMSPOTS; i++) {
+		strncpy(scores[i].hs_name, "HelenOS Team", MAXLOGNAME);
+		scores[i].hs_score = (NUMSPOTS - i) * 200;	
+		scores[i].hs_level = (i + 1 > MAXLEVEL?MAXLEVEL:i + 1);
+	}
+}
+
+/*
+ * Read the score file.  Can be called from savescore (before showscores)
+ * or showscores (if savescore will not be called).  If the given pointer
+ * is not NULL, sets *fpp to an open file pointer that corresponds to a
+ * read/write score file that is locked with LOCK_EX.  Otherwise, the
+ * file is locked with LOCK_SH for the read and closed before return.
+ *
+ * Note, we assume closing the stdio file releases the lock.
+ */
+/* static void */
+/* getscores(FILE **fpp) */
+/* { */
+/* 	int sd, mint, lck, mask, i; */
+/* 	char *mstr, *human; */
+/* 	FILE *sf; */
+
+/* 	if (fpp != NULL) { */
+/* 		mint = O_RDWR | O_CREAT; */
+/* 		mstr = "r+"; */
+/* 		human = "read/write"; */
+/* 		lck = LOCK_EX; */
+/* 	} else { */
+/* 		mint = O_RDONLY; */
+/* 		mstr = "r"; */
+/* 		human = "reading"; */
+/* 		lck = LOCK_SH; */
+/* 	} */
+/* 	setegid(egid); */
+/* 	mask = umask(S_IWOTH); */
+/* 	sd = open(_PATH_SCOREFILE, mint, 0666); */
+/* 	(void)umask(mask); */
+/* 	setegid(gid); */
+/* 	if (sd < 0) { */
+/* 		if (fpp == NULL) { */
+/* 			nscores = 0; */
+/* 			return; */
+/* 		} */
+/* 		err(1, "cannot open %s for %s", _PATH_SCOREFILE, human); */
+/* 	} */
+/* 	setegid(egid); */
+/* 	if ((sf = fdopen(sd, mstr)) == NULL) */
+/* 		err(1, "cannot fdopen %s for %s", _PATH_SCOREFILE, human); */
+/* 	setegid(gid); */
+
+/* 	/\* */
+/* 	 * Grab a lock. */
+/* 	 *\/ */
+/* 	if (flock(sd, lck)) */
+/* 		warn("warning: score file %s cannot be locked", */
+/* 		    _PATH_SCOREFILE); */
+
+/* 	nscores = fread(scores, sizeof(scores[0]), MAXHISCORES, sf); */
+/* 	if (ferror(sf)) */
+/* 		err(1, "error reading %s", _PATH_SCOREFILE); */
+/* 	for (i = 0; i < nscores; i++) */
+/* 		if (scores[i].hs_level < MINLEVEL || */
+/* 		    scores[i].hs_level > MAXLEVEL) */
+/* 			errx(1, "scorefile %s corrupt", _PATH_SCOREFILE); */
+
+/* 	if (fpp) */
+/* 		*fpp = sf; */
+/* 	else */
+/* 		(void)fclose(sf); */
+/* } */
+
+void
+savescore(int level)
+{
+	return;
+}
+/* 	struct highscore *sp; */
+/* 	int i; */
+/* 	int change; */
+/* 	FILE *sf; */
+/* 	const char *me; */
+
+/* 	getscores(&sf); */
+/* 	gotscores = 1; */
+/* 	(void)time(&now); */
+
+/* 	/\* */
+/* 	 * Allow at most one score per person per level -- see if we */
+/* 	 * can replace an existing score, or (easiest) do nothing. */
+/* 	 * Otherwise add new score at end (there is always room). */
+/* 	 *\/ */
+/* 	change = 0; */
+/* 	me = thisuser(); */
+/* 	for (i = 0, sp = &scores[0]; i < nscores; i++, sp++) { */
+/* 		if (sp->hs_level != level || strcmp(sp->hs_name, me) != 0) */
+/* 			continue; */
+/* 		if (score > sp->hs_score) { */
+/* 			(void)printf("%s bettered %s %d score of %d!\n", */
+/* 			    "\nYou", "your old level", level, */
+/* 			    sp->hs_score * sp->hs_level); */
+/* 			sp->hs_score = score;	/\* new score *\/ */
+/* 			sp->hs_time = now;	/\* and time *\/ */
+/* 			change = 1; */
+/* 		} else if (score == sp->hs_score) { */
+/* 			(void)printf("%s tied %s %d high score.\n", */
+/* 			    "\nYou", "your old level", level); */
+/* 			sp->hs_time = now;	/\* renew it *\/ */
+/* 			change = 1;		/\* gotta rewrite, sigh *\/ */
+/* 		} /\* else new score < old score: do nothing *\/ */
+/* 		break; */
+/* 	} */
+/* 	if (i >= nscores) { */
+/* 		strlcpy(sp->hs_name, me, sizeof sp->hs_name); */
+/* 		sp->hs_level = level; */
+/* 		sp->hs_score = score; */
+/* 		sp->hs_time = now; */
+/* 		nscores++; */
+/* 		change = 1; */
+/* 	} */
+
+/* 	if (change) { */
+/* 		/\* */
+/* 		 * Sort & clean the scores, then rewrite. */
+/* 		 *\/ */
+/* 		nscores = checkscores(scores, nscores); */
+/* 		rewind(sf); */
+/* 		if (fwrite(scores, sizeof(*sp), nscores, sf) != nscores || */
+/* 		    fflush(sf) == EOF) */
+/* 			warnx("error writing %s: %s\n\t-- %s", */
+/* 			    _PATH_SCOREFILE, strerror(errno), */
+/* 			    "high scores may be damaged"); */
+/* 	} */
+/* 	(void)fclose(sf);	/\* releases lock *\/ */
+/* } */
+
+/*
+ * Get login name, or if that fails, get something suitable.
+ * The result is always trimmed to fit in a score.
+ */
+/* static char * */
+/* thisuser(void) */
+/* { */
+/* 	const char *p; */
+/* 	struct passwd *pw; */
+/* 	static char u[sizeof(scores[0].hs_name)]; */
+
+/* 	if (u[0]) */
+/* 		return (u); */
+/* 	p = getlogin(); */
+/* 	if (p == NULL || *p == '\0') { */
+/* 		pw = getpwuid(getuid()); */
+/* 		if (pw != NULL) */
+/* 			p = pw->pw_name; */
+/* 		else */
+/* 			p = "  ???"; */
+/* 	} */
+/* 	strlcpy(u, p, sizeof(u)); */
+/* 	return (u); */
+/* } */
+
+/*
+ * Score comparison function for qsort.
+ *
+ * If two scores are equal, the person who had the score first is
+ * listed first in the highscore file.
+ */
+/* static int */
+/* cmpscores(const void *x, const void *y) */
+/* { */
+/* 	const struct highscore *a, *b; */
+/* 	long l; */
+
+/* 	a = x; */
+/* 	b = y; */
+/* 	l = (long)b->hs_level * b->hs_score - (long)a->hs_level * a->hs_score; */
+/* 	if (l < 0) */
+/* 		return (-1); */
+/* 	if (l > 0) */
+/* 		return (1); */
+/* 	if (a->hs_time < b->hs_time) */
+/* 		return (-1); */
+/* 	if (a->hs_time > b->hs_time) */
+/* 		return (1); */
+/* 	return (0); */
+/* } */
+
+/*
+ * If we've added a score to the file, we need to check the file and ensure
+ * that this player has only a few entries.  The number of entries is
+ * controlled by MAXSCORES, and is to ensure that the highscore file is not
+ * monopolised by just a few people.  People who no longer have accounts are
+ * only allowed the highest score.  Scores older than EXPIRATION seconds are
+ * removed, unless they are someone's personal best.
+ * Caveat:  the highest score on each level is always kept.
+ */
+/* static int */
+/* checkscores(struct highscore *hs, int num) */
+/* { */
+/* 	struct highscore *sp; */
+/* 	int i, j, k, numnames; */
+/* 	int levelfound[NLEVELS]; */
+/* 	struct peruser { */
+/* 		char *name; */
+/* 		int times; */
+/* 	} count[NUMSPOTS]; */
+/* 	struct peruser *pu; */
+
+/* 	/\* */
+/* 	 * Sort so that highest totals come first. */
+/* 	 * */
+/* 	 * levelfound[i] becomes set when the first high score for that */
+/* 	 * level is encountered.  By definition this is the highest score. */
+/* 	 *\/ */
+/* 	qsort((void *)hs, nscores, sizeof(*hs), cmpscores); */
+/* 	for (i = MINLEVEL; i < NLEVELS; i++) */
+/* 		levelfound[i] = 0; */
+/* 	numnames = 0; */
+/* 	for (i = 0, sp = hs; i < num;) { */
+/* 		/\* */
+/* 		 * This is O(n^2), but do you think we care? */
+/* 		 *\/ */
+/* 		for (j = 0, pu = count; j < numnames; j++, pu++) */
+/* 			if (strcmp(sp->hs_name, pu->name) == 0) */
+/* 				break; */
+/* 		if (j == numnames) { */
+/* 			/\* */
+/* 			 * Add new user, set per-user count to 1. */
+/* 			 *\/ */
+/* 			pu->name = sp->hs_name; */
+/* 			pu->times = 1; */
+/* 			numnames++; */
+/* 		} else { */
+/* 			/\* */
+/* 			 * Two ways to keep this score: */
+/* 			 * - Not too many (per user), still has acct, & */
+/* 			 *	score not dated; or */
+/* 			 * - High score on this level. */
+/* 			 *\/ */
+/* 			if ((pu->times < MAXSCORES && */
+/* 			     getpwnam(sp->hs_name) != NULL && */
+/* 			     sp->hs_time + EXPIRATION >= now) || */
+/* 			    levelfound[sp->hs_level] == 0) */
+/* 				pu->times++; */
+/* 			else { */
+/* 				/\* */
+/* 				 * Delete this score, do not count it, */
+/* 				 * do not pass go, do not collect $200. */
+/* 				 *\/ */
+/* 				num--; */
+/* 				for (k = i; k < num; k++) */
+/* 					hs[k] = hs[k + 1]; */
+/* 				continue; */
+/* 			} */
+/* 		} */
+/* 		levelfound[sp->hs_level] = 1; */
+/* 		i++, sp++; */
+/* 	} */
+/* 	return (num > MAXHISCORES ? MAXHISCORES : num); */
+/* } */
+
+/*
+ * Show current scores.  This must be called after savescore, if
+ * savescore is called at all, for two reasons:
+ * - Showscores munches the time field.
+ * - Even if that were not the case, a new score must be recorded
+ *   before it can be shown anyway.
+ */
+/*
+void
+showscores(int level)
+{
+	return;
+}
+*/
+/* 	struct highscore *sp; */
+/* 	int i, n, c; */
+/* 	const char *me; */
+/* 	int levelfound[NLEVELS]; */
+
+/* 	if (!gotscores) */
+/* 		getscores((FILE **)NULL); */
+/* 	(void)printf("\n\t\t    Tetris High Scores\n"); */
+
+/* 	/\* */
+/* 	 * If level == 0, the person has not played a game but just asked for */
+/* 	 * the high scores; we do not need to check for printing in highlight */
+/* 	 * mode.  If SOstr is null, we can't do highlighting anyway. */
+/* 	 *\/ */
+/* 	me = level && SOstr ? thisuser() : NULL; */
+
+/* 	/\* */
+/* 	 * Set times to 0 except for high score on each level. */
+/* 	 *\/ */
+/* 	for (i = MINLEVEL; i < NLEVELS; i++) */
+/* 		levelfound[i] = 0; */
+/* 	for (i = 0, sp = scores; i < nscores; i++, sp++) { */
+/* 		if (levelfound[sp->hs_level]) */
+/* 			sp->hs_time = 0; */
+/* 		else { */
+/* 			sp->hs_time = 1; */
+/* 			levelfound[sp->hs_level] = 1; */
+/* 		} */
+/* 	} */
+
+/* 	/\* */
+/* 	 * Page each screenful of scores. */
+/* 	 *\/ */
+/* 	for (i = 0, sp = scores; i < nscores; sp += n) { */
+/* 		n = 20; */
+/* 		if (i + n > nscores) */
+/* 			n = nscores - i; */
+/* 		printem(level, i + 1, sp, n, me); */
+/* 		if ((i += n) < nscores) { */
+/* 			(void)printf("\nHit RETURN to continue."); */
+/* 			(void)fflush(stdout); */
+/* 			while ((c = getchar()) != '\n') */
+/* 				if (c == EOF) */
+/* 					break; */
+/* 			(void)printf("\n"); */
+/* 		} */
+/* 	} */
+
+/* 	if (nscores == 0) */
+/* 		printf("\t\t\t      - none to date.\n"); */
+/* } */
+
+/* static void */
+/* printem(int level, int offset, struct highscore *hs, int n, const char *me) */
+/* { */
+/* 	struct highscore *sp; */
+/* 	int row, highlight, i; */
+/* 	char buf[100]; */
+/* #define	TITLE "Rank  Score   Name                          (points/level)" */
+/* #define	TITL2 "==========================================================" */
+
+/* 	printf("%s\n%s\n", TITLE, TITL2); */
+
+/* 	highlight = 0; */
+
+/* 	for (row = 0; row < n; row++) { */
+/* 		sp = &hs[row]; */
+/* 		(void)snprintf(buf, sizeof(buf), */
+/* 		    "%3d%c %6d  %-31s (%6d on %d)\n", */
+/* 		    row + offset, sp->hs_time ? '*' : ' ', */
+/* 		    sp->hs_score * sp->hs_level, */
+/* 		    sp->hs_name, sp->hs_score, sp->hs_level); */
+/* 		/\* Print leaders every three lines *\/ */
+/* 		if ((row + 1) % 3 == 0) { */
+/* 			for (i = 0; i < sizeof(buf); i++) */
+/* 				if (buf[i] == ' ') */
+/* 					buf[i] = '_'; */
+/* 		} */
+/* 		/\* */
+/* 		 * Highlight if appropriate.  This works because */
+/* 		 * we only get one score per level. */
+/* 		 *\/ */
+/* 		if (me != NULL && */
+/* 		    sp->hs_level == level && */
+/* 		    sp->hs_score == score && */
+/* 		    strcmp(sp->hs_name, me) == 0) { */
+/* 			putpad(SOstr); */
+/* 			highlight = 1; */
+/* 		} */
+/* 		(void)printf("%s", buf); */
+/* 		if (highlight) { */
+/* 			putpad(SEstr); */
+/* 			highlight = 0; */
+/* 		} */
+/* 	} */
+/* } */
+
+/** @}
+ */
+
Index: uspace/app/tetris/scores.h
===================================================================
--- uspace/app/tetris/scores.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/scores.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,67 @@
+/*	$OpenBSD: scores.h,v 1.5 2003/06/03 03:01:41 millert Exp $	*/
+/*	$NetBSD: scores.h,v 1.2 1995/04/22 07:42:40 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)scores.h	8.1 (Berkeley) 5/31/93
+ */
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+
+/*
+ * Tetris scores.
+ */
+#include <sys/time.h>
+#define MAXLOGNAME 16
+struct highscore {
+	char	hs_name[MAXLOGNAME + 1];	/* login name */
+	int	hs_score;	/* raw score */
+	int	hs_level;	/* play level */
+//	time_t	hs_time;	/* time at game end */
+};
+
+#define MAXHISCORES	10
+//#define MAXSCORES	9	/* maximum high score entries per person */
+//#define	EXPIRATION	(5L * 365 * 24 * 60 * 60)
+
+void savescore(int);
+void showscores(int);
+void insertscore(int score, int level);
+void initscores(void);
+
+/** @}
+ */
+
Index: uspace/app/tetris/screen.c
===================================================================
--- uspace/app/tetris/screen.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/screen.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,312 @@
+/*	$OpenBSD: screen.c,v 1.13 2006/04/20 03:25:36 ray Exp $	*/
+/*	$NetBSD: screen.c,v 1.4 1995/04/29 01:11:36 mycroft Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)screen.c	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+/*
+ * Tetris screen control.
+ */
+
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <io/stream.h>
+
+
+#include <async.h>
+#include "screen.h"
+#include "tetris.h"
+#include "../../srv/console/console.h"
+
+static cell curscreen[B_SIZE];	/* 1 => standout (or otherwise marked) */
+static int curscore;
+static int isset;		/* true => terminal is in game mode */
+
+
+/*
+ * putstr() is for unpadded strings (either as in termcap(5) or
+ * simply literal strings); 
+ */
+static inline void putstr(char *s)
+{
+	while (*s)
+		putchar(*(s++));
+}
+
+static int con_phone;
+
+
+
+static void set_style(int fgcolor, int bgcolor)
+{
+	async_msg_2(con_phone, CONSOLE_SET_STYLE, fgcolor, bgcolor);
+}
+
+static void start_standout(void)
+{
+	set_style(0xf0f0f0, 0);
+}
+
+static void resume_normal(void)
+{
+	set_style(0, 0xf0f0f0);
+}
+
+
+void clear_screen(void)
+{
+	async_msg(con_phone, CONSOLE_CLEAR, 0);
+	moveto(0,0);
+}
+
+/*
+ * Clear the screen, forgetting the current contents in the process.
+ */
+void
+scr_clear(void)
+{
+
+	resume_normal();
+	async_msg(con_phone, CONSOLE_CLEAR, 0);
+	curscore = -1;
+	memset((char *)curscreen, 0, sizeof(curscreen));
+}
+
+/*
+ * Set up screen
+ */
+void
+scr_init(void)
+{
+	con_phone = get_fd_phone(1);
+	async_msg(con_phone, CONSOLE_CURSOR_VISIBILITY, 0);
+	resume_normal();
+	scr_clear();
+}
+
+void moveto(int r, int c)
+{
+	async_msg_2(con_phone, CONSOLE_GOTO, r, c);
+}
+
+static void fflush(void)
+{
+	async_msg(con_phone, CONSOLE_FLUSH, 0);
+}
+
+winsize_t winsize;
+
+static int get_display_size(winsize_t *ws)
+{
+	return async_req_2(con_phone, CONSOLE_GETSIZE, 0, 0, &ws->ws_row, &ws->ws_col);
+}
+
+/*
+ * Set up screen mode.
+ */
+void
+scr_set(void)
+{
+	winsize_t ws;
+
+	Rows = 0, Cols = 0;
+	if (get_display_size(&ws) == 0) {
+		Rows = ws.ws_row;
+		Cols = ws.ws_col;
+	}
+	if (Rows < MINROWS || Cols < MINCOLS) {
+		char smallscr[55];
+
+		snprintf(smallscr, sizeof(smallscr),
+		    "the screen is too small (must be at least %dx%d)",
+		    MINROWS, MINCOLS);
+		stop(smallscr);
+	}
+	isset = 1;
+
+	scr_clear();
+}
+
+/*
+ * End screen mode.
+ */
+void
+scr_end(void)
+{
+}
+
+void
+stop(char *why)
+{
+
+	if (isset)
+		scr_end();
+	errx(1, "aborting: %s", why);
+}
+
+
+/*
+ * Update the screen.
+ */
+void
+scr_update(void)
+{
+	cell *bp, *sp;
+	cell so, cur_so = 0;
+	int i, ccol, j;
+	static const struct shape *lastshape;
+
+	/* always leave cursor after last displayed point */
+	curscreen[D_LAST * B_COLS - 1] = -1;
+
+	if (score != curscore) {
+		moveto(0, 0);
+		printf("Score: %d", score);
+		curscore = score;
+	}
+
+	/* draw preview of next pattern */
+	if (showpreview && (nextshape != lastshape)) {
+		int i;
+		static int r=5, c=2;
+		int tr, tc, t;
+
+		lastshape = nextshape;
+
+		/* clean */
+		resume_normal();
+		moveto(r-1, c-1); putstr("          ");
+		moveto(r,   c-1); putstr("          ");
+		moveto(r+1, c-1); putstr("          ");
+		moveto(r+2, c-1); putstr("          ");
+
+		moveto(r-3, c-2);
+		putstr("Next shape:");
+
+		/* draw */
+		start_standout();
+		moveto(r, 2 * c);
+		putstr("  ");
+		for (i = 0; i < 3; i++) {
+			t = c + r * B_COLS;
+			t += nextshape->off[i];
+
+			tr = t / B_COLS;
+			tc = t % B_COLS;
+
+			moveto(tr, 2*tc);
+			putstr("  ");
+		}
+		resume_normal();
+	}
+
+	bp = &board[D_FIRST * B_COLS];
+	sp = &curscreen[D_FIRST * B_COLS];
+	for (j = D_FIRST; j < D_LAST; j++) {
+		ccol = -1;
+		for (i = 0; i < B_COLS; bp++, sp++, i++) {
+			if (*sp == (so = *bp))
+				continue;
+			*sp = so;
+			if (i != ccol) {
+				if (cur_so) {
+					resume_normal();
+					cur_so = 0;
+				}
+				moveto(RTOD(j), CTOD(i));
+			}
+			if (so != cur_so) {
+				if (so)
+					start_standout();
+				else
+					resume_normal();
+				cur_so = so;
+			}
+			putstr("  ");
+
+			ccol = i + 1;
+			/*
+			 * Look ahead a bit, to avoid extra motion if
+			 * we will be redrawing the cell after the next.
+			 * Motion probably takes four or more characters,
+			 * so we save even if we rewrite two cells
+			 * `unnecessarily'.  Skip it all, though, if
+			 * the next cell is a different color.
+			 */
+#define	STOP (B_COLS - 3)
+			if (i > STOP || sp[1] != bp[1] || so != bp[1])
+				continue;
+			if (sp[2] != bp[2])
+				sp[1] = -1;
+			else if (i < STOP && so == bp[2] && sp[3] != bp[3]) {
+				sp[2] = -1;
+				sp[1] = -1;
+			}
+		}
+	}
+	if (cur_so)
+		resume_normal();
+ 	fflush();
+}
+
+/*
+ * Write a message (set!=0), or clear the same message (set==0).
+ * (We need its length in case we have to overwrite with blanks.)
+ */
+void
+scr_msg(char *s, int set)
+{
+	
+	int l = strlen(s);
+	
+	moveto(Rows - 2, ((Cols - l) >> 1) - 1);
+	if (set)
+		putstr(s);
+	else
+		while (--l >= 0)
+			(void) putchar(' ');
+}
+
+/** @}
+ */
+
Index: uspace/app/tetris/screen.h
===================================================================
--- uspace/app/tetris/screen.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/screen.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,71 @@
+/*	$OpenBSD: screen.h,v 1.5 2003/06/03 03:01:41 millert Exp $	*/
+/*	$NetBSD: screen.h,v 1.2 1995/04/22 07:42:42 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)screen.h	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+/*
+ * putpad() is for padded strings with count=1.
+ */
+#define	putpad(s)	tputs(s, 1, put)
+
+#include <async.h>
+
+typedef struct {
+	ipcarg_t ws_row;
+	ipcarg_t ws_col;
+} winsize_t;
+
+extern winsize_t winsize;
+
+void moveto(int r, int c);
+void clear_screen(void);
+
+int	put(int);			/* just calls putchar; for tputs */
+void	scr_clear(void);
+void	scr_end(void);
+void	scr_init(void);
+void	scr_msg(char *, int);
+void	scr_set(void);
+void	scr_update(void);
+
+/** @}
+ */
+
Index: uspace/app/tetris/shapes.c
===================================================================
--- uspace/app/tetris/shapes.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/shapes.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,116 @@
+/*	$OpenBSD: shapes.c,v 1.8 2004/07/10 07:26:24 deraadt Exp $	*/
+/*	$NetBSD: shapes.c,v 1.2 1995/04/22 07:42:44 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)shapes.c	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+/*
+ * Tetris shapes and related routines.
+ *
+ * Note that the first 7 are `well known'.
+ */
+
+#include <unistd.h>
+#include "tetris.h"
+
+#define	TL	-B_COLS-1	/* top left */
+#define	TC	-B_COLS		/* top center */
+#define	TR	-B_COLS+1	/* top right */
+#define	ML	-1		/* middle left */
+#define	MR	1		/* middle right */
+#define	BL	B_COLS-1	/* bottom left */
+#define	BC	B_COLS		/* bottom center */
+#define	BR	B_COLS+1	/* bottom right */
+
+const struct shape shapes[] = {
+	/* 0*/	{ 7,	7,	{ TL, TC, MR } },
+	/* 1*/	{ 8,	8,	{ TC, TR, ML } },
+	/* 2*/	{ 9,	11,	{ ML, MR, BC } },
+	/* 3*/	{ 3,	3,	{ TL, TC, ML } },
+	/* 4*/	{ 12,	14,	{ ML, BL, MR } },
+	/* 5*/	{ 15,	17,	{ ML, BR, MR } },
+	/* 6*/	{ 18,	18,	{ ML, MR, 2  } }, /* sticks out */
+	/* 7*/	{ 0,	0,	{ TC, ML, BL } },
+	/* 8*/	{ 1,	1,	{ TC, MR, BR } },
+	/* 9*/	{ 10,	2,	{ TC, MR, BC } },
+	/*10*/	{ 11,	9,	{ TC, ML, MR } },
+	/*11*/	{ 2,	10,	{ TC, ML, BC } },
+	/*12*/	{ 13,	4,	{ TC, BC, BR } },
+	/*13*/	{ 14,	12,	{ TR, ML, MR } },
+	/*14*/	{ 4,	13,	{ TL, TC, BC } },
+	/*15*/	{ 16,	5,	{ TR, TC, BC } },
+	/*16*/	{ 17,	15,	{ TL, MR, ML } },
+	/*17*/	{ 5,	16,	{ TC, BC, BL } },
+	/*18*/	{ 6,	6,	{ TC, BC, 2*B_COLS } }/* sticks out */
+};
+
+/*
+ * Return true iff the given shape fits in the given position,
+ * taking the current board into account.
+ */
+int
+fits_in(const struct shape *shape, int pos)
+{
+	int *o = shape->off;
+
+	if (board[pos] || board[pos + *o++] || board[pos + *o++] ||
+	    board[pos + *o])
+		return 0;
+	return 1;
+}
+
+/*
+ * Write the given shape into the current board, turning it on
+ * if `onoff' is 1, and off if `onoff' is 0.
+ */
+void
+place(const struct shape *shape, int pos, int onoff)
+{
+	int *o = shape->off;
+
+	board[pos] = onoff;
+	board[pos + *o++] = onoff;
+	board[pos + *o++] = onoff;
+	board[pos + *o] = onoff;
+}
+
+/** @}
+ */
+
Index: uspace/app/tetris/tetris.c
===================================================================
--- uspace/app/tetris/tetris.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/tetris.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,469 @@
+/*	$OpenBSD: tetris.c,v 1.21 2006/04/20 03:24:12 ray Exp $	*/
+/*	$NetBSD: tetris.c,v 1.2 1995/04/22 07:42:47 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)tetris.c	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris Tetris
+ * @brief	Tetris ported from OpenBSD
+ * @{ 
+ */
+/** @file
+ */
+
+#ifndef lint
+static const char copyright[] =
+"@(#) Copyright (c) 1992, 1993\n\
+	The Regents of the University of California.  All rights reserved.\n";
+#endif /* not lint */
+
+/*
+ * Tetris (or however it is spelled).
+ */
+
+#include <sys/time.h>
+#include <sys/types.h>
+
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "input.h"
+#include "scores.h"
+#include "screen.h"
+#include "tetris.h"
+
+cell	board[B_SIZE];
+int	Rows, Cols;
+const struct shape *curshape;
+const struct shape *nextshape;
+long	fallrate;
+int	score;
+//gid_t	gid, egid;
+char	key_msg[100];
+int	showpreview, classic;
+
+static void	elide(void);
+static void	setup_board(void);
+const struct shape *randshape(void);
+void	onintr(int);
+void	usage(void);
+
+/*
+ * Set up the initial board.  The bottom display row is completely set,
+ * along with another (hidden) row underneath that.  Also, the left and
+ * right edges are set.
+ */
+static void
+setup_board(void)
+{
+	int i;
+	cell *p;
+
+	p = board;
+	for (i = B_SIZE; i; i--)
+		*p++ = i <= (2 * B_COLS) || (i % B_COLS) < 2;
+}
+
+/*
+ * Elide any full active rows.
+ */
+static void
+elide(void)
+{
+	int rows = 0;
+	int i, j, base;
+	cell *p;
+
+	for (i = A_FIRST; i < A_LAST; i++) {
+		base = i * B_COLS + 1;
+		p = &board[base];
+		for (j = B_COLS - 2; *p++ != 0;) {
+			if (--j <= 0) {
+				/* this row is to be elided */
+				rows++;
+				memset(&board[base], 0, B_COLS - 2);
+				scr_update();
+				tsleep();
+				while (--base != 0)
+					board[base + B_COLS] = board[base];
+				scr_update();
+				tsleep();
+				break;
+			}
+		}
+	}
+	switch (rows) {
+	case 1:
+		score += 10;
+		break;
+	case 2:
+		score += 30;
+		break;
+	case 3:
+		score += 70;
+		break;
+	case 4:
+		score += 150;
+		break;
+	default:
+		break;
+	}
+}
+
+const struct shape *
+randshape(void)
+{
+	const struct shape *tmp;
+	int i, j;
+
+	tmp = &shapes[random() % 7];
+	j = random() % 4;
+	for (i = 0; i < j; i++)
+		tmp = &shapes[classic? tmp->rotc : tmp->rot];
+	return (tmp);
+}
+
+static void srandomdev(void)
+{
+	struct timeval tv;
+
+	gettimeofday(&tv, NULL);
+	srandom(tv.tv_sec + tv.tv_usec / 100000);
+}
+
+static void tetris_menu_draw(int level) 
+{
+		clear_screen();
+		moveto(5,10);
+		puts("Tetris\n\n");
+			
+		moveto(8,10);
+		printf("Level = %d (press keys 1 - 9 to change)",level);
+		moveto(9,10);
+		printf("Preview is %s (press 'p' to change)", (showpreview?"on ":"off"));
+		moveto(12,10);
+		printf("Press 'h' to show hiscore table.");
+		moveto(13,10);
+		printf("Press 's' to start game.");
+		moveto(14,10);
+		printf("Press 'q' to quit game.");
+		moveto(20,10);
+		printf("In game controls:");
+		moveto(21,0);
+		puts(key_msg);
+}
+
+static int tetris_menu(int *level) 
+{
+	static int firstgame = 1;
+	int i;
+/*	if (showpreview == 0)
+		(void)printf("Your score:  %d point%s  x  level %d  =  %d\n",
+		    score, score == 1 ? "" : "s", level, score * level);
+	else {
+ 		(void)printf("Your score:  %d point%s x level %d x preview penalty %0.3f = %d\n", 
+ 		    score, score == 1 ? "" : "s", level, (double)PRE_PENALTY, 
+ 		    (int)(score * level * PRE_PENALTY)); 
+ 		score = score * PRE_PENALTY; 
+	}
+	savescore(level);
+
+	showscores(level);
+	
+	printf("\nHit 's' to new game, 'q' to quit.\n");
+*/
+	tetris_menu_draw(*level);
+	while (1) {
+	
+		i = getchar();
+		
+		switch(i) {
+			case 'p':
+				showpreview = !showpreview;
+				moveto(9,21);
+				if (showpreview)
+					printf("on ");
+				else
+					printf("off");
+					
+				break;
+			case 'h':
+				showscores(firstgame);
+				tetris_menu_draw(*level);
+				break;
+			case 's':
+				firstgame = 0;
+				return 1;
+			case 'q':
+				return 0;
+			case '1':
+			case '2':
+			case '3':
+			case '4':
+			case '5':
+			case '6':		
+			case '7':
+			case '8':
+			case '9':
+				*level = i - '0';
+				moveto(8,18);
+				printf("%d", *level);
+				break;
+		}
+	}
+	
+}
+
+int
+main(int argc, char *argv[])
+{
+	int pos, c;
+	char *keys;
+	int level = 2;
+	char key_write[6][10];
+	int i, j;
+
+	keys = "jkl pq";
+
+//	gid = getgid();
+//	egid = getegid();
+//	setegid(gid);
+
+	classic = 0;
+	showpreview = 1; 
+
+/* 	while ((ch = getopt(argc, argv, "ck:l:ps")) != -1) */
+/* 		switch(ch) { */
+/* 		case 'c': */
+/* 			/\* */
+/* 			 * this means: */
+/* 			 *	- rotate the other way; */
+/* 			 *	- no reverse video. */
+/* 			 *\/ */
+/* 			classic = 1; */
+/* 			break; */
+/* 		case 'k': */
+/* 			if (strlen(keys = optarg) != 6) */
+/* 				usage(); */
+/* 			break; */
+/* 		case 'l': */
+/* 			level = (int)strtonum(optarg, MINLEVEL, MAXLEVEL, */
+/* 			    &errstr); */
+/* 			if (errstr) */
+/* 				errx(1, "level must be from %d to %d", */
+/* 				    MINLEVEL, MAXLEVEL); */
+/* 			break; */
+/* 		case 'p': */
+/* 			showpreview = 1; */
+/* 			break; */
+/* 		case 's': */
+/* 			showscores(0); */
+/* 			exit(0); */
+/* 		default: */
+/* 			usage(); */
+/* 		} */
+
+/* 	argc -= optind; */
+/* 	argv += optind; */
+
+/* 	if (argc) */
+/* 		usage(); */
+
+	
+
+	for (i = 0; i <= 5; i++) {
+		for (j = i+1; j <= 5; j++) {
+			if (keys[i] == keys[j])
+				errx(1, "duplicate command keys specified.");
+		}
+		if (keys[i] == ' ')
+			strncpy(key_write[i], "<space>", sizeof key_write[i]);
+		else {
+			key_write[i][0] = keys[i];
+			key_write[i][1] = '\0';
+		}
+	}
+
+	snprintf(key_msg, sizeof key_msg,
+"%s - left   %s - rotate   %s - right   %s - drop   %s - pause   %s - quit",
+		key_write[0], key_write[1], key_write[2], key_write[3],
+		key_write[4], key_write[5]);
+
+	scr_init();
+	initscores();
+	while (tetris_menu(&level)) {
+		fallrate = 1000000 / level;
+		
+		scr_clear();
+		setup_board();
+	
+		srandomdev();
+		scr_set();
+	
+		pos = A_FIRST*B_COLS + (B_COLS/2)-1;
+		nextshape = randshape();
+		curshape = randshape();
+	
+		scr_msg(key_msg, 1);
+	
+		for (;;) {
+			place(curshape, pos, 1);
+			scr_update();
+			place(curshape, pos, 0);
+			c = tgetchar();
+			if (c < 0) {
+				/*
+				 * Timeout.  Move down if possible.
+				 */
+				if (fits_in(curshape, pos + B_COLS)) {
+					pos += B_COLS;
+					continue;
+				}
+	
+				/*
+				 * Put up the current shape `permanently',
+				 * bump score, and elide any full rows.
+				 */
+				place(curshape, pos, 1);
+				score++;
+				elide();
+	
+				/*
+				 * Choose a new shape.  If it does not fit,
+				 * the game is over.
+				 */
+				curshape = nextshape;
+				nextshape = randshape();
+				pos = A_FIRST*B_COLS + (B_COLS/2)-1;
+				if (!fits_in(curshape, pos))
+					break;
+				continue;
+			}
+	
+			/*
+			 * Handle command keys.
+			 */
+			if (c == keys[5]) {
+				/* quit */
+				break;
+			}
+			if (c == keys[4]) {
+				static char msg[] =
+				    "paused - press RETURN to continue";
+	
+				place(curshape, pos, 1);
+				do {
+					scr_update();
+					scr_msg(key_msg, 0);
+					scr_msg(msg, 1);
+	//				(void) fflush(stdout);
+				} while (rwait((struct timeval *)NULL) == -1);
+				scr_msg(msg, 0);
+				scr_msg(key_msg, 1);
+				place(curshape, pos, 0);
+				continue;
+			}
+			if (c == keys[0]) {
+				/* move left */
+				if (fits_in(curshape, pos - 1))
+					pos--;
+				continue;
+			}
+			if (c == keys[1]) {
+				/* turn */
+				const struct shape *new = &shapes[
+				    classic? curshape->rotc : curshape->rot];
+	
+				if (fits_in(new, pos))
+					curshape = new;
+				continue;
+			}
+			if (c == keys[2]) {
+				/* move right */
+				if (fits_in(curshape, pos + 1))
+					pos++;
+				continue;
+			}
+			if (c == keys[3]) {
+				/* move to bottom */
+				while (fits_in(curshape, pos + B_COLS)) {
+					pos += B_COLS;
+					score++;
+				}
+				continue;
+			}
+			if (c == '\f') {
+				scr_clear();
+				scr_msg(key_msg, 1);
+			}
+		}
+		
+		scr_clear();
+		insertscore(score, level);
+		score=0;
+	}
+	
+	scr_clear();
+	printf("\n\n\n\t\tGame over.\n");
+/*	
+	while ((i = getchar()) != '\n')
+		if (i == EOF)
+			break
+*/
+	scr_end();
+
+	return 0;
+}
+
+/* void */
+/* onintr(int signo) */
+/* { */
+/* 	scr_clear();		/\* XXX signal race *\/ */
+/* 	scr_end();		/\* XXX signal race *\/ */
+/* 	_exit(0); */
+/* } */
+
+void
+usage(void)
+{
+	(void)fprintf(stderr, "usage: tetris [-ps] [-k keys] [-l level]\n");
+	exit(1);
+}
+
+/** @}
+ */
+
Index: uspace/app/tetris/tetris.h
===================================================================
--- uspace/app/tetris/tetris.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/app/tetris/tetris.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,188 @@
+/*	$OpenBSD: tetris.h,v 1.9 2003/06/03 03:01:41 millert Exp $	*/
+/*	$NetBSD: tetris.h,v 1.2 1995/04/22 07:42:48 cgd Exp $	*/
+
+/*-
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek and Darren F. Provine.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)tetris.h	8.1 (Berkeley) 5/31/93
+ */
+
+/** @addtogroup tetris
+ * @{ 
+ */
+/** @file
+ */
+
+/*
+ * Definitions for Tetris.
+ */
+
+/*
+ * The display (`board') is composed of 23 rows of 12 columns of characters
+ * (numbered 0..22 and 0..11), stored in a single array for convenience.
+ * Columns 1 to 10 of rows 1 to 20 are the actual playing area, where
+ * shapes appear.  Columns 0 and 11 are always occupied, as are all
+ * columns of rows 21 and 22.  Rows 0 and 22 exist as boundary areas
+ * so that regions `outside' the visible area can be examined without
+ * worrying about addressing problems.
+ */
+
+	/* the board */
+#define	B_COLS	12
+#define	B_ROWS	23
+#define	B_SIZE	(B_ROWS * B_COLS)
+
+typedef unsigned char cell;
+extern cell	board[B_SIZE];	/* 1 => occupied, 0 => empty */
+
+	/* the displayed area (rows) */
+#define	D_FIRST	1
+#define	D_LAST	22
+
+	/* the active area (rows) */
+#define	A_FIRST	1
+#define	A_LAST	21
+
+/*
+ * Minimum display size.
+ */
+#define	MINROWS	23
+#define	MINCOLS	40
+
+extern int	Rows, Cols;	/* current screen size */
+
+/*
+ * Translations from board coordinates to display coordinates.
+ * As with board coordinates, display coordiates are zero origin.
+ */
+#define	RTOD(x)	((x) - 1)
+#define	CTOD(x)	((x) * 2 + (((Cols - 2 * B_COLS) >> 1) - 1))
+
+/*
+ * A `shape' is the fundamental thing that makes up the game.  There
+ * are 7 basic shapes, each consisting of four `blots':
+ *
+ *	X.X	  X.X		X.X
+ *	  X.X	X.X	X.X.X	X.X	X.X.X	X.X.X	X.X.X.X
+ *			  X		X	    X
+ *
+ *	  0	  1	  2	  3	  4	  5	  6
+ *
+ * Except for 3 and 6, the center of each shape is one of the blots.
+ * This blot is designated (0,0).  The other three blots can then be
+ * described as offsets from the center.  Shape 3 is the same under
+ * rotation, so its center is effectively irrelevant; it has been chosen
+ * so that it `sticks out' upward and leftward.  Except for shape 6,
+ * all the blots are contained in a box going from (-1,-1) to (+1,+1);
+ * shape 6's center `wobbles' as it rotates, so that while it `sticks out'
+ * rightward, its rotation---a vertical line---`sticks out' downward.
+ * The containment box has to include the offset (2,0), making the overall
+ * containment box range from offset (-1,-1) to (+2,+1).  (This is why
+ * there is only one row above, but two rows below, the display area.)
+ *
+ * The game works by choosing one of these shapes at random and putting
+ * its center at the middle of the first display row (row 1, column 5).
+ * The shape is moved steadily downward until it collides with something:
+ * either  another shape, or the bottom of the board.  When the shape can
+ * no longer be moved downwards, it is merged into the current board.
+ * At this time, any completely filled rows are elided, and blots above
+ * these rows move down to make more room.  A new random shape is again
+ * introduced at the top of the board, and the whole process repeats.
+ * The game ends when the new shape will not fit at (1,5).
+ *
+ * While the shapes are falling, the user can rotate them counterclockwise
+ * 90 degrees (in addition to moving them left or right), provided that the
+ * rotation puts the blots in empty spaces.  The table of shapes is set up
+ * so that each shape contains the index of the new shape obtained by
+ * rotating the current shape.  Due to symmetry, each shape has exactly
+ * 1, 2, or 4 rotations total; the first 7 entries in the table represent
+ * the primary shapes, and the remaining 12 represent their various
+ * rotated forms.
+ */
+struct shape {
+	int	rot;	/* index of rotated version of this shape */
+	int	rotc;	/* -- " -- in classic version  */
+	int	off[3];	/* offsets to other blots if center is at (0,0) */
+};
+
+extern const struct shape shapes[];
+
+extern const struct shape *curshape;
+extern const struct shape *nextshape;
+
+/*
+ * Shapes fall at a rate faster than once per second.
+ *
+ * The initial rate is determined by dividing 1 million microseconds
+ * by the game `level'.  (This is at most 1 million, or one second.)
+ * Each time the fall-rate is used, it is decreased a little bit,
+ * depending on its current value, via the `faster' macro below.
+ * The value eventually reaches a limit, and things stop going faster,
+ * but by then the game is utterly impossible.
+ */
+extern long	fallrate;	/* less than 1 million; smaller => faster */
+#define	faster() (fallrate -= fallrate / 3000)
+
+/*
+ * Game level must be between 1 and 9.  This controls the initial fall rate
+ * and affects scoring.
+ */
+#define	MINLEVEL	1
+#define	MAXLEVEL	9
+
+/*
+ * Scoring is as follows:
+ *
+ * When the shape comes to rest, and is integrated into the board,
+ * we score one point.  If the shape is high up (at a low-numbered row),
+ * and the user hits the space bar, the shape plummets all the way down,
+ * and we score a point for each row it falls (plus one more as soon as
+ * we find that it is at rest and integrate it---until then, it can
+ * still be moved or rotated).
+ *
+ * If previewing has been turned on, the score is multiplied by PRE_PENALTY.
+ */
+#define PRE_PENALTY 0.75
+
+extern int	score;		/* the obvious thing */
+//extern gid_t	gid, egid;
+
+extern char	key_msg[100];
+extern int	showpreview;
+extern int	classic;
+
+int	fits_in(const struct shape *, int);
+void	place(const struct shape *, int, int);
+void	stop(char *);
+
+/** @}
+ */
+
Index: pace/console/Makefile
===================================================================
--- uspace/console/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,88 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain 
-
-CFLAGS += -I. -I../kbd/include -I../fb
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = console
-GENERIC_SOURCES = \
-	console.c \
-	screenbuffer.c \
-	../kbd/generic/key_buffer.c \
-	gcons.c
-
-IMAGES = helenos.ppm nameic.ppm cons_selected.ppm cons_idle.ppm \
-	cons_has_data.ppm cons_kernel.ppm anim_1.ppm anim_2.ppm anim_3.ppm \
-	anim_4.ppm
-
-ARCH_SOURCES = 
-
-GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES))) \
-			$(addsuffix .o,$(basename $(IMAGES)))	
-ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(ARCH_OBJECTS) $(GENERIC_OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(GENERIC_OBJECTS) $(ARCH_OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
-
-%.o: %.ppm
-	$(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) $< $@
Index: pace/console/anim_1.ppm
===================================================================
--- uspace/console/anim_1.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,23 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööããããããöööþþþÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
-
-
-¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
-
-
-ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
-
-
-ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
-
-
-ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
-
-
-²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
-
-
-   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/anim_2.ppm
===================================================================
--- uspace/console/anim_2.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,23 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿöööããããããöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
-
-
-¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
-
-
-ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
-
-
-ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
-
-
-ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
-
-
-²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
-
-
-   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/anim_3.ppm
===================================================================
--- uspace/console/anim_3.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,23 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
-
-
-¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
-
-
-ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
-
-
-ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
-
-
-ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
-
-
-²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
-
-
-   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööããããããöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/anim_4.ppm
===================================================================
--- uspace/console/anim_4.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,23 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
-
-
-¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
-
-
-ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
-
-
-ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
-
-
-ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
-
-
-²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
-
-
-   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööããããããöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/cons_has_data.ppm
===================================================================
--- uspace/console/cons_has_data.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,5 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþúúþúúþúúþúúþûûþûûþûûþûûþûûþûûþüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþùùþøøþõõþêêþèèþèèþééþêêþëëþììþííþîîþîîþððþøøþúúþûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþ÷÷þññþááþÞÞþÞÞþÜÜþÞÞþßßþááþããþääþååþææþççþèèþééþëëþêêþììþ÷÷þúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþõõþîîþ××þÒÒþÏÏþÑÑþÒÒþÕÕþ××þÚÚþÜÜþÞÞþààþââþããþääþääþååþååþääþääþååþèèþõõþùùþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþííþÏÏþÇÇþÃÃþÃÃþÅÅþÈÈþËËþÎÎþÑÑþÕÕþØØþÛÛþÝÝþßßþààþááþââþââþââþââþááþßßþÞÞþßßþââþôôþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþììþÇÇþ¸¸þ··þ¸¸þ»»þ¾¾þÂÂþÆÆþÊÊþÎÎþÒÒþÖÖþÙÙþÜÜþÞÞþààþááþââþââþââþââþààþßßþÜÜþÙÙþ××þÝÝþòòþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþêêþÃÃþ±±þ¯¯þ°°þ²²þ¶¶þººþ¾¾þÃÃþÈÈþÍÍþÒÒþÖÖþÚÚþÝÝþßßþááþââþããþääþääþããþááþààþÝÝþÚÚþÖÖþÔÔþÚÚþòòþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþëëþÁÁþ­­þ©©þ©©þ««þ¯¯þ³³þ¹¹þ¾¾þÄÄþÊÊþÏÏþÔÔþØØþÜÜþßßþââþääþååþææþççþççþææþääþââþààþÜÜþÙÙþÔÔþÑÑþØØþððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþììþÃÃþ­­þ§§þ¦¦þ§§þªªþ®®þ´´þººþÁÁþÇÇþÍÍþÓÓþØØþÜÜþààþããþææþèèþééþêêþêêþêêþêêþèèþææþääþààþÝÝþØØþÓÓþÏÏþ××þððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþííþÇÇþ±±þ©©þ¦¦þ¦¦þ¨¨þ¬¬þ±±þ··þ¾¾þÅÅþÌÌþÒÒþØØþÝÝþââþååþèèþêêþììþííþîîþîîþîîþîîþììþëëþèèþææþââþÞÞþØØþÓÓþÎÎþÕÕþððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþööþÏÏþ¸¸þ¯¯þ©©þ§§þ¨¨þ««þ°°þ¶¶þ½½þÄÄþËËþÒÒþÙÙþÞÞþããþççþêêþííþïïþððþññþòòþòòþòòþòòþññþïïþííþëëþççþããþßßþÙÙþÓÓþÎÎþ××þ÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþîîþÇÇþ··þ°°þ««þªªþ¬¬þ°°þ¶¶þ½½þÄÄþÌÌþÓÓþÙÙþßßþååþééþììþïïþññþóóþôôþõõþõõþööþööþõõþõõþóóþòòþïïþííþééþååþààþÚÚþÔÔþÔÔþððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ÷÷þØØþÂÂþ¸¸þ²²þ¯¯þ®®þ±±þ¶¶þ¼¼þÄÄþËËþÓÓþÚÚþààþææþëëþîîþññþóóþõõþööþ÷÷þøøþøøþùùþùùþøøþøøþ÷÷þõõþôôþññþïïþëëþççþááþÛÛþÕÕþÜÜþøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþòòþÒÒþÃÃþ»»þµµþ³³þ´´þ··þ½½þÄÄþËËþÓÓþÚÚþááþççþììþððþóóþõõþ÷÷þøøþùùþúúþúúþûûþûûþûûþûûþúúþúúþùùþ÷÷þööþóóþððþììþèèþââþÜÜþÛÛþóóþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿþùùþààþÏÏþÅÅþ¾¾þººþ¹¹þººþ¾¾þÄÄþÌÌþÓÓþÚÚþááþèèþííþññþôôþööþøøþùùþúúþûûþüüþüüþüüþýýþýýþüüþüüþûûþûûþúúþøøþ÷÷þôôþññþííþèèþããþÞÞþããþùùþþþÿÿÿÿÿÿÿÿÿÿÿÿþøøþÝÝþÐÐþÈÈþÂÂþ¾¾þ¾¾þÁÁþÅÅþËËþÓÓþÚÚþááþèèþííþññþôôþ÷÷þùùþúúþûûþüüþüüþýýÿýýÿýýÿþþÿþþÿýýÿýýþýýþüüþüüþûûþùùþøøþõõþòòþîîþééþääþääþùùþþþÿÿÿÿÿÿÿÿÿþþþþõõþÞÞþÒÒþËËþÆÆþÃÃþÄÄþÇÇþÌÌþÒÒþÙÙþààþççþííþññþõõþ÷÷þùùþûûþüüþýýþýýÿýýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿýýþýýþüüþûûþúúþøøþõõþòòþîîþêêþééþ÷÷þþþþþþÿÿÿÿÿÿþûûþééþÜÜþÕÕþÎÎþÊÊþÈÈþÊÊþÍÍþÒÒþÙÙþßßþææþììþññþôôþ÷÷þùùþûûþüüþýýÿýýÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿýýþýýþûûþúúþøøþööþóóþïïþììþîîþûûþþþÿÿÿÿÿÿþúúþèèþÝÝþ××þÑÑþÎÎþÍÍþÏÏþÓÓþØØþÞÞþååþëëþððþôôþ÷÷þùùþûûþüüþýýÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿýýþýýþüüþúúþùùþööþôôþððþððþûûþþþÿÿÿÿÿÿþúúþééþßßþÙÙþÔÔþÒÒþÒÒþÔÔþØØþÝÝþããþééþîîþóóþööþùùþûûþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýþýýþüüþúúþùùþ÷÷þôôþôôþüüþþþÿÿÿÿÿÿþûûþêêþááþÜÜþ××þÖÖþÖÖþØØþÜÜþââþççþììþññþõõþøøþúúþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýþýýþüüþûûþùùþøøþ÷÷þýýþþþÿÿÿÿÿÿþûûþëëþããþÞÞþÚÚþÙÙþÚÚþÜÜþààþååþêêþïïþóóþ÷÷þùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýþýýþüüþûûþúúþúúþýýþþþÿÿÿÿÿÿþûûþëëþääþààþÝÝþÜÜþÝÝþßßþããþèèþííþññþõõþøøþúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýþüüþüüþûûþþþþþþÿÿÿÿÿÿþûûþììþååþââþßßþÞÞþßßþââþææþêêþïïþóóþööþùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿýýþýýþýýþþþþþþÿÿÿÿÿÿþûûþííþææþããþààþààþááþääþèèþììþððþôôþ÷÷þúúþüüþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿþûûþííþççþääþááþááþââþååþééþííþññþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿþûûþîîþççþääþââþââþããþææþêêþîîþòòþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþððþèèþääþââþââþääþææþêêþîîþòòþööþùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþøøþêêþääþââþââþääþææþêêþîîþòòþööþùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþúúþêêþääþââþââþããþææþééþîîþòòþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûûþííþääþááþààþááþääþèèþììþññþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþööþååþßßþÞÞþßßþââþææþëëþïïþóóþ÷÷þùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþúúþèèþÞÞþÜÜþÝÝþààþääþèèþííþòòþööþùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþõõþßßþÙÙþÚÚþÜÜþààþææþëëþððþôôþ÷÷þúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþøøþââþ××þÖÖþÙÙþÝÝþââþèèþííþòòþööþùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþôôþÝÝþÓÓþÔÔþØØþÞÞþããþééþïïþóóþ÷÷þùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýýþòòþÚÚþÐÐþÓÓþØØþßßþååþëëþððþôôþøøþúúþûûþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþññþØØþÏÏþÓÓþÙÙþààþççþììþññþõõþøøþúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþññþ××þÎÎþÓÓþÚÚþááþèèþííþòòþõõþøøþúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþððþÕÕþÎÎþÓÓþÛÛþââþèèþîîþòòþööþùùþûûþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþððþÖÖþÔÔþÕÕþÛÛþããþééþîîþóóþööþùùþûûþüüþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþööþððþÜÜþÛÛþÞÞþããþêêþïïþôôþ÷÷þùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿýýÿýýÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþüüþ÷÷þòòþããþääþééþììþððþôôþ÷÷þúúþüüþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþýýþùùþùùþ÷÷þîîþððþôôþ÷÷þùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþýýþûûþûûþüüþüüþýýþýýþþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/cons_idle.ppm
===================================================================
--- uspace/console/cons_idle.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,5 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùàààÏÏÏÅÅÅ¾¾¾ººº¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝÐÐÐÈÈÈÂÂÂ¾¾¾¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒËËËÆÆÆÃÃÃÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÎÎÎÊÊÊÈÈÈÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑÎÎÎÍÍÍÏÏÏÓÓÓØØØÞÞÞåååëëëðððôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýýýýüüüúúúùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔÒÒÒÒÒÒÔÔÔØØØÝÝÝãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüúúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××ÖÖÖÖÖÖØØØÜÜÜâââçççìììñññõõõøøøúúúûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚÙÙÙÚÚÚÜÜÜàààåååêêêïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝÜÜÜÝÝÝßßßãããèèèíííñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßßÞÞÞßßßâââæææêêêïïïóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããààààààáááäääèèèìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííçççäääááááááâââåååéééíííñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/cons_kernel.ppm
===================================================================
--- uspace/console/cons_kernel.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,23 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
-
-
-¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
-
-
-ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
-
-
-ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
-
-
-ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
-
-
-²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
-
-
-   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/cons_selected.ppm
===================================================================
--- uspace/console/cons_selected.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,29 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-48 48
-255
-ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûû÷÷÷ïïïæææÝÝÝ×××ÓÓÓÓÓÓ×××ÝÝÝæææïïï÷÷÷ûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûôôôåååÓÓÓÂÂÂ©©©tttaaaVVVVVVaaattt©©©ÁÁÁÒÒÒåååôôôûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûðððÙÙÙººº]]]LLL___zzz¬¬¬¸¸¸¹¹¹¯¯¯eee```]]]ºººÙÙÙðððûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüôôôÛÛÛ¬¬¬oooFFFfff   ³³³½½½ÈÈÈÒÒÒÛÛÛàààáááÞÞÞØØØÑÑÑÈÈÈÀÀÀ­­­tttdddnnn¬¬¬ÚÚÚôôôüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýúúúèèèºººxxx@@@jjj···ËËËÑÑÑÔÔÔ×××ÚÚÚÜÜÜÞÞÞßßßáááâââââââââáááÝÝÝËËË²²²~~~kkkwww¹¹¹èèèúúúüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüøøøÜÜÜ555NNN¯¯¯ÀÀÀÅÅÅÉÉÉÌÌÌÏÏÏÓÓÓ×××ÙÙÙÜÜÜÞÞÞßßßàààááááááàààßßßÞÞÞÚÚÚÊÊÊªªªggggggÛÛÛ÷÷÷üüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüöööÐÐÐ
-
-
-333www²²²¸¸¸¼¼¼ÀÀÀÅÅÅÉÉÉÍÍÍÑÑÑÔÔÔØØØÛÛÛÝÝÝßßßàààáááááááááàààßßßÜÜÜÚÚÚÓÓÓ½½½uuu
-
-
-ÏÏÏõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüöööËËËxxx000{{{¥¥¥¬¬¬°°°³³³¸¸¸½½½ÂÂÂÇÇÇÌÌÌÑÑÑÕÕÕØØØÜÜÜÞÞÞàààáááâââãããâââáááàààÞÞÞÜÜÜ×××ÔÔÔÉÉÉ{{{xxxËËËõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýøøøÐÐÐxxx///{{{   ¦¦¦¨¨¨¬¬¬²²²···½½½ÃÃÃÈÈÈÎÎÎÓÓÓ×××ÛÛÛÞÞÞáááãããååååååæææååååååãããáááÞÞÞÛÛÛÖÖÖÒÒÒÈÈÈ}}}xxxÐÐÐ÷÷÷üüüýýýýýýýýýýýýýýýýýýýýýýýýúúúÛÛÛ
-
-
-000{{{£££¤¤¤¨¨¨­­­²²²¹¹¹¿¿¿ÆÆÆÌÌÌÒÒÒ×××ÜÜÜàààãããåååçççéééêêêêêêêêêéééçççåååãããàààÜÜÜ×××ÑÑÑÆÆÆ{{{
-
-
-ÛÛÛúúúüüüýýýýýýýýýýýýýýýýýýüüüèèè333{{{   ££££££¦¦¦ªªª¯¯¯¶¶¶½½½ÄÄÄËËËÒÒÒ×××ÝÝÝáááåååèèèêêêìììíííîîîîîîîîîíííìììêêêèèèåååáááÝÝÝØØØÑÑÑÅÅÅuuuèèèûûûüüüýýýýýýýýýýýýýýýôôôººº555www¥¥¥¦¦¦¤¤¤¦¦¦©©©®®®´´´¼¼¼ÃÃÃËËËÒÒÒØØØÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòñññðððïïïíííêêêçççãããÞÞÞØØØÑÑÑÃÃÃgggºººôôôüüüýýýýýýýýýýýýûûûÚÚÚwwwNNN­­­¨¨¨¨¨¨ªªª®®®´´´»»»ÃÃÃËËËÒÒÒÙÙÙßßßäääéééìììïïïñññóóóôôôõõõõõõõõõõõõõõõôôôóóóñññïïïìììéééäääßßßÙÙÙÑÑÑµµµwwwÚÚÚúúúüüüýýýýýýýýýñññ¬¬¬@@@²²²¯¯¯¬¬¬­­­¯¯¯´´´»»»ÃÃÃËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøøøøøøøøøø÷÷÷öööõõõóóóñññîîîëëëæææáááÙÙÙÎÎÎjjj¬¬¬ðððüüüýýýýýýûûûÙÙÙooojjj¯¯¯¸¸¸³³³²²²²²²¶¶¶¼¼¼ÃÃÃËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúúúúúúúúúúúúúúúúùùùøøø÷÷÷õõõóóóðððìììçççâââÚÚÚÃÃÃoooÙÙÙûûûüüüýýýõõõºººFFFÀÀÀ¼¼¼¸¸¸···¹¹¹½½½ÃÃÃËËËÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûûûûûûûüüüüüüüüüûûûûûûûûûúúúùùùøøøöööôôôñññíííèèèâââÙÙÙ¦¦¦eeeºººôôôüüüüüüåååeee¶¶¶ÆÆÆÀÀÀ½½½½½½¿¿¿ÄÄÄËËËÒÒÒÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûûûûüüüüüüýýýýýýýýýýýýýýýüüüüüüûûûûûûúúúùùù÷÷÷õõõñññîîîéééâââÆÆÆåååüüüüüüÓÓÓ]]]ËËËÉÉÉÅÅÅÂÂÂÃÃÃÆÆÆËËËÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúùùù÷÷÷õõõòòòîîîéééßßßÃÃÃ]]]ÒÒÒûûû÷÷÷ÂÂÂKKK³³³ÒÒÒÌÌÌÉÉÉÇÇÇÈÈÈÌÌÌÒÒÒØØØßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûùùùøøøõõõòòòïïïééé¿¿¿___ÂÂÂ÷÷÷ïïïªªª^^^½½½ÕÕÕÏÏÏÍÍÍÌÌÌÎÎÎÒÒÒ×××ÞÞÞäääëëëðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúøøøöööóóóïïïÍÍÍvvvªªªïïïæææzzzÈÈÈ×××ÓÓÓÑÑÑÐÐÐÓÓÓ×××ÝÝÝãããéééîîîóóóöööùùùúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúøøøöööôôôÜÜÜæææÞÞÞtttÓÓÓÙÙÙÖÖÖÔÔÔÕÕÕ×××ÜÜÜáááçççìììñññõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúùùù÷÷÷èèè­­­tttÞÞÞ×××aaa«««ÚÚÚÜÜÜÙÙÙØØØØØØÛÛÛßßßåååêêêïïïóóó÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúùùùòòòÁÁÁaaa×××ÔÔÔWWW¸¸¸àààÞÞÞÜÜÜÚÚÚÜÜÜÞÞÞãããèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûûûûøøøÍÍÍWWWÔÔÔÔÔÔWWW¹¹¹áááßßßÞÞÞÝÝÝÞÞÞáááåååêêêïïïóóóöööùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüùùùÍÍÍWWWÔÔÔ×××aaa¯¯¯ßßßáááßßßßßßàààãããçççìììðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý÷÷÷ÂÂÂaaa×××ÞÞÞtttÙÙÙáááààààààáááäääèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýððð­­­tttÞÞÞæææÐÐÐâââááááááâââåååéééíííòòòõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýèèèæææïïï©©©eeeÇÇÇâââááááááãããæææéééîîîòòòõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýßßßvvv©©©ïïï÷÷÷ÁÁÁ___¿¿¿âââàààáááâââåååéééíííòòòõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüÖÖÖ___ÁÁÁöööüüüÒÒÒ]]]­­­ÜÜÜßßßàààáááäääèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýøøøÄÄÄ]]]ÒÒÒûûûüüüåååtttËËËÞÞÞßßßàààãããçççìììðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýæææåååüüüüüüôôô¹¹¹eee²²²ÚÚÚÜÜÜÞÞÞáááåååêêêïïïóóóöööùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýúúúÐÐÐeee¹¹¹óóóüüüýýýûûûÙÙÙooo~~~ËËËÙÙÙÜÜÜÞÞÞãããèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüêêêoooÙÙÙûûûüüüýýýüüüððð«««jjjªªªÔÔÔ×××ÛÛÛßßßåååêêêïïïóóó÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüü÷÷÷ÎÎÎjjj«««ïïïüüüüüüýýýýýýûûûÚÚÚwwwfff¾¾¾ÔÔÔÖÖÖÜÜÜáááçççìììñññõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüúúúäääwwwÚÚÚúúúüüüýýýýýýýýýüüüôôôºººgggÈÈÈÒÒÒ×××ÝÝÝãããéééîîîóóóöööùùùúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûóóóÀÀÀgggºººóóóüüüüüüýýýýýýýýýýýýüüüèèèuuuÈÈÈÑÑÑ×××ÞÞÞäääëëëðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûôôôÌÌÌuuuçççûûûüüüýýýýýýýýýýýýýýýüüüùùùÛÛÛ
-
-
-{{{ÆÆÆÑÑÑØØØßßßæææìììñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûõõõÐÐÐ{{{
-
-
-ÛÛÛùùùüüüüüüýýýýýýýýýýýýýýýýýýüüü÷÷÷ÏÏÏxxx}}}ÅÅÅÑÑÑÙÙÙáááçççíííñññõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûôôôÐÐÐ}}}xxxÏÏÏ÷÷÷üüüüüüýýýýýýýýýýýýýýýýýýýýýýýýüüüõõõËËËxxx{{{ÄÄÄÑÑÑÙÙÙâââèèèîîîòòòõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüúúúóóóÌÌÌ{{{xxxËËËõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüõõõÐÐÐ
-
-
-uuuµµµÏÏÏÚÚÚâââéééîîîòòòöööøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýüüü÷÷÷äääÁÁÁuuu
-
-
-ÏÏÏõõõûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüü÷÷÷ÛÛÛgggÂÂÂÙÙÙâââéééïïïóóóöööøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýúúúêêêÎÎÎgggÚÚÚöööûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüùùùèèèºººxxxkkk¥¥¥ÅÅÅßßßéééïïïôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýüüüøøøæææÏÏÏkkkwww¹¹¹çççùùùüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûóóóÚÚÚ¬¬¬ooodddÄÄÄ½½½ÍÍÍÛÛÛèèèòòòøøøùùù÷÷÷ðððçççÞÞÞÖÖÖÄÄÄdddnnn«««ÙÙÙóóóûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüúúúðððÙÙÙººº]]]```vvv­­­ÂÂÂÍÍÍÍÍÍÂÂÂ­­­vvv```]]]ºººÙÙÙðððúúúüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûûôôôåååÓÓÓÂÂÂ©©©tttaaaVVVVVVaaattt©©©ÁÁÁÒÒÒåååôôôúúúüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûöööîîîæææÝÝÝ×××ÓÓÓÓÓÓ×××ÝÝÝåååîîîöööûûûûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý
Index: pace/console/console.c
===================================================================
--- uspace/console/console.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,562 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup console
- * @{ 
- */
-/** @file
- */
-
-/* TODO: remove */
-#include <stdio.h>
-
-#include <fb.h>
-#include <ipc/ipc.h>
-#include <keys.h>
-#include <ipc/fb.h>
-#include <ipc/services.h>
-#include <errno.h>
-#include <key_buffer.h>
-#include <console.h>
-#include <unistd.h>
-#include <async.h>
-#include <libadt/fifo.h>
-#include <screenbuffer.h>
-#include <sys/mman.h>
-
-#include "gcons.h"
-
-#define MAX_KEYREQUESTS_BUFFERED 32
-
-#define NAME "CONSOLE"
-
-/** Index of currently used virtual console.
- */
-int active_console = 0;
-
-/** Information about framebuffer
- */
-struct {
-	int phone;		/**< Framebuffer phone */
-	ipcarg_t rows;		/**< Framebuffer rows */
-	ipcarg_t cols;		/**< Framebuffer columns */
-} fb_info;
-
-
-typedef struct {
-	keybuffer_t keybuffer;		/**< Buffer for incoming keys. */
-	/** Buffer for unsatisfied request for keys. */
-	FIFO_CREATE_STATIC(keyrequests, ipc_callid_t,
-		MAX_KEYREQUESTS_BUFFERED);	
-	int keyrequest_counter;		/**< Number of requests in buffer. */
-	int client_phone;		/**< Phone to connected client. */
-	int used;			/**< 1 if this virtual console is
-					 * connected to some client.*/
-	screenbuffer_t screenbuffer;	/**< Screenbuffer for saving screen
-					 * contents and related settings. */
-} connection_t;
-
-static connection_t connections[CONSOLE_COUNT];	/**< Array of data for virtual
-						 * consoles */
-static keyfield_t *interbuffer = NULL;		/**< Pointer to memory shared
-						 * with framebufer used for
-						 * faster virtual console
-						 * switching */
-
-static int kernel_pixmap = -1;	/**< Number of fb pixmap, where kernel
-				 * console is stored */
-
-
-/** Find unused virtual console.
- *
- */
-static int find_free_connection(void) 
-{
-	int i;
-	
-	for (i = 0; i < CONSOLE_COUNT; i++) {
-		if (!connections[i].used)
-			return i;
-	}
-	return -1;
-}
-
-static void clrscr(void)
-{
-	async_msg(fb_info.phone, FB_CLEAR, 0);
-}
-
-static void curs_visibility(int v)
-{
-	async_msg(fb_info.phone, FB_CURSOR_VISIBILITY, v); 
-}
-
-static void curs_goto(int row, int col)
-{
-	async_msg_2(fb_info.phone, FB_CURSOR_GOTO, row, col); 
-}
-
-static void set_style(style_t *style)
-{
-	async_msg_2(fb_info.phone, FB_SET_STYLE, style->fg_color,
-		style->bg_color); 
-}
-
-static void set_style_col(int fgcolor, int bgcolor)
-{
-	async_msg_2(fb_info.phone, FB_SET_STYLE, fgcolor, bgcolor); 
-}
-
-static void prtchr(char c, int row, int col)
-{
-	async_msg_3(fb_info.phone, FB_PUTCHAR, c, row, col);
-}
-
-/** Check key and process special keys. 
- *
- * */
-static void write_char(int console, char key)
-{
-	screenbuffer_t *scr = &(connections[console].screenbuffer);
-	
-	switch (key) {
-	case '\n':
-		scr->position_y++;
-		scr->position_x = 0;
-		break;
-	case '\r':
-		break;
-	case '\t':
-		scr->position_x += 8;
-		scr->position_x -= scr->position_x % 8; 
-		break;
-	case '\b':
-		if (scr->position_x == 0) 
-			break;
-		scr->position_x--;
-		if (console == active_console)
-			prtchr(' ', scr->position_y, scr->position_x);
-		screenbuffer_putchar(scr, ' ');
-		break;
-	default:	
-		if (console == active_console)
-			prtchr(key, scr->position_y, scr->position_x);
-
-		screenbuffer_putchar(scr, key);
-		scr->position_x++;
-	}
-	
-	scr->position_y += (scr->position_x >= scr->size_x);
-	
-	if (scr->position_y >= scr->size_y) {
-		scr->position_y = scr->size_y - 1;
-		screenbuffer_clear_line(scr, scr->top_line);
-		scr->top_line = (scr->top_line + 1) % scr->size_y;
-		if (console == active_console)
-			async_msg(fb_info.phone, FB_SCROLL, 1);
-	}
-	
-	scr->position_x = scr->position_x % scr->size_x;
-	
-	if (console == active_console)
-		curs_goto(scr->position_y, scr->position_x);
-	
-}
-
-/** Save current screen to pixmap, draw old pixmap
- *
- * @param oldpixmap Old pixmap
- * @return ID of pixmap of current screen
- */
-static int switch_screens(int oldpixmap)
-{
-	int newpmap;
-       
-	/* Save screen */
-	newpmap = async_req(fb_info.phone, FB_VP2PIXMAP, 0, NULL);
-	if (newpmap < 0)
-		return -1;
-
-	if (oldpixmap != -1) {
-		/* Show old screen */
-		async_msg_2(fb_info.phone, FB_VP_DRAW_PIXMAP, 0, oldpixmap);
-		/* Drop old pixmap */
-		async_msg(fb_info.phone, FB_DROP_PIXMAP, oldpixmap);
-	}
-	
-	return newpmap;
-}
-
-/** Switch to new console */
-static void change_console(int newcons)
-{
-	connection_t *conn;
-	static int console_pixmap = -1;
-	int i, j, rc;
-	keyfield_t *field;
-	style_t *style;
-
-	if (newcons == active_console)
-		return;
-
-	if (newcons == KERNEL_CONSOLE) {
-		if (active_console == KERNEL_CONSOLE)
-			return;
-		active_console = KERNEL_CONSOLE;
-		curs_visibility(0);
-
-		async_serialize_start();
-		if (kernel_pixmap == -1) { 
-			/* store/restore unsupported */
-			set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND);
-			clrscr();
-		} else {
-			gcons_in_kernel();
-			console_pixmap = switch_screens(kernel_pixmap);
-			kernel_pixmap = -1;
-		}
-		async_serialize_end();
-
-		__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
-		return;
-	} 
-	
-	async_serialize_start();
-
-	if (console_pixmap != -1) {
-		kernel_pixmap = switch_screens(console_pixmap);
-		console_pixmap = -1;
-	}
-	active_console = newcons;
-	gcons_change_console(newcons);
-	conn = &connections[active_console];
-
-	set_style(&conn->screenbuffer.style);
-	curs_visibility(0);
-	if (interbuffer) {
-		for (i = 0; i < conn->screenbuffer.size_x; i++)
-			for (j = 0; j < conn->screenbuffer.size_y; j++) 
-				interbuffer[i + j * conn->screenbuffer.size_x] =
-					*get_field_at(&(conn->screenbuffer),
-					i, j);
-		/* This call can preempt, but we are already at the end */
-		rc = async_req_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL,
-			NULL);		
-	};
-	
-	if ((!interbuffer) || (rc != 0)) {
-		set_style(&conn->screenbuffer.style);
-		clrscr();
-		style = &conn->screenbuffer.style;
-
-		for (j = 0; j < conn->screenbuffer.size_y; j++) 
-			for (i = 0; i < conn->screenbuffer.size_x; i++) {
-				field = get_field_at(&(conn->screenbuffer), i,
-					j);
-				if (!style_same(*style, field->style))
-					set_style(&field->style);
-				style = &field->style;
-				if ((field->character == ' ') &&
-					(style_same(field->style,
-					conn->screenbuffer.style)))
-					continue;
-
-				prtchr(field->character, j, i);
-			}
-	}
-	
-	curs_goto(conn->screenbuffer.position_y,
-		conn->screenbuffer.position_x);
-	curs_visibility(conn->screenbuffer.is_cursor_visible);
-
-	async_serialize_end();
-}
-
-/** Handler for keyboard */
-static void keyboard_events(ipc_callid_t iid, ipc_call_t *icall)
-{
-	ipc_callid_t callid;
-	ipc_call_t call;
-	int retval;
-	int c;
-	connection_t *conn;
-	int newcon;
-	
-	/* Ignore parameters, the connection is alread opened */
-	while (1) {
-		callid = async_get_call(&call);
-		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
-			/* TODO: Handle hangup */
-			return;
-		case KBD_MS_LEFT:
-			newcon = gcons_mouse_btn(IPC_GET_ARG1(call));
-			if (newcon != -1)
-				change_console(newcon);
-			retval = 0;
-			break;
-		case KBD_MS_MOVE:
-			gcons_mouse_move(IPC_GET_ARG1(call),
-				IPC_GET_ARG2(call));
-			retval = 0;
-			break;
-		case KBD_PUSHCHAR:
-			/* got key from keyboard driver */
-			
-			retval = 0;
-			c = IPC_GET_ARG1(call);
-			/* switch to another virtual console */
-			
-			conn = &connections[active_console];
-/*
- *			if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 +
- *				CONSOLE_COUNT)) {
- */
-			if ((c >= 0x101) && (c < 0x101 + CONSOLE_COUNT)) {
-				if (c == 0x112)
-					change_console(KERNEL_CONSOLE);
-				else
-					change_console(c - 0x101);
-				break;
-			}
-			
-			/* if client is awaiting key, send it */
-			if (conn->keyrequest_counter > 0) {		
-				conn->keyrequest_counter--;
-				ipc_answer_fast(fifo_pop(conn->keyrequests), 0,
-					c, 0);
-				break;
-			}
-			
-			keybuffer_push(&conn->keybuffer, c);
-			retval = 0;
-			
-			break;
-		default:
-			retval = ENOENT;
-		}
-		ipc_answer_fast(callid, retval, 0, 0);
-	}
-}
-
-/** Default thread for new connections */
-static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
-{
-	ipc_callid_t callid;
-	ipc_call_t call;
-	int consnum;
-	ipcarg_t arg1, arg2;
-	connection_t *conn;
-
-	if ((consnum = find_free_connection()) == -1) {
-		ipc_answer_fast(iid,ELIMIT,0,0);
-		return;
-	}
-	conn = &connections[consnum];
-	conn->used = 1;
-	
-	async_serialize_start();
-	gcons_notify_connect(consnum);
-	conn->client_phone = IPC_GET_ARG3(call);
-	screenbuffer_clear(&conn->screenbuffer);
-	
-	/* Accept the connection */
-	ipc_answer_fast(iid, 0, 0, 0);
-
-	while (1) {
-		async_serialize_end();
-		callid = async_get_call(&call);
-		async_serialize_start();
-
-		arg1 = arg2 = 0;
-		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
-			gcons_notify_disconnect(consnum);
-			
-			/* Answer all pending requests */
-			while (conn->keyrequest_counter > 0) {		
-				conn->keyrequest_counter--;
-				ipc_answer_fast(fifo_pop(conn->keyrequests),
-					ENOENT, 0, 0);
-				break;
-			}
-			conn->used = 0;
-			return;
-		case CONSOLE_PUTCHAR:
-			write_char(consnum, IPC_GET_ARG1(call));
-			gcons_notify_char(consnum);
-			break;
-		case CONSOLE_CLEAR:
-			/* Send message to fb */
-			if (consnum == active_console) {
-				async_msg(fb_info.phone, FB_CLEAR, 0); 
-			}
-			
-			screenbuffer_clear(&conn->screenbuffer);
-			
-			break;
-		case CONSOLE_GOTO:
-			screenbuffer_goto(&conn->screenbuffer,
-				IPC_GET_ARG2(call), IPC_GET_ARG1(call));
-			if (consnum == active_console)
-				curs_goto(IPC_GET_ARG1(call),
-					IPC_GET_ARG2(call));
-			break;
-		case CONSOLE_GETSIZE:
-			arg1 = fb_info.rows;
-			arg2 = fb_info.cols;
-			break;
-		case CONSOLE_FLUSH:
-			if (consnum == active_console)
-				async_req_2(fb_info.phone, FB_FLUSH, 0, 0,
-					NULL, NULL);		
-			break;
-		case CONSOLE_SET_STYLE:
-			arg1 = IPC_GET_ARG1(call);
-			arg2 = IPC_GET_ARG2(call);
-			screenbuffer_set_style(&conn->screenbuffer, arg1, arg2);
-			if (consnum == active_console)
-				set_style_col(arg1, arg2);
-			break;
-		case CONSOLE_CURSOR_VISIBILITY:
-			arg1 = IPC_GET_ARG1(call);
-			conn->screenbuffer.is_cursor_visible = arg1;
-			if (consnum == active_console)
-				curs_visibility(arg1);
-			break;
-		case CONSOLE_GETCHAR:
-			if (keybuffer_empty(&conn->keybuffer)) {
-				/* buffer is empty -> store request */
-				if (conn->keyrequest_counter <
-					MAX_KEYREQUESTS_BUFFERED) {	
-					fifo_push(conn->keyrequests, callid);
-					conn->keyrequest_counter++;
-				} else {
-					/*
-					 * No key available and too many
-					 * requests => fail.
-					*/
-					ipc_answer_fast(callid, ELIMIT, 0, 0);
-				}
-				continue;
-			}
-			keybuffer_pop(&conn->keybuffer, (int *) &arg1);
-			break;
-		}
-		ipc_answer_fast(callid, 0, arg1, arg2);
-	}
-}
-
-int main(int argc, char *argv[])
-{
-	ipcarg_t phonehash;
-	int kbd_phone;
-	int i;
-
-	async_set_client_connection(client_connection);
-	
-	/* Connect to keyboard driver */
-
-	kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0);
-	while (kbd_phone < 0) {
-		usleep(10000);
-		kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0);
-	}
-	
-	if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, &phonehash) != 0)
-		return -1;
-	async_new_connection(phonehash, 0, NULL, keyboard_events);
-	
-	/* Connect to framebuffer driver */
-	
-	fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0);
-	while (fb_info.phone < 0) {
-		usleep(10000);
-		fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0);
-	}
-	
-	/* Save old kernel screen */
-	kernel_pixmap = switch_screens(-1);
-
-	/* Initialize gcons */
-	gcons_init(fb_info.phone);
-	/* Synchronize, the gcons can have something in queue */
-	async_req(fb_info.phone, FB_FLUSH, 0, NULL);
-	/* Enable double buffering */
-	async_msg_2(fb_info.phone, FB_VIEWPORT_DB, (sysarg_t) -1, 1);
-	
-	async_req_2(fb_info.phone, FB_GET_CSIZE, 0, 0, &(fb_info.rows),
-		&(fb_info.cols)); 
-	set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND);
-	clrscr();
-	
-	/* Init virtual consoles */
-	for (i = 0; i < CONSOLE_COUNT; i++) {
-		connections[i].used = 0;
-		keybuffer_init(&(connections[i].keybuffer));
-		
-		connections[i].keyrequests.head =
-			connections[i].keyrequests.tail = 0;
-		connections[i].keyrequests.items = MAX_KEYREQUESTS_BUFFERED;
-		connections[i].keyrequest_counter = 0;
-		
-		if (screenbuffer_init(&(connections[i].screenbuffer),
-			fb_info.cols, fb_info.rows) == NULL) {
-			/* FIXME: handle error */
-			return -1;
-		}
-	}
-	connections[KERNEL_CONSOLE].used = 1;
-	
-	interbuffer = mmap(NULL,
-		sizeof(keyfield_t) * fb_info.cols * fb_info.rows,
-		PROTO_READ | PROTO_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
-	if (!interbuffer) {
-		if (async_req_3(fb_info.phone, IPC_M_AS_AREA_SEND, (ipcarg_t)
-			interbuffer, 0, AS_AREA_READ, NULL, NULL, NULL) != 0) {
-			munmap(interbuffer, sizeof(keyfield_t) * fb_info.cols
-				* fb_info.rows);
-			interbuffer = NULL;
-		}
-	}
-
-	curs_goto(0, 0);
-	curs_visibility(connections[active_console].screenbuffer.is_cursor_visible);
-
-	/* Register at NS */
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_CONSOLE, 0, &phonehash) != 0) {
-		return -1;
-	}
-	
-	async_manager();
-
-	return 0;	
-}
- 
-/** @}
- */
Index: pace/console/console.h
===================================================================
--- uspace/console/console.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,54 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup console
- * @{ 
- */
-/** @file
- */
-
-#ifndef __CONSOLE_H__
-#define __CONSOLE_H__
-
-#define KERNEL_CONSOLE 11
-
-#define CONSOLE_COUNT 12 
-
-#define CONSOLE_GETCHAR		1026
-#define CONSOLE_PUTCHAR 	1027
-#define CONSOLE_CLEAR		1028
-#define CONSOLE_GOTO		1029
-#define CONSOLE_GETSIZE		1030
-#define CONSOLE_FLUSH		1031
-#define CONSOLE_SET_STYLE 	1032
-#define CONSOLE_CURSOR_VISIBILITY	1033
-
-#endif
- 
-/** @}
- */
Index: pace/console/gcons.c
===================================================================
--- uspace/console/gcons.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,523 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup console
- * @{ 
- */
-/** @file
- */
-
-#include <ipc/fb.h>
-#include <ipc/ipc.h>
-#include <async.h>
-#include <stdio.h>
-#include <sys/mman.h>
-#include <string.h>
-#include <align.h>
-
-#include "console.h"
-#include "gcons.h"
-
-#define CONSOLE_TOP      66
-#define CONSOLE_MARGIN   6
-
-#define STATUS_START    110
-#define STATUS_TOP      8
-#define STATUS_SPACE    4
-#define STATUS_WIDTH    48
-#define STATUS_HEIGHT   48
-
-#define MAIN_COLOR      0xffffff
-
-static int use_gcons = 0;
-static ipcarg_t xres,yres;
-
-enum butstate {
-	CONS_DISCONNECTED = 0,
-	CONS_SELECTED,
-	CONS_IDLE,
-	CONS_HAS_DATA,
-	CONS_KERNEL,
-	CONS_DISCONNECTED_SEL,
-	CONS_LAST
-};
-
-static int console_vp;
-static int cstatus_vp[CONSOLE_COUNT];
-static enum butstate console_state[CONSOLE_COUNT];
-
-static int fbphone;
-
-/** List of pixmaps identifying these icons */
-static int ic_pixmaps[CONS_LAST] = {-1, -1, -1, -1, -1, -1};
-static int animation = -1;
-
-static int active_console = 0;
-
-static void vp_switch(int vp)
-{
-	async_msg(fbphone,FB_VIEWPORT_SWITCH, vp);
-}
-
-/** Create view port */
-static int vp_create(unsigned int x, unsigned int y, 
-		     unsigned int width, unsigned int height)
-{
-	return async_req_2(fbphone, FB_VIEWPORT_CREATE,
-			   (x << 16) | y, (width << 16) | height, NULL, NULL);
-}
-
-static void clear(void)
-{
-	async_msg(fbphone, FB_CLEAR, 0);
-}
-
-static void set_style(int fgcolor, int bgcolor)
-{
-	async_msg_2(fbphone, FB_SET_STYLE, fgcolor, bgcolor);
-}
-
-/** Transparent putchar */
-static void tran_putch(char c, int row, int col)
-{
-	async_msg_3(fbphone, FB_TRANS_PUTCHAR, c, row, col);
-}
-
-/** Redraw the button showing state of a given console */
-static void redraw_state(int consnum)
-{
-	char data[5];
-	int i;
-	enum butstate state = console_state[consnum];
-
-	vp_switch(cstatus_vp[consnum]);
-	if (ic_pixmaps[state] != -1)
-		async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum],
-			ic_pixmaps[state]);
-
- 	if (state != CONS_DISCONNECTED && state != CONS_KERNEL &&
-		state != CONS_DISCONNECTED_SEL) {
- 		snprintf(data, 5, "%d", consnum + 1);
- 		for (i = 0; data[i]; i++)
- 			tran_putch(data[i], 1, 2 + i);
- 	}
-}
-
-/** Notification run on changing console (except kernel console) */
-void gcons_change_console(int consnum)
-{
-	int i;
-
-	if (!use_gcons)
-		return;
-
-	if (active_console == KERNEL_CONSOLE) {
-		for (i = 0; i < CONSOLE_COUNT; i++)
-			redraw_state(i);
-		if (animation != -1)
-			async_msg(fbphone, FB_ANIM_START, animation);
-	} else {
-		if (console_state[active_console] == CONS_DISCONNECTED_SEL)
-			console_state[active_console] = CONS_DISCONNECTED;
-		else
-			console_state[active_console] = CONS_IDLE;
-		redraw_state(active_console);
-	}
-	active_console = consnum;
-
-	if (console_state[consnum] == CONS_DISCONNECTED) {
-		console_state[consnum] = CONS_DISCONNECTED_SEL;
-		redraw_state(consnum);
-	} else
-		console_state[consnum] = CONS_SELECTED;
-	redraw_state(consnum);
-
-	vp_switch(console_vp);
-}
-
-/** Notification function that gets called on new output to virtual console */
-void gcons_notify_char(int consnum)
-{
-	if (!use_gcons)
-		return;
-
-	if (consnum == active_console ||
-		console_state[consnum] == CONS_HAS_DATA)
-		return;
-
-	console_state[consnum] = CONS_HAS_DATA;
-
-	if (active_console == KERNEL_CONSOLE)
-		return;
-
-	redraw_state(consnum);
-	
-	vp_switch(console_vp);
-}
-
-/** Notification function called on service disconnect from console */
-void gcons_notify_disconnect(int consnum)
-{
-	if (!use_gcons)
-		return;
-	if (active_console == consnum)
-		console_state[consnum] = CONS_DISCONNECTED_SEL;
-	else
-		console_state[consnum] = CONS_DISCONNECTED;
-
-	if (active_console == KERNEL_CONSOLE)
-		return;
-
-	redraw_state(consnum);
-	vp_switch(console_vp);
-}
-
-/** Notification function called on console connect */
-void gcons_notify_connect(int consnum)
-{
-	if (!use_gcons)
-		return;
-	if (active_console == consnum)
-		console_state[consnum] = CONS_SELECTED;
-	else
-		console_state[consnum] = CONS_IDLE;
-
-	if (active_console == KERNEL_CONSOLE)
-		return;
-
-	redraw_state(consnum);
-	vp_switch(console_vp);
-}
-
-/** Change to kernel console */
-void gcons_in_kernel(void)
-{
-	if (console_state[active_console] == CONS_DISCONNECTED_SEL)
-		console_state[active_console] = CONS_DISCONNECTED;
-	else
-		console_state[active_console] = CONS_IDLE;
-	redraw_state(active_console);
-
-	if (animation != -1)
-		async_msg(fbphone, FB_ANIM_STOP, animation);
-
-	active_console = KERNEL_CONSOLE; /* Set to kernel console */
-	vp_switch(0);
-}
-
-/** Return x, where left <= x <= right && |a-x|==min(|a-x|) is smallest */
-static inline int limit(int a,int left, int right)
-{
-	if (a < left)
-		a = left;
-	if (a >= right)
-		a = right - 1;
-	return a;
-}
-
-int mouse_x, mouse_y;
-int btn_pressed, btn_x, btn_y;
-
-/** Handle mouse move
- *
- * @param dx Delta X of mouse move
- * @param dy Delta Y of mouse move
- */
-void gcons_mouse_move(int dx, int dy)
-{
-	mouse_x = limit(mouse_x+dx, 0, xres);
-	mouse_y = limit(mouse_y+dy, 0, yres);
-
-	async_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);
-}
-
-static int gcons_find_conbut(int x, int y)
-{
-	int status_start = STATUS_START + (xres - 800) / 2;;
-
-	if (y < STATUS_TOP || y >= STATUS_TOP + STATUS_HEIGHT)
-		return -1;
-	
-	if (x < status_start)
-		return -1;
-	
-	if (x >= status_start + (STATUS_WIDTH + STATUS_SPACE) * CONSOLE_COUNT)
-		return -1;
-	if (((x - status_start) % (STATUS_WIDTH+STATUS_SPACE)) < STATUS_SPACE)
-		return -1;
-	
-	return (x - status_start) / (STATUS_WIDTH+STATUS_SPACE);
-}
-
-/** Handle mouse click
- *
- * @param state New state (1-pressed, 0-depressed)
- */
-int gcons_mouse_btn(int state)
-{
-	int conbut;
-
-	if (state) {
-		conbut = gcons_find_conbut(mouse_x, mouse_y);
-		if (conbut != -1) {
-			btn_pressed = 1;
-			btn_x = mouse_x;
-			btn_y = mouse_y;
-		}
-		return -1;
-	} 
-	if (!state && !btn_pressed)
-		return -1;
-	btn_pressed = 0;
-
-	conbut = gcons_find_conbut(mouse_x, mouse_y);
-	if (conbut == gcons_find_conbut(btn_x, btn_y))
-		return conbut;
-	return -1;
-}
-
-
-/** Draw a PPM pixmap to framebuffer
- *
- * @param logo Pointer to PPM data
- * @param size Size of PPM data
- * @param x Coordinate of upper left corner
- * @param y Coordinate of upper left corner
- */
-static void draw_pixmap(char *logo, size_t size, int x, int y)
-{
-	char *shm;
-	int rc;
-
-	/* Create area */
-	shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED |
-		MAP_ANONYMOUS, 0, 0);
-	if (shm == MAP_FAILED)
-		return;
-
-	memcpy(shm, logo, size);
-	/* Send area */
-	rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL,
-		NULL);
-	if (rc)
-		goto exit;
-	rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0,
-		PROTO_READ, NULL, NULL, NULL);
-	if (rc)
-		goto drop;
-	/* Draw logo */
-	async_msg_2(fbphone, FB_DRAW_PPM, x, y);
-drop:
-	/* Drop area */
-	async_msg(fbphone, FB_DROP_SHM, 0);
-exit:       
-	/* Remove area */
-	munmap(shm, size);
-}
-
-extern char _binary_helenos_ppm_start[0];
-extern int _binary_helenos_ppm_size;
-extern char _binary_nameic_ppm_start[0];
-extern int _binary_nameic_ppm_size;
-/** Redraws console graphics  */
-static void gcons_redraw_console(void)
-{
-	int i;
-
-	if (!use_gcons)
-		return;
-	
-	vp_switch(0);
-	set_style(MAIN_COLOR, MAIN_COLOR);
-	clear();
-	draw_pixmap(_binary_helenos_ppm_start,
-		(size_t) &_binary_helenos_ppm_size, xres - 66, 2);
-	draw_pixmap(_binary_nameic_ppm_start,
-		(size_t) &_binary_nameic_ppm_size, 5, 17);
-
-	for (i = 0;i < CONSOLE_COUNT; i++)
-		redraw_state(i);
-	vp_switch(console_vp);
-}
-
-/** Creates a pixmap on framebuffer
- *
- * @param data PPM data
- * @param size PPM data size
- * @return Pixmap identification
- */
-static int make_pixmap(char *data, int size)
-{
-	char *shm;
-	int rc;
-	int pxid = -1;
-
-	/* Create area */
-	shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED |
-		MAP_ANONYMOUS, 0, 0);
-	if (shm == MAP_FAILED)
-		return -1;
-
-	memcpy(shm, data, size);
-	/* Send area */
-	rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL,
-		NULL);
-	if (rc)
-		goto exit;
-	rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0,
-		PROTO_READ, NULL, NULL, NULL);
-	if (rc)
-		goto drop;
-
-	/* Obtain pixmap */
-	rc = async_req(fbphone, FB_SHM2PIXMAP, 0, NULL);
-	if (rc < 0)
-		goto drop;
-	pxid = rc;
-drop:
-	/* Drop area */
-	async_msg(fbphone, FB_DROP_SHM, 0);
-exit:       
-	/* Remove area */
-	munmap(shm, size);
-
-	return pxid;
-}
-
-extern char _binary_anim_1_ppm_start[0];
-extern int _binary_anim_1_ppm_size;
-extern char _binary_anim_2_ppm_start[0];
-extern int _binary_anim_2_ppm_size;
-extern char _binary_anim_3_ppm_start[0];
-extern int _binary_anim_3_ppm_size;
-extern char _binary_anim_4_ppm_start[0];
-extern int _binary_anim_4_ppm_size;
-
-static void make_anim(void)
-{
-	int an;
-	int pm;
-
-	an = async_req(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE],
-		NULL);
-	if (an < 0)
-		return;
-
-	pm = make_pixmap(_binary_anim_1_ppm_start,
-		(int) &_binary_anim_1_ppm_size);
-	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
-
-	pm = make_pixmap(_binary_anim_2_ppm_start,
-		(int) &_binary_anim_2_ppm_size);
-	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
-
-	pm = make_pixmap(_binary_anim_3_ppm_start,
-		(int) &_binary_anim_3_ppm_size);
-	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
-
-	pm = make_pixmap(_binary_anim_4_ppm_start,
-		(int) &_binary_anim_4_ppm_size);
-	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
-
-	async_msg(fbphone, FB_ANIM_START, an);
-
-	animation = an;
-}
-
-extern char _binary_cons_selected_ppm_start[0];
-extern int _binary_cons_selected_ppm_size;
-extern char _binary_cons_idle_ppm_start[0];
-extern int _binary_cons_idle_ppm_size;
-extern char _binary_cons_has_data_ppm_start[0];
-extern int _binary_cons_has_data_ppm_size;
-extern char _binary_cons_kernel_ppm_start[0];
-extern int _binary_cons_kernel_ppm_size;
-
-/** Initialize nice graphical console environment */
-void gcons_init(int phone)
-{
-	int rc;
-	int i;
-	int status_start = STATUS_START;
-
-	fbphone = phone;
-
-	rc = async_req_2(phone, FB_GET_RESOLUTION, 0, 0, &xres, &yres);
-	if (rc)
-		return;
-	
-	if (xres < 800 || yres < 600)
-		return;
-
-	/* create console viewport */
-	/* Align width & height to character size */
-	console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP,
-		ALIGN_DOWN(xres - 2 * CONSOLE_MARGIN, 8),
-		ALIGN_DOWN(yres - (CONSOLE_TOP + CONSOLE_MARGIN), 16));
-	if (console_vp < 0)
-		return;
-	
-	/* Create status buttons */
-	status_start += (xres - 800) / 2;
-	for (i = 0; i < CONSOLE_COUNT; i++) {
-		cstatus_vp[i] = vp_create(status_start + CONSOLE_MARGIN +
-			i * (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP,
-			STATUS_WIDTH, STATUS_HEIGHT);
-		if (cstatus_vp[i] < 0)
-			return;
-		vp_switch(cstatus_vp[i]);
-		set_style(0x202020, 0xffffff);
-	}
-	
-	/* Initialize icons */
-	ic_pixmaps[CONS_SELECTED] =
-		make_pixmap(_binary_cons_selected_ppm_start,
-		(int) &_binary_cons_selected_ppm_size);
-	ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start,
-		(int) &_binary_cons_idle_ppm_size);
-	ic_pixmaps[CONS_HAS_DATA] =
-		make_pixmap(_binary_cons_has_data_ppm_start,
-		(int) &_binary_cons_has_data_ppm_size);
-	ic_pixmaps[CONS_DISCONNECTED] =
-		make_pixmap(_binary_cons_idle_ppm_start,
-		(int) &_binary_cons_idle_ppm_size);
-	ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start,
-		(int) &_binary_cons_kernel_ppm_size);
-	ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED];
-	
-	make_anim();
-
-	use_gcons = 1;
-	console_state[0] = CONS_DISCONNECTED_SEL;
-	console_state[KERNEL_CONSOLE] = CONS_KERNEL;
-	gcons_redraw_console();
-}
- 
-/** @}
- */
-
Index: pace/console/gcons.h
===================================================================
--- uspace/console/gcons.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup console
- * @{ 
- */
-/** @file
- */
-
-#ifndef _GCONS_H_
-#define _GCONS_H_
-
-void gcons_init(int phone);
-void gcons_change_console(int consnum);
-void gcons_notify_char(int consnum);
-void gcons_in_kernel(void);
-void gcons_notify_connect(int consnum);
-void gcons_notify_disconnect(int consnum);
-void gcons_mouse_move(int dx, int dy);
-int gcons_mouse_btn(int state);
-
-#endif
- 
-/** @}
- */
Index: pace/console/helenos.ppm
===================================================================
--- uspace/console/helenos.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,13 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-64 60
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýøùùñóõîñóïòóö÷÷ûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþøùùíñóäêîßèìÞæëÝåêÝåêÞåêäèêðññûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþøùùïòôåëïåìðäêîÛàãØÜßÛàâæëîåëîÝåêÛäèÛáåèééúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþùùúïóôæìïåìðåëî×Üß½ÄÆµ¼¾ÈÍÏÍÒÓÊÏÑ·¾ÀÃÊÌãçêÝåéÚãçØÛÞçèèûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúðôõèîñäìðçíðÙÞáÁÇÉ´¼¾ÊÏÑèëì÷ùù÷ùúôöøòõ÷ñóôÖÚÜ¹ÀÂÞäæÜâåØÝâÔÕ×ñòòþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûòõöéîñåíñæíñÛáäÄËÎµ¼¾ÈÍÏäæçöøøøúúõ÷ùòõ÷ðóõðóõðóõïòôïòôÒ×Ù¿ÅÈàåéØßäÎÒÕáááûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûóö÷êïòæíñçîñÞãåÇÎÐµ½¿ÅËÍàãäö÷÷ùúûöøùóöøòõ÷ñôöðóõðóõïòôïòôïòôîñóëïñ»ÂÅÛßâÚàåÓÙÞÑÒÓôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûüüôöøëðóçîñèïòßåèËÑÓ¶¾ÀÃÉËÜàáóôõøúû÷ùúô÷øóöøòõ÷òõ÷ñôöðóõðóõïòôïòôîñóîñóìðòìïòÔÙÛÄËÍÞäè×ÞãËÎÐæççüýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûüüô÷øíñôèîòéïóáçêÍÔÖ¹ÁÃÂÈÊØÜÝñòóøúú÷úûõ÷ùôöøóöøòõ÷òõ÷ñôöñôöðóõðóõïòôîñóîñóíñóìðòëïñëîñåéìºÁÃÞãå×ÞãÐÕÙÕÕÖ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüõøùîòõèïóéðôãéìÑ×Ù»ÂÄÀÆÈÔØÙïðñøùúøúûõøúô÷ùôöøóöøóöøòõ÷òõ÷ñôöðóõðóõïòôïòôîñóîñóìðòìïòëîñëîñêíðéíðÉÏÒÌÒÓÛàäÓÙÞÊÌÏìííþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷ùùðóõèïóéðôåêîÔÚÝ½ÄÇ¿ÆÇÑÖ×ëíîøùùúûüöùúô÷ùô÷ùô÷ùôöøóöøòõ÷òõ÷òõ÷ñôöðóõðóõïòôîñóîñóíñóìðòëïñëîñêîñéíðèìïèìïÝâä»ÂÄÞâåÓÚßËÐÓÛÛÛúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷ùúðôöéðóêðôæìï×ÝßÁÈË¾ÅÇÎÓÔèëëöøøúüü÷úûöùúõ÷ùô÷ùô÷ùô÷ùôöøòõ÷òõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóíñóìðòìïòëîñëîñêíðéíðèìïèìïçëîæêí¿ÆÈÕÚÜÖÜáÐ×ÛÍÏÐððñþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùúúñõ÷êñôêñõçíñÚàâÃÊÌ¾ÅÆÊÏÑæèéö÷øûüüøúûöùúöùúõøùô÷ùô÷ùô÷ùôöøóöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóîñóíðòìðòìïòëîñëîñêíðéíðèìïçëîçëîæêíåêíÕÛÞ¿ÆÇÝâåÓÙÞÉÍÏâââûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùûûíóöéñôëñôßäçÆÍÏ¾ÅÇÇÌÎâåæõö÷ûüýùûü÷ùúöùúöùúöùúõøùô÷ùô÷ùô÷ùôöøóöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóÛÞà±²´´µ¶ÛÝàëîñêîñéíðèìïèìïçëîçëîæêíåéìäéìáæèºÁÃÙÝßÓÙÝÍÓÖÑÒÓôõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùúúèðôêñõíñóÃÉËÂÈÊßâãóôõûüýúûýøúü÷ùûöùúöùúöùúõøùô÷ùô÷ùô÷ùôöøôöøòõ÷òõ÷òõ÷òõ÷ñôöïòôïòôîñóîñóÜÞá~~ooptsuÛÞáéíðèìïèìïçëîæêíåêíäéìäéëãèêãèêËÒÔÅËÍØÞáÏÖÚÈËÍèèèýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëðôçðôóöø½ÄÆ×ÚÜúûûûüýøúüøúü÷úûöùúöùúöùúöùúõ÷ùô÷ùô÷ùôöøôöøóöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóîñóíñó¯±³poq{{|º»½çëîçëîçëîæêíåéìäéìãèëãèêâçéáæèÛàâ¸¿ÁÛßâÐ×ÚËÐÒ×××÷øøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïððäíñðöøÔÙÛÍÒÓûüýùûüøúüøúü÷úûöùúöùúöùúõøùõ÷ùô÷ùô÷ùôöøôöøóöøòõ÷òõ÷ñôöðóõïòôïòôïòôîñóîñóíðòìðò«¬®yyz¢¢£«ª«­®¯áåèçëîæêíäéìäèëãèêâçéâçéáæèàåçßäçÁÈÊÌÒÔÓÙÜÎÓÖÊÌÍíîîþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÝàáâëð÷úûºÁÃðòóùûüøúüøúü÷ùûöùúöùúöùúõøùô÷ùô÷ùôöøôöøôöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóîñóîñóìðòìðòëîñÑÓÕ³³´½¼½µµ¶ÑÔ×æêíåéìãèêãèêâçéâçéàåçßäçÞãæÝâåÓØÛºÀÃÙÞáÎÔØÆÊÍÝÝÞúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÍÑÒáêïøúüºÁÃ÷øùøúüøúü÷ùûöùúöùúöùúõ÷ùô÷ùô÷ùôöøôöøóöøòõ÷òõ÷ëîðæéëîñóïòôïòôîñóîñóíñóìðòìïòëîñêîñéìï  ¡¸·¹ÁÀÂ¾½¿ÀÁÂâæéãèêâçéâçéáæèàåçßäçÞãæÝâåÜáäÚßãºÁÄÔÙÛÎÕØËÐÔÍÎÏòòòþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûû¶¸¹Ýåêóöù»ÂÄðòò÷úûöùúöùúöùúõøùõ÷ùô÷ùôöøôöøôöøóöøòõ÷ñôöÎÐÒ°±³èëíîñóîñóíñóìðòìïòëîñêíðéíðèìïÂÄÆ³³´À¿ÁÀÀÁ¹¹ºÙÝÞâçéâçéàåçßäçßäçÝâåÜáäÛàäÛàäÚßãËÑÔ½ÄÆ×ÜßÌÓ×ÆÉËäääüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûº»»½ÄÈëñôÏÔÖÕÙÛöùúöùúöùúõøùô÷ùô÷ùôöøôöøôöøóõ÷òõ÷ñôößâä~~qpqxxz¹º»îñóìðòìðòëîñëîñêíðéíðèìïèìïàäç««¬½¼¾ÂÁÃ½¼¾ÇÈÉàåçàåçßäçÞãæÝâåÜáäÛàäÚßãÚßãÙÞâÕÚÞ¶¾ÀÕÚÞËÒÖÈÎÑÒÒÒöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýýÙÙÙàéíèíï»ÁÃóö÷öùúõøùô÷ùôöøôöøôöøóöøòõ÷òõ÷ñôöðóõÇÉÊqpq~~~£¤¥æêëìïòëîñêíðéíðèìïèìïçëîçëîæêí±³µ¡¡¢··¸ÁÀÂÀ¿Áºº¼ÚßáßäçÞãæÜáåÛàäÛàäÚßãÚÞâØÝáØÝáÖÛàÁÈËÇÌÎÑ×ÚÊÐÔÇÉËéêêýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþéééÌÔØíóõ¿ÆÈâæèõ÷ùô÷ùôöøôöøôöøóõ÷òõ÷ñôöñôöðóõïòôÔÖØ|}}¦¥¦³²³°°±ÒÕ×ëîñêíðéíðèìïèìïçëîæêíæêíåéìÍÐÓ°¯±¿¾ÀÂÁÃ»º»ÌÐÒÝâåÜáäÛàäÚßãÚßãÙÞâØÝá×ÜàÖÛàÕÚßÏÕÙ¶½¿ØÜÞÊÐÔÆÊÌØØÙùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôõõº»¼¢§ª¶¼¾¡¡¤¥ðòôôöøôöøóöøòõ÷òõ÷ñôöñôöðóõïòôïòôèëí²±³¿¾À½¼¾ÀÀÂéìïèìïèìïçëîçëîæêíæêíÞáäÂÅÇ¨¨©»»½ÂÁÃ¾¾À¾¿ÁÙÞáÛàäÚßãÚÞâÙÝáØÝáÖÛàÖÛàÕÚÞÕÚÝÓØÜ»ÁÄÎÓÕÌÒÖÉÎÒÉÊËïïïþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüàààehi444444ÇÇÈôöøóõ÷òõ÷ñôöñôöñôöðóõïòôïòôîñóíñóÁÂÄ²±³À¿ÁÁÀÂ»º¼ÜßáçëîçëîæêíäèëØÛÞ¬®°onowxy¦¦§º¹ºÂÁÃÁÀÂ¸¸¹ÐÔ×ÚßãÚÞâØÝá×ÜàÖÛàÕÚßÕÚÞÔÙÝÓØÛÒ×ÚÊÏÒ·¾ÀÖÚÝÊÐÔÅÈËßßßûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþïïïªª¬|??@222||}ðòôòõ÷ñôöñôöðóõðóõïòôîñóîñóíðòìðòàâå««¬½¼¾ÁÁÂ¼¼½ÈÊÌæêíâåèÉËÍuuvppqvvw}~~®®¯¼¼½ÂÁÃÂÁÃ½½¾ÂÄÆÙÝá×ÜáÖÛàÖÛàÕÚßÔÙÝÔÙÝÓØÛÒ×ÚÑÖÙÏÕØ¶½ÀÔÙÛÊÐÔÈÍÑÌÍÎóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÐÐÐ
-XYY333AAAÜßàñôöñôöðóõðóõïòôîñóíñóìðòìïòëîñêíð´µ·¡¡¢¸¸¹ÁÀÂÀÀÁº¹»ÅÈÊsstrrsyyz¥¥¦±°±º¹»À¿ÁÃÂÄÃÂÄÀ¿Á¹¹»ÒÖÚÖÛàÖÛßÕÚÞÔÙÝÓØÜÒ×ÚÒ×ÚÑÖÙÐÖÙÐÖÙÃÉÌ¾ÄÆÓØÛÊÐÔÅÈÊæææüýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýééérvx999222 ¡¢ñôöðóõïòôîñóîñóíðòìðòìïñëîñêíðéíðÓÖØ°°±¾¾¿ÁÀÂ»º»¨¨©
-
- ªª«³²´º¹»ÂÁÃÊÌÎÂÁÃÂÁÃÂÁÃÂÁÃ»»¼ÆÈËÕÚßÔÙÝÔÙÝÓØÛÒ×ÚÒ×ÚÐÖÙÐÖÙÏÕØÏÕØËÑÕ³»½ÖÙÜÊÐÔÇÍÐÓÓÓ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôô»¼½JJK222]]]çéëïòôîñóíðòìðòìïñëîñêîðêíðéíðèìïãæé¥¦§¦¦§»º¼ÂÁÃ¿¾Àµ´¶§§¨  ¢¥¥¥®®¯¶¶¸¼¼½ÆÇÉÒÕ×ÚÞâÚßãÃÄÆ¼»½À¿ÁÂÁÃ¿¾À¼¼¾Ò×ÚÔÙÜÓØÛÒ×ÚÑ×ÚÐÖÙÐÖÙÏÕØÏÔØÍÓ×ÍÓ×ºÂÄÈÎÐÍÓ×ÉÏÓÆÈÉìììýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüüàààfij555444ÆÆÇîñóíðòìðòìïñëîñêíðêíðéìïèìïçëîçëîÄÇÈ´´µÀ¿ÁÂÁÃ¾½¿¹¸º·¶¸º¹ºÀÀÁÌÎÐØÜßÛàäÚßãÚßãÚÞâÉÌÏ®®¯¹¸ºÀÀÁÁÀÂ¹¹ºÉÍÏÒ×ÚÒ×ÚÑÖÙÐÖÙÐÖÙÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÈÎÒ³»½×ÛÞÊÐÔÅÉËÚÛÛúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþïïï©«¬|AAB222{||ìïðìðòìîñëîñêíðêíðèìïèìïçëîæêíæêíÜàâ««¬½¼¾ÂÁÃÂÁÃÂÁÃÆÇÉÓÖØÜàãÝâåÛàäÚßãÚÞâÚÞâØÝáÔØÜ¡¡£¬¬­¼¼½ÁÀÂ½¼¾¾¿ÁÑÖÙÐÖÙÐÖÙÏÕØÏÕØÎÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕµ½ÀÐÔÖËÐÔÉÏÒÉÊËðññþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷øøÍÍÎY[\333CCCÙÛÜëîñêîðêíðéìïèìïçëîçëîæêíåéìåéìãèê²´µ  ¡·¶·ÁÁÂÃÂÄÅÄÆÛßâÝâåÜáäÚßãÚßãÚÞâÙÝá×ÜàÖÛàÖÛà°²´ ·¶·ÁÀÂÀÀÁ¹¹»ÌÑÓÐÖÙÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÃÊÍ·¾ÀÕÚÝÊÐÔÄÇÉáááüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýççèsxy:::222 ¡¢ìïòêíðéìïèìïçëîçëîæêíåéìåéìäèëâçéÑÕÖ¯¯°¾¾¿ÃÂÄÂÁÃÐÓÖÛàäÚßãÚÞâÚÞâØÝá×ÜàÖÛàÖÛßÔÙÝÇËÎ®­®¾½¾ÂÁÃ»»¼ÃÇÉÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÉÏÓ³º½ÔØÛÊÐÔÈÎÑÍÎÎôôõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóôô¹ººLMN222^^^ãåçèìïèìïçëîæêíæêíåéìäèëãèêâçéâçéÞãä¥§¨¥¥¦º¹»ÂÁÃÂÁÃÁÁÄÙÞáÚÞâÙÝáØÝáÖÛàÖÛàÕÚÞÔÙÝÓØÛÒ×Ú¢£¤¤¤¥¹¹ºÁÀÂ¿¾ÀÆÈËÎÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔ¾ÅÇÀÆÉÐÕÙÊÐÔÅÈÉçèèýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÝÝÝhjl666666ÃÄÅèìïçëîæêíåéìåéìäèëãçêâçéáæèáæèàåçÂÅÇ³³´À¿ÁÂÁÃ¼»½ÎÒÕÙÝá×ÜàÖÛàÕÚßÕÚÞÓØÜÓØÛÒ×ÚÒ×ÚÀÃÆ²±²À¿ÁÃÃÅÌÐÔÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÇÎÑ±¸»ÖÚÝÊÐÔÆËÏÔÔÔøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþîîï§¨ª{BBC222|}}éìîæêíåéìäèëãèêâçéâçéáæèàåèßäçÞãæÖÚÝªª«¼¼½ÂÁÃ¾½¿ÀÁÃ×ÜàÖÛàÕÚÞÔÙÝÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÕØÃÈÊ¼¾ÀÅÇÉÌÐÔÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÈÏÒ¸¾Á¾ÄÇËÑÕÊÐÔ¹ÀÃÌÑÓÌÒÖÊÏÓÆÇÈíîîþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷øøËËË[]^344EEEÖØÙåéìäèëâçéâçéáæèáæèàåçßäæÝâåÝâåÛàä³µ·  ¶¶·ÁÀÂÀÀÁ¸¸ºÑÕÙÕÚÞÔÙÜÓØÛÓØÛÒ×ÚÒ×ÚÐÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔ£ª¬{ÐÔ×ÊÐÔÄÊÎºÁÃÚÞáÊÐÔÄÈÊÜÜÜúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýçççswy;;;222 ¡¢æêíâçéáæèáæèàåèßäçÞãæÝâåÜáäÛàäÚßãÍÐÓ®®¯¾¾¿ÂÁÃ»»¼ÄÆÉÓØÜÓØÛÒ×ÚÒ×ÚÑ×ÚÐÖÙÐÖÙÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔ®³µ¤«­ÊÐÒâäæÊÐÔÇÍÑ¹ÀÂäæéÊÐÔÉÏÒÉÉÊóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóôô¸¹¹MNO222___áãåáæèáæèàåçßäçÞãæÝâåÜáäÛàäÚßãÚÞâ×ÚÞ¥¦¨¤¤¥º¹»ÁÀÂ¿¾À¾¿ÁÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÌÒÖàãåèëìÑÖÚÊÐÔÂÈË¿ÅÇæèêÊÐÔÉÏÓ¼¾¿êêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúûûÛÛÛhlm666666½¾¿âçéàåçßäæÝâåÜáäÜáäÚßãÚÞâÙÝáÙÝá×Üà¿ÂÅ³²³À¿ÁÂÁÃÆÈÊÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔËÐÔËÑÕÊÐÔÉÏÓ³»½ÙÝÞÜàãÊÐÔÉÏÓ³´µäääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþîîî§¨©{DEE222wxxäèêÞãæÝâåÜáäÛàäÚßãÚÞâÙÝáØÜáÖÛàÕÚßÒ×Û±³µ¬«­¼¼½ÆÆÈÐÔ×Ò×ÚÐÖÙÐÖÙÏÕØÏÔØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÈÎÒ¶¾Á½ÄÅñóôÍÓ×ÊÐÔÃÉÌ¬¬­äääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÊÊÊ\^_444EEEÒÔÕÝâåÜáäÛàãÚßãÙÝáÙÝá×ÜàÖÛàÕÚßÔÙÝÔÙÝÒ×ÚÌÐÒÎÒÔÑÖØÑÖÙÐÖÙÏÕØÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÉÏÓÃÊÎ¸ÀÃ±¹»ÇÍÏïñòØÜßÊÐÔÉÏÓ³³´éêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýææçsxy<<<222áåèÚßãÚÞâÙÝáØÝá×ÜàÖÛßÕÚÞÔÙÝÓØÜÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÅËÎ»ÃÅ²º½ºÀÂÑÖ×éëìêíîÔÙÜÊÐÔÉÏÓnooÂÂÃñòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóô¸¸¹
-OQQ222\\\ÝàâÚÞâÙÝá×ÜáÖÛàÕÚßÔÙÞÔÙÝÓØÜÓØÛÒ×ÚÒ×ÚÒ×ÚÐÖÙÐÖÙÏÕØÏÔØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÆÌÐ¾ÄÇ²º¼¸¿ÀËÐÑæèéëíîáåçÓØÛËÑÕÇÍÑ®²µxyzKKKÖÖÖøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÚÚÚiln667777¼½¾Ûàä×ÜàÖÛßÕÚÞÔÙÝÔÙÜÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÏÔØÍÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÇÍÑÀÆÊµ¼¿µ¼¾ÇÌÎáäåìîïäèêÕÚÝÌÒÖÈÎÒ´º½`abAABCCD¼»¼êêêýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþîîî¥§¨zDEF333¥¥¦àãæÖÛßÔÙÞÔÙÝÓØÜÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÈÎÒÁÈËµ½Àµ¼¾ÁÇÉÞáâëíîèêìØÜßÍÓ×ÉÏÓ¹¾ÂgjkHIJ;;;FGGaab¶¶·ßààøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÈÈÉ]__\\]ÐÒÓÛßâÔÙÝÔÙÝÓØÜÓØÛÈÍÐÀÄÇÍÒÔÐÖÙÐÖÙÏÕØÏÔØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÉÏÓÃÉÍ¸¿Â³»½½ÃÅØÜÝêìíëíîÚÞáÏÔØÊÐÓ½ÂÆ¡¥¨qstOOO===DDDZ[[www«««ÇÇÈäää÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýæææ}ÂÃÄÂÉËÎÓÕÖÛßÓØÛÓØÛÍÒÕ~
-¤¨ªÚÞáÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÉÏÓÅËÏºÂÅ³»¾¹ÀÂÓ×ØèêëìîïÝáäÐÖÙÊÐÔÀÆÊ¨¬¯|UVV>>>CCDTTUppq¥¥¦»»¼ÐÐÐâââñññúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóô·¸¸ÑÕØÊÐÓºÀÂÚÞáÓØÛÒ×ÚÎÓÕ¢¥§¹ÀÂÕ×ØÝáãÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÅÌÏ¾ÄÇ³»½·¾ÀÍÒÓåèèïðñàäæÓØÛËÑÔÃÈÌ°µ¸
-\^_CCDCDDQQQjkk
- µµ¶ËËÌÞÞÞìììöööüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÙÙÙ·¼¿ÎÔØ·¾ÀÔÙÜÓØÛÒ×ÚÐÖÙÙÝàçêëæéêÐÕÙÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕÈÎÒÀÇÉ´»¾´»½ÇÌÎâåæîðñäçéÔÙÜËÑÕÆÌÐ´º½cdeGGGCDDNOOddd~°°±ÆÆÇÚÚÚéééôôôûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþíîîÌÒÕÆÌÎ»ÂÄÔÙÜÐÖÙÐÖÙÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÉÏÓÃÉÍ¶¾À³»½ÁÈÉÞáâïññæéë×ÜßËÑÕÇÍÑº¿ÂknoKLMDEFKLL_``yzz«««ÁÁÁÕÕÖæççòòóùúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÆÇÇuwx¾ÄÈÏÔ×¹ÁÃºÂÄËÑÔÏÕØÏÔØÍÓ×ÍÓ×ËÑÕÅËÏ¸ÀÃ´»½»ÁÃÛÞßíîïëíïÚÞàÍÓ×ÈÎÒ½ÃÇ£¦qsuPQRDEEIJKZ[\uuv¦¦§½½½ÑÑÑáââïïðøøøýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýýåææ£¥ÌÒÖÎÔ×¾ÅÈ²º¼ºÁÄÁÈËÂÉÌºÁÄ³»½¸¿ÁÓ×ØëííîðñÝáãÏÔØÊÏÓÁÆÊ§¬¯x{}RTUCDEGHIUUWoop¡¡¢¸·¸ÍÍÎßààíîî÷÷÷üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóô²²²uxyÃÉÍÍÓÖÐÖÙÕÙÜÒ×ØÇÍÏÉÎÐ×ÚÜæéêñòóàãæÐÖÚÊÐÔÃÉÍ­²µ
-Z\]DEFEFGPPQhii²²³ÈÈÈÜÜÜëëëõööûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúØØØopqÈÎÑÌÒÖÍÓ×ÎÔØÖÛßÛßâÚÞáÒ×ÛÊÐÔÅËÏ¶¼¿`bdGHIGHINOPbcd}}~¬¬­ÃÃÄ××ØèèèóóóúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþíîîXYZ½ÂÆÉÏÓËÑÕËÑÕÊÐÔÇÍÑ»ÀÄhklKLMGHIKLM]^_vww§§¨¾½¾ÒÓÔåååñññùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷øøÔÔÕ{||RTU\^_|qstQRRHIJLMNYZZqqq¢¢£¹¹¹ÏÏÐáááîîî÷÷÷üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýïïïÅÅÅ~UWXPQROPQNOOMNNNOOWXYklm´³´ÊÊÊÝÝÝìííö÷÷üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüüêëëÊÊÊ z{{jkkhhhnoo®®¯ÅÅÅÙÚÚéééóôôûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüüðððÛÜÜÇÇÇ··¸²²²¶¶¶ÃÃÄÕÕÕæææòóóúúúýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: pace/console/nameic.ppm
===================================================================
--- uspace/console/nameic.ppm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,14 +1,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-100 26
-255
-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿããã»»»¤¤¤¿¿¿êêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÄÄÄ¦¦¦¢¢¢ÅÅÅððñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËË___444222222222222222666rrsÞÞÞÿÿÿÿÿÿÿÿÿññò;;;222222222222222999òòòÿÿÿÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯¯°888222222222222222222222222222AAAÈÈÈÿÿÿïïïbbb222222222222222222222222222VVWïïïÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖ;;;222222222222222222222222222222222UUUììì222222222222222222222222222222222~~~ÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzz222222222222222IIIeef???222222222222222NNN222222222222???hhhLLL222222222222444ççè~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööBBB222222222222VVVëëëÿÿÿÔÔÔAAA222222222222AAA444222222222CCCàááÿÿÿñññWWW222222222333®®®~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÞÞ;;;222222222222ÿÿÿÿÿÿýýýaaa222222222222222222222222222\\\ÿÿÿÿÿÿþþþ222222222222
-
-
-~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýààà¿¿¿´´´ÀÀÀßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëëÈÈÈ´´´ºººÔÔÕúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÇÇÇ´´´¿¿¿ÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222222222222222222GGGëëëÿÿÿÿÿÿ£££222222222222ttt~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿúúú°°±PPP222222222222333\\\ÑÑÑÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÏÏÏggg666222222222222GHH¬¬¬ûûûÿÿÿÿÿÿâââMMMNNN¤¤¤ùùú;;;222222222222WXXËËËÿÿÿÿÿÿÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222222222222222222222uuuôôôÿÿÿòòòãããããããããäääëëë~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿôôôzz{222222222222222222222222777¼¼¼ÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿ§§§999222222222222222222222444ùùùÿÿÿÞÞÞ222222222222222222222222222555ÄÄÄÿÿÿÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222BBBHHH222222222222222YYYÇÇÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿúúú222222BBBÛÛÛãããÏÏÏ
-
-
-5552229::ãããÿÿÿÿÿÿVVV222IIIòòòÿÿÿ¶¶¶888222666ÏÏÏäääÙÙÙ  ¡EEE222555ªªªÿÿÿÞÞÞ222222CCD222KKK¨¨©ÞÞÞãããÂÃÃ]]]222222RRRúúúÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222OOOooo222222222222222222555wwwçççÿÿÿÿÿÿÿÿÿÿÿÿ~~~222222QQQhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhEEE222222«««ÿÿÿÆÆÆ666222NNNÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿþþþ­¬­222222þþþÿÿÿVVV222IIIòòòïïïLLL222999µµµþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖFFF222RRRîîîÞÞÞ222222222WWWìììÿÿÿÿÿÿÿÿÿÿÿÿóóóFFF222222ÕÕÕÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRÓÓÓKKK222222222222222222222===üüüÿÿÿÿÿÿ~~~222222222222222222222222222222222222222222222222222«««ûûûuuu222<<<ÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûû__`222899óóóÿÿÿVVV222IIIòòò¬¬¬444222ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ222555¸¸¸ÞÞÞ222222:::ÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ222222²²²ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÔÔÔPPP222222222222222222222333nnnùùùÿÿÿ~~~222222222222222222222222222222222222222222222222222«««æææKKK222[[[úúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§¨¨222222¾¾¾ÿÿÿVVV222IIIòòòppp222999ÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚ>>>222ÞÞÞ222222SSSúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°°°222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÿÿÿìììzzz222222222222222222222333ÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ËËË222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÊÊ222222ÿÿÿVVV222IIIêêêEEE222WWWðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêQQQ222]]]ÞÞÞ222222wwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÿÿÿÿÿÿýýýÁÁÁRRR222222222222222222444ááá~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««³³³222222222222222222222222222222222222222222~~~þþþVVV222IIIÖÖÖ@@@222222222222222222222222222222222222222NNNÎÎÎ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÿÿÿÿÿÿÿÿÿÿÿÿõõõ777222222222222222~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««¥¥¥222222222222222222222222222222222222222222zzzþþþVVV222IIIËËË===222222222222222222222222222222222222222MMMÌÌÌ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222BBB¤¤¤´´´´´´´´´ÚÚÚÿÿÿþþþÆÆÆ===222222222222{{{~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««¨¨¨222222tttÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏàààÿÿÿVVV222IIIÎÎÎ>>>222PPPÄÄÄÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÕÕÕÙÙÙ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222222222222222222ÿÿÿÿÿÿþþþ222222222222iii~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÁÁÁ222222|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIáááCCC222PPPíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÞÞÞ;;;222222222222£££ÿÿÿÿÿÿÿÿÿmmm222222222222222222222222222ÿÿÿÿÿÿÿÿÿ£££222222222222iii~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ßßßAAA222SSSøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏ}}}}}}ÊÊÊÿÿÿVVV222IIIòòò___222555×××ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëë}}}¢¢¢ÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ööö>>>222222222222tttûûûÿÿÿîîïQQQ222222222222222222222222222pqqÿÿÿÿÿÿüüü222222222222~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««øøøjij222888¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüülll222222áááÿÿÿVVV222IIIòòò  ¡333222ûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§¨¨222222£££ÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿiii222222222222777ÌÌÌ555222222222222\\\222222222222999ÎÎÎ¤¤¤;;;222222222333®®®~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÃÃÃ666222IIIÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿøøø222222vvvþþþÿÿÿVVV222IIIòòòìììKKK222677¬¬¬ûûûÿÿÿÿÿÿÿÿÿýýýºººAAA222OOOçççÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿ¬¬¬444222222222222222222222222222222222===£££:::222222222222222222222222222222222;;;îîï~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿûûû222222777www©©©³³³TTT222222HHHçççÿÿÿÿÿÿVVV222IIIòòòÿÿÿ¿¿¿:::222222aaa´´´§§§kkl555222;;;¶¶¶ÿÿÿÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿóóó\\\222222222222222222222222222222222
-úúú222222222222222222222222222222333 ÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿøøø777222222222222222222222TTTáááÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿ»»¼DDD222222222222222222222BBBµµµÿÿÿÿÿÿÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿÿÿÿæææbbb333222222222222222222222444~~ôôôÿÿÿ÷÷÷444222222222222222222222444ÿÿÿÿÿÿ¿¿¿ÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¾¾ÕÕÕÿÿÿÿÿÿÿÿÿþþþ×ØØ
-
-SSS555333EEEeef­­­ùùùÿÿÿÿÿÿÿÿÿÿÿÿ«««¤¤¤ùùùÿÿÿÿÿÿÿÿÿëëë__`;;;222===YYZèèèÿÿÿÿÿÿÿÿÿîîîÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙÕÕÕÿÿÿÿÿÿÿÿÿüüüÁÁÁzzzTUU666222:::XYYÐÐÐýýýÿÿÿÿÿÿÿÿÿþþþÕÕÕZZ[<<<222888[[[ÝÝÝÿÿÿÿÿÿÿÿÿ
Index: pace/console/screenbuffer.c
===================================================================
--- uspace/console/screenbuffer.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,147 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup console
- * @{ 
- */
-/** @file
- */
-
-#include <screenbuffer.h>
-#include <malloc.h>
-#include <unistd.h>
-
-/** Store one character to screenbuffer. Its position is determined by
- * scr->position_x and scr->position_y.
- *
- * @param scr	screenbuffer
- * @param c	stored character
- */
-void screenbuffer_putchar(screenbuffer_t *scr, char c) 
-{
-	keyfield_t *field;
-	
-	field = get_field_at(scr, scr->position_x, scr->position_y);
-
-	field->character = c;
-	field->style = scr->style;
-}
-
-/** Initilize screenbuffer. Allocate space for screen content in accordance to given size.
- * @param scr		initialized screenbuffer
- * @param size_x	width in characters		
- * @param size_y	height in characters
- * @return pointer to screenbuffer (same as scr parameter) or NULL
- */
-screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, int size_x, int size_y) 
-{
-	scr->buffer = (keyfield_t *) malloc(sizeof(keyfield_t) * size_x * size_y);
-	if (!scr->buffer) {
-		return NULL;
-	}
-	
-	scr->size_x = size_x;
-	scr->size_y = size_y;
-	scr->style.fg_color = DEFAULT_FOREGROUND;
-	scr->style.bg_color = DEFAULT_BACKGROUND;
-	scr->is_cursor_visible = 1;
-	
-	screenbuffer_clear(scr);
-	
-	return scr;
-}
-
-/** Clear screenbuffer. 
- * @param scr screenbuffer
- */
-void screenbuffer_clear(screenbuffer_t *scr)
-{
-	unsigned int i;
-	
-	for (i = 0; i < (scr->size_x * scr->size_y); i++) {
-		scr->buffer[i].character = ' ';
-		scr->buffer[i].style = scr->style;
-	}
-
-	scr->top_line = 0;
-	scr->position_y = 0;
-	scr->position_x = 0;
-}
-
-/** Clear one buffer line.
- * @param scr
- * @param line One buffer line (not a screen line!)
- */
-void screenbuffer_clear_line(screenbuffer_t *scr, unsigned int line)
-{
-	unsigned int i;
-	
-	for (i = 0; i < scr->size_x; i++) {
-		scr->buffer[i + line * scr->size_x].character = ' ';
-		scr->buffer[i + line * scr->size_x].style = scr->style;
-	}
-}
-
-/** Copy content buffer from screenbuffer to given memory.
- * @param scr	source screenbuffer
- * @param dest  destination
- */
-void screenbuffer_copy_buffer(screenbuffer_t *scr, keyfield_t *dest) 
-{
-	unsigned int i;
-	
-	for (i = 0; i < scr->size_x * scr->size_y; i++) {
-		dest[i] = scr->buffer[i];
-	}
-}
-
-/** Set new cursor position in screenbuffer.
- * @param scr
- * @param x
- * @param y
- */
-void screenbuffer_goto(screenbuffer_t *scr, unsigned int x, unsigned int y)
-{
-	scr->position_x = x % scr->size_x;
-	scr->position_y = y % scr->size_y;
-}
-
-/** Set new style.
- * @param scr
- * @param fg_color
- * @param bg_color
- */
-void screenbuffer_set_style(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color)
-{
-	scr->style.fg_color = fg_color;
-	scr->style.bg_color = bg_color;
-}
-
- 
-/** @}
- */
Index: pace/console/screenbuffer.h
===================================================================
--- uspace/console/screenbuffer.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,100 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup console
- * @{ 
- */
-/** @file
- */
-
-#ifndef __SCREENBUFFER_H__
-#define __SCREENBUFFER_H__
-
-
-#define DEFAULT_FOREGROUND 0x0	/**< default console foreground color */
-#define DEFAULT_BACKGROUND 0xf0f0f0	/**< default console background color */
-
-typedef struct {
-	unsigned int bg_color;		/**< background color */
-	unsigned int fg_color;		/**< foreground color */
-} style_t;
-
-/** One field on screen. It contain one character and its attributes. */
-typedef struct {
-	char character;			/**< Character itself */
-	style_t style;			/**< Character`s attributes */
-} keyfield_t;
-
-/** Structure for buffering state of one virtual console.
- */
-typedef struct {
-	keyfield_t *buffer;			/**< Screen content - characters and its style. Used as cyclyc buffer. */
-	unsigned int size_x, size_y;		/**< Number of columns and rows */
-	unsigned int position_x, position_y;	/**< Coordinates of last printed character for determining cursor position */
-	style_t style;				/**< Current style */
-	unsigned int top_line;			/**< Points to buffer[][] line that will be printed at screen as the first line */
-	unsigned char is_cursor_visible;	/**< Cursor state - default is visible */
-} screenbuffer_t;
-
-/** Returns keyfield for position on screen. Screenbuffer->buffer is cyclic buffer so we must couted in index of the topmost line.
- * @param scr	screenbuffer
- * @param x	position on screen
- * @param y	position on screen
- * @return	keyfield structure with character and its attributes on x,y
- */
-static inline keyfield_t *get_field_at(screenbuffer_t *scr, unsigned int x, unsigned int y) 
-{
-	return scr->buffer + x + ((y + scr->top_line) % scr->size_y) * scr->size_x;
-}
-
-/** Compares two styles.
- * @param s1 first style
- * @param s2 second style
- * @return nonzero on equality
- */
-static inline int style_same(style_t s1, style_t s2)
-{
-	return s1.fg_color == s2.fg_color && s1.bg_color == s2.bg_color;
-}
-
-
-void screenbuffer_putchar(screenbuffer_t *scr, char c);
-screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, int size_x, int size_y);
-
-void screenbuffer_clear(screenbuffer_t *scr);
-void screenbuffer_clear_line(screenbuffer_t *scr, unsigned int line);
-void screenbuffer_copy_buffer(screenbuffer_t *scr, keyfield_t *dest);
-void screenbuffer_goto(screenbuffer_t *scr, unsigned int x, unsigned int y);
-void screenbuffer_set_style(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color);
-
-#endif
-
- 
-/** @}
- */
-
Index: pace/fb/Makefile
===================================================================
--- uspace/fb/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,97 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-CFLAGS += -I../libipc/include
-
-LIBS =  $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = fb
-SOURCES = \
-	main.c \
-	sysio.c \
-	ppm.c
-
-ifneq ($(ARCH), ia64)
-	SOURCES += fb.c \
-		font-8x16.c
-	CFLAGS += -DFB_ENABLED
-endif
-
-ifeq ($(ARCH), ia32)
-	SOURCES += ega.c
-	CFLAGS += -DEGA_ENABLED
-endif
-ifeq ($(ARCH), amd64)
-	SOURCES += ega.c
-	CFLAGS += -DEGA_ENABLED
-endif
-ifeq ($(ARCH), mips32)
-	CFLAGS += -DFB_INVERT_ENDIAN
-endif
-
-CFLAGS += -D$(ARCH)
-
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/fb/ega.c
===================================================================
--- uspace/fb/ega.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,331 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @defgroup egafb EGA framebuffer
- * @brief	HelenOS EGA framebuffer.
- * @ingroup fbs
- * @{
- */ 
-/** @file
- */
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <align.h>
-#include <async.h>
-#include <ipc/ipc.h>
-#include <errno.h>
-#include <stdio.h>
-#include <ddi.h>
-#include <sysinfo.h>
-#include <as.h>
-#include <ipc/fb.h>
-#include <ipc/ipc.h>
-#include <ipc/ns.h>
-#include <ipc/services.h>
-#include <libarch/ddi.h>
-
-#include "ega.h"
-#include "../console/screenbuffer.h"
-#include "main.h"
-
-#define MAX_SAVED_SCREENS 256
-typedef struct saved_screen {
-	short *data;
-} saved_screen;
-
-saved_screen saved_screens[MAX_SAVED_SCREENS];
-
-#define EGA_IO_ADDRESS 0x3d4
-#define EGA_IO_SIZE 2
-
-#define NORMAL_COLOR       0x0f
-#define INVERTED_COLOR     0xf0
-
-#define EGA_STYLE(fg,bg) ((fg) > (bg) ? NORMAL_COLOR : INVERTED_COLOR)
-
-/* Allow only 1 connection */
-static int client_connected = 0;
-
-static unsigned int scr_width;
-static unsigned int scr_height;
-static char *scr_addr;
-
-static unsigned int style = NORMAL_COLOR;
-
-static void clrscr(void)
-{
-	int i;
-	
-	for (i = 0; i < scr_width*scr_height; i++) {
-		scr_addr[i * 2] = ' ';
-		scr_addr[i * 2 + 1] = style;
-	}
-}
-
-static void cursor_goto(unsigned int row, unsigned int col)
-{
-	int ega_cursor;
-
-	ega_cursor = col + scr_width * row;
-	
-	outb(EGA_IO_ADDRESS, 0xe);
-	outb(EGA_IO_ADDRESS + 1, (ega_cursor >> 8) & 0xff);
-	outb(EGA_IO_ADDRESS, 0xf);
-	outb(EGA_IO_ADDRESS + 1, ega_cursor & 0xff);
-}
-
-static void cursor_disable(void)
-{
-	uint8_t stat;
-
-	outb(EGA_IO_ADDRESS, 0xa);
-	stat=inb(EGA_IO_ADDRESS + 1);
-	outb(EGA_IO_ADDRESS, 0xa);
-	outb(EGA_IO_ADDRESS + 1, stat | (1 << 5));
-}
-
-static void cursor_enable(void)
-{
-	uint8_t stat;
-
-	outb(EGA_IO_ADDRESS, 0xa);
-	stat=inb(EGA_IO_ADDRESS + 1);
-	outb(EGA_IO_ADDRESS, 0xa);
-	outb(EGA_IO_ADDRESS + 1, stat & (~(1 << 5)));
-}
-
-static void scroll(int rows)
-{
-	int i;
-	if (rows > 0) {
-		memcpy(scr_addr, ((char *) scr_addr) + rows * scr_width * 2,
-			scr_width * scr_height * 2 - rows * scr_width * 2);
-		for (i = 0; i < rows * scr_width; i++)
-			(((short *) scr_addr) + scr_width * scr_height - rows *
-				scr_width)[i] = ((style << 8) + ' ');
-	} else if (rows < 0) {
-		memcpy(((char *)scr_addr) - rows * scr_width * 2, scr_addr,
-			scr_width * scr_height * 2 + rows * scr_width * 2);
-		for (i = 0; i < -rows * scr_width; i++)
-			((short *)scr_addr)[i] = ((style << 8 ) + ' ');
-	}
-}
-
-static void printchar(char c, unsigned int row, unsigned int col)
-{
-	scr_addr[(row * scr_width + col) * 2] = c;
-	scr_addr[(row * scr_width + col) * 2 + 1] = style;
-	
-	cursor_goto(row, col + 1);
-}
-
-static void draw_text_data(keyfield_t *data)
-{
-	int i;
-
-	for (i = 0; i < scr_width * scr_height; i++) {
-		scr_addr[i * 2] = data[i].character;
-		scr_addr[i * 2 + 1] = EGA_STYLE(data[i].style.fg_color,
-			data[i].style.bg_color);
-	}
-}
-
-static int save_screen(void)
-{
-	int i;
-
-	for (i=0; (i < MAX_SAVED_SCREENS) && (saved_screens[i].data); i++)
-		;
-	if (i == MAX_SAVED_SCREENS) 
-		return EINVAL;
-	if (!(saved_screens[i].data = malloc(2 * scr_width * scr_height))) 
-		return ENOMEM;
-	memcpy(saved_screens[i].data, scr_addr, 2 * scr_width * scr_height);
-
-	return i;
-}
-
-static int print_screen(int i)
-{
-	if (saved_screens[i].data)
-		memcpy(scr_addr, saved_screens[i].data, 2 * scr_width *
-			scr_height);
-	else
-		return EINVAL;
-	return i;
-}
-
-
-static void ega_client_connection(ipc_callid_t iid, ipc_call_t *icall)
-{
-	int retval;
-	ipc_callid_t callid;
-	ipc_call_t call;
-	char c;
-	unsigned int row, col;
-	int bgcolor,fgcolor;
-	keyfield_t *interbuf = NULL;
-	size_t intersize = 0;
-	int i;
-
-	if (client_connected) {
-		ipc_answer_fast(iid, ELIMIT, 0,0);
-		return;
-	}
-	client_connected = 1;
-	ipc_answer_fast(iid, 0, 0, 0); /* Accept connection */
-
-	while (1) {
-		callid = async_get_call(&call);
- 		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
-			client_connected = 0;
-			ipc_answer_fast(callid, 0, 0, 0);
-			return; /* Exit thread */
-		case IPC_M_AS_AREA_SEND:
-			/* We accept one area for data interchange */
-			intersize = IPC_GET_ARG2(call);
-			if (intersize >= scr_width * scr_height *
-				sizeof(*interbuf)) {
-				receive_comm_area(callid, &call, (void *)
-					&interbuf);
-				continue;
-			}
-			retval = EINVAL;
-			break;
-		case FB_DRAW_TEXT_DATA:
-			if (!interbuf) {
-				retval = EINVAL;
-				break;
-			}
-			draw_text_data(interbuf);
-			retval = 0;
-			break;
-		case FB_GET_CSIZE:
-			ipc_answer_fast(callid, 0, scr_height, scr_width);
-			continue;
-		case FB_CLEAR:
-			clrscr();
-			retval = 0;
-			break;
-		case FB_PUTCHAR:
-			c = IPC_GET_ARG1(call);
-			row = IPC_GET_ARG2(call);
-			col = IPC_GET_ARG3(call);
-			if (col >= scr_width || row >= scr_height) {
-				retval = EINVAL;
-				break;
-			}
-			printchar(c, row, col);
-			retval = 0;
-			break;
- 		case FB_CURSOR_GOTO:
-			row = IPC_GET_ARG1(call);
-			col = IPC_GET_ARG2(call);
-			if (row >= scr_height || col >= scr_width) {
-				retval = EINVAL;
-				break;
-			}
-			cursor_goto(row, col);
- 			retval = 0;
- 			break;
-		case FB_SCROLL:
-			i = IPC_GET_ARG1(call);
-			if (i > scr_height || i < -((int) scr_height)) {
-				retval = EINVAL;
-				break;
-			}
-			scroll(i);
-			retval = 0;
-			break;
-		case FB_CURSOR_VISIBILITY:
-			if(IPC_GET_ARG1(call))
-				cursor_enable();
-			else
-				cursor_disable();
-			retval = 0;
-			break;
-		case FB_SET_STYLE:
-			fgcolor = IPC_GET_ARG1(call);
-			bgcolor = IPC_GET_ARG2(call);
-			style = EGA_STYLE(fgcolor, bgcolor);
-			retval = 0;
-			break;
-		case FB_VP_DRAW_PIXMAP:
-			i = IPC_GET_ARG2(call);
-			retval = print_screen(i);
-			break;
-		case FB_VP2PIXMAP:
-			retval = save_screen();
-			break;
-		case FB_DROP_PIXMAP:
-			i = IPC_GET_ARG1(call);
-			if (i >= MAX_SAVED_SCREENS) {
-				retval = EINVAL;
-				break;
-			}
-			if (saved_screens[i].data) {
-				free(saved_screens[i].data);
-				saved_screens[i].data = NULL;
-			}
-			retval = 0;
-			break;
-
-		default:
-			retval = ENOENT;
-		}
-		ipc_answer_fast(callid, retval, 0, 0);
-	}
-}
-
-int ega_init(void)
-{
-	void *ega_ph_addr;
-	size_t sz;
-
-	ega_ph_addr = (void *) sysinfo_value("fb.address.physical");
-	scr_width = sysinfo_value("fb.width");
-	scr_height = sysinfo_value("fb.height");
-	iospace_enable(task_get_id(), (void *) EGA_IO_ADDRESS, 2);
-
-	sz = scr_width * scr_height * 2;
-	scr_addr = as_get_mappable_page(sz);
-
-	physmem_map(ega_ph_addr, scr_addr, ALIGN_UP(sz, PAGE_SIZE) >>
-		PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE);
-
-	async_set_client_connection(ega_client_connection);
-
-	return 0;
-}
-
-
-/** 
- * @}
- */
Index: pace/fb/ega.h
===================================================================
--- uspace/fb/ega.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup egafb
- * @brief	HelenOS EGA framebuffer.
- * @ingroup fbs
- * @{
- */ 
-/** @file
- */
-
-#ifndef FB_EGA_H_
-#define FB_EGA_H_
-
-extern int ega_init(void);
-
-#endif
-
-/** @}
- */
-
Index: pace/fb/fb.c
===================================================================
--- uspace/fb/fb.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1389 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Vana
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * @defgroup fb Graphical framebuffer
- * @brief	HelenOS graphical framebuffer.
- * @ingroup fbs
- * @{
- */ 
-
-/** @file
- */
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <ddi.h>
-#include <sysinfo.h>
-#include <align.h>
-#include <as.h>
-#include <ipc/fb.h>
-#include <ipc/ipc.h>
-#include <ipc/ns.h>
-#include <ipc/services.h>
-#include <kernel/errno.h>
-#include <kernel/genarch/fb/visuals.h>
-#include <async.h>
-#include <bool.h>
-
-#include "font-8x16.h"
-#include "fb.h"
-#include "main.h"
-#include "../console/screenbuffer.h"
-#include "ppm.h"
-
-#include "pointer.xbm"
-#include "pointer_mask.xbm"
-
-#define DEFAULT_BGCOLOR                0xf0f0f0
-#define DEFAULT_FGCOLOR                0x0
-
-/***************************************************************/
-/* Pixel specific fuctions */
-
-typedef void (*conv2scr_fn_t)(void *, int);
-typedef int (*conv2rgb_fn_t)(void *);
-
-struct {
-	uint8_t *fbaddress;
-
-	unsigned int xres;
-	unsigned int yres;
-	unsigned int scanline;
-	unsigned int pixelbytes;
-	unsigned int invert_colors;
-
-	conv2scr_fn_t rgb2scr;
-	conv2rgb_fn_t scr2rgb;
-} screen;
-
-typedef struct {
-	int initialized;
-	unsigned int x, y;
-	unsigned int width, height;
-
-	/* Text support in window */
-	unsigned int rows, cols;
-	/* Style for text printing */
-	style_t style;
-	/* Auto-cursor position */
-	int cursor_active, cur_col, cur_row;
-	int cursor_shown;
-	/* Double buffering */
-	uint8_t *dbdata;
-	unsigned int dboffset;
-	unsigned int paused;
-} viewport_t;
-
-#define MAX_ANIM_LEN    8
-#define MAX_ANIMATIONS  4
-typedef struct {
-	int initialized;
-	int enabled;
-	unsigned int vp;
-
-	unsigned int pos;
-	unsigned int animlen;
-	unsigned int pixmaps[MAX_ANIM_LEN];
-} animation_t;
-static animation_t animations[MAX_ANIMATIONS];
-static int anims_enabled;
-
-/** Maximum number of saved pixmaps 
- * Pixmap is a saved rectangle
- */
-#define MAX_PIXMAPS        256
-typedef struct {
-	unsigned int width;
-	unsigned int height;
-	uint8_t *data;
-} pixmap_t;
-static pixmap_t pixmaps[MAX_PIXMAPS];
-
-/* Viewport is a rectangular area on the screen */
-#define MAX_VIEWPORTS 128
-static viewport_t viewports[128];
-
-/* Allow only 1 connection */
-static int client_connected = 0;
-
-#define RED(x, bits)	((x >> (16 + 8 - bits)) & ((1 << bits) - 1))
-#define GREEN(x, bits)	((x >> (8 + 8 - bits)) & ((1 << bits) - 1))
-#define BLUE(x, bits)	((x >> (8 - bits)) & ((1 << bits) - 1))
-
-#define COL_WIDTH	8
-#define ROW_BYTES	(screen.scanline * FONT_SCANLINES)
-
-#define POINTPOS(x, y)	((y) * screen.scanline + (x) * screen.pixelbytes)
-
-static inline int COLOR(int color)
-{
-	return screen.invert_colors ? ~color : color;
-}
-
-/* Conversion routines between different color representations */
-static void
-rgb_byte0888(void *dst, int rgb)
-{
-	*(int *)dst = rgb;
-}
-
-static int
-byte0888_rgb(void *src)
-{
-	return (*(int *)src) & 0xffffff;
-}
-
-static void
-bgr_byte0888(void *dst, int rgb)
-{
-	*((uint32_t *) dst) = BLUE(rgb, 8) << 16 | GREEN(rgb, 8) << 8 |
-		RED(rgb, 8);
-}
-
-static int
-byte0888_bgr(void *src)
-{
-	int color = *(uint32_t *)(src);
-	return ((color & 0xff) << 16) | (((color >> 8) & 0xff) << 8) |
-		((color >> 16) & 0xff);
-}
-
-static void
-rgb_byte888(void *dst, int rgb)
-{
-	uint8_t *scr = dst;
-#if defined(FB_INVERT_ENDIAN)
-	scr[0] = RED(rgb, 8);
-	scr[1] = GREEN(rgb, 8);
-	scr[2] = BLUE(rgb, 8);
-#else
-	scr[2] = RED(rgb, 8);
-	scr[1] = GREEN(rgb, 8);
-	scr[0] = BLUE(rgb, 8);
-#endif
-}
-
-static int
-byte888_rgb(void *src)
-{
-	uint8_t *scr = src;
-#if defined(FB_INVERT_ENDIAN)
-	return scr[0] << 16 | scr[1] << 8 | scr[2];
-#else
-	return scr[2] << 16 | scr[1] << 8 | scr[0];
-#endif	
-}
-
-/**  16-bit depth (5:5:5) */
-static void
-rgb_byte555(void *dst, int rgb)
-{
-	/* 5-bit, 5-bits, 5-bits */ 
-	*((uint16_t *)(dst)) = RED(rgb, 5) << 10 | GREEN(rgb, 5) << 5 |
-		BLUE(rgb, 5);
-}
-
-/** 16-bit depth (5:5:5) */
-static int
-byte555_rgb(void *src)
-{
-	int color = *(uint16_t *)(src);
-	return (((color >> 10) & 0x1f) << (16 + 3)) |
-		(((color >> 5) & 0x1f) << (8 + 3)) | ((color & 0x1f) << 3);
-}
-
-/**  16-bit depth (5:6:5) */
-static void
-rgb_byte565(void *dst, int rgb)
-{
-	/* 5-bit, 6-bits, 5-bits */ 
-	*((uint16_t *)(dst)) = RED(rgb, 5) << 11 | GREEN(rgb, 6) << 5 |
-		BLUE(rgb, 5);
-}
-
-/** 16-bit depth (5:6:5) */
-static int
-byte565_rgb(void *src)
-{
-	int color = *(uint16_t *)(src);
-	return (((color >> 11) & 0x1f) << (16 + 3)) |
-		(((color >> 5) & 0x3f) << (8 + 2)) | ((color & 0x1f) << 3);
-}
-
-/** Put pixel - 8-bit depth (3:2:3) */
-static void
-rgb_byte8(void *dst, int rgb)
-{
-	*(uint8_t *)dst = RED(rgb, 3) << 5 | GREEN(rgb, 2) << 3 | BLUE(rgb, 3);
-}
-
-/** Return pixel color - 8-bit depth (3:2:3) */
-static int
-byte8_rgb(void *src)
-{
-	int color = *(uint8_t *)src;
-	return (((color >> 5) & 0x7) << (16 + 5)) |
-		(((color >> 3) & 0x3) << (8 + 6)) | ((color & 0x7) << 5);
-}
-
-/** Put pixel into viewport 
- *
- * @param vport Viewport identification
- * @param x X coord relative to viewport
- * @param y Y coord relative to viewport
- * @param color RGB color 
- */
-static void
-putpixel(viewport_t *vport, unsigned int x, unsigned int y, int color)
-{
-	int dx = vport->x + x;
-	int dy = vport->y + y;
-
-	if (! (vport->paused && vport->dbdata))
-		(*screen.rgb2scr)(&screen.fbaddress[POINTPOS(dx,dy)],
-			COLOR(color));
-
-	if (vport->dbdata) {
-		int dline = (y + vport->dboffset) % vport->height;
-		int doffset = screen.pixelbytes * (dline * vport->width + x);
-		(*screen.rgb2scr)(&vport->dbdata[doffset], COLOR(color));
-	}
-}
-
-/** Get pixel from viewport */
-static int
-getpixel(viewport_t *vport, unsigned int x, unsigned int y)
-{
-	int dx = vport->x + x;
-	int dy = vport->y + y;
-
-	return COLOR((*screen.scr2rgb)(&screen.fbaddress[POINTPOS(dx, dy)]));
-}
-
-static inline void
-putpixel_mem(char *mem, unsigned int x, unsigned int y, int color)
-{
-	(*screen.rgb2scr)(&mem[POINTPOS(x,y)], COLOR(color));
-}
-
-static void
-draw_rectangle(viewport_t *vport, unsigned int sx, unsigned int sy,
-	unsigned int width, unsigned int height, int color)
-{
-	unsigned int x, y;
-	static void *tmpline;
-
-	if (!tmpline)
-		tmpline = malloc(screen.scanline*screen.pixelbytes);
-
-	/* Clear first line */
-	for (x = 0; x < width; x++)
-		putpixel_mem(tmpline, x, 0, color);
-
-	if (!vport->paused) {
-		/* Recompute to screen coords */
-		sx += vport->x;
-		sy += vport->y;
-		/* Copy the rest */
-		for (y = sy;y < sy+height; y++)
-			memcpy(&screen.fbaddress[POINTPOS(sx,y)], tmpline, 
-			       screen.pixelbytes * width);
-	}
-	if (vport->dbdata) {
-		for (y = sy; y < sy + height; y++) {
-			int rline = (y + vport->dboffset) % vport->height;
-			int rpos = (rline * vport->width + sx) *
-				screen.pixelbytes;
-			memcpy(&vport->dbdata[rpos], tmpline,
-				screen.pixelbytes * width);
-		}
-	}
-
-}
-
-/** Fill viewport with background color */
-static void
-clear_port(viewport_t *vport)
-{
-	draw_rectangle(vport, 0, 0, vport->width, vport->height,
-		vport->style.bg_color);
-}
-
-/** Scroll unbuffered viewport up/down
- *
- * @param vport Viewport to scroll
- * @param lines Positive number - scroll up, negative - scroll down
- */
-static void
-scroll_port_nodb(viewport_t *vport, int lines)
-{
-	int y;
-
-	if (lines > 0) {
-		for (y = vport->y; y < vport->y+vport->height - lines; y++)
-			memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
-			       &screen.fbaddress[POINTPOS(vport->x,y + lines)],
-			       screen.pixelbytes * vport->width);
-		draw_rectangle(vport, 0, vport->height - lines, vport->width,
-			lines, vport->style.bg_color);
-	} else if (lines < 0) {
-		lines = -lines;
-		for (y = vport->y + vport->height-1; y >= vport->y + lines;
-			 y--)
-			memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
-			       &screen.fbaddress[POINTPOS(vport->x,y - lines)],
-			       screen.pixelbytes * vport->width);
-		draw_rectangle(vport, 0, 0, vport->width, lines,
-			vport->style.bg_color);
-	}
-}
-
-/** Refresh given viewport from double buffer */
-static void
-refresh_viewport_db(viewport_t *vport)
-{
-	unsigned int y, srcy, srcoff, dsty, dstx;
-
-	for (y = 0; y < vport->height; y++) {
-		srcy = (y + vport->dboffset) % vport->height;
-		srcoff = (vport->width * srcy) * screen.pixelbytes;
-
-		dstx = vport->x;
-		dsty = vport->y + y;
-
-		memcpy(&screen.fbaddress[POINTPOS(dstx,dsty)],
-		       &vport->dbdata[srcoff], 
-		       vport->width*screen.pixelbytes);
-	}
-}
-
-/** Scroll viewport that has double buffering enabled */
-static void
-scroll_port_db(viewport_t *vport, int lines)
-{
-	++vport->paused;
-	if (lines > 0) {
-		draw_rectangle(vport, 0, 0, vport->width, lines,
-			       vport->style.bg_color);
-		vport->dboffset += lines;
-		vport->dboffset %= vport->height;
-	} else if (lines < 0) {
-		lines = -lines;
-		draw_rectangle(vport, 0, vport->height-lines, 
-			       vport->width, lines,
-			       vport->style.bg_color);
-
-		if (vport->dboffset < lines)
-			vport->dboffset += vport->height;
-		vport->dboffset -= lines;
-	}
-	
-	--vport->paused;
-	
-	refresh_viewport_db(vport);
-}
-
-/** Scrolls viewport given number of lines */
-static void
-scroll_port(viewport_t *vport, int lines)
-{
-	if (vport->dbdata)
-		scroll_port_db(vport, lines);
-	else
-		scroll_port_nodb(vport, lines);
-	
-}
-
-static void
-invert_pixel(viewport_t *vport, unsigned int x, unsigned int y)
-{
-	putpixel(vport, x, y, ~getpixel(vport, x, y));
-}
-
-
-/***************************************************************/
-/* Character-console functions */
-
-/** Draw character at given position
- *
- * @param vport Viewport where the character is printed
- * @param sx Coordinates of top-left of the character
- * @param sy Coordinates of top-left of the character
- * @param style Color of the character
- * @param transparent If false, print background color
- */
-static void
-draw_glyph(viewport_t *vport,uint8_t glyph, unsigned int sx,
-	 unsigned int sy, style_t style, int transparent)
-{
-	int i;
-	unsigned int y;
-	unsigned int glline;
-
-	for (y = 0; y < FONT_SCANLINES; y++) {
-		glline = fb_font[glyph * FONT_SCANLINES + y];
-		for (i = 0; i < 8; i++) {
-			if (glline & (1 << (7 - i)))
-				putpixel(vport, sx + i, sy + y,
-					style.fg_color);
-			else if (!transparent)
-				putpixel(vport, sx + i, sy + y,
-					style.bg_color);
-		}
-	}
-}
-
-/** Invert character at given position */
-static void
-invert_char(viewport_t *vport,unsigned int row, unsigned int col)
-{
-	unsigned int x;
-	unsigned int y;
-
-	for (x = 0; x < COL_WIDTH; x++)
-		for (y = 0; y < FONT_SCANLINES; y++)
-			invert_pixel(vport, col * COL_WIDTH + x, row *
-				FONT_SCANLINES + y);
-}
-
-/***************************************************************/
-/* Stdout specific functions */
-
-
-/** Create new viewport
- *
- * @return New viewport number
- */
-static int
-viewport_create(unsigned int x, unsigned int y,unsigned int width, 
-	unsigned int height)
-{
-	int i;
-
-	for (i = 0; i < MAX_VIEWPORTS; i++) {
-		if (!viewports[i].initialized)
-			break;
-	}
-	if (i == MAX_VIEWPORTS)
-		return ELIMIT;
-
-	viewports[i].x = x;
-	viewports[i].y = y;
-	viewports[i].width = width;
-	viewports[i].height = height;
-	
-	viewports[i].rows = height / FONT_SCANLINES;
-	viewports[i].cols = width / COL_WIDTH;
-
-	viewports[i].style.bg_color = DEFAULT_BGCOLOR;
-	viewports[i].style.fg_color = DEFAULT_FGCOLOR;
-	
-	viewports[i].cur_col = 0;
-	viewports[i].cur_row = 0;
-	viewports[i].cursor_active = 0;
-
-	viewports[i].initialized = 1;
-
-	return i;
-}
-
-/** Initialize framebuffer as a chardev output device
- *
- * @param addr          Address of theframebuffer
- * @param xres          Screen width in pixels
- * @param yres          Screen height in pixels
- * @param visual        Bits per pixel (8, 16, 24, 32)
- * @param scan          Bytes per one scanline
- * @param invert_colors Inverted colors.
- *
- */
-static bool
-screen_init(void *addr, unsigned int xres, unsigned int yres,
-	unsigned int scan, unsigned int visual, bool invert_colors)
-{
-	switch (visual) {
-	case VISUAL_INDIRECT_8:
-		screen.rgb2scr = rgb_byte8;
-		screen.scr2rgb = byte8_rgb;
-		screen.pixelbytes = 1;
-		break;
-	case VISUAL_RGB_5_5_5:
-		screen.rgb2scr = rgb_byte555;
-		screen.scr2rgb = byte555_rgb;
-		screen.pixelbytes = 2;
-		break;
-	case VISUAL_RGB_5_6_5:
-		screen.rgb2scr = rgb_byte565;
-		screen.scr2rgb = byte565_rgb;
-		screen.pixelbytes = 2;
-		break;
-	case VISUAL_RGB_8_8_8:
-		screen.rgb2scr = rgb_byte888;
-		screen.scr2rgb = byte888_rgb;
-		screen.pixelbytes = 3;
-		break;
-	case VISUAL_RGB_8_8_8_0:
-		screen.rgb2scr = rgb_byte888;
-		screen.scr2rgb = byte888_rgb;
-		screen.pixelbytes = 4;
-		break;
-	case VISUAL_RGB_0_8_8_8:
-		screen.rgb2scr = rgb_byte0888;
-		screen.scr2rgb = byte0888_rgb;
-		screen.pixelbytes = 4;
-		break;
-	case VISUAL_BGR_0_8_8_8:
-		screen.rgb2scr = bgr_byte0888;
-		screen.scr2rgb = byte0888_bgr;
-		screen.pixelbytes = 4;
-		break;
-	default:
-		return false;
-	}
-
-	screen.fbaddress = (unsigned char *) addr;
-	screen.xres = xres;
-	screen.yres = yres;
-	screen.scanline = scan;
-	screen.invert_colors = invert_colors;
-	
-	/* Create first viewport */
-	viewport_create(0, 0, xres, yres);
-	
-	return true;
-}
-
-/** Hide cursor if it is shown */
-static void
-cursor_hide(viewport_t *vport)
-{
-	if (vport->cursor_active && vport->cursor_shown) {
-		invert_char(vport, vport->cur_row, vport->cur_col);
-		vport->cursor_shown = 0;
-	}
-}
-
-/** Show cursor if cursor showing is enabled */
-static void
-cursor_print(viewport_t *vport)
-{
-	/* Do not check for cursor_shown */
-	if (vport->cursor_active) {
-		invert_char(vport, vport->cur_row, vport->cur_col);
-		vport->cursor_shown = 1;
-	}
-}
-
-/** Invert cursor, if it is enabled */
-static void
-cursor_blink(viewport_t *vport)
-{
-	if (vport->cursor_shown)
-		cursor_hide(vport);
-	else
-		cursor_print(vport);
-}
-
-/** Draw character at given position relative to viewport 
- * 
- * @param vport Viewport identification
- * @param c Character to print
- * @param row Screen position relative to viewport
- * @param col Screen position relative to viewport
- * @param transparent If false, print background color with character
- */
-static void
-draw_char(viewport_t *vport, char c, unsigned int row, unsigned int col,
-	style_t style, int transparent)
-{
-	/* Optimize - do not hide cursor if we are going to overwrite it */
-	if (vport->cursor_active && vport->cursor_shown && 
-	    (vport->cur_col != col || vport->cur_row != row))
-		invert_char(vport, vport->cur_row, vport->cur_col);
-	
-	draw_glyph(vport, c, col * COL_WIDTH, row * FONT_SCANLINES, style,
-		transparent);
-
-	vport->cur_col = col;
-	vport->cur_row = row;
-
-	vport->cur_col++;
-	if (vport->cur_col >= vport->cols) {
-		vport->cur_col = 0;
-		vport->cur_row++;
-		if (vport->cur_row >= vport->rows)
-			vport->cur_row--;
-	}
-	cursor_print(vport);
-}
-
-/** Draw text data to viewport
- *
- * @param vport Viewport id
- * @param data Text data fitting exactly into viewport
- */
-static void
-draw_text_data(viewport_t *vport, keyfield_t *data)
-{
-	int i;
-	int col,row;
-
-	clear_port(vport);
-	for (i = 0; i < vport->cols * vport->rows; i++) {
-		if (data[i].character == ' ' && style_same(data[i].style,
-			vport->style))
-			continue;
-		col = i % vport->cols;
-		row = i / vport->cols;
-		draw_glyph(vport, data[i].character, col * COL_WIDTH, row *
-			FONT_SCANLINES, data[i].style,
-			style_same(data[i].style,vport->style));
-	}
-	cursor_print(vport);
-}
-
-/** Return first free pixmap */
-static int
-find_free_pixmap(void)
-{
-	int i;
-	
-	for (i = 0;i < MAX_PIXMAPS;i++)
-		if (!pixmaps[i].data)
-			return i;
-	return -1;
-}
-
-static void
-putpixel_pixmap(int pm, unsigned int x, unsigned int y, int color)
-{
-	pixmap_t *pmap = &pixmaps[pm];
-	int pos = (y * pmap->width + x) * screen.pixelbytes;
-
-	(*screen.rgb2scr)(&pmap->data[pos],COLOR(color));
-}
-
-/** Create a new pixmap and return appropriate ID */
-static int
-shm2pixmap(unsigned char *shm, size_t size)
-{
-	int pm;
-	pixmap_t *pmap;
-
-	pm = find_free_pixmap();
-	if (pm == -1)
-		return ELIMIT;
-	pmap = &pixmaps[pm];
-	
-	if (ppm_get_data(shm, size, &pmap->width, &pmap->height))
-		return EINVAL;
-	
-	pmap->data = malloc(pmap->width * pmap->height * screen.pixelbytes);
-	if (!pmap->data)
-		return ENOMEM;
-
-	ppm_draw(shm, size, 0, 0, pmap->width, pmap->height, 
-		 (putpixel_cb_t)putpixel_pixmap, (void *)pm);
-
-	return pm;
-}
-
-/** Handle shared memory communication calls
- *
- * Protocol for drawing pixmaps:
- * - FB_PREPARE_SHM(client shm identification)
- * - IPC_M_AS_AREA_SEND
- * - FB_DRAW_PPM(startx,starty)
- * - FB_DROP_SHM
- *
- * Protocol for text drawing
- * - IPC_M_AS_AREA_SEND
- * - FB_DRAW_TEXT_DATA
- *
- * @param callid Callid of the current call
- * @param call Current call data
- * @param vp Active viewport
- * @return 0 if the call was not handled byt this function, 1 otherwise
- *
- * note: this function is not threads safe, you would have
- * to redefine static variables with __thread
- */
-static int
-shm_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
-{
-	static keyfield_t *interbuffer = NULL;
-	static size_t intersize = 0;
-
-	static unsigned char *shm = NULL;
-	static ipcarg_t shm_id = 0;
-	static size_t shm_size;
-
-	int handled = 1;
-	int retval = 0;
-	viewport_t *vport = &viewports[vp];
-	unsigned int x, y;
-
-	switch (IPC_GET_METHOD(*call)) {
-	case IPC_M_AS_AREA_SEND:
-		/* We accept one area for data interchange */
-		if (IPC_GET_ARG1(*call) == shm_id) {
-			void *dest = as_get_mappable_page(IPC_GET_ARG2(*call));
-			shm_size = IPC_GET_ARG2(*call);
-			if (!ipc_answer_fast(callid, 0, (sysarg_t) dest, 0)) 
-				shm = dest;
-			else
-				shm_id = 0;
-			if (shm[0] != 'P')
-				while (1)
-					;
-			return 1;
-		} else {
-			intersize = IPC_GET_ARG2(*call);
-			receive_comm_area(callid, call, (void *) &interbuffer);
-		}
-		return 1;
-	case FB_PREPARE_SHM:
-		if (shm_id)
-			retval = EBUSY;
-		else 
-			shm_id = IPC_GET_ARG1(*call);
-		break;
-		
-	case FB_DROP_SHM:
-		if (shm) {
-			as_area_destroy(shm);
-			shm = NULL;
-		}
-		shm_id = 0;
-		break;
-
-	case FB_SHM2PIXMAP:
-		if (!shm) {
-			retval = EINVAL;
-			break;
-		}
-		retval = shm2pixmap(shm, shm_size);
-		break;
-	case FB_DRAW_PPM:
-		if (!shm) {
-			retval = EINVAL;
-			break;
-		}
-		x = IPC_GET_ARG1(*call);
-		y = IPC_GET_ARG2(*call);
-		if (x > vport->width || y > vport->height) {
-			retval = EINVAL;
-			break;
-		}
-		
-		ppm_draw(shm, shm_size, IPC_GET_ARG1(*call),
-			IPC_GET_ARG2(*call), vport->width - x,
-			vport->height - y, (putpixel_cb_t)putpixel, vport);
-		break;
-	case FB_DRAW_TEXT_DATA:
-		if (!interbuffer) {
-			retval = EINVAL;
-			break;
-		}
-		if (intersize < vport->cols * vport->rows *
-			sizeof(*interbuffer)) {
-			retval = EINVAL;
-			break;
-		}
-		draw_text_data(vport, interbuffer);
-		break;
-	default:
-		handled = 0;
-	}
-	
-	if (handled)
-		ipc_answer_fast(callid, retval, 0, 0);
-	return handled;
-}
-
-static void
-copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap)
-{
-	int y;
-	int tmp, srcrowsize;
-	int realwidth, realheight, realrowsize;
-	int width = vport->width;
-	int height = vport->height;
-
-	if (width + vport->x > screen.xres)
-		width = screen.xres - vport->x;
-	if (height + vport->y > screen.yres)
-		height = screen.yres - vport->y;
-	
-	realwidth = pmap->width <= width ? pmap->width : width;
-	realheight = pmap->height <= height ? pmap->height : height;
-
-	srcrowsize = vport->width * screen.pixelbytes;
-	realrowsize = realwidth * screen.pixelbytes;
-	
-	for (y = 0; y < realheight; y++) {
-		tmp = (vport->y + y) * screen.scanline +
-			vport->x * screen.pixelbytes;
-		memcpy(pmap->data + srcrowsize * y, screen.fbaddress + tmp,
-			realrowsize); 
-	}
-}
-
-/** Save viewport to pixmap */
-static int
-save_vp_to_pixmap(viewport_t *vport)
-{
-	int pm;
-	pixmap_t *pmap;
-
-	pm = find_free_pixmap();
-	if (pm == -1)
-		return ELIMIT;
-	
-	pmap = &pixmaps[pm];
-	pmap->data = malloc(screen.pixelbytes * vport->width * vport->height);
-	if (!pmap->data)
-		return ENOMEM;
-
-	pmap->width = vport->width;
-	pmap->height = vport->height;
-
-	copy_vp_to_pixmap(vport, pmap);
-	
-	return pm;
-}
-
-/** Draw pixmap on screen
- *
- * @param vp Viewport to draw on
- * @param pm Pixmap identifier
- */
-static int draw_pixmap(int vp, int pm)
-{
-	pixmap_t *pmap = &pixmaps[pm];
-	viewport_t *vport = &viewports[vp];
-	int y;
-	int tmp, srcrowsize;
-	int realwidth, realheight, realrowsize;
-	int width = vport->width;
-	int height = vport->height;
-
-	if (width + vport->x > screen.xres)
-		width = screen.xres - vport->x;
-	if (height + vport->y > screen.yres)
-		height = screen.yres - vport->y;
-
-	if (!pmap->data)
-		return EINVAL;
-
-	realwidth = pmap->width <= width ? pmap->width : width;
-	realheight = pmap->height <= height ? pmap->height : height;
-
-	srcrowsize = vport->width * screen.pixelbytes;
-	realrowsize = realwidth * screen.pixelbytes;
-
-	for (y = 0; y < realheight; y++) {
-		tmp = (vport->y + y) * screen.scanline + 
-			vport->x * screen.pixelbytes;
-		memcpy(screen.fbaddress + tmp, pmap->data + y * srcrowsize,
-			realrowsize);
-	}
-	return 0;
-}
-
-/** Tick animation one step forward */
-static void
-anims_tick(void)
-{
-	int i;
-	static int counts = 0;
-	
-	/* Limit redrawing */
-	counts = (counts + 1) % 8;
-	if (counts)
-		return;
-
-	for (i = 0; i < MAX_ANIMATIONS; i++) {
-		if (!animations[i].animlen || !animations[i].initialized ||
-			!animations[i].enabled)
-			continue;
-		draw_pixmap(animations[i].vp,
-			animations[i].pixmaps[animations[i].pos]);
-		animations[i].pos = (animations[i].pos + 1) %
-			animations[i].animlen;
-	}
-}
-
-
-static int pointer_x, pointer_y;
-static int pointer_shown, pointer_enabled;
-static int pointer_vport = -1;
-static int pointer_pixmap = -1;
-
-static void
-mouse_show(void)
-{
-	int i, j;
-	int visibility;
-	int color;
-	int bytepos;
-
-	if (pointer_shown || !pointer_enabled)
-		return;
-
-	/* Save image under the cursor */
-	if (pointer_vport == -1) {
-		pointer_vport = viewport_create(pointer_x, pointer_y,
-			pointer_width, pointer_height);
-		if (pointer_vport < 0)
-			return;
-	} else {
-		viewports[pointer_vport].x = pointer_x;
-		viewports[pointer_vport].y = pointer_y;
-	}
-
-	if (pointer_pixmap == -1)
-		pointer_pixmap = save_vp_to_pixmap(&viewports[pointer_vport]);
-	else
-		copy_vp_to_pixmap(&viewports[pointer_vport],
-			&pixmaps[pointer_pixmap]);
-
-	/* Draw cursor */
-	for (i = 0; i < pointer_height; i++)
-		for (j = 0; j < pointer_width; j++) {
-			bytepos = i * ((pointer_width - 1) / 8 + 1) + j / 8;
-			visibility = pointer_mask_bits[bytepos] &
-				(1 << (j % 8));
-			if (visibility) {
-				color = pointer_bits[bytepos] & (1 << (j % 8))
-					? 0 : 0xffffff;
-				if (pointer_x + j < screen.xres && pointer_y +
-					i < screen.yres)
-					putpixel(&viewports[0], pointer_x + j,
-						pointer_y + i, color);
-			}
-		}
-	pointer_shown = 1;
-}
-
-static void
-mouse_hide(void)
-{
-	/* Restore image under the cursor */
-	if (pointer_shown) {
-		draw_pixmap(pointer_vport, pointer_pixmap);
-		pointer_shown = 0;
-	}
-}
-
-static void
-mouse_move(unsigned int x, unsigned int y)
-{
-	mouse_hide();
-	pointer_x = x;
-	pointer_y = y;
-	mouse_show();
-}
-
-static int
-anim_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
-{
-	int handled = 1;
-	int retval = 0;
-	int i,nvp;
-	int newval;
-
-	switch (IPC_GET_METHOD(*call)) {
-	case FB_ANIM_CREATE:
-		nvp = IPC_GET_ARG1(*call);
-		if (nvp == -1)
-			nvp = vp;
-		if (nvp >= MAX_VIEWPORTS || nvp < 0 ||
-			!viewports[nvp].initialized) {
-			retval = EINVAL;
-			break;
-		}
-		for (i = 0; i < MAX_ANIMATIONS; i++) {
-			if (!animations[i].initialized)
-				break;
-		}
-		if (i == MAX_ANIMATIONS) {
-			retval = ELIMIT;
-			break;
-		}
-		animations[i].initialized = 1;
-		animations[i].animlen = 0;
-		animations[i].pos = 0;
-		animations[i].enabled = 0;
-		animations[i].vp = nvp;
-		retval = i;
-		break;
-	case FB_ANIM_DROP:
-		i = IPC_GET_ARG1(*call);
-		if (i >= MAX_ANIMATIONS || i < 0) {
-			retval = EINVAL;
-			break;
-		}
-		animations[i].initialized = 0;
-		break;
-	case FB_ANIM_ADDPIXMAP:
-		i = IPC_GET_ARG1(*call);
-		if (i >= MAX_ANIMATIONS || i < 0 ||
-			!animations[i].initialized) {
-			retval = EINVAL;
-			break;
-		}
-		if (animations[i].animlen == MAX_ANIM_LEN) {
-			retval = ELIMIT;
-			break;
-		}
-		newval = IPC_GET_ARG2(*call);
-		if (newval < 0 || newval > MAX_PIXMAPS ||
-			!pixmaps[newval].data) {
-			retval = EINVAL;
-			break;
-		}
-		animations[i].pixmaps[animations[i].animlen++] = newval;
-		break;
-	case FB_ANIM_CHGVP:
-		i = IPC_GET_ARG1(*call);
-		if (i >= MAX_ANIMATIONS || i < 0) {
-			retval = EINVAL;
-			break;
-		}
-		nvp = IPC_GET_ARG2(*call);
-		if (nvp == -1)
-			nvp = vp;
-		if (nvp >= MAX_VIEWPORTS || nvp < 0 ||
-			!viewports[nvp].initialized) {
-			retval = EINVAL;
-			break;
-		}
-		animations[i].vp = nvp;
-		break;
-	case FB_ANIM_START:
-	case FB_ANIM_STOP:
-		i = IPC_GET_ARG1(*call);
-		if (i >= MAX_ANIMATIONS || i < 0) {
-			retval = EINVAL;
-			break;
-		}
-		newval = (IPC_GET_METHOD(*call) == FB_ANIM_START);
-		if (newval ^ animations[i].enabled) {
-			animations[i].enabled = newval;
-			anims_enabled += newval ? 1 : -1;
-		}
-		break;
-	default:
-		handled = 0;
-	}
-	if (handled)
-		ipc_answer_fast(callid, retval, 0, 0);
-	return handled;
-}
-
-/** Handler for messages concerning pixmap handling */
-static int
-pixmap_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
-{
-	int handled = 1;
-	int retval = 0;
-	int i,nvp;
-
-	switch (IPC_GET_METHOD(*call)) {
-	case FB_VP_DRAW_PIXMAP:
-		nvp = IPC_GET_ARG1(*call);
-		if (nvp == -1)
-			nvp = vp;
-		if (nvp < 0 || nvp >= MAX_VIEWPORTS ||
-			!viewports[nvp].initialized) {
-			retval = EINVAL;
-			break;
-		}
-		i = IPC_GET_ARG2(*call);
-		retval = draw_pixmap(nvp, i);
-		break;
-	case FB_VP2PIXMAP:
-		nvp = IPC_GET_ARG1(*call);
-		if (nvp == -1)
-			nvp = vp;
-		if (nvp < 0 || nvp >= MAX_VIEWPORTS ||
-			!viewports[nvp].initialized)
-			retval = EINVAL;
-		else
-			retval = save_vp_to_pixmap(&viewports[nvp]);
-		break;
-	case FB_DROP_PIXMAP:
-		i = IPC_GET_ARG1(*call);
-		if (i >= MAX_PIXMAPS) {
-			retval = EINVAL;
-			break;
-		}
-		if (pixmaps[i].data) {
-			free(pixmaps[i].data);
-			pixmaps[i].data = NULL;
-		}
-		break;
-	default:
-		handled = 0;
-	}
-
-	if (handled)
-		ipc_answer_fast(callid, retval, 0, 0);
-	return handled;
-	
-}
-
-/** Function for handling connections to FB
- *
- */
-static void
-fb_client_connection(ipc_callid_t iid, ipc_call_t *icall)
-{
-	ipc_callid_t callid;
-	ipc_call_t call;
-	int retval;
-	int i;
-	unsigned int row,col;
-	char c;
-
-	int vp = 0;
-	viewport_t *vport = &viewports[0];
-
-	if (client_connected) {
-		ipc_answer_fast(iid, ELIMIT, 0,0);
-		return;
-	}
-	client_connected = 1;
-	ipc_answer_fast(iid, 0, 0, 0); /* Accept connection */
-
-	while (1) {
-		if (vport->cursor_active || anims_enabled)
-			callid = async_get_call_timeout(&call, 250000);
-		else
-			callid = async_get_call(&call);
-
-		mouse_hide();
-		if (!callid) {
-			cursor_blink(vport);
-			anims_tick();
-			mouse_show();
-			continue;
-		}
-		if (shm_handle(callid, &call, vp))
-			continue;
-		if (pixmap_handle(callid, &call, vp))
-			continue;
-		if (anim_handle(callid, &call, vp))
-			continue;
-
- 		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
-			client_connected = 0;
-			/* cleanup other viewports */
-			for (i = 1; i < MAX_VIEWPORTS; i++)
-				vport->initialized = 0;
-			return; /* Exit thread */
-
-		case FB_PUTCHAR:
-		case FB_TRANS_PUTCHAR:
-			c = IPC_GET_ARG1(call);
-			row = IPC_GET_ARG2(call);
-			col = IPC_GET_ARG3(call);
-			if (row >= vport->rows || col >= vport->cols) {
-				retval = EINVAL;
-				break;
-			}
-			ipc_answer_fast(callid, 0, 0, 0);
-
-			draw_char(vport, c, row, col, vport->style,
-				IPC_GET_METHOD(call) == FB_TRANS_PUTCHAR);
-			continue; /* msg already answered */
-		case FB_CLEAR:
-			clear_port(vport);
-			cursor_print(vport);
-			retval = 0;
-			break;
- 		case FB_CURSOR_GOTO:
-			row = IPC_GET_ARG1(call);
-			col = IPC_GET_ARG2(call);
-			if (row >= vport->rows || col >= vport->cols) {
-				retval = EINVAL;
-				break;
-			}
- 			retval = 0;
-			cursor_hide(vport);
-			vport->cur_col = col;
-			vport->cur_row = row;
-			cursor_print(vport);
- 			break;
-		case FB_CURSOR_VISIBILITY:
-			cursor_hide(vport);
-			vport->cursor_active = IPC_GET_ARG1(call);
-			cursor_print(vport);
-			retval = 0;
-			break;
-		case FB_GET_CSIZE:
-			ipc_answer_fast(callid, 0, vport->rows, vport->cols);
-			continue;
-		case FB_SCROLL:
-			i = IPC_GET_ARG1(call);
-			if (i > vport->rows || i < (- (int)vport->rows)) {
-				retval = EINVAL;
-				break;
-			}
-			cursor_hide(vport);
-			scroll_port(vport, i*FONT_SCANLINES);
-			cursor_print(vport);
-			retval = 0;
-			break;
-		case FB_VIEWPORT_DB:
-			/* Enable double buffering */
-			i = IPC_GET_ARG1(call);
-			if (i == -1)
-				i = vp;
-			if (i < 0 || i >= MAX_VIEWPORTS) {
-				retval = EINVAL;
-				break;
-			}
-			if (! viewports[i].initialized ) {
-				retval = EADDRNOTAVAIL;
-				break;
-			}
-			viewports[i].dboffset = 0;
-			if (IPC_GET_ARG2(call) == 1 && !viewports[i].dbdata)
-				viewports[i].dbdata = malloc(screen.pixelbytes
-					* viewports[i].width *
-					viewports[i].height);
-			else if (IPC_GET_ARG2(call) == 0 &&
-				viewports[i].dbdata) {
-				free(viewports[i].dbdata);
-				viewports[i].dbdata = NULL;
-			}
-			retval = 0;
-			break;
-		case FB_VIEWPORT_SWITCH:
-			i = IPC_GET_ARG1(call);
-			if (i < 0 || i >= MAX_VIEWPORTS) {
-				retval = EINVAL;
-				break;
-			}
-			if (! viewports[i].initialized ) {
-				retval = EADDRNOTAVAIL;
-				break;
-			}
-			cursor_hide(vport);
-			vp = i;
-			vport = &viewports[vp];
-			cursor_print(vport);
-			retval = 0;
-			break;
-		case FB_VIEWPORT_CREATE:
-			retval = viewport_create(IPC_GET_ARG1(call) >> 16,
-				IPC_GET_ARG1(call) & 0xffff,
-				IPC_GET_ARG2(call) >> 16,
-				IPC_GET_ARG2(call) & 0xffff);
-			break;
-		case FB_VIEWPORT_DELETE:
-			i = IPC_GET_ARG1(call);
-			if (i < 0 || i >= MAX_VIEWPORTS) {
-				retval = EINVAL;
-				break;
-			}
-			if (! viewports[i].initialized ) {
-				retval = EADDRNOTAVAIL;
-				break;
-			}
-			viewports[i].initialized = 0;
-			if (viewports[i].dbdata) {
-				free(viewports[i].dbdata);
-				viewports[i].dbdata = NULL;
-			}
-			retval = 0;
-			break;
-		case FB_SET_STYLE:
-			vport->style.fg_color = IPC_GET_ARG1(call);
-			vport->style.bg_color = IPC_GET_ARG2(call);
-			retval = 0;
-			break;
-		case FB_GET_RESOLUTION:
-			ipc_answer_fast(callid, 0, screen.xres,screen.yres);
-			continue;
-		case FB_POINTER_MOVE:
-			pointer_enabled = 1;
-			mouse_move(IPC_GET_ARG1(call), IPC_GET_ARG2(call));
-			retval = 0;
-			break;
-		default:
-			retval = ENOENT;
-		}
-		ipc_answer_fast(callid,retval, 0, 0);
-	}
-}
-
-/** Initialization of framebuffer */
-int
-fb_init(void)
-{
-	void *fb_ph_addr;
-	unsigned int fb_width;
-	unsigned int fb_height;
-	unsigned int fb_scanline;
-	unsigned int fb_visual;
-	bool fb_invert_colors;
-	void *fb_addr;
-	size_t asz;
-
-	async_set_client_connection(fb_client_connection);
-
-	fb_ph_addr = (void *) sysinfo_value("fb.address.physical");
-	fb_width = sysinfo_value("fb.width");
-	fb_height = sysinfo_value("fb.height");
-	fb_scanline = sysinfo_value("fb.scanline");
-	fb_visual = sysinfo_value("fb.visual");
-	fb_invert_colors = sysinfo_value("fb.invert-colors");
-
-	asz = fb_scanline * fb_height;
-	fb_addr = as_get_mappable_page(asz);
-	
-	physmem_map(fb_ph_addr, fb_addr, ALIGN_UP(asz, PAGE_SIZE) >>
-		PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE);
-
-	if (screen_init(fb_addr, fb_width, fb_height, fb_scanline, fb_visual,
-		fb_invert_colors))
-		return 0;
-	
-	return -1;
-}
-
-/** 
- * @}
- */
Index: pace/fb/fb.h
===================================================================
--- uspace/fb/fb.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup fb
- * @ingroup fbs
- * @{
- */ 
-/** @file
- */
-
-#ifndef FB_FB_H_
-#define FB_FB_H_
-
-typedef void (* putpixel_cb_t)(void *, unsigned int, unsigned int, int);
-
-extern int fb_init(void);
-
-#endif
-
-/** @}
- */
Index: pace/fb/font-8x16.c
===================================================================
--- uspace/fb/font-8x16.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,4642 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "font-8x16.h"
-
-unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES] = {
-
-	/* 0 0x00 '^@' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 1 0x01 '^A' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x81, /* 10000001 */
-	0xa5, /* 10100101 */
-	0x81, /* 10000001 */
-	0x81, /* 10000001 */
-	0xbd, /* 10111101 */
-	0x99, /* 10011001 */
-	0x81, /* 10000001 */
-	0x81, /* 10000001 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 2 0x02 '^B' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0xff, /* 11111111 */
-	0xdb, /* 11011011 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xc3, /* 11000011 */
-	0xe7, /* 11100111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 3 0x03 '^C' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x6c, /* 01101100 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0x7c, /* 01111100 */
-	0x38, /* 00111000 */
-	0x10, /* 00010000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 4 0x04 '^D' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x7c, /* 01111100 */
-	0xfe, /* 11111110 */
-	0x7c, /* 01111100 */
-	0x38, /* 00111000 */
-	0x10, /* 00010000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 5 0x05 '^E' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x3c, /* 00111100 */
-	0xe7, /* 11100111 */
-	0xe7, /* 11100111 */
-	0xe7, /* 11100111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 6 0x06 '^F' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x7e, /* 01111110 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 7 0x07 '^G' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 8 0x08 '^H' */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xe7, /* 11100111 */
-	0xc3, /* 11000011 */
-	0xc3, /* 11000011 */
-	0xe7, /* 11100111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-
-	/* 9 0x09 '^I' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0x42, /* 01000010 */
-	0x42, /* 01000010 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 10 0x0a '^J' */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xc3, /* 11000011 */
-	0x99, /* 10011001 */
-	0xbd, /* 10111101 */
-	0xbd, /* 10111101 */
-	0x99, /* 10011001 */
-	0xc3, /* 11000011 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-
-	/* 11 0x0b '^K' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1e, /* 00011110 */
-	0x0e, /* 00001110 */
-	0x1a, /* 00011010 */
-	0x32, /* 00110010 */
-	0x78, /* 01111000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x78, /* 01111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 12 0x0c '^L' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 13 0x0d '^M' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3f, /* 00111111 */
-	0x33, /* 00110011 */
-	0x3f, /* 00111111 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x70, /* 01110000 */
-	0xf0, /* 11110000 */
-	0xe0, /* 11100000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 14 0x0e '^N' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7f, /* 01111111 */
-	0x63, /* 01100011 */
-	0x7f, /* 01111111 */
-	0x63, /* 01100011 */
-	0x63, /* 01100011 */
-	0x63, /* 01100011 */
-	0x63, /* 01100011 */
-	0x67, /* 01100111 */
-	0xe7, /* 11100111 */
-	0xe6, /* 11100110 */
-	0xc0, /* 11000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 15 0x0f '^O' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xdb, /* 11011011 */
-	0x3c, /* 00111100 */
-	0xe7, /* 11100111 */
-	0x3c, /* 00111100 */
-	0xdb, /* 11011011 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 16 0x10 '^P' */
-	0x00, /* 00000000 */
-	0x80, /* 10000000 */
-	0xc0, /* 11000000 */
-	0xe0, /* 11100000 */
-	0xf0, /* 11110000 */
-	0xf8, /* 11111000 */
-	0xfe, /* 11111110 */
-	0xf8, /* 11111000 */
-	0xf0, /* 11110000 */
-	0xe0, /* 11100000 */
-	0xc0, /* 11000000 */
-	0x80, /* 10000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 17 0x11 '^Q' */
-	0x00, /* 00000000 */
-	0x02, /* 00000010 */
-	0x06, /* 00000110 */
-	0x0e, /* 00001110 */
-	0x1e, /* 00011110 */
-	0x3e, /* 00111110 */
-	0xfe, /* 11111110 */
-	0x3e, /* 00111110 */
-	0x1e, /* 00011110 */
-	0x0e, /* 00001110 */
-	0x06, /* 00000110 */
-	0x02, /* 00000010 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 18 0x12 '^R' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 19 0x13 '^S' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 20 0x14 '^T' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7f, /* 01111111 */
-	0xdb, /* 11011011 */
-	0xdb, /* 11011011 */
-	0xdb, /* 11011011 */
-	0x7b, /* 01111011 */
-	0x1b, /* 00011011 */
-	0x1b, /* 00011011 */
-	0x1b, /* 00011011 */
-	0x1b, /* 00011011 */
-	0x1b, /* 00011011 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 21 0x15 '^U' */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0x60, /* 01100000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x0c, /* 00001100 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 22 0x16 '^V' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 23 0x17 '^W' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 24 0x18 '^X' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 25 0x19 '^Y' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 26 0x1a '^Z' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0xfe, /* 11111110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 27 0x1b '^[' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xfe, /* 11111110 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 28 0x1c '^\' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 29 0x1d '^]' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x28, /* 00101000 */
-	0x6c, /* 01101100 */
-	0xfe, /* 11111110 */
-	0x6c, /* 01101100 */
-	0x28, /* 00101000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 30 0x1e '^^' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x38, /* 00111000 */
-	0x7c, /* 01111100 */
-	0x7c, /* 01111100 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 31 0x1f '^_' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0x7c, /* 01111100 */
-	0x7c, /* 01111100 */
-	0x38, /* 00111000 */
-	0x38, /* 00111000 */
-	0x10, /* 00010000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 32 0x20 ' ' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 33 0x21 '!' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x3c, /* 00111100 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 34 0x22 '"' */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x24, /* 00100100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 35 0x23 '#' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0xfe, /* 11111110 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0xfe, /* 11111110 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 36 0x24 '$' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc2, /* 11000010 */
-	0xc0, /* 11000000 */
-	0x7c, /* 01111100 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x86, /* 10000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 37 0x25 '%' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc2, /* 11000010 */
-	0xc6, /* 11000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xc6, /* 11000110 */
-	0x86, /* 10000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 38 0x26 '&' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 39 0x27 ''' */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 40 0x28 '(' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 41 0x29 ')' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 42 0x2a '*' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0xff, /* 11111111 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 43 0x2b '+' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 44 0x2c ',' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 45 0x2d '-' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 46 0x2e '.' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 47 0x2f '/' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x02, /* 00000010 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xc0, /* 11000000 */
-	0x80, /* 10000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 48 0x30 '0' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 49 0x31 '1' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x38, /* 00111000 */
-	0x78, /* 01111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 50 0x32 '2' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 51 0x33 '3' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x3c, /* 00111100 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 52 0x34 '4' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x0c, /* 00001100 */
-	0x1c, /* 00011100 */
-	0x3c, /* 00111100 */
-	0x6c, /* 01101100 */
-	0xcc, /* 11001100 */
-	0xfe, /* 11111110 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x1e, /* 00011110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 53 0x35 '5' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xfc, /* 11111100 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 54 0x36 '6' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x60, /* 01100000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xfc, /* 11111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 55 0x37 '7' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 56 0x38 '8' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 57 0x39 '9' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7e, /* 01111110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x78, /* 01111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 58 0x3a ':' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 59 0x3b ';' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 60 0x3c '<' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x06, /* 00000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 61 0x3d '=' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 62 0x3e '>' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 63 0x3f '?' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 64 0x40 '@' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xde, /* 11011110 */
-	0xde, /* 11011110 */
-	0xde, /* 11011110 */
-	0xdc, /* 11011100 */
-	0xc0, /* 11000000 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 65 0x41 'A' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 66 0x42 'B' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfc, /* 11111100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x7c, /* 01111100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0xfc, /* 11111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 67 0x43 'C' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0xc2, /* 11000010 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc2, /* 11000010 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 68 0x44 'D' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xf8, /* 11111000 */
-	0x6c, /* 01101100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x6c, /* 01101100 */
-	0xf8, /* 11111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 69 0x45 'E' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x66, /* 01100110 */
-	0x62, /* 01100010 */
-	0x68, /* 01101000 */
-	0x78, /* 01111000 */
-	0x68, /* 01101000 */
-	0x60, /* 01100000 */
-	0x62, /* 01100010 */
-	0x66, /* 01100110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 70 0x46 'F' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x66, /* 01100110 */
-	0x62, /* 01100010 */
-	0x68, /* 01101000 */
-	0x78, /* 01111000 */
-	0x68, /* 01101000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0xf0, /* 11110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 71 0x47 'G' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0xc2, /* 11000010 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xde, /* 11011110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x66, /* 01100110 */
-	0x3a, /* 00111010 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 72 0x48 'H' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 73 0x49 'I' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 74 0x4a 'J' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1e, /* 00011110 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x78, /* 01111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 75 0x4b 'K' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xe6, /* 11100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x6c, /* 01101100 */
-	0x78, /* 01111000 */
-	0x78, /* 01111000 */
-	0x6c, /* 01101100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0xe6, /* 11100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 76 0x4c 'L' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xf0, /* 11110000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x62, /* 01100010 */
-	0x66, /* 01100110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 77 0x4d 'M' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xee, /* 11101110 */
-	0xfe, /* 11111110 */
-	0xfe, /* 11111110 */
-	0xd6, /* 11010110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 78 0x4e 'N' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xe6, /* 11100110 */
-	0xf6, /* 11110110 */
-	0xfe, /* 11111110 */
-	0xde, /* 11011110 */
-	0xce, /* 11001110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 79 0x4f 'O' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 80 0x50 'P' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfc, /* 11111100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x7c, /* 01111100 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0xf0, /* 11110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 81 0x51 'Q' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xd6, /* 11010110 */
-	0xde, /* 11011110 */
-	0x7c, /* 01111100 */
-	0x0c, /* 00001100 */
-	0x0e, /* 00001110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 82 0x52 'R' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfc, /* 11111100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x7c, /* 01111100 */
-	0x6c, /* 01101100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0xe6, /* 11100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 83 0x53 'S' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x60, /* 01100000 */
-	0x38, /* 00111000 */
-	0x0c, /* 00001100 */
-	0x06, /* 00000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 84 0x54 'T' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x7e, /* 01111110 */
-	0x5a, /* 01011010 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 85 0x55 'U' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 86 0x56 'V' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x10, /* 00010000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 87 0x57 'W' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xfe, /* 11111110 */
-	0xee, /* 11101110 */
-	0x6c, /* 01101100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 88 0x58 'X' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x7c, /* 01111100 */
-	0x38, /* 00111000 */
-	0x38, /* 00111000 */
-	0x7c, /* 01111100 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 89 0x59 'Y' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 90 0x5a 'Z' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0x86, /* 10000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xc2, /* 11000010 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 91 0x5b '[' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 92 0x5c '\' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x80, /* 10000000 */
-	0xc0, /* 11000000 */
-	0xe0, /* 11100000 */
-	0x70, /* 01110000 */
-	0x38, /* 00111000 */
-	0x1c, /* 00011100 */
-	0x0e, /* 00001110 */
-	0x06, /* 00000110 */
-	0x02, /* 00000010 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 93 0x5d ']' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 94 0x5e '^' */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 95 0x5f '_' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 96 0x60 '`' */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 97 0x61 'a' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x78, /* 01111000 */
-	0x0c, /* 00001100 */
-	0x7c, /* 01111100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 98 0x62 'b' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xe0, /* 11100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x78, /* 01111000 */
-	0x6c, /* 01101100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 99 0x63 'c' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 100 0x64 'd' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1c, /* 00011100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x3c, /* 00111100 */
-	0x6c, /* 01101100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 101 0x65 'e' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 102 0x66 'f' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1c, /* 00011100 */
-	0x36, /* 00110110 */
-	0x32, /* 00110010 */
-	0x30, /* 00110000 */
-	0x78, /* 01111000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x78, /* 01111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 103 0x67 'g' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x7c, /* 01111100 */
-	0x0c, /* 00001100 */
-	0xcc, /* 11001100 */
-	0x78, /* 01111000 */
-	0x00, /* 00000000 */
-
-	/* 104 0x68 'h' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xe0, /* 11100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x6c, /* 01101100 */
-	0x76, /* 01110110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0xe6, /* 11100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 105 0x69 'i' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 106 0x6a 'j' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x00, /* 00000000 */
-	0x0e, /* 00001110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-
-	/* 107 0x6b 'k' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xe0, /* 11100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x66, /* 01100110 */
-	0x6c, /* 01101100 */
-	0x78, /* 01111000 */
-	0x78, /* 01111000 */
-	0x6c, /* 01101100 */
-	0x66, /* 01100110 */
-	0xe6, /* 11100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 108 0x6c 'l' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 109 0x6d 'm' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xec, /* 11101100 */
-	0xfe, /* 11111110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 110 0x6e 'n' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xdc, /* 11011100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 111 0x6f 'o' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 112 0x70 'p' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xdc, /* 11011100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x7c, /* 01111100 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0xf0, /* 11110000 */
-	0x00, /* 00000000 */
-
-	/* 113 0x71 'q' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x7c, /* 01111100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x1e, /* 00011110 */
-	0x00, /* 00000000 */
-
-	/* 114 0x72 'r' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xdc, /* 11011100 */
-	0x76, /* 01110110 */
-	0x66, /* 01100110 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0xf0, /* 11110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 115 0x73 's' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0x60, /* 01100000 */
-	0x38, /* 00111000 */
-	0x0c, /* 00001100 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 116 0x74 't' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0xfc, /* 11111100 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x36, /* 00110110 */
-	0x1c, /* 00011100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 117 0x75 'u' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 118 0x76 'v' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 119 0x77 'w' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xd6, /* 11010110 */
-	0xfe, /* 11111110 */
-	0x6c, /* 01101100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 120 0x78 'x' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x38, /* 00111000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 121 0x79 'y' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7e, /* 01111110 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0xf8, /* 11111000 */
-	0x00, /* 00000000 */
-
-	/* 122 0x7a 'z' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xcc, /* 11001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 123 0x7b '{' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x0e, /* 00001110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x70, /* 01110000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x0e, /* 00001110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 124 0x7c '|' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 125 0x7d '}' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x70, /* 01110000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x0e, /* 00001110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x70, /* 01110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 126 0x7e '~' */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 127 0x7f '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 128 0x80 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0xc2, /* 11000010 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc2, /* 11000010 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x70, /* 01110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 129 0x81 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xcc, /* 11001100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 130 0x82 '' */
-	0x00, /* 00000000 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 131 0x83 '' */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x00, /* 00000000 */
-	0x78, /* 01111000 */
-	0x0c, /* 00001100 */
-	0x7c, /* 01111100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 132 0x84 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xcc, /* 11001100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x78, /* 01111000 */
-	0x0c, /* 00001100 */
-	0x7c, /* 01111100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 133 0x85 '
-' */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x78, /* 01111000 */
-	0x0c, /* 00001100 */
-	0x7c, /* 01111100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 134 0x86 '' */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x00, /* 00000000 */
-	0x78, /* 01111000 */
-	0x0c, /* 00001100 */
-	0x7c, /* 01111100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 135 0x87 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x18, /* 00011000 */
-	0x70, /* 01110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 136 0x88 '' */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 137 0x89 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 138 0x8a '' */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 139 0x8b '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 140 0x8c '' */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 141 0x8d '' */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 142 0x8e '' */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 143 0x8f '' */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 144 0x90 '' */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x66, /* 01100110 */
-	0x62, /* 01100010 */
-	0x68, /* 01101000 */
-	0x78, /* 01111000 */
-	0x68, /* 01101000 */
-	0x62, /* 01100010 */
-	0x66, /* 01100110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 145 0x91 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xec, /* 11101100 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x7e, /* 01111110 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0x6e, /* 01101110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 146 0x92 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3e, /* 00111110 */
-	0x6c, /* 01101100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xfe, /* 11111110 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xce, /* 11001110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 147 0x93 '' */
-	0x00, /* 00000000 */
-	0x10, /* 00010000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 148 0x94 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 149 0x95 '' */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 150 0x96 '' */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x78, /* 01111000 */
-	0xcc, /* 11001100 */
-	0x00, /* 00000000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 151 0x97 '' */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 152 0x98 '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7e, /* 01111110 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x78, /* 01111000 */
-	0x00, /* 00000000 */
-
-	/* 153 0x99 '' */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 154 0x9a '' */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 155 0x9b '' */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 156 0x9c '' */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x64, /* 01100100 */
-	0x60, /* 01100000 */
-	0xf0, /* 11110000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0xe6, /* 11100110 */
-	0xfc, /* 11111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 157 0x9d '' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 158 0x9e '' */
-	0x00, /* 00000000 */
-	0xf8, /* 11111000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xf8, /* 11111000 */
-	0xc4, /* 11000100 */
-	0xcc, /* 11001100 */
-	0xde, /* 11011110 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 159 0x9f '' */
-	0x00, /* 00000000 */
-	0x0e, /* 00001110 */
-	0x1b, /* 00011011 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xd8, /* 11011000 */
-	0x70, /* 01110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 160 0xa0 ' ' */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x00, /* 00000000 */
-	0x78, /* 01111000 */
-	0x0c, /* 00001100 */
-	0x7c, /* 01111100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 161 0xa1 '¡' */
-	0x00, /* 00000000 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 162 0xa2 '¢' */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 163 0xa3 '£' */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x00, /* 00000000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 164 0xa4 '¤' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0x00, /* 00000000 */
-	0xdc, /* 11011100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 165 0xa5 '¥' */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0x00, /* 00000000 */
-	0xc6, /* 11000110 */
-	0xe6, /* 11100110 */
-	0xf6, /* 11110110 */
-	0xfe, /* 11111110 */
-	0xde, /* 11011110 */
-	0xce, /* 11001110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 166 0xa6 '¦' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x3e, /* 00111110 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 167 0xa7 '§' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 168 0xa8 '¨' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xc0, /* 11000000 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x7c, /* 01111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 169 0xa9 '©' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 170 0xaa 'ª' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 171 0xab '«' */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0xe0, /* 11100000 */
-	0x62, /* 01100010 */
-	0x66, /* 01100110 */
-	0x6c, /* 01101100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xdc, /* 11011100 */
-	0x86, /* 10000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x3e, /* 00111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 172 0xac '¬' */
-	0x00, /* 00000000 */
-	0x60, /* 01100000 */
-	0xe0, /* 11100000 */
-	0x62, /* 01100010 */
-	0x66, /* 01100110 */
-	0x6c, /* 01101100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x66, /* 01100110 */
-	0xce, /* 11001110 */
-	0x9a, /* 10011010 */
-	0x3f, /* 00111111 */
-	0x06, /* 00000110 */
-	0x06, /* 00000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 173 0xad '­' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x3c, /* 00111100 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 174 0xae '®' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x36, /* 00110110 */
-	0x6c, /* 01101100 */
-	0xd8, /* 11011000 */
-	0x6c, /* 01101100 */
-	0x36, /* 00110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 175 0xaf '¯' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xd8, /* 11011000 */
-	0x6c, /* 01101100 */
-	0x36, /* 00110110 */
-	0x6c, /* 01101100 */
-	0xd8, /* 11011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 176 0xb0 '°' */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-	0x11, /* 00010001 */
-	0x44, /* 01000100 */
-
-	/* 177 0xb1 '±' */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-	0x55, /* 01010101 */
-	0xaa, /* 10101010 */
-
-	/* 178 0xb2 '²' */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-	0xdd, /* 11011101 */
-	0x77, /* 01110111 */
-
-	/* 179 0xb3 '³' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 180 0xb4 '´' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xf8, /* 11111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 181 0xb5 'µ' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xf8, /* 11111000 */
-	0x18, /* 00011000 */
-	0xf8, /* 11111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 182 0xb6 '¶' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xf6, /* 11110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 183 0xb7 '·' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 184 0xb8 '¸' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xf8, /* 11111000 */
-	0x18, /* 00011000 */
-	0xf8, /* 11111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 185 0xb9 '¹' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xf6, /* 11110110 */
-	0x06, /* 00000110 */
-	0xf6, /* 11110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 186 0xba 'º' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 187 0xbb '»' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x06, /* 00000110 */
-	0xf6, /* 11110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 188 0xbc '¼' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xf6, /* 11110110 */
-	0x06, /* 00000110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 189 0xbd '½' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 190 0xbe '¾' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xf8, /* 11111000 */
-	0x18, /* 00011000 */
-	0xf8, /* 11111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 191 0xbf '¿' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xf8, /* 11111000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 192 0xc0 'À' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x1f, /* 00011111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 193 0xc1 'Á' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 194 0xc2 'Â' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 195 0xc3 'Ã' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x1f, /* 00011111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 196 0xc4 'Ä' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 197 0xc5 'Å' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xff, /* 11111111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 198 0xc6 'Æ' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x1f, /* 00011111 */
-	0x18, /* 00011000 */
-	0x1f, /* 00011111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 199 0xc7 'Ç' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x37, /* 00110111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 200 0xc8 'È' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x37, /* 00110111 */
-	0x30, /* 00110000 */
-	0x3f, /* 00111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 201 0xc9 'É' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3f, /* 00111111 */
-	0x30, /* 00110000 */
-	0x37, /* 00110111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 202 0xca 'Ê' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xf7, /* 11110111 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 203 0xcb 'Ë' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0xf7, /* 11110111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 204 0xcc 'Ì' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x37, /* 00110111 */
-	0x30, /* 00110000 */
-	0x37, /* 00110111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 205 0xcd 'Í' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 206 0xce 'Î' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xf7, /* 11110111 */
-	0x00, /* 00000000 */
-	0xf7, /* 11110111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 207 0xcf 'Ï' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 208 0xd0 'Ð' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 209 0xd1 'Ñ' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 210 0xd2 'Ò' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 211 0xd3 'Ó' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x3f, /* 00111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 212 0xd4 'Ô' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x1f, /* 00011111 */
-	0x18, /* 00011000 */
-	0x1f, /* 00011111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 213 0xd5 'Õ' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1f, /* 00011111 */
-	0x18, /* 00011000 */
-	0x1f, /* 00011111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 214 0xd6 'Ö' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x3f, /* 00111111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 215 0xd7 '×' */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0xff, /* 11111111 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-
-	/* 216 0xd8 'Ø' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xff, /* 11111111 */
-	0x18, /* 00011000 */
-	0xff, /* 11111111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 217 0xd9 'Ù' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xf8, /* 11111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 218 0xda 'Ú' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1f, /* 00011111 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 219 0xdb 'Û' */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-
-	/* 220 0xdc 'Ü' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-
-	/* 221 0xdd 'Ý' */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-	0xf0, /* 11110000 */
-
-	/* 222 0xde 'Þ' */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-	0x0f, /* 00001111 */
-
-	/* 223 0xdf 'ß' */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0xff, /* 11111111 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 224 0xe0 'à' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0xdc, /* 11011100 */
-	0x76, /* 01110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 225 0xe1 'á' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x78, /* 01111000 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xcc, /* 11001100 */
-	0xd8, /* 11011000 */
-	0xcc, /* 11001100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xcc, /* 11001100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 226 0xe2 'â' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0xc0, /* 11000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 227 0xe3 'ã' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 228 0xe4 'ä' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 229 0xe5 'å' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0x70, /* 01110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 230 0xe6 'æ' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x7c, /* 01111100 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0xc0, /* 11000000 */
-	0x00, /* 00000000 */
-
-	/* 231 0xe7 'ç' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 232 0xe8 'è' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 233 0xe9 'é' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xfe, /* 11111110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 234 0xea 'ê' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0xee, /* 11101110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 235 0xeb 'ë' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1e, /* 00011110 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x3e, /* 00111110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x66, /* 01100110 */
-	0x3c, /* 00111100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 236 0xec 'ì' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0xdb, /* 11011011 */
-	0xdb, /* 11011011 */
-	0xdb, /* 11011011 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 237 0xed 'í' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x03, /* 00000011 */
-	0x06, /* 00000110 */
-	0x7e, /* 01111110 */
-	0xdb, /* 11011011 */
-	0xdb, /* 11011011 */
-	0xf3, /* 11110011 */
-	0x7e, /* 01111110 */
-	0x60, /* 01100000 */
-	0xc0, /* 11000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 238 0xee 'î' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x1c, /* 00011100 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x7c, /* 01111100 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x1c, /* 00011100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 239 0xef 'ï' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7c, /* 01111100 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0xc6, /* 11000110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 240 0xf0 'ð' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0xfe, /* 11111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 241 0xf1 'ñ' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x7e, /* 01111110 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 242 0xf2 'ò' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x06, /* 00000110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 243 0xf3 'ó' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x30, /* 00110000 */
-	0x60, /* 01100000 */
-	0x30, /* 00110000 */
-	0x18, /* 00011000 */
-	0x0c, /* 00001100 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 244 0xf4 'ô' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x0e, /* 00001110 */
-	0x1b, /* 00011011 */
-	0x1b, /* 00011011 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-
-	/* 245 0xf5 'õ' */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0xd8, /* 11011000 */
-	0x70, /* 01110000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 246 0xf6 'ö' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 247 0xf7 '÷' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0x00, /* 00000000 */
-	0x76, /* 01110110 */
-	0xdc, /* 11011100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 248 0xf8 'ø' */
-	0x00, /* 00000000 */
-	0x38, /* 00111000 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x38, /* 00111000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 249 0xf9 'ù' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 250 0xfa 'ú' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x18, /* 00011000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 251 0xfb 'û' */
-	0x00, /* 00000000 */
-	0x0f, /* 00001111 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0x0c, /* 00001100 */
-	0xec, /* 11101100 */
-	0x6c, /* 01101100 */
-	0x6c, /* 01101100 */
-	0x3c, /* 00111100 */
-	0x1c, /* 00011100 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 252 0xfc 'ü' */
-	0x00, /* 00000000 */
-	0x6c, /* 01101100 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x36, /* 00110110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 253 0xfd 'ý' */
-	0x00, /* 00000000 */
-	0x3c, /* 00111100 */
-	0x66, /* 01100110 */
-	0x0c, /* 00001100 */
-	0x18, /* 00011000 */
-	0x32, /* 00110010 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 254 0xfe 'þ' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x7e, /* 01111110 */
-	0x7e, /* 01111110 */
-	0x7e, /* 01111110 */
-	0x7e, /* 01111110 */
-	0x7e, /* 01111110 */
-	0x7e, /* 01111110 */
-	0x7e, /* 01111110 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-	/* 255 0xff 'ÿ' */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-	0x00, /* 00000000 */
-
-};
Index: pace/fb/font-8x16.h
===================================================================
--- uspace/fb/font-8x16.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,37 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FB_FONT_8X16_H_
-#define FB_FONT_8X16_H_
-
-#define FONT_GLIPHS	256
-#define FONT_SCANLINES	16
-
-extern unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES];
-
-#endif
Index: pace/fb/main.c
===================================================================
--- uspace/fb/main.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,81 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <ipc/ipc.h>
-#include <ipc/services.h>
-#include <sysinfo.h>
-#include <async.h>
-#include <as.h>
-#include <align.h>
-#include <errno.h>
-
-#include "fb.h"
-#include "sysio.h"
-#include "ega.h"
-#include "main.h"
-
-void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area)
-{
-	void *dest;
-
-	dest = as_get_mappable_page(IPC_GET_ARG2(*call));
-	if (ipc_answer_fast(callid, 0, (sysarg_t) dest, 0) == 0) {
-		if (*area)
-			as_area_destroy(*area);
-		*area = dest;
-	}
-}
-
-int main(int argc, char *argv[])
-{
-	ipcarg_t phonead;
-	int initialized = 0;
-
-#ifdef FB_ENABLED
-	if (sysinfo_value("fb.kind") == 1) {
-		if (fb_init() == 0)
-			initialized = 1;
-	} 
-#endif
-#ifdef EGA_ENABLED
-	if (!initialized && sysinfo_value("fb.kind") == 2) {
-		if (ega_init() == 0)
-			initialized = 1;
-	}
-#endif
-
-	if (!initialized)
-		sysio_init();
-
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_VIDEO, 0, &phonead) != 0) 
-		return -1;
-	
-	async_manager();
-	/* Never reached */
-	return 0;
-}
Index: pace/fb/main.h
===================================================================
--- uspace/fb/main.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,34 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FB_MAIN_H_
-#define FB_MAIN_H_
-
-extern void receive_comm_area(ipc_callid_t, ipc_call_t *, void **);
-
-#endif
Index: pace/fb/pointer.xbm
===================================================================
--- uspace/fb/pointer.xbm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-#define pointer_width 11
-#define pointer_height 18
-static unsigned char pointer_bits[] = {
-   0x01, 0x00, 0x03, 0x00, 0x05, 0x00, 0x09, 0x00, 0x11, 0x00, 0x21, 0x00,
-   0x41, 0x00, 0x81, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x04, 0x01, 0x03,
-   0x81, 0x00, 0x89, 0x00, 0x15, 0x01, 0x23, 0x01, 0x21, 0x01, 0xc0, 0x00 };
Index: pace/fb/pointer_mask.xbm
===================================================================
--- uspace/fb/pointer_mask.xbm	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-#define pointer_mask_width 11
-#define pointer_mask_height 18
-static unsigned char pointer_mask_bits[] = {
-   0x01, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x3f, 0x00,
-   0x7f, 0x00, 0xff, 0x00, 0xff, 0x01, 0xff, 0x03, 0xff, 0x07, 0xff, 0x03,
-   0xff, 0x00, 0xff, 0x00, 0xf7, 0x01, 0xe3, 0x01, 0xe1, 0x01, 0xc0, 0x00 };
Index: pace/fb/ppm.c
===================================================================
--- uspace/fb/ppm.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,128 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <types.h>
-#include <errno.h>
-
-#include "ppm.h"
-
-static void skip_whitespace(unsigned char **data)
-{
-retry:
-	while (**data == ' ' || **data == '\t' || **data == '\n' || **data == '\r')
-		(*data)++;
-	if (**data == '#') {
-		while (1) {
-			if (**data == '\n' || **data == '\r')
-				break;
-			(*data)++;
-		}
-		goto retry;
-	}
-}
-
-static void read_num(unsigned char **data, unsigned int *num)
-{
-	*num = 0;
-	while (**data >= '0' && **data <= '9') {
-		*num *= 10;
-		*num += **data - '0';
-		(*data)++;
-	}
-}
-
-int ppm_get_data(unsigned char *data, size_t dtsz, unsigned int *width, unsigned int *height)
-{
-	/* Read magic */
-	if (data[0] != 'P' || data[1] != '6')
-		return EINVAL;
-
-	data+=2;
-	skip_whitespace(&data);
-	read_num(&data, width);
-	skip_whitespace(&data);
-	read_num(&data,height);
-
-	return 0;
-}
-
-/** Draw PPM pixmap
- *
- * @param data Pointer to PPM data
- * @param datasz Maximum data size
- * @param sx Coordinate of upper left corner
- * @param sy Coordinate of upper left corner
- * @param maxwidth Maximum allowed width for picture
- * @param maxheight Maximum allowed height for picture
- * @param putpixel Putpixel function used to print bitmap
- */
-int ppm_draw(unsigned char *data, size_t datasz, unsigned int sx, 
-	     unsigned int sy, 
-	     unsigned int maxwidth, unsigned int maxheight,
-	     putpixel_cb_t putpixel, void *vport)
-{
-	unsigned int width, height;
-	unsigned int maxcolor;
-	int i;
-	unsigned int color;
-	unsigned int coef;
-
-	/* Read magic */
-	if (data[0] != 'P' || data[1] != '6')
-		return EINVAL;
-
-	data+=2;
-	skip_whitespace(&data);
-	read_num(&data, &width);
-	skip_whitespace(&data);
-	read_num(&data,&height);
-	skip_whitespace(&data);
-	read_num(&data,&maxcolor);
-	data++;
-
-	if (maxcolor == 0 || maxcolor > 255 || width*height > datasz) {
-		return EINVAL;
-	}
-	coef = 255/maxcolor;
-	if (coef*maxcolor > 255)
-		coef -= 1;
-	
-	for (i=0; i < width*height; i++) {
-		/* Crop picture if we don't fit into region */
-		if (i % width > maxwidth || i/width > maxheight) {
-			data += 3;
-			continue;
-		}
-		color = ((data[0]*coef) << 16) + ((data[1]*coef) << 8) + data[2]*coef;
-		
-		(*putpixel)(vport, sx+(i % width), sy+(i / width), color);
-		data += 3;
-	}
-
-	return 0;
-}
Index: pace/fb/ppm.h
===================================================================
--- uspace/fb/ppm.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,38 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FB_PPM_H_
-#define FB_PPM_H_
-
-#include "fb.h"
-
-extern int ppm_draw(unsigned char *, size_t, unsigned int, unsigned int, 
-    unsigned int, unsigned int, putpixel_cb_t, void *);
-extern int ppm_get_data(unsigned char *, size_t, unsigned int *, unsigned int *);
-
-#endif
Index: pace/fb/sysio.c
===================================================================
--- uspace/fb/sysio.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,198 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @defgroup sysio SysIO 
- * @brief	HelenOS framebuffer emulation via kernel.
- * @ingroup fbs
- * @{
- */ 
-/** @file
- */
-
-#include <async.h>
-#include <ipc/fb.h>
-#include <ipc/ipc.h>
-#include <libc.h>
-#include <errno.h>
-#include <string.h>
-#include <libc.h>
-#include <stdio.h>
-
-#include "sysio.h"
-
-#define WIDTH 80
-#define HEIGHT 25
-
-/* Allow only 1 connection */
-static int client_connected = 0;
-
-static void sysput(char c)
-{
-	__SYSCALL3(SYS_IO, 1, (sysarg_t)&c, (sysarg_t) 1);
-}
-
-static void sysputs(char *s)
-{
-	while (*s) {
-		sysput(*(s++));
-	}
-//	__SYSCALL3(SYS_IO, 1, (sysarg_t)s, strlen(s));
-}
-
-/** Send clearscreen sequence to console */
-static void clrscr(void)
-{
-	sysputs("\033[2J");
-}
-
-/** Send ansi sequence to console to change cursor position */
-static void curs_goto(unsigned int row, unsigned int col)
-{
-	char control[20];
-
-	if (row > 200 || col > 200)
-		return;
-
-	snprintf(control, 20, "\033[%d;%df",row+1, col+1);
-	sysputs(control);
-}
-
-static void set_style(int mode)
-{
-	char control[20];
-	
-	snprintf(control, 20, "\033[%dm", mode);
-	sysputs(control);
-}
-
-static void scroll(int i)
-{
-	if (i > 0) {
-		curs_goto(HEIGHT-1, 0);
-		while (i--)
-			sysputs("\033D");
-	} else if (i < 0) {
-		curs_goto(0,0);
-		while (i++)
-			sysputs("\033M");
-	}
-}
-
-/** ANSI terminal emulation main thread */
-static void sysio_client_connection(ipc_callid_t iid, ipc_call_t *icall)
-{
-	int retval;
-	ipc_callid_t callid;
-	ipc_call_t call;
-	char c;
-	int lastcol=0;
-	int lastrow=0;
-	int newcol,newrow;
-	int fgcolor,bgcolor;
-	int i;
-
-	if (client_connected) {
-		ipc_answer_fast(iid, ELIMIT, 0,0);
-		return;
-	}
-	
-	client_connected = 1;
-	ipc_answer_fast(iid, 0, 0, 0); /* Accept connection */
-	while (1) {
-		callid = async_get_call(&call);
-		switch (IPC_GET_METHOD(call)) {
-			case IPC_M_PHONE_HUNGUP:
-				client_connected = 0;
-				ipc_answer_fast(callid, 0, 0, 0);
-				return; /* Exit thread */
-			case FB_PUTCHAR:
-				c = IPC_GET_ARG1(call);
-				newrow = IPC_GET_ARG2(call);
-				newcol = IPC_GET_ARG3(call);
-				if ((lastcol != newcol) || (lastrow != newrow))
-					curs_goto(newrow, newcol);
-				lastcol = newcol + 1;
-				lastrow = newrow;
-				sysput(c);
-				retval = 0;
-				break;
-			case FB_CURSOR_GOTO:
-				newrow = IPC_GET_ARG1(call);
-				newcol = IPC_GET_ARG2(call);
-				curs_goto(newrow, newcol);
-				lastrow = newrow;
-				lastcol = newcol;
-				retval = 0;
-				break;
-			case FB_GET_CSIZE:
-				ipc_answer_fast(callid, 0, HEIGHT, WIDTH);
-				continue;
-			case FB_CLEAR:
-				clrscr();
-				retval = 0;
-				break;
-			case FB_SET_STYLE:
-				fgcolor = IPC_GET_ARG1(call);
-				bgcolor = IPC_GET_ARG2(call);
-				if (fgcolor < bgcolor)
-					set_style(0);
-				else
-					set_style(7);
-				retval = 0;
-				break;
-			case FB_SCROLL:
-				i = IPC_GET_ARG1(call);
-				if ((i > HEIGHT) || (i < -HEIGHT)) {
-					retval = EINVAL;
-					break;
-				}
-				scroll(i);
-				curs_goto(lastrow, lastcol);
-				retval = 0;
-				break;
-			default:
-				retval = ENOENT;
-		}
-		
-		ipc_answer_fast(callid, retval, 0, 0);
-	}
-}
-
-/** ANSI terminal emulation initialization */
-void sysio_init(void)
-{
-	async_set_client_connection(sysio_client_connection);
-	clrscr();
-	curs_goto(0,0);
-	/* Set scrolling region to 0-25 lines */
-	sysputs("\033[0;25r");
-}
-
-/**
- * @}
- */
Index: pace/fb/sysio.h
===================================================================
--- uspace/fb/sysio.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup sysio
- * @brief	HelenOS framebuffer emulation via kernel.
- * @ingroup fbs
- * @{
- */ 
-/** @file
- */
-
-#ifndef FB_SYSIO_H_
-#define FB_SYSIO_H_
-
-extern void sysio_init(void);
-
-#endif
-
-/** @}
- */
Index: pace/fs/Makefile
===================================================================
--- uspace/fs/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,72 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = fs
-SOURCES = \
-	fs.c
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/fs/fs.c
===================================================================
--- uspace/fs/fs.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup fs
- * @{
- */ 
-
-/**
- * @file	fs.c
- * @brief	File system driver for HelenOS.
- */
-
-
-int main(int argc, char **argv)
-{
-	return 0;
-}
-
-/**
- * @}
- */ 
Index: pace/init/Makefile
===================================================================
--- uspace/init/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,87 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-include ../../version
-include ../Makefile.config
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-CFLAGS += -I../kbd/include
-
-LIBS = $(LIBC_PREFIX)/libc.a
-DEFS += -DRELEASE=\"$(RELEASE)\"
-
-ifdef REVISION
-	DEFS += "-DREVISION=\"$(REVISION)\""
-endif
-
-ifdef TIMESTAMP
-	DEFS += "-DTIMESTAMP=\"$(TIMESTAMP)\""
-endif
-
-## Sources
-#
-
-OUTPUT = init
-SOURCES = \
-	init.c \
-	version.c
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/init/init.c
===================================================================
--- uspace/init/init.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,63 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup init Init
- * @brief	Init process for testing purposes.
- * @{
- */ 
-/**
- * @file
- */
-
-#include "version.h"
-#include <stdio.h>
-
-static void test_console(void)
-{
-	int c;
-
-	while ((c = getchar()) != EOF)
-		putchar(c);
-}
-
-int main(int argc, char *argv[])
-{
-	version_print();
-
-	printf("This is init\n");
-	
-	test_console();
-
-	printf("\nBye.\n");
-
-	return 0;
-}
-
-/** @}
- */
-
Index: pace/init/init.h
===================================================================
--- uspace/init/init.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup init
- * @{
- */ 
-/**
- * @file
- */
-
-#ifndef __INIT_H__
-#define __INIT_H__
-
-#include "version.h"
-
-#endif
-
-/** @}
- */
-
Index: pace/init/version.c
===================================================================
--- uspace/init/version.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,61 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup init
- * @{
- */ 
-/**
- * @file
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include "version.h"
-
-char *release = RELEASE;
-
-#ifdef REVISION
-	char *revision = ", revision " REVISION;
-#else
-	char *revision = "";
-#endif
-
-#ifdef TIMESTAMP
-	char *timestamp = "\nBuilt on " TIMESTAMP;
-#else
-	char *timestamp = "";
-#endif
-
-/** Print version information. */
-void version_print(void)
-{
-	printf("HelenOS init\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp);
-}
-
-/** @}
- */
Index: pace/init/version.h
===================================================================
--- uspace/init/version.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup init
- * @{
- */ 
-/**
- * @file
- */
-
-#ifndef __VERSION_H__
-#define __VERSION_H__
-
-extern void version_print(void);
-
-#endif
-
-/** @}
- */
-
Index: pace/kbd/Makefile
===================================================================
--- uspace/kbd/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,115 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain 
-include ../../Makefile.config
-
-CFLAGS += -Iinclude -I../libadt/include
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = kbd
-GENERIC_SOURCES = \
-	generic/kbd.c \
-	generic/key_buffer.c
-
-ARCH_SOURCES = \
-	arch/$(ARCH)/src/kbd.c
-
-ifeq ($(ARCH), ia32)
-	ARCH_SOURCES += \
-		arch/$(ARCH)/src/mouse.c \
-		arch/$(ARCH)/src/scanc.c
-	GENARCH_SOURCES = \
-		genarch/src/kbd.c
-	CFLAGS += -DMOUSE_ENABLED
-endif
-ifeq ($(ARCH), amd64)
-	ARCH_SOURCES += \
-		arch/$(ARCH)/src/mouse.c \
-		arch/$(ARCH)/src/scanc.c
-	GENARCH_SOURCES = \
-		genarch/src/kbd.c
-	CFLAGS += -DMOUSE_ENABLED
-endif
-ifeq ($(ARCH), sparc64)
-	ARCH_SOURCES += \
-		arch/$(ARCH)/src/scanc.c
-	GENARCH_SOURCES = \
-		genarch/src/kbd.c
-endif
-ifeq ($(ARCH), arm32)
-ifeq ($(MACHINE), gxemul_testarm)
-	ARCH_SOURCES += \
-		arch/$(ARCH)/src/kbd_gxemul.c
-endif
-endif
-
-
-GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
-ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
-GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES)))
-
-.PHONY: all clean depend disasm links
-
-all: links $(OUTPUT) disasm
-
--include Makefile.depend
-
-links:
-	ln -sfn ../arch/$(ARCH)/include include/arch
-	ln -sfn ../genarch/include include/genarch
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend include/arch include/genarch
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(ARCH_OBJECTS) $(GENERIC_OBJECTS) $(GENARCH_OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(GENERIC_OBJECTS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/kbd/arch/amd64
===================================================================
--- uspace/kbd/arch/amd64	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-ia32
Index: pace/kbd/arch/arm32/include/kbd.h
===================================================================
--- uspace/kbd/arch/arm32/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,42 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdarm32
- * @{
- */ 
-/** @file
- *  @brief Empty.
- */
-
-#ifndef KBD_arm32_KBD_H_
-#define KBD_arm32_KBD_H_
-
-#endif
-
-/** @}
- */
Index: pace/kbd/arch/arm32/src/kbd.c
===================================================================
--- uspace/kbd/arch/arm32/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,40 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdarm32 arm32
- * @brief	HelenOS arm32 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- *  @brief Empty, required by generic Makefile.
- */
-
-
-/** @}
- */
Index: pace/kbd/arch/arm32/src/kbd_gxemul.c
===================================================================
--- uspace/kbd/arch/arm32/src/kbd_gxemul.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,424 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdarm32gxemul GXemul
- * @brief	HelenOS arm32 GXEmul uspace keyboard handler.
- * @ingroup  kbdarm32
- * @{
- */ 
-/** @file
- *  @brief GXemul uspace keyboard handler.
- */
-
-#include <ipc/ipc.h>
-#include <sysinfo.h>
-#include <kbd.h>
-#include <keys.h>
-#include <bool.h>
-
-
-/* GXemul key codes in no-framebuffer mode. */
-#define GXEMUL_KEY_F1  0x504f1bL
-#define GXEMUL_KEY_F2  0x514f1bL
-#define GXEMUL_KEY_F3  0x524f1bL
-#define GXEMUL_KEY_F4  0x534f1bL
-#define GXEMUL_KEY_F5  0x35315b1bL
-#define GXEMUL_KEY_F6  0x37315b1bL
-#define GXEMUL_KEY_F7  0x38315b1bL
-#define GXEMUL_KEY_F8  0x39315b1bL
-#define GXEMUL_KEY_F9  0x30325b1bL
-#define GXEMUL_KEY_F10 0x31325b1bL
-#define GXEMUL_KEY_F11 0x33325d1bL
-#define GXEMUL_KEY_F12 0x34325b1bL 
-
-/** Start code of F5-F12 keys. */
-#define GXEMUL_KEY_F5_F12_START_CODE 0x7e
-
-/* GXemul key codes in framebuffer mode. */
-#define GXEMUL_FB_KEY_F1 0x504f5b1bL
-#define GXEMUL_FB_KEY_F2 0x514f5b1bL
-#define GXEMUL_FB_KEY_F3 0x524f5b1bL
-#define GXEMUL_FB_KEY_F4 0x534f5b1bL
-#define GXEMUL_FB_KEY_F5 0x35315b1bL
-#define GXEMUL_FB_KEY_F6 0x37315b1bL
-#define GXEMUL_FB_KEY_F7 0x38315b1bL
-#define GXEMUL_FB_KEY_F8 0x39315b1bL
-#define GXEMUL_FB_KEY_F9 0x38325b1bL
-#define GXEMUL_FB_KEY_F10 0x39325b1bL
-#define GXEMUL_FB_KEY_F11 0x33325b1bL
-#define GXEMUL_FB_KEY_F12 0x34325b1bL
-
-
-/** Function keys start code (F1=0x101) */
-#define FUNCTION_KEYS 0x100
-
-static irq_cmd_t gxemul_cmds[] = {
-	{ 
-		CMD_MEM_READ_1, 
-		(void *) 0, 
-		0, 
-		2
-	}
-};
-
-static irq_code_t gxemul_kbd = {
-	1,
-	gxemul_cmds
-};
-
-
-/** Framebuffer switched on. */
-static bool fb;
-
-
-/*
-// Please preserve this code (it can be used to determine scancodes)
-int to_hex(int v) 
-{
-        return "0123456789ABCDEF"[v];
-}
-*/
-
-
-/** Process data sent when a key is pressed (in no-framebuffer mode).
- *  
- *  @param keybuffer Buffer of pressed key.
- *  @param scan_code Scan code.
- *
- *  @return Always 1.
- */
-static int gxemul_kbd_process_no_fb(keybuffer_t *keybuffer, int scan_code)
-{
-	// holds at most 4 latest scan codes
-	static unsigned long buf = 0;
-
-	// number of scan codes in #buf
-	static int count = 0;	
-
-	/*
-	// Preserve for detecting scan codes. 
-	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
-	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
-	keybuffer_push(keybuffer, 'X');
-	keybuffer_push(keybuffer, 'Y');
-	return 1;
-	*/
-
-	if (scan_code == '\r') {
-		scan_code = '\n';
-	}
-	
-	if (scan_code == GXEMUL_KEY_F5_F12_START_CODE) {
-		switch (buf) {
-		case GXEMUL_KEY_F5:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
-			buf = count = 0;
-			return 1;
-		case GXEMUL_KEY_F6:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
-			buf = count = 0;
-			return 1;
-		case GXEMUL_KEY_F7:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
-			buf = count = 0;
-			return 1;
-		case GXEMUL_KEY_F8:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
-			buf = count = 0;
-			return 1;
-		case GXEMUL_KEY_F9:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
-			buf = count = 0;
-			return 1;
-		case GXEMUL_KEY_F10:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
-			buf = count = 0;
-			return 1;
-		case GXEMUL_KEY_F11:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
-			buf = count = 0;
-			return 1;
-		case GXEMUL_KEY_F12:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
-			buf = count = 0;
-			return 1;
-		default:
-			keybuffer_push(keybuffer, buf & 0xff);
-			keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
-			keybuffer_push(keybuffer, (buf >> 16) & 0xff);
-			keybuffer_push(keybuffer, (buf >> 24) & 0xff);
-			keybuffer_push(keybuffer, scan_code);
-			buf = count = 0;
-			return 1;
-		}
-	}
-
-	// add to buffer
-	buf |= ((unsigned long) scan_code) << (8 * (count++));
-	
-	if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) {
-		keybuffer_push(keybuffer, buf);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 1) { 
-		return 1;
-	}
-
-	if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff) 
-		&& (buf & 0xffff) != (GXEMUL_KEY_F5 & 0xffff) ) {
-
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) &0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 2) {
-		return 1;
-	}
-
-	switch (buf) {
-	case GXEMUL_KEY_F1:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
-		buf = count = 0;
-		return 1;
-	case GXEMUL_KEY_F2:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
-		buf = count = 0;
-		return 1;
-	case GXEMUL_KEY_F3:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
-		buf = count = 0;
-		return 1;
-	case GXEMUL_KEY_F4:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
-		buf = count = 0;
-		return 1;
-	}
-
-
-	if ((buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
-		&& (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) {
-
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
-		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 3) {
-		return 1;
-	}
-	
-	switch (buf) {
-	case GXEMUL_KEY_F5:
-	case GXEMUL_KEY_F6:
-	case GXEMUL_KEY_F7:
-	case GXEMUL_KEY_F8:
-	case GXEMUL_KEY_F9:
-	case GXEMUL_KEY_F10:
-	case GXEMUL_KEY_F11:
-	case GXEMUL_KEY_F12:
-		return 1;
-	default:
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
-		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
-		keybuffer_push(keybuffer, (buf >> 24) & 0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	return 1;
-}
-
-
-/** Process data sent when a key is pressed (in framebuffer mode).
- *  
- *  @param keybuffer Buffer of pressed keys.
- *  @param scan_code Scan code.
- *
- *  @return Always 1.
- */
-static int gxemul_kbd_process_fb(keybuffer_t *keybuffer, int scan_code)
-{
-	// holds at most 4 latest scan codes
-	static unsigned long buf = 0;
-
-	// number of scan codes in #buf
-	static int count = 0;	
-
-	/*
-	// Please preserve this code (it can be used to determine scancodes)
-	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
-	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
-	keybuffer_push(keybuffer, ' ');
-	keybuffer_push(keybuffer, ' ');
-	return 1;
-	*/
-	
-	if (scan_code == '\r') {
-		scan_code = '\n';
-	}
-	
-	// add to buffer
-	buf |= ((unsigned long) scan_code) << (8*(count++));
-	
-	
-	if ((buf & 0xff) != (GXEMUL_FB_KEY_F1 & 0xff)) {
-		keybuffer_push(keybuffer, buf);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 1) {
-		return 1;
-	}
-
-	if ((buf & 0xffff) != (GXEMUL_FB_KEY_F1 & 0xffff)) {
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) &0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 2) {
-		return 1;
-	}
-
-	if ((buf & 0xffffff) != (GXEMUL_FB_KEY_F1 & 0xffffff)
-		&& (buf & 0xffffff) != (GXEMUL_FB_KEY_F5 & 0xffffff)
-		&& (buf & 0xffffff) != (GXEMUL_FB_KEY_F9 & 0xffffff)) {
-
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
-		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 3) {
-		return 1;
-	}
-
-	switch (buf) {
-	case GXEMUL_FB_KEY_F1:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F2:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F3:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F4:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F5:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F6:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F7:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F8:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F9:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F10:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F11:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
-		buf = count = 0;
-		return 1;
-	case GXEMUL_FB_KEY_F12:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
-		buf = count = 0;
-		return 1;
-	default:
-		keybuffer_push(keybuffer, buf & 0xff );
-		keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
-		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
-		keybuffer_push(keybuffer, (buf >> 24) & 0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	return 1;
-}
-
-
-/** Initializes keyboard handler. */
-int kbd_arch_init(void)
-{
-	fb = (sysinfo_value("fb.kind") == 1);
-	gxemul_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual");
-	ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &gxemul_kbd);
-	return 0;
-}
-
-
-/** Process data sent when a key is pressed.
- *  
- *  @param keybuffer Buffer of pressed keys.
- *  @param call      IPC call.
- *
- *  @return Always 1.
- */
-int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
-{
-	int scan_code = IPC_GET_ARG2(*call);
-
-	if (fb) {
-		return gxemul_kbd_process_fb(keybuffer, scan_code);
-	} else {
-		return gxemul_kbd_process_no_fb(keybuffer, scan_code);
-	}
-
-}
-
-/** @}
- */
Index: pace/kbd/arch/ia32/include/kbd.h
===================================================================
--- uspace/kbd/arch/ia32/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdamd64 amd64
- * @brief	HelenOS ia32 / amd64 arch dependent parts of uspace keyboard and mouse handler.
- * @ingroup  kbd
- * @{
- */
-
-/** @file
- * @ingroup kbdia32
- */
-
-#ifndef KBD_ia32_KBD_H_
-#define KBD_ia32_KBD_H_
-
-#include <ddi.h>
-#include <libarch/ddi.h>
-
-#define i8042_DATA      0x60
-#define i8042_STATUS    0X64
-
-
-typedef unsigned char u8;
-typedef short u16;
-
-static inline void i8042_data_write(u8 data)
-{
-	outb(i8042_DATA, data);
-}
-
-static inline u8 i8042_data_read(void)
-{
-	return inb(i8042_DATA);
-}
-
-static inline u8 i8042_status_read(void)
-{
-	return inb(i8042_STATUS);
-}
-
-static inline void i8042_command_write(u8 command)
-{
-	outb(i8042_STATUS, command);
-}
-
-#endif
-
-/**
- * @}
- */ 
Index: pace/kbd/arch/ia32/include/scanc.h
===================================================================
--- uspace/kbd/arch/ia32/include/scanc.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdia32
- * @{
- */ 
-/** @file
- * @ingroup kbdamd64
- */
-
-#ifndef KBD_ia32_SCANC_H_
-#define KBD_ia32_SCANC_H_
-
-/** Scancodes. */
-#define SC_ESC		0x01
-#define SC_BACKSPACE	0x0e
-#define SC_LSHIFT	0x2a
-#define SC_RSHIFT	0x36
-#define SC_CAPSLOCK	0x3a
-#define SC_SPEC_ESCAPE  0xe0
-#define SC_LEFTARR      0x4b
-#define SC_RIGHTARR     0x4d
-#define SC_UPARR        0x48
-#define SC_DOWNARR      0x50
-#define SC_DELETE       0x53
-#define SC_HOME         0x47
-#define SC_END          0x4f
-
-#endif
-
-/**
- * @}
- */ 
Index: pace/kbd/arch/ia32/src/kbd.c
===================================================================
--- uspace/kbd/arch/ia32/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,166 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdia32 ia32
- * @brief	HelenOS ia32 / amd64 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- * @ingroup kbdamd64
- */
-
-#include <arch/kbd.h>
-#include <ipc/ipc.h>
-#include <unistd.h>
-#include <kbd.h>
-#include <keys.h>
-#include <genarch/kbd.h>
-#include <sysinfo.h>
-
-/* Interesting bits for status register */
-#define i8042_OUTPUT_FULL  0x1
-#define i8042_INPUT_FULL   0x2
-#define i8042_MOUSE_DATA   0x20
-
-/* Command constants */
-#define i8042_CMD_KBD 0x60
-#define i8042_CMD_MOUSE  0xd4
-
-/* Keyboard cmd byte */
-#define i8042_KBD_IE        0x1
-#define i8042_MOUSE_IE      0x2
-#define i8042_KBD_DISABLE   0x10
-#define i8042_MOUSE_DISABLE 0x20
-#define i8042_KBD_TRANSLATE 0x40
-
-/* Mouse constants */
-#define MOUSE_OUT_INIT  0xf4
-#define MOUSE_ACK       0xfa
-
-#define KEY_RELEASE	0x80
-
-static volatile int keyflags;		/**< Tracking of multiple keypresses. */
-static volatile int lockflags;		/**< Tracking of multiple keys lockings. */
-
-irq_cmd_t i8042_cmds[2] = {
-	{ CMD_PORT_READ_1, (void *) 0x64, 0, 1 },
-	{ CMD_PORT_READ_1, (void *) 0x60, 0, 2 }
-};
-
-irq_code_t i8042_kbd = {
-	2,
-	i8042_cmds
-};
-
-static void wait_ready(void) {
-	while (i8042_status_read() & i8042_INPUT_FULL)
-		;
-}
-
-/** Register uspace irq handler
- * @return 
- */
-int kbd_arch_init(void)
-{
-	int i;
-	int mouseenabled = 0;
-
-	iospace_enable(task_get_id(), (void *) i8042_DATA, 5);
-	/* Disable kbd, enable mouse */
-	i8042_command_write(i8042_CMD_KBD);
-	wait_ready();
-	i8042_command_write(i8042_CMD_KBD);
-	wait_ready();
-	i8042_data_write(i8042_KBD_DISABLE);
-	wait_ready();
-
-	/* Flush all current IO */
-	while (i8042_status_read() & i8042_OUTPUT_FULL)
-		i8042_data_read();
-	
-	/* Initialize mouse */
-	i8042_command_write(i8042_CMD_MOUSE);
-	wait_ready();
-	i8042_data_write(MOUSE_OUT_INIT);
-	wait_ready();
-	
-	int mouseanswer = 0;
-	for (i=0;i < 1000; i++) {
-		int status = i8042_status_read();
-		if (status & i8042_OUTPUT_FULL) {
-			int data = i8042_data_read();
-			if (status & i8042_MOUSE_DATA) {
-				mouseanswer = data;
-				break;
-			}
-		}
-		usleep(1000);
-	}
-	if (mouseanswer == MOUSE_ACK) {
-		/* enable mouse */
-		mouseenabled = 1;
-		
-		ipc_register_irq(sysinfo_value("mouse.inr"), sysinfo_value("mouse.devno"), 0, &i8042_kbd);
-	}
-	/* Enable kbd */
-	ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &i8042_kbd);
-
-	int newcontrol = i8042_KBD_IE | i8042_KBD_TRANSLATE;
-	if (mouseenabled)
-		newcontrol |= i8042_MOUSE_IE;
-	
-	i8042_command_write(i8042_CMD_KBD);
-	wait_ready();
-	i8042_data_write(newcontrol);
-	wait_ready();
-	
-	return 0;
-}
-
-/** Process keyboard & mouse events */
-int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
-{
-	int status = IPC_GET_ARG1(*call);
-
-	if ((status & i8042_MOUSE_DATA))
-		return 0;
-	
-	int scan_code = IPC_GET_ARG2(*call);
-	
-	if (scan_code & KEY_RELEASE)
-		key_released(keybuffer, scan_code ^ KEY_RELEASE);
-	else
-		key_pressed(keybuffer, scan_code);
-	return 	1;
-}
-
-/**
- * @}
- */ 
Index: pace/kbd/arch/ia32/src/mouse.c
===================================================================
--- uspace/kbd/arch/ia32/src/mouse.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,116 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <ipc/ipc.h>
-#include <async.h>
-#include <kbd.h>
-#include <keys.h>
-
-#define i8042_MOUSE_DATA   0x20
-
-#define BUFSIZE 3
-
-typedef struct {
-	union {
-		unsigned char data[BUFSIZE];
-		struct {
-			unsigned leftbtn : 1;
-			unsigned rightbtn : 1;
-			unsigned middlebtn : 1;
-			unsigned isone : 1; /* Always one */
-			unsigned xsign : 1;
-			unsigned ysign : 1;
-			unsigned xovfl : 1;
-			unsigned yovfl : 1;
-			unsigned char x;
-			unsigned char y;
-		} val;
-	}u;
-}ps2packet_t;
-
-static ps2packet_t buf;
-static int bufpos = 0;
-static int leftbtn = 0;
-static int rightbtn = 0;
-static int middlebtn = 0;
-
-/** Convert 9-bit 2-complement signed number to integer */
-static int bit9toint(int sign, unsigned char data)
-{
-	int tmp;
-
-	if (!sign)
-		return data;
-
-	tmp = ((unsigned char)~data) + 1;
-	return -tmp;
-}
-
-/** Process mouse data
- *
- * @return True if mouse command was recognized and processed
- */
-int mouse_arch_process(int phoneid, ipc_call_t *call)
-{
-	int status = IPC_GET_ARG1(*call);
-	int data = IPC_GET_ARG2(*call);
-	int x,y;
-
-	if (!(status & i8042_MOUSE_DATA))
-		return 0;
-
-	/* Check that we have not lost synchronization */
-	if (bufpos == 0 && !(data & 0x8))
-		return 1; /* Synchro lost, ignore byte */
-
-	buf.u.data[bufpos++] = data;
-	if (bufpos == BUFSIZE) {
-		bufpos = 0;
-		if (phoneid != -1) {
-			if (buf.u.val.leftbtn ^ leftbtn) {
-				leftbtn = buf.u.val.leftbtn;
-				async_msg(phoneid, KBD_MS_LEFT, leftbtn);
-			}
-			if (buf.u.val.rightbtn & rightbtn) {
-				rightbtn = buf.u.val.middlebtn;
-				async_msg(phoneid, KBD_MS_RIGHT, rightbtn);
-			}
-			if (buf.u.val.rightbtn & rightbtn) {
-				middlebtn = buf.u.val.middlebtn;
-				async_msg(phoneid, KBD_MS_MIDDLE, middlebtn);
-			}
-			x = bit9toint(buf.u.val.xsign, buf.u.val.x);
-			y = bit9toint(buf.u.val.ysign, buf.u.val.y);
-			if (x || y)
-				async_msg_2(phoneid, KBD_MS_MOVE, (ipcarg_t)x, (ipcarg_t)(-y));
-		}
-	}
-
-	
-	return 1;
-}
Index: pace/kbd/arch/ia32/src/scanc.c
===================================================================
--- uspace/kbd/arch/ia32/src/scanc.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,202 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdia32
- * @brief	Scancodes for PC keyboards.
- * @{
- */ 
-/** @file
- * @ingroup kbdamd64
- */
-
-#include <genarch/scanc.h>
-
-/** Primary meaning of scancodes. */
-int sc_primary_map[] = {
-	SPECIAL, /* 0x00 */
-	SPECIAL, /* 0x01 - Esc */
-	'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=',
-	'\b', /* 0x0e - Backspace */
-	'\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
-	SPECIAL, /* 0x1d - LCtrl */
-	'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
-	'`',
-	SPECIAL, /* 0x2a - LShift */ 
-	'\\',
-	'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/',
-	SPECIAL, /* 0x36 - RShift */
-	'*',
-	SPECIAL, /* 0x38 - LAlt */
-	' ',
-	SPECIAL, /* 0x3a - CapsLock */
-	(FUNCTION_KEYS | 1), /* 0x3b - F1 */
-	(FUNCTION_KEYS | 2), /* 0x3c - F2 */
-	(FUNCTION_KEYS | 3), /* 0x3d - F3 */
-	(FUNCTION_KEYS | 4), /* 0x3e - F4 */
-	(FUNCTION_KEYS | 5), /* 0x3f - F5 */
-	(FUNCTION_KEYS | 6), /* 0x40 - F6 */
-	(FUNCTION_KEYS | 7), /* 0x41 - F7 */
-	(FUNCTION_KEYS | 8), /* 0x42 - F8 */
-	(FUNCTION_KEYS | 9), /* 0x43 - F9 */
-	(FUNCTION_KEYS | 10), /* 0x44 - F10 */
-	SPECIAL, /* 0x45 - NumLock */
-	SPECIAL, /* 0x46 - ScrollLock */
-	'7', '8', '9', '-',
-	'4', '5', '6', '+',
-	'1', '2', '3',
-	'0', '.',
-	SPECIAL, /* 0x54 - Alt-SysRq */
-	SPECIAL, /* 0x55 - F11/F12/PF1/FN */
-	SPECIAL, /* 0x56 - unlabelled key next to LAlt */
-	(FUNCTION_KEYS | 11), /* 0x57 - F11 */
-	(FUNCTION_KEYS | 12), /* 0x58 - F12 */
-	SPECIAL, /* 0x59 */
-	SPECIAL, /* 0x5a */
-	SPECIAL, /* 0x5b */
-	SPECIAL, /* 0x5c */
-	SPECIAL, /* 0x5d */
-	SPECIAL, /* 0x5e */
-	SPECIAL, /* 0x5f */
-	SPECIAL, /* 0x60 */
-	SPECIAL, /* 0x61 */
-	SPECIAL, /* 0x62 */
-	SPECIAL, /* 0x63 */
-	SPECIAL, /* 0x64 */
-	SPECIAL, /* 0x65 */
-	SPECIAL, /* 0x66 */
-	SPECIAL, /* 0x67 */
-	SPECIAL, /* 0x68 */
-	SPECIAL, /* 0x69 */
-	SPECIAL, /* 0x6a */
-	SPECIAL, /* 0x6b */
-	SPECIAL, /* 0x6c */
-	SPECIAL, /* 0x6d */
-	SPECIAL, /* 0x6e */
-	SPECIAL, /* 0x6f */
-	SPECIAL, /* 0x70 */
-	SPECIAL, /* 0x71 */
-	SPECIAL, /* 0x72 */
-	SPECIAL, /* 0x73 */
-	SPECIAL, /* 0x74 */
-	SPECIAL, /* 0x75 */
-	SPECIAL, /* 0x76 */
-	SPECIAL, /* 0x77 */
-	SPECIAL, /* 0x78 */
-	SPECIAL, /* 0x79 */
-	SPECIAL, /* 0x7a */
-	SPECIAL, /* 0x7b */
-	SPECIAL, /* 0x7c */
-	SPECIAL, /* 0x7d */
-	SPECIAL, /* 0x7e */
-	SPECIAL, /* 0x7f */
-};
-
-/** Secondary meaning of scancodes. */
-int sc_secondary_map[] = {
-	SPECIAL, /* 0x00 */
-	0x1b, /* 0x01 - Esc */
-	'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+',
-	SPECIAL, /* 0x0e - Backspace */
-	'\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\n',
-	SPECIAL, /* 0x1d - LCtrl */
-	'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
-	'~',
-	SPECIAL, /* 0x2a - LShift */ 
-	'|',
-	'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?',
-	SPECIAL, /* 0x36 - RShift */
-	'*',
-	SPECIAL, /* 0x38 - LAlt */
-	' ',
-	SPECIAL, /* 0x3a - CapsLock */
-	SPECIAL, /* 0x3b - F1 */
-	SPECIAL, /* 0x3c - F2 */
-	SPECIAL, /* 0x3d - F3 */
-	SPECIAL, /* 0x3e - F4 */
-	SPECIAL, /* 0x3f - F5 */
-	SPECIAL, /* 0x40 - F6 */
-	SPECIAL, /* 0x41 - F7 */
-	SPECIAL, /* 0x42 - F8 */
-	SPECIAL, /* 0x43 - F9 */
-	SPECIAL, /* 0x44 - F10 */
-	SPECIAL, /* 0x45 - NumLock */
-	SPECIAL, /* 0x46 - ScrollLock */
-	'7', '8', '9', '-',
-	'4', '5', '6', '+',
-	'1', '2', '3',
-	'0', '.',
-	SPECIAL, /* 0x54 - Alt-SysRq */
-	SPECIAL, /* 0x55 - F11/F12/PF1/FN */
-	SPECIAL, /* 0x56 - unlabelled key next to LAlt */
-	SPECIAL, /* 0x57 - F11 */
-	SPECIAL, /* 0x58 - F12 */
-	SPECIAL, /* 0x59 */
-	SPECIAL, /* 0x5a */
-	SPECIAL, /* 0x5b */
-	SPECIAL, /* 0x5c */
-	SPECIAL, /* 0x5d */
-	SPECIAL, /* 0x5e */
-	SPECIAL, /* 0x5f */
-	SPECIAL, /* 0x60 */
-	SPECIAL, /* 0x61 */
-	SPECIAL, /* 0x62 */
-	SPECIAL, /* 0x63 */
-	SPECIAL, /* 0x64 */
-	SPECIAL, /* 0x65 */
-	SPECIAL, /* 0x66 */
-	SPECIAL, /* 0x67 */
-	SPECIAL, /* 0x68 */
-	SPECIAL, /* 0x69 */
-	SPECIAL, /* 0x6a */
-	SPECIAL, /* 0x6b */
-	SPECIAL, /* 0x6c */
-	SPECIAL, /* 0x6d */
-	SPECIAL, /* 0x6e */
-	SPECIAL, /* 0x6f */
-	SPECIAL, /* 0x70 */
-	SPECIAL, /* 0x71 */
-	SPECIAL, /* 0x72 */
-	SPECIAL, /* 0x73 */
-	SPECIAL, /* 0x74 */
-	SPECIAL, /* 0x75 */
-	SPECIAL, /* 0x76 */
-	SPECIAL, /* 0x77 */
-	SPECIAL, /* 0x78 */
-	SPECIAL, /* 0x79 */
-	SPECIAL, /* 0x7a */
-	SPECIAL, /* 0x7b */
-	SPECIAL, /* 0x7c */
-	SPECIAL, /* 0x7d */
-	SPECIAL, /* 0x7e */
-	SPECIAL, /* 0x7f */	
-};
-
-/**
- * @}
- */ 
Index: pace/kbd/arch/ia64/include/kbd.h
===================================================================
--- uspace/kbd/arch/ia64/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdia64 ia64
- * @brief	HelenOS ia64 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_ia64_KBD_H_
-#define KBD_ia64_KBD_H_
-
-#endif
-
-/**
- * @}
- */ 
Index: pace/kbd/arch/ia64/src/kbd.c
===================================================================
--- uspace/kbd/arch/ia64/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,164 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdia64 ia64
- * @brief	HelenOS ia64 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#include <arch/kbd.h>
-#include <ipc/ipc.h>
-#include <sysinfo.h>
-#include <kbd.h>
-#include <keys.h>
-
-#define KEY_F1 0x504f1b
-#define KEY_F2 0x514f1b
-#define KEY_F3 0x524f1b
-#define KEY_F4 0x534f1b
-#define KEY_F5 0x7e35315b1b
-#define KEY_F6 0x7e37315b1b
-#define KEY_F7 0x7e38315b1b
-#define KEY_F8 0x7e39315b1b
-#define KEY_F9 0x7e30325b1b
-#define KEY_F10 0x7e31325b1b
-#define KEY_F11 0x7e33325b1b
-#define KEY_F12 0x7e34325b1b
-
-#define FUNCTION_KEYS 0x100
-
-irq_cmd_t ski_cmds[1] = {
-	{ CMD_IA64_GETCHAR, 0, 0, 2 }
-};
-
-irq_code_t ski_kbd = {
-	1,
-	ski_cmds
-};
-
-int kbd_arch_init(void)
-{
-	if (sysinfo_value("kbd")) {
-		ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &ski_kbd);
-		return 0;
-	}	
-	return 1;
-}
-
-/*
-* Please preserve this code (it can be used to determine scancodes)
-*
-int to_hex(int v) 
-{
-    return "0123456789ABCDEF"[v];
-}
-*/
-
-int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
-{
-	static unsigned long long buf = 0;
-	static int count = 0;	
-	static int esc_count = 0;
-	int scan_code = IPC_GET_ARG2(*call);
-
-	/*
-	 * Please preserve this code (it can be used to determine scancodes)
-	 */
-	//keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
-	//keybuffer_push(keybuffer, to_hex(scan_code&0xf));
-	//keybuffer_push(keybuffer, ' ');
-	//keybuffer_push(keybuffer, ' ');
-	//*/
-	
-	if (scan_code) {
-		buf |= (unsigned long long) scan_code<<(8*(count++));
-	} else {
-		
-		if (buf == 0x1b) {
-			esc_count++;
-			if (esc_count == 3) {
-				__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
-			}	
-		} else {
-			esc_count = 0;
-		}
-	
-		if (!(buf & 0xff00)) {
-			keybuffer_push(keybuffer, buf);
-		} else {
-			switch (buf) {
-			case KEY_F1:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 1);
-				break;
-			case KEY_F2:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 2);
-				break;
-			case KEY_F3:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 3);
-				break;
-			case KEY_F4:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 4);
-				break;
-			case KEY_F5:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 5);
-				break;
-			case KEY_F6:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 6);
-				break;
-			case KEY_F7:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 7);
-				break;
-			case KEY_F8:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 8);
-				break;
-			case KEY_F9:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 9);
-				break;
-			case KEY_F10:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 10);
-				break;
-			case KEY_F11:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 11);
-				break;
-			case KEY_F12:
-				keybuffer_push(keybuffer, FUNCTION_KEYS | 12);
-				break;
-			}
-		}
-		buf = count = 0;
-	}
-
-	return 	1;
-}
-
-/**
- * @}
- */ 
Index: pace/kbd/arch/mips32/include/kbd.h
===================================================================
--- uspace/kbd/arch/mips32/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdmips32 mips32
- * @brief	HelenOS mips32 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_mips32_KBD_H_
-#define KBD_mips32_KBD_H_
-
-#endif
-
-/**
- * @}
- */ 
Index: pace/kbd/arch/mips32/src/kbd.c
===================================================================
--- uspace/kbd/arch/mips32/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,377 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdmips32 mips32
- * @brief	HelenOS mips32 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-#include <arch/kbd.h>
-#include <ipc/ipc.h>
-#include <sysinfo.h>
-#include <kbd.h>
-#include <keys.h>
-
-#define MSIM_KEY_F1 0x504f1bL
-#define MSIM_KEY_F2 0x514f1bL
-#define MSIM_KEY_F3 0x524f1bL
-#define MSIM_KEY_F4 0x534f1bL
-#define MSIM_KEY_F5 0x35315b1bL
-#define MSIM_KEY_F6 0x37315b1bL
-#define MSIM_KEY_F7 0x38315b1bL
-#define MSIM_KEY_F8 0x39315b1bL
-#define MSIM_KEY_F9 0x30325b1bL
-#define MSIM_KEY_F10 0x31325b1bL
-#define MSIM_KEY_F11 0x33325b1bL
-#define MSIM_KEY_F12 0x34325b1bL
-
-#define GXEMUL_KEY_F1 0x504f5b1bL
-#define GXEMUL_KEY_F2 0x514f5b1bL
-#define GXEMUL_KEY_F3 0x524f5b1bL
-#define GXEMUL_KEY_F4 0x534f5b1bL
-#define GXEMUL_KEY_F5 0x35315b1bL
-#define GXEMUL_KEY_F6 0x37315b1bL
-#define GXEMUL_KEY_F7 0x38315b1bL
-#define GXEMUL_KEY_F8 0x39315b1bL
-#define GXEMUL_KEY_F9 0x38325b1bL
-#define GXEMUL_KEY_F10 0x39325b1bL
-#define GXEMUL_KEY_F11 0x33325b1bL
-#define GXEMUL_KEY_F12 0x34325b1bL
-
-#define FUNCTION_KEYS 0x100
-
-irq_cmd_t msim_cmds[1] = {
-	{ CMD_MEM_READ_1, (void *) 0, 0, 2 }
-};
-
-irq_code_t msim_kbd = {
-	1,
-	msim_cmds
-};
-
-static int msim,gxemul;
-static int fb_fb;
-
-
-int kbd_arch_init(void)
-{
-	fb_fb = (sysinfo_value("fb.kind") == 1);
-	msim_cmds[0].addr = sysinfo_value("kbd.address.virtual");
-	ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &msim_kbd);
-	return 0;
-}
-
-
-/*
-//*
-//* Please preserve this code (it can be used to determine scancodes)
-//*
-int to_hex(int v) 
-{
-        return "0123456789ABCDEF"[v];
-}
-*/
-
-static int kbd_arch_process_no_fb(keybuffer_t *keybuffer, int scan_code)
-{
-
-	static unsigned long buf = 0;
-	static int count = 0;	
-
-	/* Please preserve this code (it can be used to determine scancodes)
-	
-	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
-	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
-	keybuffer_push(keybuffer, ' ');
-	keybuffer_push(keybuffer, ' ');
-	
-	return 1;
-	*/
-	
-	if(scan_code == 0x7e) {
-		switch (buf) {
-		case MSIM_KEY_F5:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
-			buf = count = 0;
-			return 1;
-		case MSIM_KEY_F6:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
-			buf = count = 0;
-			return 1;
-		case MSIM_KEY_F7:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
-			buf = count = 0;
-			return 1;
-		case MSIM_KEY_F8:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
-			buf = count = 0;
-			return 1;
-		case MSIM_KEY_F9:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
-			buf = count = 0;
-			return 1;
-		case MSIM_KEY_F10:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
-			buf = count = 0;
-			return 1;
-		case MSIM_KEY_F11:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
-			buf = count = 0;
-			return 1;
-		case MSIM_KEY_F12:
-			keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
-			buf = count = 0;
-			return 1;
-		default:
-			keybuffer_push(keybuffer, buf & 0xff);
-			keybuffer_push(keybuffer, (buf >> 8) &0xff);
-			keybuffer_push(keybuffer, (buf >> 16) &0xff);
-			keybuffer_push(keybuffer, (buf >> 24) &0xff);
-			keybuffer_push(keybuffer, scan_code);
-			buf = count = 0;
-			return 1;
-		}
-	}
-
-	buf |= ((unsigned long) scan_code)<<(8*(count++));
-	
-	if((buf & 0xff) != (MSIM_KEY_F1 & 0xff)) {
-		keybuffer_push(keybuffer, buf);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 1) 
-		return 1;
-
-	if ((buf & 0xffff) != (MSIM_KEY_F1 & 0xffff) 
-		&& (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) {
-
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) &0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 2) 
-		return 1;
-
-	switch (buf) {
-	case MSIM_KEY_F1:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
-		buf = count = 0;
-		return 1;
-	case MSIM_KEY_F2:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
-		buf = count = 0;
-		return 1;
-	case MSIM_KEY_F3:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
-		buf = count = 0;
-		return 1;
-	case MSIM_KEY_F4:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
-		buf = count = 0;
-		return 1;
-	}
-
-
-	if((buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff)
-		&& (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff)) {
-
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
-		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
-		buf=count=0;
-		return 1;
-	}
-
-	if (count <= 3)
-		return 1;
-	
-	switch (buf) {
-	case MSIM_KEY_F5:
-	case MSIM_KEY_F6:
-	case MSIM_KEY_F7:
-	case MSIM_KEY_F8:
-	case MSIM_KEY_F9:
-	case MSIM_KEY_F10:
-	case MSIM_KEY_F11:
-	case MSIM_KEY_F12:
-		return 1;
-	default:
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) &0xff);
-		keybuffer_push(keybuffer, (buf >> 16) &0xff);
-		keybuffer_push(keybuffer, (buf >> 24) &0xff);
-		buf = count = 0;
-		return 1;
-	}
-	return 1;
-}
-
-
-
-static int kbd_arch_process_fb(keybuffer_t *keybuffer, int scan_code)
-{
-	static unsigned long buf = 0;
-	static int count = 0;
-
-	/* Please preserve this code (it can be used to determine scancodes)
-	
-	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
-	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
-	keybuffer_push(keybuffer, ' ');
-	keybuffer_push(keybuffer, ' ');
-	
-	return 1;
-	*/
-	
-	if (scan_code == '\r')
-		scan_code = '\n';
-	
-	buf |= ((unsigned long) scan_code)<<(8*(count++));
-	
-	
-	if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) {
-		keybuffer_push(keybuffer, buf);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 1)
-		return 1;
-
-	if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)) {
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) &0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	if (count <= 2) 
-		return 1;
-
-
-	if ((buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff)
-		&& (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
-		&& (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) {
-
-		keybuffer_push(keybuffer, buf & 0xff);
-		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
-		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
-		buf = count = 0;
-		return 1;
-	}
-
-	if ( count <= 3 ) 
-		return 1;
-	
-
-	switch (buf) {
-	case GXEMUL_KEY_F1:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F2:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F3:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F4:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F5:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F6:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F7:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F8:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F9:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F10:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F11:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
-		buf=count=0;
-		return 1;
-	case GXEMUL_KEY_F12:
-		keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
-		buf=count=0;
-		return 1;
-	default:
-		keybuffer_push(keybuffer, buf & 0xff );
-		keybuffer_push(keybuffer, (buf >> 8) &0xff );
-		keybuffer_push(keybuffer, (buf >> 16) &0xff );
-		keybuffer_push(keybuffer, (buf >> 24) &0xff );
-		buf=count=0;
-		return 1;
-	}
-	return 1;
-}
-
-int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
-{
-	int scan_code = IPC_GET_ARG2(*call);
-	static int esc_count=0;
-
-	if (scan_code == 0x1b) {
-		esc_count++;
-		if (esc_count == 3)
-			__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
-	} else {
-		esc_count=0;
-	}
-
-	if (fb_fb)
-		return kbd_arch_process_fb(keybuffer, scan_code);
-
-	return kbd_arch_process_no_fb(keybuffer, scan_code);
-}
-/** @}
-*/
Index: pace/kbd/arch/mips32eb
===================================================================
--- uspace/kbd/arch/mips32eb	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-mips32
Index: pace/kbd/arch/ppc32/include/kbd.h
===================================================================
--- uspace/kbd/arch/ppc32/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdppc32 ppc32
- * @brief	HelenOS ppc32 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_ppc32_KBD_H_
-#define KBD_ppc32_KBD_H_
-
-#endif
-
-/** @}
- */
-
Index: pace/kbd/arch/ppc32/src/kbd.c
===================================================================
--- uspace/kbd/arch/ppc32/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,209 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdppc32 ppc32
- * @brief	HelenOS ppc32 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#include <arch/kbd.h>
-#include <ipc/ipc.h>
-#include <sysinfo.h>
-#include <kbd.h>
-#include <keys.h>
-
-irq_cmd_t cuda_cmds[1] = {
-	{ CMD_PPC32_GETCHAR, 0, 0, 2 }
-};
-
-irq_code_t cuda_kbd = {
-	1,
-	cuda_cmds
-};
-
-
-#define SPECIAL		255
-#define FUNCTION_KEYS 0x100
-
-
-static int lchars[0x80] = {
-	'a',
-	's',
-	'd',
-	'f',
-	'h',
-	'g',
-	'z',
-	'x',
-	'c',
-	'v', 
-	SPECIAL,
-	'b',
-	'q',
-	'w',
-	'e',
-	'r',
-	'y',
-	't',
-	'1',
-	'2',
-	'3',
-	'4',
-	'6',
-	'5',
-	'=',
-	'9',
-	'7',
-	'-',
-	'8',
-	'0',
-	']',
-	'o',
-	'u',
-	'[',
-	'i', 
-	'p',
-	'\n',                 /* Enter */
-	'l',
-	'j',
-	'\'',
-	'k',
-	';',
-	'\\',
-	',',
-	'/',
-	'n',
-	'm',
-	'.',
-	'\t',                 /* Tab */
-	' ',
-	'`',
-	'\b',                 /* Backspace */
-	SPECIAL,
-	SPECIAL,              /* Escape */
-	SPECIAL,              /* Ctrl */
-	SPECIAL,              /* Alt */
-	SPECIAL,              /* Shift */
-	SPECIAL,              /* Caps-Lock */
-	SPECIAL,              /* RAlt */
-	SPECIAL,              /* Left */
-	SPECIAL,              /* Right */
-	SPECIAL,              /* Down */
-	SPECIAL,              /* Up */
-	SPECIAL, 
-	SPECIAL,
-	'.',                  /* Keypad . */
-	SPECIAL, 
-	'*',                  /* Keypad * */
-	SPECIAL,
-	'+',                  /* Keypad + */
-	SPECIAL,
-	SPECIAL,              /* NumLock */
-	SPECIAL,
-	SPECIAL,
-	SPECIAL,
-	'/',                  /* Keypad / */
-	'\n',                 /* Keypad Enter */
-	SPECIAL,
-	'-',                  /* Keypad - */
-	SPECIAL,
-	SPECIAL,
-	SPECIAL,
-	'0',                  /* Keypad 0 */
-	'1',                  /* Keypad 1 */
-	'2',                  /* Keypad 2 */
-	'3',                  /* Keypad 3 */
-	'4',                  /* Keypad 4 */
-	'5',                  /* Keypad 5 */
-	'6',                  /* Keypad 6 */
-	'7',                  /* Keypad 7 */
-	SPECIAL,
-	'8',                  /* Keypad 8 */
-	'9',                  /* Keypad 9 */
-	SPECIAL,
-	SPECIAL,
-	SPECIAL,
-	(FUNCTION_KEYS | 5),  /* F5 */
-	(FUNCTION_KEYS | 6),  /* F6 */
-	(FUNCTION_KEYS | 7),  /* F7 */
-	(FUNCTION_KEYS | 3),  /* F3 */
-	(FUNCTION_KEYS | 8),  /* F8 */
-	(FUNCTION_KEYS | 9),  /* F9 */
-	SPECIAL,
-	(FUNCTION_KEYS | 11), /* F11 */
-	SPECIAL,
-	(FUNCTION_KEYS | 13), /* F13 */
-	SPECIAL,
-	SPECIAL,              /* ScrollLock */
-	SPECIAL,
-	(FUNCTION_KEYS | 10), /* F10 */
-	SPECIAL,
-	(FUNCTION_KEYS | 12), /* F12 */
-	SPECIAL,
-	SPECIAL,              /* Pause */
-	SPECIAL,              /* Insert */
-	SPECIAL,              /* Home */
-	SPECIAL,              /* PageUp */
-	SPECIAL,              /* Delete */
-	(FUNCTION_KEYS | 4),  /* F4 */
-	SPECIAL,              /* End */
-	(FUNCTION_KEYS | 2),  /* F2 */
-	SPECIAL,              /* PageDown */
-	(FUNCTION_KEYS | 1)   /* F1 */
-};
-
-
-int kbd_arch_init(void)
-{
-	return ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &cuda_kbd);
-}
-
-
-int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
-{
-	int param = IPC_GET_ARG2(*call);
-
-	if (param != -1) {
-		uint8_t scancode = (uint8_t) param;
-	
-		if ((scancode & 0x80) != 0x80) {
-			int key = lchars[scancode & 0x7f];
-			
-			if (key != SPECIAL)
-				keybuffer_push(keybuffer, key);
-		}
-	}
-	
-	return 1;
-}
-
-/** @}
- */
Index: pace/kbd/arch/ppc64/include/kbd.h
===================================================================
--- uspace/kbd/arch/ppc64/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdppc64 ppc64
- * @brief	HelenOS ppc64 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_ppc64_KBD_H_
-#define KBD_ppc64_KBD_H_
-
-#endif
-
-/** @}
- */
Index: pace/kbd/arch/ppc64/src/kbd.c
===================================================================
--- uspace/kbd/arch/ppc64/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdppc64 ppc64
- * @brief	HelenOS ppc64 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#include <arch/kbd.h>
-#include <ipc/ipc.h>
-#include <sysinfo.h>
-#include <kbd.h>
-#include <keys.h>
-
-
-int kbd_arch_init(void)
-{
-	return 0;
-}
-
-
-int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
-{
-	return 1;
-}
-
-/** @}
- */
Index: pace/kbd/arch/sparc64/include/kbd.h
===================================================================
--- uspace/kbd/arch/sparc64/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdsparc64 sparc64
- * @brief	HelenOS sparc64 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_sparc64_KBD_H_
-#define KBD_sparc64_KBD_H_
-
-#endif
-
-/** @}
- */
Index: pace/kbd/arch/sparc64/include/scanc.h
===================================================================
--- uspace/kbd/arch/sparc64/include/scanc.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup genarch	
- * @{
- */
-/**
- * @file
- * @brief	Scan codes for sun keyboards.
- */
-
-#ifndef KBD_SCANC_SUN_H_
-#define KBD_SCANC_SUN_H_
-
-#define SC_ESC		0x1d
-#define SC_BACKSPACE	0x2b
-#define SC_LSHIFT       0x63
-#define SC_RSHIFT       0x6e
-#define SC_CAPSLOCK     0x77
-#define SC_SPEC_ESCAPE  0xe0	/* ??? */
-#define SC_LEFTARR      0x18
-#define SC_RIGHTARR     0x1c
-#define SC_UPARR        0x14
-#define SC_DOWNARR      0x1b
-#define SC_DELETE       0x42
-#define SC_HOME         0x34
-#define SC_END          0x4a
-
-#endif
-
-/** @}
- */
Index: pace/kbd/arch/sparc64/src/kbd.c
===================================================================
--- uspace/kbd/arch/sparc64/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,117 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdsparc64 sparc64
- * @brief	HelenOS sparc64 arch dependent parts of uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#include <arch/kbd.h>
-#include <ipc/ipc.h>
-#include <sysinfo.h>
-#include <kbd.h>
-#include <keys.h>
-#include <stdio.h>
-#include <types.h>
-#include <genarch/kbd.h>
-
-#define KBD_KEY_RELEASE		0x80
-#define KBD_ALL_KEYS_UP		0x7f
-
-/** Top-half pseudocode for z8530. */
-irq_cmd_t z8530_cmds[] = {
-	{
-		CMD_MEM_READ_1,
-		0,			/**< Address. Will be patched in run-time. */
-		0,			/**< Value. Not used. */
-		1			/**< Arg 1 will contain the result. */
-	}
-};
-	
-irq_code_t z8530_kbd = {
-	1,
-	z8530_cmds
-};
-
-/** Top-half pseudocode for ns16550. */
-irq_cmd_t ns16550_cmds[] = {
-	{
-		CMD_MEM_READ_1,
-		0,			/**< Address. Will be patched in run-time. */
-		0,			/**< Value. Not used. */
-		1			/**< Arg 1 will contain the result. */
-	}
-};
-	
-irq_code_t ns16550_kbd = {
-	1,
-	ns16550_cmds
-};
-
-#define KBD_Z8530	1
-#define KBD_NS16550	2
-
-int kbd_arch_init(void)
-{
-	int type = sysinfo_value("kbd.type");
-	switch (type) {
-	case KBD_Z8530:
-		z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") + 6;
-		ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &z8530_kbd);
-		break;
-	case KBD_NS16550:
-		ns16550_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual");
-		ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &ns16550_kbd);
-		break;
-	default:
-		break;
-	}
-	return 0;
-}
-
-/** Process keyboard events */
-int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
-{
-	int scan_code = IPC_GET_ARG1(*call);
-
-	if (scan_code == KBD_ALL_KEYS_UP)
-		return 1;
-		
-	if (scan_code & KBD_KEY_RELEASE)
-		key_released(keybuffer, scan_code ^ KBD_KEY_RELEASE);
-	else
-		key_pressed(keybuffer, scan_code);
-
-	return 1;
-}
-
-/** @}
- */
Index: pace/kbd/arch/sparc64/src/scanc.c
===================================================================
--- uspace/kbd/arch/sparc64/src/scanc.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,304 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup genarch	
- * @{
- */
-/**
- * @file
- * @brief	Scan codes for Sun keyboards.
- */
-
-#include <genarch/scanc.h>
-
-/** Primary meaning of scancodes. */
-int sc_primary_map[] = {
-	[0x00] = SPECIAL,
-	[0x01] = SPECIAL,
-	[0x02] = SPECIAL,
-	[0x03] = SPECIAL,
-	[0x04] = SPECIAL,
-	[0x05] = FUNCTION_KEYS + 1,	/* F1 */
-	[0x06] = FUNCTION_KEYS + 2,	/* F2 */
-	[0x07] = FUNCTION_KEYS + 10,	/* F10 */
-	[0x08] = FUNCTION_KEYS + 3,	/* F3 */
-	[0x09] = FUNCTION_KEYS + 11,	/* F11 */
-	[0x0a] = FUNCTION_KEYS + 4,	/* F4 */
-	[0x0b] = FUNCTION_KEYS + 12,	/* F12 */
-	[0x0c] = FUNCTION_KEYS + 5,	/* F5 */
-	[0x0d] = SPECIAL,	/* RAlt */
-	[0x0e] = FUNCTION_KEYS + 6,	/* F6 */
-	[0x0f] = SPECIAL,
-	[0x10] = FUNCTION_KEYS + 7,	/* F7 */
-	[0x11] = FUNCTION_KEYS + 8,	/* F8 */
-	[0x12] = FUNCTION_KEYS + 9,	/* F9 */
-	[0x13] = SPECIAL,	/* LAlt */
-	[0x14] = SPECIAL,	/* Up Arrow */
-	[0x15] = SPECIAL,	/* Pause */
-	[0x16] = SPECIAL,
-	[0x17] = SPECIAL,	/* Scroll Lock */
-	[0x18] = SPECIAL,	/* Left Arrow */
-	[0x19] = SPECIAL,
-	[0x1a] = SPECIAL,
-	[0x1b] = SPECIAL,	/* Down Arrow */
-	[0x1c] = SPECIAL,	/* Right Arrow */
-	[0x1d] = SPECIAL,	/* Esc */
-	[0x1e] = '1',
-	[0x1f] = '2',
-	[0x20] = '3',
-	[0x21] = '4',
-	[0x22] = '5',
-	[0x23] = '6',
-	[0x24] = '7',
-	[0x25] = '8',
-	[0x26] = '9',
-	[0x27] = '0',
-	[0x28] = '-',
-	[0x29] = '=',
-	[0x2a] = '`',
-	[0x2b] = '\b',		/* Backspace */
-	[0x2c] = SPECIAL,	/* Insert */
-	[0x2d] = SPECIAL,
-	[0x2e] = '/',		/* numeric keypad */
-	[0x2f] = '*',		/* numeric keypad */
-	[0x30] = SPECIAL,
-	[0x31] = SPECIAL,
-	[0x32] = '.',		/* numeric keypad */
-	[0x33] = SPECIAL,
-	[0x34] = SPECIAL,	/* Home */
-	[0x35] = '\t',		/* Tab */
-	[0x36] = 'q',
-	[0x37] = 'w',
-	[0x38] = 'e',
-	[0x39] = 'r',
-	[0x3a] = 't',
-	[0x3b] = 'y',
-	[0x3c] = 'u',
-	[0x3d] = 'i',
-	[0x3e] = 'o',
-	[0x3f] = 'p',
-	[0x40] = '[',
-	[0x41] = ']',
-	[0x42] = SPECIAL,	/* Del */
-	[0x43] = SPECIAL,
-	[0x44] = '7',		/* numeric keypad */
-	[0x45] = '8',		/* numeric keypad */
-	[0x46] = '9',		/* numeric keypad */
-	[0x47] = '-',		/* numeric keypad */
-	[0x48] = SPECIAL,
-	[0x49] = SPECIAL,
-	[0x4a] = SPECIAL,	/* End */
-	[0x4b] = SPECIAL,
-	[0x4c] = SPECIAL,	/* Control */
-	[0x4d] = 'a',
-	[0x4e] = 's',
-	[0x4f] = 'd',
-	[0x50] = 'f',
-	[0x51] = 'g',
-	[0x52] = 'h',
-	[0x53] = 'j',
-	[0x54] = 'k',
-	[0x55] = 'l',
-	[0x56] = ';',
-	[0x57] = '\'',
-	[0x58] = '\\',
-	[0x59] = '\n',		/* Enter */
-	[0x5a] = '\n',		/* Enter on numeric keypad */
-	[0x5b] = '4',		/* numeric keypad */
-	[0x5c] = '5',		/* numeric keypad */
-	[0x5d] = '6',		/* numeric keypad */
-	[0x5e] = '0',		/* numeric keypad */
-	[0x5f] = SPECIAL,
-	[0x60] = SPECIAL,	/* Page Up */
-	[0x61] = SPECIAL,
-	[0x62] = SPECIAL,	/* Num Lock */
-	[0x63] = SPECIAL,	/* LShift */
-	[0x64] = 'z',
-	[0x65] = 'x',
-	[0x66] = 'c',
-	[0x67] = 'v',
-	[0x68] = 'b',
-	[0x69] = 'n',
-	[0x6a] = 'm',
-	[0x6b] = ',',
-	[0x6c] = '.',
-	[0x6d] = '/',
-	[0x6e] = SPECIAL,	/* RShift */
-	[0x6f] = SPECIAL,
-	[0x70] = '1',		/* numeric keypad */
-	[0x71] = '2',		/* numeric keypad */
-	[0x72] = '3',		/* numeric keypad */
-	[0x73] = SPECIAL,
-	[0x74] = SPECIAL,
-	[0x75] = SPECIAL,
-	[0x76] = SPECIAL,
-	[0x77] = SPECIAL,	/* Caps Lock */
-	[0x78] = SPECIAL,
-	[0x79] = ' ',
-	[0x7a] = SPECIAL,
-	[0x7b] = SPECIAL,	/* Page Down */
-	[0x7c] = SPECIAL,
-	[0x7d] = '+',		/* numeric key pad */
-	[0x7e] = SPECIAL,
-	[0x7f] = SPECIAL
-};
-
-/** Secondary meaning of scancodes. */
-int sc_secondary_map[] = {
-	[0x00] = SPECIAL,
-	[0x01] = SPECIAL,
-	[0x02] = SPECIAL,
-	[0x03] = SPECIAL,
-	[0x04] = SPECIAL,
-	[0x05] = SPECIAL,	/* F1 */
-	[0x06] = SPECIAL,	/* F2 */
-	[0x07] = SPECIAL,	/* F10 */
-	[0x08] = SPECIAL,	/* F3 */
-	[0x09] = SPECIAL,	/* F11 */
-	[0x0a] = SPECIAL,	/* F4 */
-	[0x0b] = SPECIAL,	/* F12 */
-	[0x0c] = SPECIAL,	/* F5 */
-	[0x0d] = SPECIAL,	/* RAlt */
-	[0x0e] = SPECIAL,	/* F6 */
-	[0x0f] = SPECIAL,
-	[0x10] = SPECIAL,	/* F7 */
-	[0x11] = SPECIAL,	/* F8 */
-	[0x12] = SPECIAL,	/* F9 */
-	[0x13] = SPECIAL,	/* LAlt */
-	[0x14] = SPECIAL,	/* Up Arrow */
-	[0x15] = SPECIAL,	/* Pause */
-	[0x16] = SPECIAL,
-	[0x17] = SPECIAL,	/* Scroll Lock */
-	[0x18] = SPECIAL,	/* Left Arrow */
-	[0x19] = SPECIAL,
-	[0x1a] = SPECIAL,
-	[0x1b] = SPECIAL,	/* Down Arrow */
-	[0x1c] = SPECIAL,	/* Right Arrow */
-	[0x1d] = SPECIAL,	/* Esc */
-	[0x1e] = '!',
-	[0x1f] = '@',
-	[0x20] = '#',
-	[0x21] = '$',
-	[0x22] = '%',
-	[0x23] = '^',
-	[0x24] = '&',
-	[0x25] = '*',
-	[0x26] = '(',
-	[0x27] = ')',
-	[0x28] = '_',
-	[0x29] = '+',
-	[0x2a] = '~',
-	[0x2b] = SPECIAL,	/* Backspace */
-	[0x2c] = SPECIAL,	/* Insert */
-	[0x2d] = SPECIAL,
-	[0x2e] = '/',		/* numeric keypad */
-	[0x2f] = '*',		/* numeric keypad */
-	[0x30] = SPECIAL,
-	[0x31] = SPECIAL,
-	[0x32] = '.',		/* numeric keypad */
-	[0x33] = SPECIAL,
-	[0x34] = SPECIAL,	/* Home */
-	[0x35] = SPECIAL,	/* Tab */
-	[0x36] = 'Q',
-	[0x37] = 'W',
-	[0x38] = 'E',
-	[0x39] = 'R',
-	[0x3a] = 'T',
-	[0x3b] = 'Y',
-	[0x3c] = 'U',
-	[0x3d] = 'I',
-	[0x3e] = 'O',
-	[0x3f] = 'P',
-	[0x40] = '{',
-	[0x41] = '}',
-	[0x42] = SPECIAL,	/* Del */
-	[0x43] = SPECIAL,
-	[0x44] = '7',		/* numeric keypad */
-	[0x45] = '8',		/* numeric keypad */
-	[0x46] = '9',		/* numeric keypad */
-	[0x47] = '-',		/* numeric keypad */
-	[0x48] = SPECIAL,
-	[0x49] = SPECIAL,
-	[0x4a] = SPECIAL,	/* End */
-	[0x4b] = SPECIAL,
-	[0x4c] = SPECIAL,	/* Control */
-	[0x4d] = 'A',
-	[0x4e] = 'S',
-	[0x4f] = 'D',
-	[0x50] = 'F',
-	[0x51] = 'G',
-	[0x52] = 'H',
-	[0x53] = 'J',
-	[0x54] = 'K',
-	[0x55] = 'L',
-	[0x56] = ':',
-	[0x57] = '"',
-	[0x58] = '|',
-	[0x59] = SPECIAL,	/* Enter */
-	[0x5a] = SPECIAL,	/* Enter on numeric keypad */
-	[0x5b] = '4',		/* numeric keypad */
-	[0x5c] = '5',		/* numeric keypad */
-	[0x5d] = '6',		/* numeric keypad */
-	[0x5e] = '0',		/* numeric keypad */
-	[0x5f] = SPECIAL,
-	[0x60] = SPECIAL,	/* Page Up */
-	[0x61] = SPECIAL,
-	[0x62] = SPECIAL,	/* Num Lock */
-	[0x63] = SPECIAL,	/* LShift */
-	[0x64] = 'Z',
-	[0x65] = 'X',
-	[0x66] = 'C',
-	[0x67] = 'V',
-	[0x68] = 'B',
-	[0x69] = 'N',
-	[0x6a] = 'M',
-	[0x6b] = '<',
-	[0x6c] = '>',
-	[0x6d] = '?',
-	[0x6e] = SPECIAL,	/* RShift */
-	[0x6f] = SPECIAL,
-	[0x70] = '1',		/* numeric keypad */
-	[0x71] = '2',		/* numeric keypad */
-	[0x72] = '3',		/* numeric keypad */
-	[0x73] = SPECIAL,
-	[0x74] = SPECIAL,
-	[0x75] = SPECIAL,
-	[0x76] = SPECIAL,
-	[0x77] = SPECIAL,	/* Caps Lock */
-	[0x78] = SPECIAL,
-	[0x79] = ' ',
-	[0x7a] = SPECIAL,
-	[0x7b] = SPECIAL,	/* Page Down */
-	[0x7c] = SPECIAL,
-	[0x7d] = '+',		/* numeric key pad */
-	[0x7e] = SPECIAL,
-	[0x7f] = SPECIAL
-};
-
-/** @}
- */
Index: pace/kbd/genarch/include/kbd.h
===================================================================
--- uspace/kbd/genarch/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_genarch_KBD_H_
-#define KBD_genarch_KBD_H_
-
-#include <key_buffer.h>
-
-extern void key_released(keybuffer_t *keybuffer, unsigned char key);
-extern void key_pressed(keybuffer_t *keybuffer, unsigned char key);
-
-#endif
-
-/**
- * @}
- */ 
Index: pace/kbd/genarch/include/scanc.h
===================================================================
--- uspace/kbd/genarch/include/scanc.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_SCANC_H_
-#define KBD_SCANC_H_
-
-#define FUNCTION_KEYS 0x100
-
-#define SPECIAL		255
-
-extern int sc_primary_map[];
-extern int sc_secondary_map[];
-
-#endif
-
-/**
- * @}
- */ 
Index: pace/kbd/genarch/src/kbd.c
===================================================================
--- uspace/kbd/genarch/src/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,113 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbd
- * @brief	Handling of keyboard IRQ notifications for several architectures.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#include <key_buffer.h>
-#include <arch/scanc.h>
-#include <genarch/scanc.h>
-#include <genarch/kbd.h>
-#include <libc.h>
-
-#define PRESSED_SHIFT		(1<<0)
-#define PRESSED_CAPSLOCK	(1<<1)
-#define LOCKED_CAPSLOCK		(1<<0)
-
-static volatile int keyflags;		/**< Tracking of multiple keypresses. */
-static volatile int lockflags;		/**< Tracking of multiple keys lockings. */
-
-void key_released(keybuffer_t *keybuffer, unsigned char key)
-{
-	switch (key) {
-	case SC_LSHIFT:
-	case SC_RSHIFT:
-		keyflags &= ~PRESSED_SHIFT;
-		break;
-	case SC_CAPSLOCK:
-		keyflags &= ~PRESSED_CAPSLOCK;
-		if (lockflags & LOCKED_CAPSLOCK)
-			lockflags &= ~LOCKED_CAPSLOCK;
-		else
-			lockflags |= LOCKED_CAPSLOCK;
-		break;
-	default:
-		break;
-	}
-}
-
-void key_pressed(keybuffer_t *keybuffer, unsigned char key)
-{
-	int *map = sc_primary_map;
-	int ascii = sc_primary_map[key];
-	int shift, capslock;
-	int letter = 0;
-
-	static int esc_count = 0;
-
-	if (key == SC_ESC) {
-		esc_count++;
-		if (esc_count == 3)
-			__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
-	} else {
-		esc_count = 0;
-	}
-	
-	switch (key) {
-	case SC_LSHIFT:
-	case SC_RSHIFT:
-	    	keyflags |= PRESSED_SHIFT;
-		break;
-	case SC_CAPSLOCK:
-		keyflags |= PRESSED_CAPSLOCK;
-		break;
-	case SC_SPEC_ESCAPE:
-		break;
-	default:
-	    	letter = ((ascii >= 'a') && (ascii <= 'z'));
-		capslock = (keyflags & PRESSED_CAPSLOCK) || (lockflags & LOCKED_CAPSLOCK);
-		shift = keyflags & PRESSED_SHIFT;
-		if (letter && capslock)
-			shift = !shift;
-		if (shift)
-			map = sc_secondary_map;
-		if (map[key] != SPECIAL)
-			keybuffer_push(keybuffer, map[key]);	
-		break;
-	}
-}
-
-/**
- * @}
- */ 
Index: pace/kbd/generic/kbd.c
===================================================================
--- uspace/kbd/generic/kbd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,145 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * @addtogroup kbdgen generic
- * @brief	HelenOS generic uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#include <ipc/ipc.h>
-#include <ipc/services.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ipc/ns.h>
-#include <errno.h>
-#include <arch/kbd.h>
-#include <kbd.h>
-#include <libadt/fifo.h>
-#include <key_buffer.h>
-#include <async.h>
-#include <keys.h>
-
-#define NAME "KBD"
-
-int cons_connected = 0;
-int phone2cons = -1;
-keybuffer_t keybuffer;	
-
-static void irq_handler(ipc_callid_t iid, ipc_call_t *call)
-{
-	int chr;
-
-#ifdef MOUSE_ENABLED
-	if (mouse_arch_process(phone2cons, call))
-		return;
-#endif
-	
-	kbd_arch_process(&keybuffer, call);
-
-	if (cons_connected && phone2cons != -1) {
-		/* recode to ASCII - one interrupt can produce more than one code so result is stored in fifo */
-		while (!keybuffer_empty(&keybuffer)) {
-			if (!keybuffer_pop(&keybuffer, (int *)&chr))
-				break;
-
-			async_msg(phone2cons, KBD_PUSHCHAR, chr);
-		}
-	}
-}
-
-static void console_connection(ipc_callid_t iid, ipc_call_t *icall)
-{
-	ipc_callid_t callid;
-	ipc_call_t call;
-	int retval;
-
-	if (cons_connected) {
-		ipc_answer_fast(iid, ELIMIT, 0, 0);
-		return;
-	}
-	cons_connected = 1;
-	ipc_answer_fast(iid, 0, 0, 0);
-
-	while (1) {
-		callid = async_get_call(&call);
-		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
-			cons_connected = 0;
-			ipc_hangup(phone2cons);
-			phone2cons = -1;
-			ipc_answer_fast(callid, 0,0,0);
-			return;
-		case IPC_M_CONNECT_TO_ME:
-			if (phone2cons != -1) {
-				retval = ELIMIT;
-				break;
-			}
-			phone2cons = IPC_GET_ARG3(call);
-			retval = 0;
-			break;
-		default:
-			retval = EINVAL;
-		}
-		ipc_answer_fast(callid, retval, 0, 0);
-	}	
-}
-
-
-int main(int argc, char **argv)
-{
-	ipcarg_t phonead;
-	
-	/* Initialize arch dependent parts */
-	if (kbd_arch_init())
-		return -1;
-	
-	/* Initialize key buffer */
-	keybuffer_init(&keybuffer);
-	
-	async_set_client_connection(console_connection);
-	async_set_interrupt_received(irq_handler);
-	/* Register service at nameserver */
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_KEYBOARD, 0, &phonead) != 0)
-		return -1;
-
-	async_manager();
-
-	/* Never reached */
-	return 0;
-}
-
-/**
- * @}
- */ 
-
Index: pace/kbd/generic/key_buffer.c
===================================================================
--- uspace/kbd/generic/key_buffer.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,113 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdgen
- * @brief	HelenOS generic uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-#include <key_buffer.h>
-#include <futex.h>
-
-atomic_t keybuffer_futex = FUTEX_INITIALIZER;
-
-/** Clear key buffer.
- */
-void keybuffer_free(keybuffer_t *keybuffer) 
-{
-	futex_down(&keybuffer_futex);
-	keybuffer->head = 0;
-	keybuffer->tail = 0;
-	keybuffer->items = 0;
-	futex_up(&keybuffer_futex);
-}
-
-/** Key buffer initialization.
- *
- */
-void keybuffer_init(keybuffer_t *keybuffer)
-{
-	keybuffer_free(keybuffer);
-}
-
-/** Get free space in buffer.
- * This function is useful for processing some scancodes that are translated 
- * to more than one character.
- * @return empty buffer space
- */
-int keybuffer_available(keybuffer_t *keybuffer)
-{
-	return KEYBUFFER_SIZE - keybuffer->items;
-}
-
-/**
- * @return nonzero, if buffer is not empty.
- */
-int keybuffer_empty(keybuffer_t *keybuffer)
-{
-	return (keybuffer->items == 0);
-}
-
-/** Push key to key buffer.
- * If buffer is full, character is ignored.
- * @param key code of stored key
- */
-void keybuffer_push(keybuffer_t *keybuffer, int key)
-{
-	futex_down(&keybuffer_futex);
-	if (keybuffer->items < KEYBUFFER_SIZE) {
-		keybuffer->fifo[keybuffer->tail] = key;
-		keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE;
-		keybuffer->items++;
-	}
-	futex_up(&keybuffer_futex);
-}
-
-/** Pop character from buffer.
- * @param c pointer to space where to store character from buffer.
- * @return zero on empty buffer, nonzero else
- */
-int keybuffer_pop(keybuffer_t *keybuffer, int *c)
-{
-	futex_down(&keybuffer_futex);
-	if (keybuffer->items > 0) {
-		keybuffer->items--;
-		*c = (keybuffer->fifo[keybuffer->head]) ;
-		keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE;
-		futex_up(&keybuffer_futex);
-		return 1;
-	}
-	futex_up(&keybuffer_futex);
-	return 0;
-}
-
-/**
- * @}
- */ 
Index: pace/kbd/include/kbd.h
===================================================================
--- uspace/kbd/include/kbd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,51 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdgen generic
- * @brief	HelenOS generic uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef KBD_KBD_H_
-#define KBD_KBD_H_
-
-#include <key_buffer.h>
-
-extern int kbd_arch_init(void);
-extern int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call);
-extern int mouse_arch_process(int phoneid, ipc_call_t *call);
-
-#endif
-
-/**
- * @}
- */ 
-
Index: pace/kbd/include/key_buffer.h
===================================================================
--- uspace/kbd/include/key_buffer.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup kbdgen
- * @brief	HelenOS generic uspace keyboard handler.
- * @ingroup  kbd
- * @{
- */ 
-/** @file
- */
-
-#ifndef __KEY_BUFFER_H__
-#define __KEY_BUFFER_H__
-
-#include <types.h>
-
-/** Size of buffer for pressed keys */
-#define KEYBUFFER_SIZE 128 
-
-typedef struct {
-	int fifo[KEYBUFFER_SIZE];
-	unsigned long head;
-	unsigned long tail;
-	unsigned long items;
-} keybuffer_t;
-
-void keybuffer_free(keybuffer_t *keybuffer);
-void keybuffer_init(keybuffer_t *keybuffer);
-int keybuffer_available(keybuffer_t *keybuffer);
-int keybuffer_empty(keybuffer_t *keybuffer);
-void keybuffer_push(keybuffer_t *keybuffer, int key);
-int keybuffer_pop(keybuffer_t *keybuffer, int *c);
-
-#endif
-
-/**
- * @}
- */ 
-
Index: pace/kbd/include/keys.h
===================================================================
--- uspace/kbd/include/keys.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * @addtogroup kbdgen
- * @{
- */
-/**
- * @file
- */
-
-#ifndef _KBD_KEYS_H_
-#define _KBD_KEYS_H_
-
-#define KBD_PUSHCHAR    1024
-#define KBD_MS_LEFT     1025
-#define KBD_MS_RIGHT    1026
-#define KBD_MS_MIDDLE   1027
-#define KBD_MS_MOVE     1028
-
-#define KBD_KEY_F1	0x3b
-#define KBD_KEY_F2	0x3c
-#define KBD_KEY_F3	0x3d
-#define KBD_KEY_F4	0x3e
-#define KBD_KEY_F5	0x3f
-#define KBD_KEY_F6	0x40
-#define KBD_KEY_F7	0x41
-#define KBD_KEY_F8	0x42
-#define KBD_KEY_F9	0x43
-#define KBD_KEY_F10	0x44
-#define KBD_KEY_F11	0x45
-#define KBD_KEY_F12	0x46
-
-#endif
-
-/** @}
-*/
Index: pace/klog/Makefile
===================================================================
--- uspace/klog/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,73 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = klog
-SOURCES = \
-	klog.c
-
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/klog/klog.c
===================================================================
--- uspace/klog/klog.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,90 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup klog KLog
- * @brief	HelenOS KLog
- * @{
- */ 
-/**
- * @file
- */
-
-#include <stdio.h>
-#include <ipc/ipc.h>
-#include <async.h>
-#include <ipc/services.h>
-#include <as.h>
-#include <sysinfo.h>
-
-/* Pointer to klog area */
-static char *klog;
-
-static void interrupt_received(ipc_callid_t callid, ipc_call_t *call)
-{
-	int i;
-	
-	async_serialize_start();
-	for (i=0; klog[i + IPC_GET_ARG1(*call)] && i < IPC_GET_ARG2(*call); i++)
-		putchar(klog[i + IPC_GET_ARG1(*call)]);
-	putchar('\n');
-	async_serialize_end();
-}
-
-int main(int argc, char *argv[])
-{
-	int res;
-	void *mapping;
-
-	printf("Kernel console output.\n");
-	
-	mapping = as_get_mappable_page(PAGE_SIZE);
-	res = ipc_call_sync_3(PHONE_NS, IPC_M_AS_AREA_RECV, 
-			      (sysarg_t) mapping, PAGE_SIZE, SERVICE_MEM_KLOG,
-			      NULL, NULL, NULL);
-	if (res) {
-		printf("Failed to initialize klog memarea\n");
-		_exit(1);
-	}
-	klog = mapping;
-
-	int inr = sysinfo_value("klog.inr");
-	int devno = sysinfo_value("klog.devno");
-	if (ipc_register_irq(inr, devno, 0, NULL)) {
-		printf("Error registering for klog service.\n");
-		return 0;
-	}
-
-	async_set_interrupt_received(interrupt_received);
-
-	async_manager();
-
-	return 0;
-}
-
-/** @}
- */
Index: uspace/lib/libc/Makefile
===================================================================
--- uspace/lib/libc/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,115 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Common compiler flags
+#
+
+LIBC_PREFIX = .
+SOFTINT_PREFIX = ../softint
+CONSOLE_PREFIX = ../../srv/console
+
+## Setup toolchain
+#
+
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+CFLAGS += -I$(CONSOLE_PREFIX)
+
+## Sources
+#
+
+
+GENERIC_SOURCES = \
+	generic/libc.c \
+	generic/ddi.c \
+	generic/as.c \
+	generic/cap.c \
+	generic/string.c \
+	generic/thread.c \
+	generic/task.c \
+	generic/futex.c \
+	generic/io/io.c \
+	generic/io/printf.c \
+	generic/io/stream.c \
+	generic/io/sprintf.c \
+	generic/io/snprintf.c \
+	generic/io/vprintf.c \
+	generic/io/vsprintf.c \
+	generic/io/vsnprintf.c \
+	generic/io/printf_core.c \
+	malloc/malloc.c \
+	generic/psthread.c \
+	generic/sysinfo.c \
+	generic/ipc.c \
+	generic/async.c \
+	generic/libadt/list.o \
+	generic/libadt/hash_table.o \
+	generic/time.c \
+	generic/err.c \
+	generic/stdlib.c \
+	generic/mman.c
+
+ARCH_SOURCES += \
+	arch/$(ARCH)/src/entry.s \
+	arch/$(ARCH)/src/thread_entry.s
+
+GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
+ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
+
+.PHONY: all clean depend kerninc
+
+all: kerninc libc.a arch/$(ARCH)/_link.ld
+
+kerninc:
+	ln -sfn ../../../../kernel/generic/include include/kernel
+	ln -sfn kernel/arch include/arch
+	ln -sfn ../arch/$(ARCH)/include include/libarch
+
+-include Makefile.depend
+
+clean:
+	-rm -f include/kernel include/arch include/libarch libc.a arch/$(ARCH)/_link.ld Makefile.depend
+	find generic/ arch/$(ARCH)/ -name '*.o' -follow -exec rm \{\} \;
+
+depend: kerninc
+	-makedepend $(DEFS) $(CFLAGS) -f - $(ARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
+
+libc.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
+	$(AR) rc libc.a $(LIBS) $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
+
+arch/$(ARCH)/_link.ld: arch/$(ARCH)/_link.ld.in
+	$(CC) $(DEFS) $(CFLAGS) -E -x c $< | grep -v "^\#" > $@
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/lib/libc/Makefile.toolchain
===================================================================
--- uspace/lib/libc/Makefile.toolchain	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/Makefile.toolchain	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,68 @@
+#
+# Copyright (C) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+DEFS = -DARCH=$(ARCH)
+CFLAGS = -fno-builtin -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -O3 -nostdlib -nostdinc -I$(LIBC_PREFIX)/include
+LFLAGS = -M -N $(SOFTINT_PREFIX)/libsoftint.a
+AFLAGS =
+#-Werror
+
+## Setup platform configuration
+#
+
+include $(LIBC_PREFIX)/arch/$(ARCH)/Makefile.inc
+
+## Toolchain configuration
+#
+
+ifeq ($(COMPILER),gcc_native)
+	CC = gcc
+	AS = as
+	LD = ld
+	AR = ar
+	OBJCOPY = objcopy
+	OBJDUMP = objdump
+endif
+
+ifeq ($(COMPILER),icc_native)
+	CC = icc
+	AS = as
+	LD = ld
+	AR = ar
+	OBJCOPY = objcopy
+	OBJDUMP = objdump
+endif
+
+ifeq ($(COMPILER),gcc_cross)
+	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
+	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
+	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
+	AR = $(TOOLCHAIN_DIR)/$(TARGET)-ar
+	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
+	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
+endif
Index: uspace/lib/libc/arch/amd64/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/amd64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = amd64-linux-gnu
+TOOLCHAIN_DIR = /usr/local/amd64/bin
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
+
+LFLAGS += -N
+
+BFD_NAME = elf64-x86-64
+BFD_ARCH = i386:x86-64
Index: uspace/lib/libc/arch/amd64/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/amd64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x1000;
+	
+	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.init);
+	} :text
+	.text : {
+		*(.text);
+		*(.rodata*);
+	} :text
+	
+	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.data);
+	} :data
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+	
+	.bss : {
+		*(COMMON);
+		*(.bss);
+	} :data
+
+	. = ALIGN(0x1000);
+	_heap = .;
+	
+	/DISCARD/ : {
+		*(*);
+	}
+
+}
Index: uspace/lib/libc/arch/amd64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64 amd64
+ * @ingroup lc
+ * @brief	amd64 architecture dependent parts of libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_ATOMIC_H_
+#define LIBC_amd64_ATOMIC_H_
+
+static inline void atomic_inc(atomic_t *val) {
+	asm volatile ("lock incq %0\n" : "=m" (val->count));
+}
+
+static inline void atomic_dec(atomic_t *val) {
+	asm volatile ("lock decq %0\n" : "=m" (val->count));
+}
+
+static inline long atomic_postinc(atomic_t *val) 
+{
+	long r;
+
+	asm volatile (
+		"movq $1, %0\n"
+		"lock xaddq %0, %1\n"
+		: "=r" (r), "=m" (val->count)
+	);
+
+	return r;
+}
+
+static inline long atomic_postdec(atomic_t *val) 
+{
+	long r;
+	
+	asm volatile (
+		"movq $-1, %0\n"
+		"lock xaddq %0, %1\n"
+		: "=r" (r), "=m" (val->count)
+	);
+	
+	return r;
+}
+
+#define atomic_preinc(val) (atomic_postinc(val)+1)
+#define atomic_predec(val) (atomic_postdec(val)-1)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/config.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_CONFIG_H_
+#define LIBC_amd64_CONFIG_H_
+
+#define PAGE_WIDTH	12
+#define PAGE_SIZE	(1<<PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/* dummy */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/context_offset.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,12 @@
+/* This file is automatically generated by gencontext.c. */
+#define OFFSET_SP  0x0
+#define OFFSET_PC  0x8
+#define OFFSET_RBX 0x10
+#define OFFSET_RBP 0x18
+#define OFFSET_R12 0x20
+#define OFFSET_R13 0x28
+#define OFFSET_R14 0x30
+#define OFFSET_R15 0x38
+#define OFFSET_TLS 0x40
+ 
+ 
Index: uspace/lib/libc/arch/amd64/include/ddi.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/ddi.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/ddi.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../ia32/include/ddi.h
Index: uspace/lib/libc/arch/amd64/include/endian.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_ENDIAN_H_
+#define LIBC_amd64_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+#endif
+
+/** @}
+ */
+ 
+ 
Index: uspace/lib/libc/arch/amd64/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_FADDR_H_
+#define LIBC_amd64_FADDR_H_
+
+#include <libarch/types.h>
+
+#define FADDR(fptr)		((uintptr_t) (fptr))
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/limits.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_LIMITS_H_
+#define LIBC_amd64_LIMITS_H_
+
+# define LONG_MIN MIN_INT64
+# define LONG_MAX MAX_INT64
+# define ULONG_MIN MIN_UINT64
+# define ULONG_MAX MAX_UINT64
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_PSTHREAD_H_
+#define LIBC_amd64_PSTHREAD_H_
+
+#include <types.h>
+
+/* According to ABI the stack MUST be aligned on 
+ * 16-byte boundary. If it is not, the va_arg calling will
+ * panic sooner or later
+ */
+#define SP_DELTA     16
+
+/* We include only registers that must be preserved
+ * during function call
+ */
+typedef struct {
+    uint64_t sp;
+    uint64_t pc;
+    
+    uint64_t rbx;
+    uint64_t rbp;
+
+    uint64_t r12;
+    uint64_t r13;
+    uint64_t r14;
+    uint64_t r15;
+
+    uint64_t tls;
+} context_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STACKARG_H_
+#define LIBC_STACKARG_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef LIBC_amd64_SYSCALL_H_
+#define LIBC_amd64_SYSCALL_H_
+
+#include <syscall.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/thread.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_THREAD_H_
+#define LIBC_amd64_THREAD_H_
+
+#include <libc.h>
+
+typedef struct {
+	void *self;
+	void *pst_data;
+} tcb_t;
+
+static inline void __tcb_set(tcb_t *tcb)
+{
+	__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb);
+}
+
+static inline tcb_t * __tcb_get(void)
+{
+	void * retval;
+
+	asm ("movq %%fs:0, %0" : "=r"(retval));
+	return retval;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/include/types.h
===================================================================
--- uspace/lib/libc/arch/amd64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_amd64_TYPES_H_
+#define LIBC_amd64_TYPES_H_
+
+typedef unsigned long long sysarg_t;
+typedef unsigned long size_t;
+typedef signed long ssize_t;
+typedef ssize_t off_t;
+
+typedef signed char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+typedef long long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long int uint64_t;
+
+typedef uint64_t uintptr_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/src/entry.s
===================================================================
--- uspace/lib/libc/arch/amd64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2006 Ondrej Palkovsky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.section .init, "ax"
+
+.org 0
+
+.globl __entry
+.globl __entry_driver
+
+## User-space task entry point
+#
+#
+__entry:
+	call __main
+	call __io_init
+	call main
+	call __exit
+
+__entry_driver:
+	call __main
+	call main
+	call __exit
Index: uspace/lib/libc/arch/amd64/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/amd64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,87 @@
+#
+# Copyright (c) 2001-2004 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global context_save
+.global context_restore
+
+#include <libarch/context_offset.h>
+
+## Save current CPU context
+#
+# Save CPU context to context_t variable
+# pointed by the 1st argument. Returns 1 in EAX.
+#
+context_save:
+	movq (%rsp), %rdx     # the caller's return %eip
+	# In %edi is passed 1st argument
+	movq %rdx, OFFSET_PC(%rdi)
+	movq %rsp, OFFSET_SP(%rdi)
+	
+	movq %rbx, OFFSET_RBX(%rdi)
+	movq %rbp, OFFSET_RBP(%rdi)
+	movq %r12, OFFSET_R12(%rdi)
+	movq %r13, OFFSET_R13(%rdi)
+	movq %r14, OFFSET_R14(%rdi)
+	movq %r15, OFFSET_R15(%rdi)
+
+	# Save TLS
+	movq %fs:0, %rax
+	movq %rax, OFFSET_TLS(%rdi)
+		
+	xorq %rax,%rax		# context_save returns 1
+	incq %rax
+	ret
+
+
+## Restore current CPU context
+#
+# Restore CPU context from context_t variable
+# pointed by the 1st argument. Returns 0 in EAX.
+#
+context_restore:
+	movq OFFSET_R15(%rdi), %r15
+	movq OFFSET_R14(%rdi), %r14
+	movq OFFSET_R13(%rdi), %r13
+	movq OFFSET_R12(%rdi), %r12
+	movq OFFSET_RBP(%rdi), %rbp
+	movq OFFSET_RBX(%rdi), %rbx	
+	
+	movq OFFSET_SP(%rdi), %rsp   # ctx->sp -> %rsp
+	
+	movq OFFSET_PC(%rdi), %rdx
+	movq %rdx,(%rsp)
+
+	# Set thread local storage
+	movq OFFSET_TLS(%rdi), %rdi   # Set arg1 to TLS addr
+	movq $1, %r8
+	syscall
+
+	xorq %rax,%rax		# context_restore returns 0
+	ret
Index: uspace/lib/libc/arch/amd64/src/syscall.S
===================================================================
--- uspace/lib/libc/arch/amd64/src/syscall.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/src/syscall.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2006 Ondrej Palkovsky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+	
+.globl __syscall
+
+	
+__syscall:
+	# rcx gets rewritten on syscall
+	movq %rcx, %r9
+	syscall
+	ret
+	
+.end __syscall
Index: uspace/lib/libc/arch/amd64/src/thread.c
===================================================================
--- uspace/lib/libc/arch/amd64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcamd64 amd64
+ * @ingroup lc
+ * @{
+ */
+/** @file
+  * @ingroup libcia32
+ */
+
+#include <thread.h>
+#include <malloc.h>
+
+/** Allocate TLS & TCB for initial module threads
+ *
+ * @param data Start of data section
+ * @return pointer to tcb_t structure
+ */
+tcb_t * __alloc_tls(void **data, size_t size)
+{
+	tcb_t *tcb;
+	
+	*data = malloc(sizeof(tcb_t) + size);
+
+	tcb = (tcb_t *) (*data + size);
+	tcb->self = tcb;
+
+	return tcb;
+}
+
+void __free_tls_arch(tcb_t *tcb, size_t size)
+{
+	void *start = ((void *)tcb) - size;
+	free(start);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/amd64/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/amd64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/amd64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.globl __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+__thread_entry:
+	#
+	# RAX contains address of uarg
+	#
+	movq %rax, %rdi
+	call __thread_main
+	
+.end __thread_entry
Index: uspace/lib/libc/arch/arm32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/arm32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2007 Michal Kebrt, Pavel Jancik
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = arm-linux-gnu
+TOOLCHAIN_DIR = /usr/local/arm/bin
+CFLAGS += -ffixed-r9 -mtp=soft 
+LFLAGS += -N ../../lib/softint/libsoftint.a
+AFLAGS += 
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c \
+		arch/$(ARCH)/src/eabi.S
+
+BFD_NAME = elf32-little
+BFD_ARCH = arm
Index: uspace/lib/libc/arch/arm32/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/arm32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,52 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x1000;
+
+	.init ALIGN(0x1000): SUBALIGN(0x1000) {
+		*(.init);
+	} : text
+	.text : {
+		*(.text);
+        *(.rodata*);
+	} :text
+	
+	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.opd);
+		*(.data .data.*);
+		*(.sdata);
+	} :data
+
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+
+	.bss : {
+		*(.sbss);
+		*(.scommon);
+        *(COMMON);
+        *(.bss);
+	} :data
+	
+	. = ALIGN(0x1000);
+	_heap = .;
+	
+	/DISCARD/ : {
+		*(*);
+	}
+
+}
Index: uspace/lib/libc/arch/arm32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32	
+ * @{
+ */
+/** @file
+ *  @brief Atomic operations.
+ */
+
+#ifndef LIBC_arm32_ATOMIC_H_
+#define LIBC_arm32_ATOMIC_H_
+
+/** Atomic addition.
+ *
+ * @param val Where to add.
+ * @param i   Value to be added.
+ *
+ * @return Value after addition.
+ */
+static inline long atomic_add(atomic_t *val, int i)
+{
+	int ret;
+	volatile long * mem = &(val->count);
+
+	asm volatile (
+	"1:\n"
+		"ldr r2, [%1]\n"
+		"add r3, r2, %2\n"
+		"str r3, %0\n"
+		"swp r3, r3, [%1]\n"
+		"cmp r3, r2\n"
+		"bne 1b\n"
+
+		: "=m" (ret)
+		: "r" (mem), "r" (i)
+		: "r3", "r2"
+	);
+
+	return ret;
+}
+
+
+/** Atomic increment.
+ *
+ * @param val Variable to be incremented.
+ */
+static inline void atomic_inc(atomic_t *val)
+{
+	atomic_add(val, 1);
+}
+
+
+/** Atomic decrement.
+ *
+ * @param val Variable to be decremented.
+ */
+static inline void atomic_dec(atomic_t *val)
+{
+	atomic_add(val, -1);
+}
+
+
+/** Atomic pre-increment.
+ *
+ * @param val Variable to be incremented.
+ * @return    Value after incrementation.
+ */
+static inline long atomic_preinc(atomic_t *val)
+{
+	return atomic_add(val, 1);
+}
+
+
+/** Atomic pre-decrement.
+ *
+ * @param val Variable to be decremented.
+ * @return    Value after decrementation.
+ */
+static inline long atomic_predec(atomic_t *val)
+{
+	return atomic_add(val, -1);
+}
+
+
+/** Atomic post-increment.
+ *
+ * @param val Variable to be incremented.
+ * @return    Value before incrementation.
+ */
+static inline long atomic_postinc(atomic_t *val)
+{
+	return atomic_add(val, 1) - 1;
+}
+
+
+/** Atomic post-decrement.
+ *
+ * @param val Variable to be decremented.
+ * @return    Value before decrementation.
+ */
+static inline long atomic_postdec(atomic_t *val)
+{
+	return atomic_add(val, -1) + 1;
+}
+
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/config.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32
+ * @{
+ */
+/** @file  
+ *  @brief Configuration constants.
+ */
+
+#ifndef LIBC_arm32_CONFIG_H_
+#define LIBC_arm32_CONFIG_H_
+
+#define PAGE_WIDTH	12
+#define PAGE_SIZE	(1 << PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/* dummy */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/endian.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32	
+ * @{
+ */
+/** @file 
+ *  @brief Endianness definition.
+ */
+
+#ifndef LIBC_arm32_ENDIAN_H_
+#define LIBC_arm32_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32	
+ * @{
+ */
+/** @file 
+ *  @brief Function address conversion.
+ */
+
+#ifndef LIBC_arm32_FADDR_H_
+#define LIBC_arm32_FADDR_H_
+
+#include <libarch/types.h>
+
+/** Calculate absolute address of function referenced by fptr pointer.
+ *
+ * @param f Function pointer.
+ */
+#define FADDR(f)	 (f)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/limits.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32	
+ * @{
+ */
+/** @file 
+ *  @brief Limits declarations.
+ */
+
+#ifndef LIBC_arm32__LIMITS_H_
+#define LIBC_arm32__LIMITS_H_
+
+#define LONG_MIN MIN_INT32
+#define LONG_MAX MAX_INT32
+#define ULONG_MIN MIN_UINT32
+#define ULONG_MAX MAX_UINT32
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32	
+ * @{
+ */
+/** @file 
+ *  @brief psthread related declarations.
+ */
+
+#ifndef LIBC_arm32_PSTHREAD_H_
+#define LIBC_arm32_PSTHREAD_H_
+
+#include <types.h>
+#include <align.h>
+#include "thread.h"
+
+/** Size of a stack item */
+#define STACK_ITEM_SIZE		4
+
+/** Stack alignment - see <a href="http://www.arm.com/support/faqdev/14269.html">ABI</a> for details */
+#define STACK_ALIGNMENT		8
+
+#define SP_DELTA	(0 + ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT))
+
+
+/** Sets data to the context. 
+ *  
+ *  @param c     Context (#context_t).
+ *  @param _pc   Program counter.
+ *  @param stack Stack address.
+ *  @param size  Stack size.
+ *  @param ptls  Pointer to the TCB.
+ */
+#define context_set(c, _pc, stack, size, ptls) 			\
+	(c)->pc = (sysarg_t) (_pc);				\
+	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
+        (c)->tls = ((sysarg_t)(ptls)) + sizeof(tcb_t) + ARM_TP_OFFSET;
+
+
+/** Thread context. 
+ *
+ *  Only registers preserved accross function calls are included. r9 is used 
+ *  to store a TLS address. -ffixed-r9 gcc forces gcc not to use this
+ *  register. -mtp=soft forces gcc to use #__aeabi_read_tp to obtain
+ *  TLS address.
+ */
+typedef struct  {
+	uint32_t sp;
+	uint32_t pc;
+	uint32_t r4;
+	uint32_t r5;
+	uint32_t r6;
+	uint32_t r7;
+	uint32_t r8;
+	uint32_t tls;
+	uint32_t r10;
+	uint32_t r11;
+} context_t;
+
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32
+ * @{
+ */
+/** @file
+ *  @brief Empty.
+ */
+
+#ifndef LIBC_arm32_STACKARG_H_
+#define LIBC_arm32_STACKARG_H_
+
+#endif
+
+/** @}
+ */
+
Index: uspace/lib/libc/arch/arm32/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32
+ * @{
+ */
+/** @file
+ *  @brief Empty.
+ */
+
+#ifndef LIBC_arm32_SYSCALL_H_
+#define LIBC_arm32_SYSCALL_H_
+
+#include <syscall.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/thread.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2007 Pavel Jancik, Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32
+ * @{
+ */
+/** @file
+ *  @brief Uspace threads and TLS.
+ */
+
+#ifndef LIBC_arm32_THREAD_H_
+#define LIBC_arm32_THREAD_H_
+
+#include <unistd.h>
+
+/** Stack initial size. */
+#define THREAD_INITIAL_STACK_PAGES_NO 1
+
+/** Offsets for accessing __thread variables are shifted 8 bytes higher. */
+#define ARM_TP_OFFSET	(-8)
+
+/** TCB (Thread Control Block) struct. 
+ *
+ *  TLS starts just after this struct.
+ */
+typedef struct {
+	/** psthread data. */
+	void *pst_data;
+} tcb_t;
+
+
+/** Sets TLS address to the r9 register.
+ *
+ *  @param tcb TCB (TLS starts behind)
+ */
+static inline void __tcb_set(tcb_t *tcb)
+{
+	void *tls = (void *) tcb;
+	tls += sizeof(tcb_t) + ARM_TP_OFFSET;
+	asm volatile (
+		"mov r9, %0"
+		:
+		: "r"(tls)
+	);
+}
+
+
+/** Returns TCB address.
+ *
+ * @return TCB address (starts before TLS which address is stored in r9 register).
+ */
+static inline tcb_t *__tcb_get(void)
+{
+	void *ret;
+	asm volatile (
+		"mov %0, r9"
+		: "=r"(ret)
+	);
+	return (tcb_t *) (ret - ARM_TP_OFFSET - sizeof(tcb_t));
+}
+
+
+/** Returns TLS address stored.
+ *
+ *  Implemented in assembly.
+ *
+ *  @return TLS address stored in r9 register
+ */
+extern uintptr_t __aeabi_read_tp(void);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/include/types.h
===================================================================
--- uspace/lib/libc/arch/arm32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32	
+ * @{
+ */
+/** @file 
+ *  @brief Definitions of basic types like #uintptr_t.
+ */
+
+#ifndef LIBC_arm32_TYPES_H_
+#define LIBC_arm32_TYPES_H_
+
+typedef unsigned int sysarg_t;
+typedef unsigned int size_t;
+typedef signed int ssize_t;
+typedef ssize_t off_t;
+
+typedef char int8_t;
+typedef short int int16_t;
+typedef long int int32_t;
+typedef long long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned long int uint32_t;
+typedef unsigned long long int uint64_t;
+
+typedef uint32_t uintptr_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/src/eabi.S
===================================================================
--- uspace/lib/libc/arch/arm32/src/eabi.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/src/eabi.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2007 Pavel Jancik
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global __aeabi_read_tp
+
+__aeabi_read_tp:
+	mov r0, r9
+	mov pc, lr
Index: uspace/lib/libc/arch/arm32/src/entry.s
===================================================================
--- uspace/lib/libc/arch/arm32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2007 Michal Kebrt, Pavel Jancik
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.section .init, "ax"
+
+.org 0
+
+.global __entry
+.global __entry_driver
+
+## User-space task entry point
+#
+#
+__entry:
+	bl __main
+	bl __io_init
+	bl main
+	bl __exit
+
+__entry_driver:
+	bl __main
+	bl main
+	bl __exit
+
Index: uspace/lib/libc/arch/arm32/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/arm32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2007 Michal Kebrt
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global context_save
+.global context_restore
+
+context_save:
+	stmia r0!, {sp, lr}
+	stmia r0!, {r4-r11}
+
+	# return 1
+	mov r0, #1
+	mov pc, lr
+
+context_restore:
+	ldmia r0!, {sp, lr}
+	ldmia r0!, {r4-r11}
+
+	#return 0
+	mov r0, #0
+	mov pc, lr
+
Index: uspace/lib/libc/arch/arm32/src/syscall.c
===================================================================
--- uspace/lib/libc/arch/arm32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2007 Pavel Jancik
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32
+ * @{
+ */
+/** @file
+ *  @brief Syscall routine.
+ */
+
+#include <libc.h>
+
+
+/** Syscall routine.
+ *
+ *  Stores p1-p4, id to r0-r4 registers and calls <code>swi</code>
+ *  instruction. Returned value is read from r0 register.
+ *
+ *  @param p1 Parameter 1.
+ *  @param p2 Parameter 2.
+ *  @param p3 Parameter 3.
+ *  @param p4 Parameter 4.
+ *  @param id Number of syscall.
+ *
+ *  @return Syscall return value.
+ */
+sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3,
+    const sysarg_t p4, const syscall_t id)
+{
+	register sysarg_t __arm_reg_r0 asm("r0") = p1;
+	register sysarg_t __arm_reg_r1 asm("r1") = p2;
+	register sysarg_t __arm_reg_r2 asm("r2") = p3;
+	register sysarg_t __arm_reg_r3 asm("r3") = p4;
+	register sysarg_t __arm_reg_r4 asm("r4") = id;
+
+	asm volatile ( "swi"
+		: "=r" (__arm_reg_r0)
+		: "r"  (__arm_reg_r0),
+		  "r"  (__arm_reg_r1),
+		  "r"  (__arm_reg_r2),
+		  "r"  (__arm_reg_r3),
+		  "r"  (__arm_reg_r4)
+	);
+
+	return __arm_reg_r0;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/src/thread.c
===================================================================
--- uspace/lib/libc/arch/arm32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2007 Pavel Jancik
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcarm32 arm32
+  * @brief arm32 architecture dependent parts of libc
+  * @ingroup lc
+ * @{
+ */
+/** @file
+ *  @brief Uspace threads and TLS.
+ */
+
+#include <thread.h>
+#include <malloc.h>
+
+/** Allocates TLS & TCB.
+ *
+ * @param data Start of data section (output parameter).
+ * @param size Size of (tbss + tdata) sections.
+ * @return     Pointer to the allocated #tcb_t structure.
+ */
+tcb_t * __alloc_tls(void **data, size_t size)
+{
+	tcb_t *result;
+
+	result = malloc(sizeof(tcb_t) + size);
+	*data = ((void *)result) + sizeof(tcb_t);
+	return result;
+}
+
+/** Deallocates TLS & TCB.
+ *
+ * @param tcb TCB structure to be deallocated (along with corresponding TLS).
+ * @param size Not used.
+ */
+void __free_tls_arch(tcb_t *tcb, size_t size)
+{
+	free(tcb);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/arm32/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/arm32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/arm32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+__thread_entry:
+        b __thread_main
Index: uspace/lib/libc/arch/ia32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/ia32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = i686-pc-linux-gnu
+TOOLCHAIN_DIR = /usr/local/i686/bin
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
+
+LFLAGS += -N
+
+BFD_NAME = elf32-i386
+BFD_ARCH = i386
Index: uspace/lib/libc/arch/ia32/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/ia32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+        text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x1000;
+
+	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.init);
+	} :text
+	.text : {
+		*(.text);
+                *(.rodata*);
+	} :text
+	
+	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.data);
+	} :data
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+	.bss : {
+                *(COMMON);
+                *(.bss);
+	} :data
+	
+	. = ALIGN(0x1000);
+	_heap = .;
+	
+	/DISCARD/ : {
+		*(*);
+	}
+
+}
Index: uspace/lib/libc/arch/ia32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32_ATOMIC_H_
+#define LIBC_ia32_ATOMIC_H_
+
+static inline void atomic_inc(atomic_t *val) {
+	asm volatile ("lock incl %0\n" : "=m" (val->count));
+}
+
+static inline void atomic_dec(atomic_t *val) {
+	asm volatile ("lock decl %0\n" : "=m" (val->count));
+}
+
+static inline long atomic_postinc(atomic_t *val) 
+{
+	long r;
+
+	asm volatile (
+		"movl $1, %0\n"
+		"lock xaddl %0, %1\n"
+		: "=r" (r), "=m" (val->count)
+	);
+
+	return r;
+}
+
+static inline long atomic_postdec(atomic_t *val) 
+{
+	long r;
+	
+	asm volatile (
+		"movl $-1, %0\n"
+		"lock xaddl %0, %1\n"
+		: "=r" (r), "=m" (val->count)
+	);
+	
+	return r;
+}
+
+#define atomic_preinc(val) (atomic_postinc(val)+1)
+#define atomic_predec(val) (atomic_postdec(val)-1)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/config.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32_CONFIG_H_
+#define LIBC_ia32_CONFIG_H_
+
+#define PAGE_WIDTH	12
+#define PAGE_SIZE	(1<<PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/* dummy */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/ddi.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/ddi.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/ddi.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @file
+ * @ingroup libcia32, libcamd64
+ */
+
+#ifndef LIBC_ia32_DDI_H_
+#define LIBC_ia32_DDI_H_
+
+static inline void outb(int16_t port, uint8_t b)
+{
+	asm volatile ("outb %0, %1\n" :: "a" (b), "d" (port));
+}
+
+static inline void outw(int16_t port, int16_t w)
+{
+	asm volatile ("outw %0, %1\n" :: "a" (w), "d" (port));
+}
+
+static inline void outl(int16_t port, uint32_t l)
+{
+	asm volatile ("outl %0, %1\n" :: "a" (l), "d" (port));
+}
+
+static inline uint8_t inb(int16_t port)
+{
+	uint8_t val;
+
+	asm volatile ("inb %1, %0 \n" : "=a" (val) : "d"(port));
+	return val;
+}
+
+static inline int16_t inw(int16_t port)
+{
+	int16_t val;
+
+	asm volatile ("inw %1, %0 \n" : "=a" (val) : "d"(port));
+	return val;
+}
+
+static inline uint32_t inl(int16_t port)
+{
+	uint32_t val;
+
+	asm volatile ("inl %1, %0 \n" : "=a" (val) : "d"(port));
+	return val;
+}
+
+#endif
Index: uspace/lib/libc/arch/ia32/include/endian.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32_ENDIAN_H_
+#define LIBC_ia32_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32_FADDR_H_
+#define LIBC_ia32_FADDR_H_
+
+#include <libarch/types.h>
+
+#define FADDR(fptr)		((uintptr_t) (fptr))
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/limits.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32__LIMITS_H_
+#define LIBC_ia32__LIMITS_H_
+
+# define LONG_MIN MIN_INT32
+# define LONG_MAX MAX_INT32
+# define ULONG_MIN MIN_UINT32
+# define ULONG_MAX MAX_UINT32
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32_PSTHREAD_H_
+#define LIBC_ia32_PSTHREAD_H_
+
+#include <types.h>
+
+/* According to ABI the stack MUST be aligned on 
+ * 16-byte boundary. If it is not, the va_arg calling will
+ * panic sooner or later
+ */
+#define SP_DELTA     (12)
+
+/* We include only registers that must be preserved
+ * during function call
+ */
+typedef struct {
+	uint32_t sp;
+	uint32_t pc;
+	
+	uint32_t ebx;
+	uint32_t esi;
+	uint32_t edi;
+	uint32_t ebp;
+	
+	uint32_t tls;
+} context_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+/*
+ * Variable argument list manipulation macros
+ * for architectures using stack to pass arguments.
+ */
+ 
+#ifndef LIBC_ia32_STACKARG_H_
+#define LIBC_ia32_STACKARG_H_
+
+#include <types.h>
+
+/* dont allow to define it second time in stdarg.h */
+#define __VARARGS_DEFINED
+
+typedef struct va_list {
+	int pos;
+	uint8_t *last;
+} va_list;
+
+#define va_start(ap, lst) \
+	(ap).pos = sizeof(lst); 			\
+	(ap).last = (uint8_t *) &(lst)
+
+#define va_arg(ap, type) 		\
+	(*((type *)((ap).last + ((ap).pos  += sizeof(type) ) - sizeof(type))))
+
+#define va_end(ap)
+
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef LIBC_ia32_SYSCALL_H_
+#define LIBC_ia32_SYSCALL_H_
+
+#include <syscall.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/thread.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32_THREAD_H_
+#define LIBC_ia32_THREAD_H_
+
+#include <libc.h>
+
+typedef struct {
+	void *self;
+	void *pst_data;
+} tcb_t;
+
+static inline void __tcb_set(tcb_t *tcb)
+{
+	__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb);
+}
+
+static inline tcb_t * __tcb_get(void)
+{
+	void * retval;
+
+	asm ("movl %%gs:0, %0" : "=r"(retval));
+	return retval;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/include/types.h
===================================================================
--- uspace/lib/libc/arch/ia32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia32_TYPES_H_
+#define LIBC_ia32_TYPES_H_
+
+typedef unsigned int sysarg_t;
+typedef unsigned int size_t;
+typedef signed int ssize_t;
+typedef ssize_t off_t;
+
+typedef char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+typedef long long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long int uint64_t;
+
+typedef uint32_t uintptr_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/src/entry.s
===================================================================
--- uspace/lib/libc/arch/ia32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,60 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.section .init, "ax"
+
+.org 0
+
+.globl __entry
+.globl __entry_driver
+
+## User-space task entry point
+#
+#
+__entry:
+	mov %ss, %ax
+	mov %ax, %ds
+	mov %ax, %es
+	mov %ax, %fs
+	# Do not set %gs, it contains descriptor that can see TLS
+	
+	call __main
+	call __io_init
+	call main
+	call __exit
+	
+__entry_driver:
+	mov %ss, %ax
+	mov %ax, %ds
+	mov %ax, %es
+	mov %ax, %fs
+	# Do not set %gs, it contains descriptor that can see TLS
+	
+	call __main
+	call main
+	call __exit
Index: uspace/lib/libc/arch/ia32/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/ia32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2001-2004 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global context_save
+.global context_restore
+
+
+## Save current CPU context
+#
+# Save CPU context to the context_t variable
+# pointed by the 1st argument. Returns 1 in EAX.
+#
+context_save:
+	movl 0(%esp),%eax	# the caller's return %eip
+	movl 4(%esp),%edx	# address of the kernel_context variable to save context to
+
+	movl %esp,0(%edx)	# %esp -> ctx->sp
+	movl %eax,4(%edx)	# %eip -> ctx->pc
+	movl %ebx,8(%edx)	# %ebx -> ctx->ebx
+	movl %esi,12(%edx)	# %esi -> ctx->esi
+	movl %edi,16(%edx)	# %edi -> ctx->edi
+	movl %ebp,20(%edx)	# %ebp -> ctx->ebp
+
+	# Save TLS
+	movl %gs:0, %eax
+	movl %eax, 24(%edx)     # tls -> ctx->tls
+	
+	xorl %eax,%eax		# context_save returns 1
+	incl %eax
+	ret
+
+
+## Restore saved CPU context
+#
+# Restore CPU context from context_t variable
+# pointed by the 1st argument. Returns 0 in EAX.
+#
+context_restore:
+	movl 4(%esp),%eax	# address of the kernel_context variable to restore context from
+	movl 0(%eax),%esp	# ctx->sp -> %esp
+	movl 4(%eax),%edx	# ctx->pc -> %edx
+	movl 8(%eax),%ebx	# ctx->ebx -> %ebx
+	movl 12(%eax),%esi	# ctx->esi -> %esi
+	movl 16(%eax),%edi	# ctx->edi -> %edi
+	movl 20(%eax),%ebp	# ctx->ebp -> %ebp
+
+	movl %edx,0(%esp)	# ctx->pc -> saver's return %eip
+
+	# Set thread local storage
+	pushl %edi
+	movl 24(%eax), %eax   # Set arg1 to TLS addr
+	movl $1, %edi         # Syscall 1
+	int $0x30
+	popl %edi
+	
+	xorl %eax,%eax		# context_restore returns 0
+	ret
Index: uspace/lib/libc/arch/ia32/src/syscall.c
===================================================================
--- uspace/lib/libc/arch/ia32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia32 ia32
+ * @brief	ia32 architecture dependent parts of libc
+ * @ingroup lc
+ * @{
+ */
+/** @file
+ */
+
+#include <thread.h>
+#include <libc.h>
+
+sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, 
+		   const sysarg_t p4, const syscall_t id)
+{
+	sysarg_t ret;
+	
+	asm volatile (
+		"int $0x30\n"
+		: "=a" (ret)
+		: "a" (p1),
+		  "c" (p2),
+		  "d" (p3),
+		  "S" (p4),
+		  "D" (id)
+	);
+	
+	return ret;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia32/src/thread.c
===================================================================
--- uspace/lib/libc/arch/ia32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../amd64/src/thread.c
Index: uspace/lib/libc/arch/ia32/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/ia32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,53 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.globl __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+__thread_entry:
+	mov %ss, %dx
+	mov %dx, %ds
+	mov %dx, %es
+	mov %dx, %fs
+	# Do not set %gs, it contains descriptor that can see TLS
+
+	#
+	# EAX contains address of uarg.
+	#
+	pushl %eax
+	call __thread_main
+	
+	#
+	# Not reached.
+	#
+	
+.end __thread_entry
Index: uspace/lib/libc/arch/ia64/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/ia64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = ia64-pc-linux-gnu
+TOOLCHAIN_DIR = /usr/local/ia64/bin
+CFLAGS += -fno-unwind-tables -DMALLOC_ALIGNMENT_16
+LFLAGS += -N ../../lib/softint/libsoftint.a
+AFLAGS += 
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
+
+BFD_NAME = elf64-little
+BFD_ARCH = ia64-elf64
Index: uspace/lib/libc/arch/ia64/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/ia64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,52 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x4000;
+
+	.init ALIGN(0x4000): SUBALIGN(0x4000) {
+		*(.init);
+	} : text
+	.text : {
+		*(.text);
+		*(.rodata*);
+	} :text
+
+	.got ALIGN(0x4000) : SUBALIGN(0x4000) {
+		_gp = .;
+		*(.got*);
+	} :data	
+	.data : {
+		*(.opd);
+		*(.data .data.*);
+		*(.sdata);
+	} :data
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+	.bss : {
+		*(.sbss);
+		*(.scommon);
+		*(COMMON);
+		*(.bss);
+	} :data
+
+	. = ALIGN(0x4000);
+	_heap = .;
+ 
+	/DISCARD/ : {
+		*(*);
+        }
+}
Index: uspace/lib/libc/arch/ia64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_ATOMIC_H_
+#define LIBC_ia64_ATOMIC_H_
+
+/** Atomic addition.
+ *
+ * @param val Atomic value.
+ * @param imm Value to add.
+ *
+ * @return Value before addition.
+ */
+static inline long atomic_add(atomic_t *val, int imm)
+{
+	long v;
+
+ 	asm volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), "+m" (val->count) : "i" (imm));
+ 
+	return v;
+}
+
+static inline void atomic_inc(atomic_t *val) { atomic_add(val, 1); }
+static inline void atomic_dec(atomic_t *val) { atomic_add(val, -1); }
+
+static inline long atomic_preinc(atomic_t *val) { return atomic_add(val, 1) + 1; }
+static inline long atomic_predec(atomic_t *val) { return atomic_add(val, -1) - 1; }
+
+static inline long atomic_postinc(atomic_t *val) { return atomic_add(val, 1); }
+static inline long atomic_postdec(atomic_t *val) { return atomic_add(val, -1); }
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/config.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_CONFIG_H_
+#define LIBC_ia64_CONFIG_H_
+
+#define PAGE_WIDTH	14
+#define PAGE_SIZE	(1<<PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/* dummy */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/endian.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_ENDIAN_H_
+#define LIBC_ia64_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_FADDR_H_
+#define LIBC_ia64_FADDR_H_
+
+#include <libarch/types.h>
+
+/** 
+ *
+ * Calculate absolute address of function
+ * referenced by fptr pointer.
+ *
+ * @param f Function pointer.
+ *
+ */
+#define FADDR(f)	 (*((uintptr_t *)(f)));
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/limits.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_LIMITS_H_
+#define LIBC_ia64_LIMITS_H_
+
+# define LONG_MIN MIN_INT64
+# define LONG_MAX MAX_INT64
+# define ULONG_MIN MIN_UINT64
+# define ULONG_MAX MAX_UINT64
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_PSTHREAD_H_
+#define LIBC_ia64_PSTHREAD_H_
+
+#include <types.h>
+#include <align.h>
+#include <libarch/stack.h>
+#include <libarch/types.h>
+
+/*
+ * context_save() and context_restore() are both leaf procedures.
+ * No need to allocate scratch area.
+ */
+#define SP_DELTA	(0+ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT))
+
+#define PFM_MASK        (~0x3fffffffff)
+
+#define PSTHREAD_INITIAL_STACK_PAGES_NO 2
+/* Stack is divided into two equal parts (for memory stack and register stack). */
+#define PSTHREAD_INITIAL_STACK_DIVISION 2  
+
+#ifdef context_set
+#undef context_set
+#endif
+
+#define context_set(c, _pc, stack, size, tls) 								\
+	do {												\
+		(c)->pc = (uint64_t) _pc;								\
+		(c)->bsp = ((uint64_t) stack) + size / PSTHREAD_INITIAL_STACK_DIVISION;								\
+		(c)->ar_pfs &= PFM_MASK; 								\
+		(c)->sp = ((uint64_t) stack) + ALIGN_UP((size / PSTHREAD_INITIAL_STACK_DIVISION), STACK_ALIGNMENT) - SP_DELTA;		\
+		(c)->tp = (uint64_t) tls;								\
+	} while (0);
+	
+
+/*
+ * Only save registers that must be preserved across
+ * function calls.
+ */
+typedef struct context {
+
+	/*
+	 * Application registers
+	 */
+	uint64_t ar_pfs;
+	uint64_t ar_unat_caller;
+	uint64_t ar_unat_callee;
+	uint64_t ar_rsc;
+	uint64_t bsp;		/* ar_bsp */
+	uint64_t ar_rnat;
+	uint64_t ar_lc;
+
+	/*
+	 * General registers
+	 */
+	uint64_t r1;
+	uint64_t r4;
+	uint64_t r5;
+	uint64_t r6;
+	uint64_t r7;
+	uint64_t sp;		/* r12 */
+	uint64_t tp;		/* r13 */
+	
+	/*
+	 * Branch registers
+	 */
+	uint64_t pc;		/* b0 */
+	uint64_t b1;
+	uint64_t b2;
+	uint64_t b3;
+	uint64_t b4;
+	uint64_t b5;
+
+	/*
+	 * Predicate registers
+	 */
+	uint64_t pr;
+
+	__r128 f2 __attribute__ ((aligned(16)));
+	__r128 f3;
+	__r128 f4;
+	__r128 f5;
+
+	__r128 f16;
+	__r128 f17;
+	__r128 f18;
+	__r128 f19;
+	__r128 f20;
+	__r128 f21;
+	__r128 f22;
+	__r128 f23;
+	__r128 f24;
+	__r128 f25;
+	__r128 f26;
+	__r128 f27;
+	__r128 f28;
+	__r128 f29;
+	__r128 f30;
+	__r128 f31;
+
+} context_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/stack.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/stack.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/stack.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_STACK_H_
+#define LIBC_ia64_STACK_H_
+
+#define STACK_ITEM_SIZE			8
+#define STACK_ALIGNMENT			16
+#define STACK_SCRATCH_AREA_SIZE		16
+#define REGISTER_STACK_ALIGNMENT 	8
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STACKARG_H_
+#define LIBC_STACKARG_H_
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/libc/arch/ia64/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef LIBC_ia64_SYSCALL_H_
+#define LIBC_ia64_SYSCALL_H_
+
+#include <syscall.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/thread.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64THREAD_H_
+#define LIBC_ia64THREAD_H_
+
+#define THREAD_INITIAL_STACK_PAGES_NO 2
+
+/* This structure must be exactly 16 bytes long */
+typedef struct {
+	void *dtv; /* unused in static linking*/
+	void *pst_data;
+} tcb_t;
+
+static inline void __tcb_set(tcb_t *tcb)
+{
+	asm volatile ("mov r13 = %0\n" : : "r" (tcb) : "r13");
+}
+
+static inline tcb_t *__tcb_get(void)
+{
+	void *retval;
+
+	asm volatile ("mov %0 = r13\n" : "=r" (retval));
+
+	return retval;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/include/types.h
===================================================================
--- uspace/lib/libc/arch/ia64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ia64_TYPES_H_
+#define LIBC_ia64_TYPES_H_
+
+typedef unsigned long long sysarg_t;
+typedef unsigned long size_t;
+typedef signed long ssize_t;
+typedef ssize_t off_t;
+
+typedef char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+typedef long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long int uint64_t;
+
+typedef uint64_t uintptr_t;
+
+typedef unsigned char __r8;                     /* Reserve byte */
+typedef unsigned short __r16;
+typedef unsigned int __r32;
+typedef unsigned long __r64;
+
+typedef struct __r128{
+	__r64 lo;
+	__r64 hi;
+} __r128;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/src/entry.s
===================================================================
--- uspace/lib/libc/arch/ia64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,57 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.section .init, "ax"
+
+.org 0
+
+.globl __entry
+.globl __entry_driver
+
+## User-space task entry point
+#
+#
+__entry:
+	alloc loc0 = ar.pfs, 0, 1, 2, 0
+	mov r1 = _gp 
+	br.call.sptk.many b0 = __main
+0:
+	br.call.sptk.many b0 = __io_init
+1:
+	br.call.sptk.many b0 = main
+2:
+	br.call.sptk.many b0 = __exit
+
+__entry_driver:
+	alloc loc0 = ar.pfs, 0, 1, 2, 0
+	mov r1 = _gp 
+	br.call.sptk.many b0 = __main
+0:
+	br.call.sptk.many b0 = main
+1:
+	br.call.sptk.many b0 = __exit
Index: uspace/lib/libc/arch/ia64/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/ia64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,246 @@
+#
+# Copyright (c) 2005 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global context_save
+.global context_restore
+
+context_save:
+	alloc loc0 = ar.pfs, 1, 8, 0, 0
+	mov loc1 = ar.unat	;;
+	/* loc2 */
+	mov loc3 = ar.rsc
+
+	.auto
+
+	/*
+	 * Flush dirty registers to backing store.
+	 * After this ar.bsp and ar.bspstore are equal.
+	 */
+	flushrs
+	mov loc4 = ar.bsp	
+	
+	/*
+	 * Put RSE to enforced lazy mode.
+	 * So that ar.rnat can be read.
+	 */
+	and loc5 = ~3, loc3
+	mov ar.rsc = loc5
+	mov loc5 = ar.rnat
+
+	.explicit
+
+	mov loc6 = ar.lc
+	
+	/*
+	 * Save application registers
+	 */
+	st8 [in0] = loc0, 8	;;	/* save ar.pfs */
+	st8 [in0] = loc1, 8	;;	/* save ar.unat (caller) */
+	mov loc2 = in0		;;
+	add in0 = 8, in0	;;	/* skip ar.unat (callee) */
+	st8 [in0] = loc3, 8	;;	/* save ar.rsc */
+	st8 [in0] = loc4, 8	;;	/* save ar.bsp */
+	st8 [in0] = loc5, 8	;;	/* save ar.rnat */
+	st8 [in0] = loc6, 8	;;	/* save ar.lc */
+	
+	/*
+	 * Save general registers including NaT bits
+	 */
+	st8.spill [in0] = r1, 8		;;
+	st8.spill [in0] = r4, 8		;;
+	st8.spill [in0] = r5, 8		;;
+	st8.spill [in0] = r6, 8		;;
+	st8.spill [in0] = r7, 8		;;
+	st8.spill [in0] = r12, 8	;;	/* save sp */
+	st8.spill [in0] = r13, 8	;;	/* save tp */
+
+	mov loc3 = ar.unat		;;
+	st8 [loc2] = loc3		/* save ar.unat (callee) */
+
+	/*
+	 * Save branch registers
+	 */
+	mov loc2 = b0		;;
+	st8 [in0] = loc2, 8		/* save pc */
+	mov loc3 = b1		;;
+	st8 [in0] = loc3, 8
+	mov loc4 = b2		;;
+	st8 [in0] = loc4, 8
+	mov loc5 = b3		;;
+	st8 [in0] = loc5, 8
+	mov loc6 = b4		;;
+	st8 [in0] = loc6, 8
+	mov loc7 = b5		;;
+	st8 [in0] = loc7, 8
+
+	/*
+	 * Save predicate registers
+	 */
+	mov loc2 = pr		;;
+	st8 [in0] = loc2, 16;; 		/* Next fpu registers should be spilled to 16B aligned address */
+
+	/*
+	 * Save floating-point registers.
+	 */
+	stf.spill [in0] = f2, 16 ;;
+	stf.spill [in0] = f3, 16 ;;
+	stf.spill [in0] = f4, 16 ;;
+	stf.spill [in0] = f5, 16 ;;
+
+	stf.spill [in0] = f16, 16 ;;
+	stf.spill [in0] = f17, 16 ;;
+	stf.spill [in0] = f18, 16 ;;
+	stf.spill [in0] = f19, 16 ;;
+	stf.spill [in0] = f20, 16 ;;
+	stf.spill [in0] = f21, 16 ;;
+	stf.spill [in0] = f22, 16 ;;
+	stf.spill [in0] = f23, 16 ;;
+	stf.spill [in0] = f24, 16 ;;
+	stf.spill [in0] = f25, 16 ;;
+	stf.spill [in0] = f26, 16 ;;
+	stf.spill [in0] = f27, 16 ;;
+	stf.spill [in0] = f28, 16 ;;
+	stf.spill [in0] = f29, 16 ;;
+	stf.spill [in0] = f30, 16 ;;
+	stf.spill [in0] = f31, 16 ;;	
+
+	mov ar.unat = loc1
+	
+	add r8 = r0, r0, 1 		/* context_save returns 1 */
+	br.ret.sptk.many b0
+
+context_restore:
+	alloc loc0 = ar.pfs, 1, 9, 0, 0	;;
+
+	ld8 loc0 = [in0], 8	;;	/* load ar.pfs */
+	ld8 loc1 = [in0], 8	;;	/* load ar.unat (caller) */
+	ld8 loc2 = [in0], 8	;;	/* load ar.unat (callee) */
+	ld8 loc3 = [in0], 8	;;	/* load ar.rsc */
+	ld8 loc4 = [in0], 8	;;	/* load ar.bsp */
+	ld8 loc5 = [in0], 8	;;	/* load ar.rnat */
+	ld8 loc6 = [in0], 8	;;	/* load ar.lc */
+	
+	.auto	
+
+	/*
+	 * Invalidate the ALAT
+	 */
+	invala
+
+	/*
+	 * Put RSE to enforced lazy mode.
+	 * So that ar.bspstore and ar.rnat can be written.
+	 */
+	movl loc8 = ~3
+	and loc8 = loc3, loc8
+	mov ar.rsc = loc8
+
+	/*
+	 * Flush dirty registers to backing store.
+	 * We do this because we want the following move
+	 * to ar.bspstore to assign the same value to ar.bsp.
+	 */
+	flushrs
+
+	/*
+	 * Restore application registers
+	 */
+	mov ar.bspstore = loc4	/* rse.bspload = ar.bsp = ar.bspstore = loc4 */
+	mov ar.rnat = loc5
+	mov ar.pfs = loc0
+	mov ar.rsc = loc3
+
+	.explicit
+
+	mov ar.unat = loc2	;;
+	mov ar.lc = loc6
+	
+	/*
+	 * Restore general registers including NaT bits
+	 */
+	ld8.fill r1 = [in0], 8	;;
+	ld8.fill r4 = [in0], 8	;;
+	ld8.fill r5 = [in0], 8	;;
+	ld8.fill r6 = [in0], 8	;;
+	ld8.fill r7 = [in0], 8	;;
+	ld8.fill r12 = [in0], 8	;;	/* restore sp */
+	ld8.fill r13 = [in0], 8	;;
+
+	/* 
+	 * Restore branch registers
+	 */
+	ld8 loc2 = [in0], 8	;;	/* restore pc */
+	mov b0 = loc2
+	ld8 loc3 = [in0], 8	;;
+	mov b1 = loc3
+	ld8 loc4 = [in0], 8	;;
+	mov b2 = loc4
+	ld8 loc5 = [in0], 8	;;
+	mov b3 = loc5
+	ld8 loc6 = [in0], 8	;;
+	mov b4 = loc6
+	ld8 loc7 = [in0], 8	;;
+	mov b5 = loc7
+
+	/*
+	 * Restore predicate registers
+	 */
+	ld8 loc2 = [in0], 16	;;
+	mov pr = loc2, ~0
+
+	/*
+	 * Restore floating-point registers.
+	 */
+	ldf.fill f2 = [in0], 16 ;;
+	ldf.fill f3 = [in0], 16 ;;
+	ldf.fill f4 = [in0], 16 ;;
+	ldf.fill f5 = [in0], 16 ;;
+
+	ldf.fill f16 = [in0], 16 ;;
+	ldf.fill f17 = [in0], 16 ;;
+	ldf.fill f18 = [in0], 16 ;;
+	ldf.fill f19 = [in0], 16 ;;
+	ldf.fill f20 = [in0], 16 ;;
+	ldf.fill f21 = [in0], 16 ;;
+	ldf.fill f22 = [in0], 16 ;;
+	ldf.fill f23 = [in0], 16 ;;
+	ldf.fill f24 = [in0], 16 ;;
+	ldf.fill f25 = [in0], 16 ;;
+	ldf.fill f26 = [in0], 16 ;;
+	ldf.fill f27 = [in0], 16 ;;
+	ldf.fill f28 = [in0], 16 ;;
+	ldf.fill f29 = [in0], 16 ;;
+	ldf.fill f30 = [in0], 16 ;;
+	ldf.fill f31 = [in0], 16 ;;
+	
+	mov ar.unat = loc1
+	
+	mov r8 = r0			/* context_restore returns 0 */
+	br.ret.sptk.many b0
Index: uspace/lib/libc/arch/ia64/src/syscall.S
===================================================================
--- uspace/lib/libc/arch/ia64/src/syscall.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/src/syscall.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+/**
+ * Immediate operand for break instruction.
+ * Be carefull about the value as Ski simulator
+ * is somewhat sensitive to its value.
+ *
+ * 0 will be confused with Ski breakpoint.
+ * And higher values will be confused with SSC's.
+ */
+#define SYSCALL_IMM	1
+
+.global __syscall
+__syscall:
+	alloc r14 = ar.pfs, 5, 0, 0, 0 ;;
+	break SYSCALL_IMM
+	mov ar.pfs = r14 ;;
+	br.ret.sptk.many b0
Index: uspace/lib/libc/arch/ia64/src/thread.c
===================================================================
--- uspace/lib/libc/arch/ia64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcia64 ia64
+  * @brief ia64 architecture dependent parts of libc
+  * @ingroup lc
+ * @{
+ */
+/** @file
+ */
+
+#include <thread.h>
+#include <malloc.h>
+
+/** Allocate TLS & TCB for initial module threads
+ *
+ * @param data Start of data section
+ * @return pointer to tcb_t structure
+ */
+extern char _tdata_start;
+extern char _tbss_end;
+tcb_t * __alloc_tls(void **data, size_t size)
+{
+	tcb_t *tcb;
+	
+/*	ASSERT(sizeof(tcb_t) == 16); */
+
+	tcb = malloc(sizeof(tcb_t) + size);
+	*data = ((void *) tcb) + 16;
+
+	return tcb;
+}
+
+void __free_tls_arch(tcb_t *tcb, size_t size)
+{
+	free(tcb);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ia64/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/ia64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ia64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.globl __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+__thread_entry:
+	alloc loc0 = ar.pfs, 0, 1, 1, 0
+
+	mov r1 = _gp
+	
+	#
+	# r8 contains address of uarg structure.
+	#
+	
+	mov out0 = r8
+	br.call.sptk.many b0 = __thread_main
+	
+	#
+	# Not reached.
+	#
+	
+.end __thread_entry
Index: uspace/lib/libc/arch/mips32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/mips32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = mipsel-linux-gnu
+TOOLCHAIN_DIR = /usr/local/mipsel/bin
+CFLAGS += -mips3
+
+-include ../../Makefile.config
+ifeq ($(CONFIG_MIPS_FPU),y)
+	CFLAGS += -DCONFIG_MIPS_FPU
+endif
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
+	arch/$(ARCH)/src/psthread.S \
+	arch/$(ARCH)/src/thread.c
+
+
+BFD_ARCH = mips
+BFD_NAME = elf32-little
Index: uspace/lib/libc/arch/mips32/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/mips32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,56 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x4000;
+	
+	.init ALIGN(0x4000) : SUBALIGN(0x4000) {
+		*(.init);
+	} :text
+	.text : {
+	        *(.text);
+		*(.rodata*);
+	} :text
+
+	.data : {
+		*(.data);
+		*(.data.rel*);
+	} :data
+
+	.got : {
+		_gp = .;
+		*(.got);
+	} :data
+
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+
+	.sbss : {
+		*(.scommon);
+		*(.sbss);
+	}	
+	.bss : {
+		*(.bss);
+		*(COMMON);
+	} :data
+
+	. = ALIGN(0x4000);
+	_heap = .;
+
+	/DISCARD/ : {
+		*(*);
+	}
+}
Index: uspace/lib/libc/arch/mips32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32	
+ * @{
+ */
+/** @file
+ * @ingroup libcmips32eb	
+ */
+
+#ifndef LIBC_mips32_ATOMIC_H_
+#define LIBC_mips32_ATOMIC_H_
+
+#define atomic_inc(x)	((void) atomic_add(x, 1))
+#define atomic_dec(x)	((void) atomic_add(x, -1))
+
+#define atomic_postinc(x) (atomic_add(x, 1) - 1)
+#define atomic_postdec(x) (atomic_add(x, -1) + 1)
+
+#define atomic_preinc(x) atomic_add(x, 1)
+#define atomic_predec(x) atomic_add(x, -1)
+
+/* Atomic addition of immediate value.
+ *
+ * @param val Memory location to which will be the immediate value added.
+ * @param i Signed immediate that will be added to *val.
+ *
+ * @return Value after addition.
+ */
+static inline long atomic_add(atomic_t *val, int i)
+{
+	long tmp, v;
+
+	asm volatile (
+		"1:\n"
+		"	ll %0, %1\n"
+		"	addiu %0, %0, %3\n"	/* same as addi, but never traps on overflow */
+		"       move %2, %0\n"
+		"	sc %0, %1\n"
+		"	beq %0, %4, 1b\n"	/* if the atomic operation failed, try again */
+		/*	nop	*/		/* nop is inserted automatically by compiler */
+		: "=r" (tmp), "=m" (val->count), "=r" (v)
+		: "i" (i), "i" (0)
+		);
+
+	return v;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/config.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_mips32_CONFIG_H_
+#define LIBC_mips32_CONFIG_H_
+
+#define PAGE_WIDTH	14
+#define PAGE_SIZE	(1<<PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/* dummy */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/context_offset.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,28 @@
+/* This file is automatically generated by gencontext.c. */
+/* struct context */
+#define OFFSET_SP      0x0
+#define OFFSET_PC      0x4
+#define OFFSET_S0      0x8
+#define OFFSET_S1      0xc
+#define OFFSET_S2      0x10
+#define OFFSET_S3      0x14
+#define OFFSET_S4      0x18
+#define OFFSET_S5      0x1c
+#define OFFSET_S6      0x20
+#define OFFSET_S7      0x24
+#define OFFSET_S8      0x28
+#define OFFSET_GP      0x2c
+#define OFFSET_TLS     0x30
+
+#define OFFSET_F20     0x34
+#define OFFSET_F21     0x38
+#define OFFSET_F22     0x3c
+#define OFFSET_F23     0x40
+#define OFFSET_F24     0x44
+#define OFFSET_F25     0x48
+#define OFFSET_F26     0x4c
+#define OFFSET_F27     0x50
+#define OFFSET_F28     0x54
+#define OFFSET_F29     0x58
+#define OFFSET_F30     0x5c
+
Index: uspace/lib/libc/arch/mips32/include/endian.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32 mips32
+  * @brief mips32 architecture dependent parts of libc
+  * @ingroup lc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_mips32_ENDIAN_H_
+#define LIBC_mips32_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_mips32_FADDR_H_
+#define LIBC_mips32_FADDR_H_
+
+#include <libarch/types.h>
+
+#define FADDR(fptr)		((uintptr_t) (fptr))
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/limits.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32	
+ * @{
+ */
+/** @file
+ * @ingroup libcmips32eb	
+ */
+
+#ifndef LIBC_mips32__LIMITS_H_
+#define LIBC_mips32__LIMITS_H_
+
+# define LONG_MIN MIN_INT32
+# define LONG_MAX MAX_INT32
+# define ULONG_MIN MIN_UINT32
+# define ULONG_MAX MAX_UINT32
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32	
+ * @{
+ */
+/** @file
+ * @ingroup libcmips32eb	
+ */
+
+#ifndef LIBC_mips32_PSTHREAD_H_
+#define LIBC_mips32_PSTHREAD_H_
+
+#include <types.h>
+
+/* We define our own context_set, because we need to set
+ * the TLS pointer to the tcb+0x7000
+ *
+ * See tls_set in thread.h
+ */
+#define context_set(c, _pc, stack, size, ptls) 			\
+	(c)->pc = (sysarg_t) (_pc);				\
+	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
+        (c)->tls = ((sysarg_t)(ptls)) + 0x7000 + sizeof(tcb_t);
+
+
+/* +16 is just for sure that the called function
+ * have space to store it's arguments
+ */
+#define SP_DELTA	(8+16)
+
+typedef struct  {
+	uint32_t sp;
+	uint32_t pc;
+	
+	uint32_t s0;
+	uint32_t s1;
+	uint32_t s2;
+	uint32_t s3;
+	uint32_t s4;
+	uint32_t s5;
+	uint32_t s6;
+	uint32_t s7;
+	uint32_t s8;
+	uint32_t gp;
+	uint32_t tls; /* Thread local storage(=k1) */
+
+	uint32_t f20;
+	uint32_t f21;
+	uint32_t f22;
+	uint32_t f23;
+	uint32_t f24;
+	uint32_t f25;
+	uint32_t f26;
+	uint32_t f27;
+	uint32_t f28;
+	uint32_t f29;
+	uint32_t f30;
+	
+} context_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32	
+ * @{
+ */
+/** @file
+ * @ingroup libcmips32eb	
+ */
+
+#ifndef LIBC_mips32_STACKARG_H_
+#define LIBC_mips32_STACKARG_H_
+
+/* dont allow to define it second time in stdarg.h */
+#define __VARARGS_DEFINED
+
+#include <types.h>
+
+/**
+ * va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not)
+ * To satisfy this, paddings must be sometimes inserted. 
+ */
+
+typedef uint8_t* va_list;
+
+#define va_start(ap, lst) \
+	((ap) = (va_list)&(lst) + sizeof(lst))
+
+#define va_arg(ap, type)	\
+	(((type *)((ap) = (va_list)( (sizeof(type) <= 4) ? ((uint32_t)((ap) + 2*4 - 1) & (~3)) : ((uint32_t)((ap) + 2*8 -1) & (~7)) )))[-1])
+
+#define va_end(ap)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef LIBC_mips32_SYSCALL_H_
+#define LIBC_mips32_SYSCALL_H_
+
+#include <syscall.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/thread.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32	
+ * @{
+ */
+/** @file
+ * @ingroup libcmips32eb	
+ */
+
+/* TLS for MIPS is described in http://www.linux-mips.org/wiki/NPTL */
+
+#ifndef LIBC_mips32THREAD_H_
+#define LIBC_mips32THREAD_H_
+
+/* I did not find any specification (neither MIPS nor PowerPC), but
+ * as I found it
+ * - it uses Variant II
+ * - TCB is at Address(First TLS Block)+0x7000.
+ * - DTV is at Address(First TLS Block)+0x8000
+ * - What would happen if the TLS data was larger then 0x7000?
+ * - The linker never accesses DTV directly, has the second definition any
+ *   sense?
+ * We will make it this way:
+ * - TCB is at TP-0x7000-sizeof(tcb)
+ * - No assumption about DTV etc., but it will not have a fixed address
+ */
+#define MIPS_TP_OFFSET 0x7000
+
+typedef struct {
+	void *pst_data;
+} tcb_t;
+
+static inline void __tcb_set(tcb_t *tcb)
+{
+	void *tp = tcb;
+	tp += MIPS_TP_OFFSET + sizeof(tcb_t);
+
+	asm volatile ("add $27, %0, $0" : : "r"(tp)); /* Move tls to K1 */
+}
+
+static inline tcb_t * __tcb_get(void)
+{
+	void * retval;
+
+	asm volatile("add %0, $27, $0" : "=r"(retval));
+
+	return (tcb_t *)(retval - MIPS_TP_OFFSET - sizeof(tcb_t));
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/include/types.h
===================================================================
--- uspace/lib/libc/arch/mips32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32	
+ * @{
+ */
+/** @file
+ * @ingroup libcmips32eb
+ */
+
+#ifndef LIBC_mips32_TYPES_H_
+#define LIBC_mips32_TYPES_H_
+
+typedef unsigned int sysarg_t;
+typedef unsigned int size_t;
+typedef signed int ssize_t;
+typedef ssize_t off_t;
+
+typedef char int8_t;
+typedef short int int16_t;
+typedef long int int32_t;
+typedef long long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned long int uint32_t;
+typedef unsigned long long int uint64_t;
+
+typedef uint32_t uintptr_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/src/entry.s
===================================================================
--- uspace/lib/libc/arch/mips32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,89 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+.section .init, "ax"
+.global __entry
+.global __entry_driver
+.set noreorder
+.option pic2
+
+## User-space task entry point
+#
+#
+.ent __entry
+__entry:
+	.frame $sp, 32, $31
+	.cpload $25
+	
+	
+	# Mips o32 may store its arguments on stack, make space (16 bytes),
+	# so that it could work with -O0
+	# Make space additional 16 bytes for the stack frame
+
+	addiu $sp, -32
+	.cprestore 16   # Allow PIC code
+	
+	jal __main
+	nop
+	
+	jal __io_init
+	nop
+	
+	jal main
+	nop
+	
+	jal __exit
+	nop
+.end
+
+.ent __entry_driver
+__entry_driver:
+	.frame $sp, 32, $31
+	.cpload $25
+	
+	
+	# Mips o32 may store its arguments on stack, make space (16 bytes),
+	# so that it could work with -O0
+	# Make space additional 16 bytes for the stack frame
+
+	addiu $sp, -32
+	.cprestore 16   # Allow PIC code
+	
+	jal __main
+	nop
+	
+	jal main
+	nop
+	
+	jal __exit
+	nop
+.end
+# Alignment of output section data to 0x4000
+.section .data
+.align 14
Index: uspace/lib/libc/arch/mips32/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/mips32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,161 @@
+#
+# Copyright (c) 2003-2004 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.set noat
+.set noreorder
+
+
+#include <arch/asm/regname.h>
+#include <libarch/context_offset.h>
+	
+.global context_save
+.global context_restore
+	
+.macro CONTEXT_STORE r
+	sw $s0,OFFSET_S0(\r)
+	sw $s1,OFFSET_S1(\r)
+	sw $s2,OFFSET_S2(\r)
+	sw $s3,OFFSET_S3(\r)
+	sw $s4,OFFSET_S4(\r)
+	sw $s5,OFFSET_S5(\r)
+	sw $s6,OFFSET_S6(\r)
+	sw $s7,OFFSET_S7(\r)
+	sw $s8,OFFSET_S8(\r)
+	sw $gp,OFFSET_GP(\r)
+	sw $k1,OFFSET_TLS(\r)
+
+#ifdef CONFIG_MIPS_FPU	
+	mfc1 $t0,$20
+	sw $t0, OFFSET_F20(\r)
+
+	mfc1 $t0,$21
+	sw $t0, OFFSET_F21(\r)
+
+	mfc1 $t0,$22
+	sw $t0, OFFSET_F22(\r)
+
+	mfc1 $t0,$23
+	sw $t0, OFFSET_F23(\r)
+
+	mfc1 $t0,$24
+	sw $t0, OFFSET_F24(\r)
+
+	mfc1 $t0,$25
+	sw $t0, OFFSET_F25(\r)
+
+	mfc1 $t0,$26
+	sw $t0, OFFSET_F26(\r)
+
+	mfc1 $t0,$27
+	sw $t0, OFFSET_F27(\r)
+
+	mfc1 $t0,$28
+	sw $t0, OFFSET_F28(\r)
+
+	mfc1 $t0,$29
+	sw $t0, OFFSET_F29(\r)
+	
+	mfc1 $t0,$30
+	sw $t0, OFFSET_F30(\r)
+#endif	
+		
+	sw $ra,OFFSET_PC(\r)
+	sw $sp,OFFSET_SP(\r)
+.endm
+
+.macro CONTEXT_LOAD r
+	lw $s0,OFFSET_S0(\r)
+	lw $s1,OFFSET_S1(\r)
+	lw $s2,OFFSET_S2(\r)
+	lw $s3,OFFSET_S3(\r)
+	lw $s4,OFFSET_S4(\r)
+	lw $s5,OFFSET_S5(\r)
+	lw $s6,OFFSET_S6(\r)
+	lw $s7,OFFSET_S7(\r)
+	lw $s8,OFFSET_S8(\r)
+	lw $gp,OFFSET_GP(\r)
+	lw $k1,OFFSET_TLS(\r)
+
+#ifdef CONFIG_MIPS_FPU	
+	lw $t0, OFFSET_F20(\r)
+	mtc1 $t0,$20
+
+	lw $t0, OFFSET_F21(\r)
+	mtc1 $t0,$21
+
+	lw $t0, OFFSET_F22(\r)
+	mtc1 $t0,$22
+
+	lw $t0, OFFSET_F23(\r)
+	mtc1 $t0,$23
+
+	lw $t0, OFFSET_F24(\r)
+	mtc1 $t0,$24
+
+	lw $t0, OFFSET_F25(\r)
+	mtc1 $t0,$25
+
+	lw $t0, OFFSET_F26(\r)
+	mtc1 $t0,$26
+
+	lw $t0, OFFSET_F27(\r)
+	mtc1 $t0,$27
+
+	lw $t0, OFFSET_F28(\r)
+	mtc1 $t0,$28
+
+	lw $t0, OFFSET_F29(\r)
+	mtc1 $t0,$29
+
+	lw $t0, OFFSET_F30(\r)
+	mtc1 $t0,$30
+#endif	
+		
+	lw $ra,OFFSET_PC(\r)
+	lw $sp,OFFSET_SP(\r)
+.endm
+	
+context_save:
+	CONTEXT_STORE $a0
+
+	# context_save returns 1
+	j $ra
+	li $v0, 1	
+	
+context_restore:
+	CONTEXT_LOAD $a0
+
+	# Just for the jump into first function, but one instruction
+	# should not bother us
+	move $t9, $ra	
+	# context_restore returns 0
+	j $ra
+	xor $v0, $v0	
+
Index: uspace/lib/libc/arch/mips32/src/syscall.c
===================================================================
--- uspace/lib/libc/arch/mips32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup libcmips32
+ * @{
+ */
+/** @file
+  * @ingroup libcmips32eb	
+ */
+
+#include <libc.h>
+
+sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, 
+		   const sysarg_t p3, const sysarg_t p4,
+		   const syscall_t id)
+{
+	register sysarg_t __mips_reg_a0 asm("$4") = p1;
+	register sysarg_t __mips_reg_a1 asm("$5") = p2;
+	register sysarg_t __mips_reg_a2 asm("$6") = p3;
+	register sysarg_t __mips_reg_a3 asm("$7") = p4;
+	register sysarg_t __mips_reg_v0 asm("$2") = id;
+	
+	asm volatile (
+		"syscall\n"
+		: "=r" (__mips_reg_v0)
+		: "r" (__mips_reg_a0),
+		  "r" (__mips_reg_a1),
+		  "r" (__mips_reg_a2),
+		  "r" (__mips_reg_a3),
+		  "r" (__mips_reg_v0)
+		: "%ra" /* We are a function call, although C does not 
+			 * know it */
+	);
+	
+	return __mips_reg_v0;
+}
+
+ /** @}
+ */
+
Index: uspace/lib/libc/arch/mips32/src/thread.c
===================================================================
--- uspace/lib/libc/arch/mips32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcmips32	
+ * @{
+ */
+/** @file
+ * @ingroup libcmips32eb	
+ */
+
+#include <thread.h>
+#include <malloc.h>
+
+/** Allocate TLS & TCB for initial module threads
+ *
+ * @param data (out) Start of TLS section
+ * @param size Size of tdata+tbss section
+ * @return pointer to tcb_t structure
+ */
+tcb_t * __alloc_tls(void **data, size_t size)
+{
+	tcb_t *result;
+
+	result = malloc(sizeof(tcb_t) + size);
+	*data = ((void *)result) + sizeof(tcb_t);
+	return result;
+}
+
+void __free_tls_arch(tcb_t *tcb, size_t size)
+{
+	free(tcb);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/mips32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+	
+.set noat
+.set noreorder
+.option pic2
+	
+.globl __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+.ent __thread_entry
+__thread_entry:
+	.frame $sp, 32, $31
+	.cpload $25
+
+	#
+	# v0 contains address of uarg.
+	#
+	add $4, $2, 0
+	# Mips o32 may store its arguments on stack, make space
+	addiu $sp, -32
+	.cprestore 16
+	
+	jal __thread_main
+	nop
+		
+	#
+	# Not reached.
+	#
+.end __thread_entry
Index: uspace/lib/libc/arch/mips32eb/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/mips32eb/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = mips-sgi-irix5
+TOOLCHAIN_DIR = /usr/local/mips/bin
+CFLAGS += -mips3 
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
+
+LFLAGS += -N
+
+BFD_ARCH = mips
+BFD_NAME = elf32-big
Index: uspace/lib/libc/arch/mips32eb/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/mips32eb/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../mips32/_link.ld.in
Index: uspace/lib/libc/arch/mips32eb/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/atomic.h
Index: uspace/lib/libc/arch/mips32eb/include/config.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/config.h
Index: uspace/lib/libc/arch/mips32eb/include/context_offset.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/context_offset.h
Index: uspace/lib/libc/arch/mips32eb/include/endian.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+/** @addtogroup libcmips32eb mipseb32
+  * @brief mipseb32 architecture dependent parts of libc
+  * @ingroup lc
+ * @{
+ */
+/** @file
+ */
+
+
+#ifndef LIBC_mips32eb_ENDIAN_H_
+#define LIBC_mips32eb_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __BIG_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/mips32eb/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/faddr.h
Index: uspace/lib/libc/arch/mips32eb/include/limits.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/limits.h
Index: uspace/lib/libc/arch/mips32eb/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/psthread.h
Index: uspace/lib/libc/arch/mips32eb/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/stackarg.h
Index: uspace/lib/libc/arch/mips32eb/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/syscall.h
Index: uspace/lib/libc/arch/mips32eb/include/thread.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/thread.h
Index: uspace/lib/libc/arch/mips32eb/include/types.h
===================================================================
--- uspace/lib/libc/arch/mips32eb/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../../mips32/include/types.h
Index: uspace/lib/libc/arch/mips32eb/src
===================================================================
--- uspace/lib/libc/arch/mips32eb/src	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/mips32eb/src	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+../mips32/src
Index: uspace/lib/libc/arch/ppc32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/ppc32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = ppc-linux-gnu
+TOOLCHAIN_DIR = /usr/local/ppc/bin
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
+
+CFLAGS += -mcpu=powerpc -msoft-float -m32
+AFLAGS += -a32
+LFLAGS += -N
+
+BFD_NAME = elf32-powerpc
+BFD_ARCH = powerpc:common
Index: uspace/lib/libc/arch/ppc32/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/ppc32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x1000;
+
+	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.init);
+	} :text
+	.text : {
+		*(.text);
+		*(.rodata*);
+	} :text
+	
+	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.data);
+		*(.sdata);
+	} :data
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+	.bss : {
+		*(.sbss);
+		*(COMMON);
+		*(.bss);
+	} :data
+
+	. = ALIGN(0x1000);
+	_heap = .;
+	
+	/DISCARD/ : {
+		*(*);
+	}
+
+}
Index: uspace/lib/libc/arch/ppc32/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_ATOMIC_H_
+#define LIBC_ppc32_ATOMIC_H_
+
+static inline void atomic_inc(atomic_t *val)
+{
+	long tmp;
+
+	asm volatile (
+		"1:\n"
+		"lwarx %0, 0, %2\n"
+		"addic %0, %0, 1\n"
+		"stwcx. %0, 0, %2\n"
+		"bne- 1b"
+		: "=&r" (tmp), "=m" (val->count)
+		: "r" (&val->count), "m" (val->count)
+		: "cc");
+}
+
+static inline void atomic_dec(atomic_t *val)
+{
+	long tmp;
+
+	asm volatile (
+		"1:\n"
+		"lwarx %0, 0, %2\n"
+		"addic %0, %0, -1\n"
+		"stwcx.	%0, 0, %2\n"
+		"bne- 1b"
+		: "=&r" (tmp), "=m" (val->count)
+		: "r" (&val->count), "m" (val->count)
+		: "cc");
+}
+
+static inline long atomic_postinc(atomic_t *val)
+{
+	atomic_inc(val);
+	return val->count - 1;
+}
+
+static inline long atomic_postdec(atomic_t *val)
+{
+	atomic_dec(val);
+	return val->count + 1;
+}
+
+static inline long atomic_preinc(atomic_t *val)
+{
+	atomic_inc(val);
+	return val->count;
+}
+
+static inline long atomic_predec(atomic_t *val)
+{
+	atomic_dec(val);
+	return val->count;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/config.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libppc32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_CONFIG_H_
+#define LIBC_ppc32_CONFIG_H_
+
+#define PAGE_WIDTH	12
+#define PAGE_SIZE	(1<<PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/* dummy */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/context_offset.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,25 @@
+/* struct context */
+#define OFFSET_SP    0x0
+#define OFFSET_PC    0x4
+#define OFFSET_R2    0x8
+#define OFFSET_R13   0xc
+#define OFFSET_R14   0x10
+#define OFFSET_R15   0x14
+#define OFFSET_R16   0x18
+#define OFFSET_R17   0x1c
+#define OFFSET_R18   0x20
+#define OFFSET_R19   0x24
+#define OFFSET_R20   0x28
+#define OFFSET_R21   0x2c
+#define OFFSET_R22   0x30
+#define OFFSET_R23   0x34
+#define OFFSET_R24   0x38
+#define OFFSET_R25   0x3c
+#define OFFSET_R26   0x40
+#define OFFSET_R27   0x44
+#define OFFSET_R28   0x48
+#define OFFSET_R29   0x4c
+#define OFFSET_R30   0x50
+#define OFFSET_R31   0x54
+#define OFFSET_CR    0x58
+#define OFFSET_CR    0x58
Index: uspace/lib/libc/arch/ppc32/include/endian.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_ENDIAN_H_
+#define LIBC_ppc32_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __BIG_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_FADDR_H_
+#define LIBC_ppc32_FADDR_H_
+
+#include <libarch/types.h>
+
+#define FADDR(fptr)		((uintptr_t) (fptr))
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/limits.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_LIMITS_H_
+#define LIBC_ppc32_LIMITS_H_
+
+#define LONG_MIN MIN_INT32
+#define LONG_MAX MAX_INT32
+#define ULONG_MIN MIN_UINT32
+#define ULONG_MAX MAX_UINT32
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_PSTHREAD_H_
+#define LIBC_ppc32_PSTHREAD_H_
+
+#include <types.h>
+
+/* We define our own context_set, because we need to set
+ * the TLS pointer to the tcb+0x7000
+ *
+ * See tls_set in thread.h
+ */
+#define context_set(c, _pc, stack, size, ptls) 			\
+	(c)->pc = (sysarg_t) (_pc);				\
+	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
+	(c)->tls = ((sysarg_t) (ptls)) + 0x7000 + sizeof(tcb_t);
+
+#define SP_DELTA	16
+
+typedef struct {
+	uint32_t sp;
+	uint32_t pc;
+	
+	uint32_t tls;
+	uint32_t r13;
+	uint32_t r14;
+	uint32_t r15;
+	uint32_t r16;
+	uint32_t r17;
+	uint32_t r18;
+	uint32_t r19;
+	uint32_t r20;
+	uint32_t r21;
+	uint32_t r22;
+	uint32_t r23;
+	uint32_t r24;
+	uint32_t r25;
+	uint32_t r26;
+	uint32_t r27;
+	uint32_t r28;
+	uint32_t r29;
+	uint32_t r30;
+	uint32_t r31;
+	
+	uint32_t cr;
+} __attribute__ ((packed)) context_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/regname.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/regname.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/regname.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_REGNAME_H_
+#define LIBC_ppc32_REGNAME_H_
+
+/* Condition Register Bit Fields */
+#define	cr0	0
+#define	cr1	1
+#define	cr2	2
+#define	cr3	3
+#define	cr4	4
+#define	cr5	5
+#define	cr6	6
+#define	cr7	7
+
+/* General Purpose Registers (GPRs) */
+#define	r0	0
+#define	r1	1
+#define	r2	2
+#define	r3	3
+#define	r4	4
+#define	r5	5
+#define	r6	6
+#define	r7	7
+#define	r8	8
+#define	r9	9
+#define	r10	10
+#define	r11	11
+#define	r12	12
+#define	r13	13
+#define	r14	14
+#define	r15	15
+#define	r16	16
+#define	r17	17
+#define	r18	18
+#define	r19	19
+#define	r20	20
+#define	r21	21
+#define	r22	22
+#define	r23	23
+#define	r24	24
+#define	r25	25
+#define	r26	26
+#define	r27	27
+#define	r28	28
+#define	r29	29
+#define	r30	30
+#define	r31	31
+
+/* GPR Aliases */
+#define	sp	1
+
+/* Floating Point Registers (FPRs) */
+#define	fr0		0
+#define	fr1		1
+#define	fr2		2
+#define	fr3		3
+#define	fr4		4
+#define	fr5		5
+#define	fr6		6
+#define	fr7		7
+#define	fr8		8
+#define	fr9		9
+#define	fr10	10
+#define	fr11	11
+#define	fr12	12
+#define	fr13	13
+#define	fr14	14
+#define	fr15	15
+#define	fr16	16
+#define	fr17	17
+#define	fr18	18
+#define	fr19	19
+#define	fr20	20
+#define	fr21	21
+#define	fr22	22
+#define	fr23	23
+#define	fr24	24
+#define	fr25	25
+#define	fr26	26
+#define	fr27	27
+#define	fr28	28
+#define	fr29	29
+#define	fr30	30
+#define	fr31	31
+
+#define	vr0		0
+#define	vr1		1
+#define	vr2		2
+#define	vr3		3
+#define	vr4		4
+#define	vr5		5
+#define	vr6		6
+#define	vr7		7
+#define	vr8		8
+#define	vr9		9
+#define	vr10	10
+#define	vr11	11
+#define	vr12	12
+#define	vr13	13
+#define	vr14	14
+#define	vr15	15
+#define	vr16	16
+#define	vr17	17
+#define	vr18	18
+#define	vr19	19
+#define	vr20	20
+#define	vr21	21
+#define	vr22	22
+#define	vr23	23
+#define	vr24	24
+#define	vr25	25
+#define	vr26	26
+#define	vr27	27
+#define	vr28	28
+#define	vr29	29
+#define	vr30	30
+#define	vr31	31
+
+#define	evr0	0
+#define	evr1	1
+#define	evr2	2
+#define	evr3	3
+#define	evr4	4
+#define	evr5	5
+#define	evr6	6
+#define	evr7	7
+#define	evr8	8
+#define	evr9	9
+#define	evr10	10
+#define	evr11	11
+#define	evr12	12
+#define	evr13	13
+#define	evr14	14
+#define	evr15	15
+#define	evr16	16
+#define	evr17	17
+#define	evr18	18
+#define	evr19	19
+#define	evr20	20
+#define	evr21	21
+#define	evr22	22
+#define	evr23	23
+#define	evr24	24
+#define	evr25	25
+#define	evr26	26
+#define	evr27	27
+#define	evr28	28
+#define	evr29	29
+#define	evr30	30
+#define	evr31	31
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STACKARG_H_
+#define LIBC_STACKARG_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef LIBC_ppc32_SYSCALL_H_
+#define LIBC_ppc32_SYSCALL_H_
+
+#include <syscall.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/thread.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_THREAD_H_
+#define LIBC_ppc32_THREAD_H_
+
+#define PPC_TP_OFFSET 0x7000
+
+typedef struct {
+	void *pst_data;
+} tcb_t;
+
+static inline void __tcb_set(tcb_t *tcb)
+{
+	void *tp = tcb;
+	tp += PPC_TP_OFFSET + sizeof(tcb_t);
+	
+	asm volatile (
+		"mr %%r2, %0\n"
+		:
+		: "r" (tp)
+	);
+}
+
+static inline tcb_t * __tcb_get(void)
+{
+	void * retval;
+	
+	asm volatile (
+		"mr %0, %%r2\n"
+		: "=r" (retval)
+	);
+
+	return (tcb_t *)(retval - PPC_TP_OFFSET - sizeof(tcb_t));
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/include/types.h
===================================================================
--- uspace/lib/libc/arch/ppc32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc32_TYPES_H_
+#define LIBC_ppc32_TYPES_H_
+
+typedef unsigned int sysarg_t;
+typedef unsigned int size_t;
+typedef signed int ssize_t;
+typedef ssize_t off_t;
+
+typedef char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+typedef long long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long int uint64_t;
+
+typedef uint32_t uintptr_t;
+
+#endif
+
+/** @}
+ */
+
Index: uspace/lib/libc/arch/ppc32/src/entry.s
===================================================================
--- uspace/lib/libc/arch/ppc32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.section .init, "ax"
+
+.org 0
+
+.globl __entry
+.globl __entry_driver
+
+## User-space task entry point
+#
+#
+__entry:
+	bl __main
+	bl __io_init
+	bl main
+	bl __exit
+
+__entry_driver:
+	bl __main
+	bl main
+	bl __exit
Index: uspace/lib/libc/arch/ppc32/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/ppc32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,110 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global context_save
+.global context_restore
+
+#include <libarch/regname.h>
+#include <libarch/context_offset.h>
+
+.macro CONTEXT_STORE r
+	stw sp, OFFSET_SP(\r)
+	stw r2, OFFSET_R2(\r)
+	stw r13, OFFSET_R13(\r)
+	stw r14, OFFSET_R14(\r)
+	stw r15, OFFSET_R15(\r)
+	stw r16, OFFSET_R16(\r)
+	stw r17, OFFSET_R17(\r)
+	stw r18, OFFSET_R18(\r)
+	stw r19, OFFSET_R19(\r)
+	stw r20, OFFSET_R20(\r)
+	stw r21, OFFSET_R21(\r)
+	stw r22, OFFSET_R22(\r)
+	stw r23, OFFSET_R23(\r)
+	stw r24, OFFSET_R24(\r)
+	stw r25, OFFSET_R25(\r)
+	stw r26, OFFSET_R26(\r)
+	stw r27, OFFSET_R27(\r)
+	stw r28, OFFSET_R28(\r)
+	stw r29, OFFSET_R29(\r)
+	stw r30, OFFSET_R30(\r)
+	stw r31, OFFSET_R31(\r)
+.endm
+
+.macro CONTEXT_LOAD r
+	lwz sp, OFFSET_SP(\r)
+	lwz r2, OFFSET_R2(\r)
+	lwz r13, OFFSET_R13(\r)
+	lwz r14, OFFSET_R14(\r)
+	lwz r15, OFFSET_R15(\r)
+	lwz r16, OFFSET_R16(\r)
+	lwz r17, OFFSET_R17(\r)
+	lwz r18, OFFSET_R18(\r)
+	lwz r19, OFFSET_R19(\r)
+	lwz r20, OFFSET_R20(\r)
+	lwz r21, OFFSET_R21(\r)
+	lwz r22, OFFSET_R22(\r)
+	lwz r23, OFFSET_R23(\r)
+	lwz r24, OFFSET_R24(\r)
+	lwz r25, OFFSET_R25(\r)
+	lwz r26, OFFSET_R26(\r)
+	lwz r27, OFFSET_R27(\r)
+	lwz r28, OFFSET_R28(\r)
+	lwz r29, OFFSET_R29(\r)
+	lwz r30, OFFSET_R30(\r)
+	lwz r31, OFFSET_R31(\r)
+.endm
+
+context_save:
+	CONTEXT_STORE r3
+	
+	mflr r4
+	stw r4, OFFSET_PC(r3)
+	
+	mfcr r4
+	stw r4, OFFSET_CR(r3)
+	
+	# context_save returns 1
+	li r3, 1
+	blr
+
+
+context_restore:
+	CONTEXT_LOAD r3
+	
+	lwz r4, OFFSET_CR(r3)
+	mtcr r4
+	
+	lwz r4, OFFSET_PC(r3)
+	mtlr r4
+	
+	# context_restore returns 0
+	li r3, 0
+	blr
Index: uspace/lib/libc/arch/ppc32/src/syscall.c
===================================================================
--- uspace/lib/libc/arch/ppc32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32 ppc32
+  * @brief ppc32 architecture dependent parts of libc
+  * @ingroup lc
+ * @{
+ */
+/** @file
+ */
+
+#include <libc.h>
+
+sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id)
+{
+	register sysarg_t __ppc32_reg_r3 asm("3") = p1;
+	register sysarg_t __ppc32_reg_r4 asm("4") = p2;
+	register sysarg_t __ppc32_reg_r5 asm("5") = p3;
+	register sysarg_t __ppc32_reg_r6 asm("6") = p4;
+	register sysarg_t __ppc32_reg_r7 asm("7") = id;
+	
+	asm volatile (
+		"sc\n"
+		: "=r" (__ppc32_reg_r3)
+		: "r" (__ppc32_reg_r3),
+		  "r" (__ppc32_reg_r4),
+		  "r" (__ppc32_reg_r5),
+		  "r" (__ppc32_reg_r6),
+		  "r" (__ppc32_reg_r7)
+	);
+	
+	return __ppc32_reg_r3;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/src/thread.c
===================================================================
--- uspace/lib/libc/arch/ppc32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc32	
+ * @{
+ */
+/** @file
+ */
+
+#include <thread.h>
+#include <malloc.h>
+
+/** Allocate TLS & TCB for initial module threads
+ *
+ * @param data Start of data section
+ * @return pointer to tcb_t structure
+ *
+ */
+tcb_t * __alloc_tls(void **data, size_t size)
+{
+	tcb_t *result;
+
+	result = malloc(sizeof(tcb_t) + size);
+	*data = ((void *)result) + sizeof(tcb_t);
+	return result;
+}
+
+void __free_tls_arch(tcb_t *tcb, size_t size)
+{
+	free(tcb);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc32/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/ppc32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc32/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+	
+.globl __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+__thread_entry:
+	b __thread_main
+
+.end __thread_entry
Index: uspace/lib/libc/arch/ppc64/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/ppc64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = ppc64-linux-gnu
+TOOLCHAIN_DIR = /usr/local/ppc64/bin
+
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
+
+CFLAGS += -mcpu=powerpc64 -msoft-float -m64
+AFLAGS += -a64
+LFLAGS += -N
+
+BFD_NAME = elf64-powerpc
+BFD_ARCH = powerpc:common64
Index: uspace/lib/libc/arch/ppc64/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/ppc64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x1000;
+
+	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.init);
+	} :text
+	.text : {
+		*(.text);
+		*(.toc);
+		*(.rodata*);
+	} :text
+	
+	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.opd);
+		*(.data*);
+		*(.sdata);
+	} :data
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+	.bss : {
+		*(.sbss);
+		*(COMMON);
+		*(.bss);
+	} :data
+
+	. = ALIGN(0x1000);
+	_heap = .;
+	
+	/DISCARD/ : {
+		*(*);
+	}
+
+}
Index: uspace/lib/libc/arch/ppc64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_ATOMIC_H_
+#define LIBC_ppc64_ATOMIC_H_
+
+static inline void atomic_inc(atomic_t *val)
+{
+	long tmp;
+
+	asm volatile (
+		"1:\n"
+		"lwarx %0, 0, %2\n"
+		"addic %0, %0, 1\n"
+		"stwcx. %0, 0, %2\n"
+		"bne- 1b"
+		: "=&r" (tmp), "=m" (val->count)
+		: "r" (&val->count), "m" (val->count)
+		: "cc");
+}
+
+static inline void atomic_dec(atomic_t *val)
+{
+	long tmp;
+
+	asm volatile (
+		"1:\n"
+		"lwarx %0, 0, %2\n"
+		"addic %0, %0, -1\n"
+		"stwcx.	%0, 0, %2\n"
+		"bne- 1b"
+		: "=&r" (tmp), "=m" (val->count)
+		: "r" (&val->count), "m" (val->count)
+		: "cc");
+}
+
+static inline long atomic_postinc(atomic_t *val)
+{
+	atomic_inc(val);
+	return val->count - 1;
+}
+
+static inline long atomic_postdec(atomic_t *val)
+{
+	atomic_dec(val);
+	return val->count + 1;
+}
+
+static inline long atomic_preinc(atomic_t *val)
+{
+	atomic_inc(val);
+	return val->count;
+}
+
+static inline long atomic_predec(atomic_t *val)
+{
+	atomic_dec(val);
+	return val->count;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/config.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libppc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_CONFIG_H_
+#define LIBC_ppc64_CONFIG_H_
+
+#define PAGE_WIDTH	12
+#define PAGE_SIZE	(1<<PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/* dummy */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/context_offset.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,24 @@
+/* struct context */
+#define OFFSET_SP    0x0
+#define OFFSET_PC    0x4
+#define OFFSET_R2    0x8
+#define OFFSET_R13   0xc
+#define OFFSET_R14   0x10
+#define OFFSET_R15   0x14
+#define OFFSET_R16   0x18
+#define OFFSET_R17   0x1c
+#define OFFSET_R18   0x20
+#define OFFSET_R19   0x24
+#define OFFSET_R20   0x28
+#define OFFSET_R21   0x2c
+#define OFFSET_R22   0x30
+#define OFFSET_R23   0x34
+#define OFFSET_R24   0x38
+#define OFFSET_R25   0x3c
+#define OFFSET_R26   0x40
+#define OFFSET_R27   0x44
+#define OFFSET_R28   0x48
+#define OFFSET_R29   0x4c
+#define OFFSET_R30   0x50
+#define OFFSET_R31   0x54
+#define OFFSET_CR    0x58
Index: uspace/lib/libc/arch/ppc64/include/endian.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_ENDIAN_H_
+#define LIBC_ppc64_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __BIG_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_FADDR_H_
+#define LIBC_ppc64_FADDR_H_
+
+#include <libarch/types.h>
+
+#define FADDR(fptr)		((uintptr_t) (fptr))
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/limits.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_LIMITS_H_
+#define LIBC_ppc64_LIMITS_H_
+
+#define LONG_MIN MIN_INT64
+#define LONG_MAX MAX_INT64
+#define ULONG_MIN MIN_UINT64
+#define ULONG_MAX MAX_UINT64
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_PSTHREAD_H_
+#define LIBC_ppc64_PSTHREAD_H_
+
+#include <types.h>
+
+/* We define our own context_set, because we need to set
+ * the TLS pointer to the tcb+0x7000
+ *
+ * See tls_set in thread.h
+ */
+#define context_set(c, _pc, stack, size, ptls) 			\
+	(c)->pc = (sysarg_t) (_pc);				\
+	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
+	(c)->tls = ((sysarg_t) (ptls)) + 0x7000 + sizeof(tcb_t);
+
+#define SP_DELTA	16
+
+typedef struct {
+	uint64_t sp;
+	uint64_t pc;
+	
+	uint64_t tls;
+	uint64_t r13;
+	uint64_t r14;
+	uint64_t r15;
+	uint64_t r16;
+	uint64_t r17;
+	uint64_t r18;
+	uint64_t r19;
+	uint64_t r20;
+	uint64_t r21;
+	uint64_t r22;
+	uint64_t r23;
+	uint64_t r24;
+	uint64_t r25;
+	uint64_t r26;
+	uint64_t r27;
+	uint64_t r28;
+	uint64_t r29;
+	uint64_t r30;
+	uint64_t r31;
+	
+	uint64_t cr;
+} __attribute__ ((packed)) context_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/regname.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/regname.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/regname.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_REGNAME_H_
+#define LIBC_ppc64_REGNAME_H_
+
+/* Condition Register Bit Fields */
+#define	cr0	0
+#define	cr1	1
+#define	cr2	2
+#define	cr3	3
+#define	cr4	4
+#define	cr5	5
+#define	cr6	6
+#define	cr7	7
+
+/* General Purpose Registers (GPRs) */
+#define	r0	0
+#define	r1	1
+#define	r2	2
+#define	r3	3
+#define	r4	4
+#define	r5	5
+#define	r6	6
+#define	r7	7
+#define	r8	8
+#define	r9	9
+#define	r10	10
+#define	r11	11
+#define	r12	12
+#define	r13	13
+#define	r14	14
+#define	r15	15
+#define	r16	16
+#define	r17	17
+#define	r18	18
+#define	r19	19
+#define	r20	20
+#define	r21	21
+#define	r22	22
+#define	r23	23
+#define	r24	24
+#define	r25	25
+#define	r26	26
+#define	r27	27
+#define	r28	28
+#define	r29	29
+#define	r30	30
+#define	r31	31
+
+/* GPR Aliases */
+#define	sp	1
+
+/* Floating Point Registers (FPRs) */
+#define	fr0		0
+#define	fr1		1
+#define	fr2		2
+#define	fr3		3
+#define	fr4		4
+#define	fr5		5
+#define	fr6		6
+#define	fr7		7
+#define	fr8		8
+#define	fr9		9
+#define	fr10	10
+#define	fr11	11
+#define	fr12	12
+#define	fr13	13
+#define	fr14	14
+#define	fr15	15
+#define	fr16	16
+#define	fr17	17
+#define	fr18	18
+#define	fr19	19
+#define	fr20	20
+#define	fr21	21
+#define	fr22	22
+#define	fr23	23
+#define	fr24	24
+#define	fr25	25
+#define	fr26	26
+#define	fr27	27
+#define	fr28	28
+#define	fr29	29
+#define	fr30	30
+#define	fr31	31
+
+#define	vr0		0
+#define	vr1		1
+#define	vr2		2
+#define	vr3		3
+#define	vr4		4
+#define	vr5		5
+#define	vr6		6
+#define	vr7		7
+#define	vr8		8
+#define	vr9		9
+#define	vr10	10
+#define	vr11	11
+#define	vr12	12
+#define	vr13	13
+#define	vr14	14
+#define	vr15	15
+#define	vr16	16
+#define	vr17	17
+#define	vr18	18
+#define	vr19	19
+#define	vr20	20
+#define	vr21	21
+#define	vr22	22
+#define	vr23	23
+#define	vr24	24
+#define	vr25	25
+#define	vr26	26
+#define	vr27	27
+#define	vr28	28
+#define	vr29	29
+#define	vr30	30
+#define	vr31	31
+
+#define	evr0	0
+#define	evr1	1
+#define	evr2	2
+#define	evr3	3
+#define	evr4	4
+#define	evr5	5
+#define	evr6	6
+#define	evr7	7
+#define	evr8	8
+#define	evr9	9
+#define	evr10	10
+#define	evr11	11
+#define	evr12	12
+#define	evr13	13
+#define	evr14	14
+#define	evr15	15
+#define	evr16	16
+#define	evr17	17
+#define	evr18	18
+#define	evr19	19
+#define	evr20	20
+#define	evr21	21
+#define	evr22	22
+#define	evr23	23
+#define	evr24	24
+#define	evr25	25
+#define	evr26	26
+#define	evr27	27
+#define	evr28	28
+#define	evr29	29
+#define	evr30	30
+#define	evr31	31
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STACKARG_H_
+#define LIBC_STACKARG_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef LIBC_ppc64_SYSCALL_H_
+#define LIBC_ppc64_SYSCALL_H_
+
+#include <syscall.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/thread.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_THREAD_H_
+#define LIBC_ppc64_THREAD_H_
+
+#define PPC_TP_OFFSET 0x7000
+
+typedef struct {
+	void *pst_data;
+} tcb_t;
+
+static inline void __tcb_set(tcb_t *tcb)
+{
+	void *tp = tcb;
+	tp += PPC_TP_OFFSET + sizeof(tcb_t);
+	
+	asm volatile (
+		"mr %%r2, %0\n"
+		:
+		: "r" (tp)
+	);
+}
+
+static inline tcb_t * __tcb_get(void)
+{
+	void * retval;
+	
+	asm volatile (
+		"mr %0, %%r2\n"
+		: "=r" (retval)
+	);
+
+	return (tcb_t *)(retval - PPC_TP_OFFSET - sizeof(tcb_t));
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/include/types.h
===================================================================
--- uspace/lib/libc/arch/ppc64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ppc64_TYPES_H_
+#define LIBC_ppc64_TYPES_H_
+
+typedef unsigned long sysarg_t;
+typedef unsigned long size_t;
+typedef signed long ssize_t;
+typedef ssize_t off_t;
+
+typedef char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+typedef long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long int uint64_t;
+
+typedef uint64_t uintptr_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/src/entry.s
===================================================================
--- uspace/lib/libc/arch/ppc64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.section .init, "ax"
+
+.org 0
+
+.globl __entry
+.globl __entry_driver
+
+## User-space task entry point
+#
+#
+__entry:
+	bl __main
+	bl __io_init
+	bl main
+	bl __exit
+
+__entry_driver:
+	bl __main
+	bl main
+	bl __exit
Index: uspace/lib/libc/arch/ppc64/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/ppc64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,110 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+
+.global context_save
+.global context_restore
+
+#include <libarch/regname.h>
+#include <libarch/context_offset.h>
+
+.macro CONTEXT_STORE r
+	stw sp, OFFSET_SP(\r)
+	stw r2, OFFSET_R2(\r)
+	stw r13, OFFSET_R13(\r)
+	stw r14, OFFSET_R14(\r)
+	stw r15, OFFSET_R15(\r)
+	stw r16, OFFSET_R16(\r)
+	stw r17, OFFSET_R17(\r)
+	stw r18, OFFSET_R18(\r)
+	stw r19, OFFSET_R19(\r)
+	stw r20, OFFSET_R20(\r)
+	stw r21, OFFSET_R21(\r)
+	stw r22, OFFSET_R22(\r)
+	stw r23, OFFSET_R23(\r)
+	stw r24, OFFSET_R24(\r)
+	stw r25, OFFSET_R25(\r)
+	stw r26, OFFSET_R26(\r)
+	stw r27, OFFSET_R27(\r)
+	stw r28, OFFSET_R28(\r)
+	stw r29, OFFSET_R29(\r)
+	stw r30, OFFSET_R30(\r)
+	stw r31, OFFSET_R31(\r)
+.endm
+
+.macro CONTEXT_LOAD r
+	lwz sp, OFFSET_SP(\r)
+	lwz r2, OFFSET_R2(\r)
+	lwz r13, OFFSET_R13(\r)
+	lwz r14, OFFSET_R14(\r)
+	lwz r15, OFFSET_R15(\r)
+	lwz r16, OFFSET_R16(\r)
+	lwz r17, OFFSET_R17(\r)
+	lwz r18, OFFSET_R18(\r)
+	lwz r19, OFFSET_R19(\r)
+	lwz r20, OFFSET_R20(\r)
+	lwz r21, OFFSET_R21(\r)
+	lwz r22, OFFSET_R22(\r)
+	lwz r23, OFFSET_R23(\r)
+	lwz r24, OFFSET_R24(\r)
+	lwz r25, OFFSET_R25(\r)
+	lwz r26, OFFSET_R26(\r)
+	lwz r27, OFFSET_R27(\r)
+	lwz r28, OFFSET_R28(\r)
+	lwz r29, OFFSET_R29(\r)
+	lwz r30, OFFSET_R30(\r)
+	lwz r31, OFFSET_R31(\r)
+.endm
+
+context_save:
+	CONTEXT_STORE r3
+	
+	mflr r4
+	stw r4, OFFSET_PC(r3)
+	
+	mfcr r4
+	stw r4, OFFSET_CR(r3)
+	
+	# context_save returns 1
+	li r3, 1
+	blr
+
+
+context_restore:
+	CONTEXT_LOAD r3
+	
+	lwz r4, OFFSET_CR(r3)
+	mtcr r4
+	
+	lwz r4, OFFSET_PC(r3)
+	mtlr r4
+	
+	# context_restore returns 0
+	li r3, 0
+	blr
Index: uspace/lib/libc/arch/ppc64/src/syscall.c
===================================================================
--- uspace/lib/libc/arch/ppc64/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/src/syscall.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64 ppc64
+ * @brief ppc64 architecture dependent parts of libc
+ * @ingroup lc
+ * @{
+ */
+/** @file
+ */
+
+#include <libc.h>
+
+sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id)
+{
+	register sysarg_t __ppc32_reg_r3 asm("3") = p1;
+	register sysarg_t __ppc32_reg_r4 asm("4") = p2;
+	register sysarg_t __ppc32_reg_r5 asm("5") = p3;
+	register sysarg_t __ppc32_reg_r6 asm("6") = p4;
+	register sysarg_t __ppc32_reg_r7 asm("7") = id;
+	
+	asm volatile (
+		"sc\n"
+		: "=r" (__ppc32_reg_r3)
+		: "r" (__ppc32_reg_r3),
+		  "r" (__ppc32_reg_r4),
+		  "r" (__ppc32_reg_r5),
+		  "r" (__ppc32_reg_r6),
+		  "r" (__ppc32_reg_r7)
+	);
+	
+	return __ppc32_reg_r3;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/src/thread.c
===================================================================
--- uspace/lib/libc/arch/ppc64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcppc64	
+ * @{
+ */
+/** @file
+ */
+
+#include <thread.h>
+#include <malloc.h>
+
+/** Allocate TLS & TCB for initial module threads
+ *
+ * @param data Start of data section
+ * @return pointer to tcb_t structure
+ *
+ */
+tcb_t * __alloc_tls(void **data, size_t size)
+{
+	tcb_t *tcb;
+	
+	*data = malloc(sizeof(tcb_t) + size);
+	tcb = (tcb_t *) (*data + size);
+	return tcb;
+}
+
+void __free_tls_arch(tcb_t *tcb, size_t size)
+{
+	void *start = ((void *) tcb) - size;
+	free(start);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/ppc64/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/ppc64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/ppc64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+	
+.globl __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+__thread_entry:
+	b __thread_main
+
+.end __thread_entry
Index: uspace/lib/libc/arch/sparc64/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/sparc64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/Makefile.inc	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = sparc64-linux-gnu
+TOOLCHAIN_DIR = /usr/local/sparc64/bin
+
+ARCH_SOURCES += arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
+
+CFLAGS += -mcpu=ultrasparc -m64
+LFLAGS += -no-check-sections -N
+
+BFD_NAME = elf64-sparc
+BFD_ARCH = sparc
Index: uspace/lib/libc/arch/sparc64/_link.ld.in
===================================================================
--- uspace/lib/libc/arch/sparc64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/_link.ld.in	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,51 @@
+STARTUP(../../lib/libc/arch/ARCH/src/entry.o)
+ENTRY(__entry)
+
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
+SECTIONS {
+	. = 0x4000;
+
+	.init ALIGN(0x4000) : SUBALIGN(0x4000) {
+		*(.init);
+	} :text
+	.text : {
+		*(.text);
+		*(.rodata*);
+	} :text
+	
+	.got ALIGN(0x4000) : SUBALIGN(0x4000) {
+		 _gp = .;
+		 *(.got*);
+	} :data
+	.data ALIGN(0x4000) : SUBALIGN(0x4000) {
+		*(.data);
+		*(.sdata);
+	} :data
+	.tdata : {
+		_tdata_start = .;
+		*(.tdata);
+		_tdata_end = .;
+	} :data
+	.tbss : {
+		_tbss_start = .;
+		*(.tbss);
+		_tbss_end = .;
+	} :data
+	.bss : {
+		*(.sbss);
+		*(COMMON);
+		*(.bss);
+	} :data
+
+	. = ALIGN(0x4000);
+	_heap = .;
+	
+	/DISCARD/ : {
+		*(*);
+	}
+
+}
Index: uspace/lib/libc/arch/sparc64/include/atomic.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_ATOMIC_H_
+#define LIBC_sparc64_ATOMIC_H_
+
+#include <types.h>
+
+/** Atomic add operation.
+ *
+ * Use atomic compare and swap operation to atomically add signed value.
+ *
+ * @param val Atomic variable.
+ * @param i Signed value to be added.
+ *
+ * @return Value of the atomic variable as it existed before addition.
+ */
+static inline long atomic_add(atomic_t *val, int i)
+{
+	uint64_t a, b;
+
+	do {
+		volatile uintptr_t x = (uint64_t) &val->count;
+
+		a = *((uint64_t *) x);
+		b = a + i;
+		asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *)x)), "+r" (b) : "r" (a));
+	} while (a != b);
+
+	return a;
+}
+
+static inline long atomic_preinc(atomic_t *val)
+{
+	return atomic_add(val, 1) + 1;
+}
+
+static inline long atomic_postinc(atomic_t *val)
+{
+	return atomic_add(val, 1);
+}
+
+static inline long atomic_predec(atomic_t *val)
+{
+	return atomic_add(val, -1) - 1;
+}
+
+static inline long atomic_postdec(atomic_t *val)
+{
+	return atomic_add(val, -1);
+}
+
+static inline void atomic_inc(atomic_t *val)
+{
+	(void) atomic_add(val, 1);
+}
+
+static inline void atomic_dec(atomic_t *val)
+{
+	(void) atomic_add(val, -1);
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/config.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/config.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_CONFIG_H_
+#define LIBC_sparc64_CONFIG_H_
+
+#define PAGE_WIDTH	14
+#define PAGE_SIZE	(1 << PAGE_WIDTH)
+#define PAGE_COLOR_BITS	0		/**< Only one page color. */
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/context_offset.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/context_offset.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,21 @@
+/* This file is automatically generated by gencontext.c. */
+/* struct context */
+#define OFFSET_SP       0x0
+#define OFFSET_PC       0x8
+#define OFFSET_I0       0x10
+#define OFFSET_I1       0x18
+#define OFFSET_I2       0x20
+#define OFFSET_I3       0x28
+#define OFFSET_I4       0x30
+#define OFFSET_I5       0x38
+#define OFFSET_FP       0x40
+#define OFFSET_I7       0x48
+#define OFFSET_L0       0x50
+#define OFFSET_L1       0x58
+#define OFFSET_L2       0x60
+#define OFFSET_L3       0x68
+#define OFFSET_L4       0x70
+#define OFFSET_L5       0x78
+#define OFFSET_L6       0x80
+#define OFFSET_L7       0x88
+#define OFFSET_TP	0x90
Index: uspace/lib/libc/arch/sparc64/include/endian.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_ENDIAN_H_
+#define LIBC_sparc64_ENDIAN_H_
+
+#ifndef LIBC_ENDIAN_H_
+# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
+#endif
+
+#define __BYTE_ORDER __BIG_ENDIAN
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/faddr.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/faddr.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_FADDR_H_
+#define LIBC_sparc64_FADDR_H_
+
+#include <libarch/types.h>
+
+#define FADDR(fptr)		((uintptr_t) (fptr))
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/limits.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_LIMITS_H_
+#define LIBC_sparc64_LIMITS_H_
+
+#define LONG_MIN MIN_INT64
+#define LONG_MAX MAX_INT64
+#define ULONG_MIN MIN_UINT64
+#define ULONG_MAX MAX_UINT64
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/psthread.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_PSTHREAD_H_
+#define LIBC_sparc64_PSTHREAD_H_
+
+#include <libarch/stack.h>
+#include <types.h>
+#include <align.h>
+
+#define SP_DELTA	STACK_WINDOW_SAVE_AREA_SIZE
+
+#ifdef context_set
+#undef context_set
+#endif
+
+#define context_set(c, _pc, stack, size, ptls)			\
+	(c)->pc = ((uintptr_t) _pc) - 8;			\
+	(c)->sp = ((uintptr_t) stack) + ALIGN_UP((size),	\
+		STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA);	\
+	(c)->fp = -STACK_BIAS;					\
+	(c)->tp = ptls
+	
+/*
+ * Save only registers that must be preserved across
+ * function calls.
+ */
+typedef struct {
+	uintptr_t sp;		/* %o6 */
+	uintptr_t pc;		/* %o7 */
+	uint64_t i0;
+	uint64_t i1;
+	uint64_t i2;
+	uint64_t i3;
+	uint64_t i4;
+	uint64_t i5;
+	uintptr_t fp;		/* %i6 */
+	uintptr_t i7;
+	uint64_t l0;
+	uint64_t l1;
+	uint64_t l2;
+	uint64_t l3;
+	uint64_t l4;
+	uint64_t l5;
+	uint64_t l6;
+	uint64_t l7;
+	uint64_t tp;		/* %g7 */
+} context_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/stack.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/stack.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/stack.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_STACK_H_
+#define LIBC_sparc64_STACK_H_
+
+#define STACK_ITEM_SIZE			8
+
+/** According to SPARC Compliance Definition, every stack frame is 16-byte aligned. */
+#define STACK_ALIGNMENT			16
+
+/**
+ * 16-extended-word save area for %i[0-7] and %l[0-7] registers.
+ */
+#define STACK_WINDOW_SAVE_AREA_SIZE	(16 * STACK_ITEM_SIZE)
+
+/**
+ * By convention, the actual top of the stack is %sp + STACK_BIAS.
+ */
+#define STACK_BIAS            2047
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/stackarg.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/stackarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_STACKARG_H_
+#define LIBC_sparc64_STACKARG_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/syscall.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_SYSCALL_H_
+#define LIBC_sparc64_SYSCALL_H_
+
+#include <types.h>
+#include <kernel/syscall/syscall.h>
+
+static inline sysarg_t
+__syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id)
+{
+	register uint64_t a1 asm("o0") = p1;
+	register uint64_t a2 asm("o1") = p2;
+	register uint64_t a3 asm("o2") = p3;
+	register uint64_t a4 asm("o3") = p4;
+
+	asm volatile (
+		"ta %5\n"
+		: "=r" (a1)
+		: "r" (a1), "r" (a2), "r" (a3), "r" (a4), "i" (id)
+		: "memory"
+	);
+	
+	return a1;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/thread.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64
+ * @{
+ */
+/**
+ * @file
+ * @brief	sparc64 TLS functions.
+ */
+
+#ifndef LIBC_sparc64_THREAD_H_
+#define LIBC_sparc64_THREAD_H_
+
+typedef struct {
+	void *self;
+	void *pst_data;
+} tcb_t;
+
+static inline void __tcb_set(tcb_t *tcb)
+{
+	asm volatile ("mov %0, %%g7\n" : : "r" (tcb) : "g7");
+}
+
+static inline tcb_t * __tcb_get(void)
+{
+	void *retval;
+
+	asm volatile ("mov %%g7, %0\n" : "=r" (retval));
+
+	return retval;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/include/types.h
===================================================================
--- uspace/lib/libc/arch/sparc64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_sparc64_TYPES_H_
+#define LIBC_sparc64_TYPES_H_
+
+typedef unsigned long sysarg_t;
+typedef unsigned long size_t;
+typedef signed long ssize_t;
+typedef ssize_t off_t;
+
+typedef signed char int8_t;
+typedef short int int16_t;
+typedef int int32_t;
+typedef long int int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long int uint64_t;
+
+typedef uint64_t uintptr_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/src/entry.s
===================================================================
--- uspace/lib/libc/arch/sparc64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/src/entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,57 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.section .init, "ax"
+
+.org 0
+
+.globl __entry
+.globl __entry_driver
+
+## User-space task entry point
+#
+#
+__entry:
+	sethi %hi(_gp), %l7
+	call __main
+	or %l7, %lo(_gp), %l7
+	call __io_init
+	nop
+	call main
+	nop
+	call __exit
+	nop
+
+__entry_driver:
+	sethi %hi(_gp), %l7
+	call __main
+	or %l7, %lo(_gp), %l7
+	call main
+	nop
+	call __exit
+	nop
Index: uspace/lib/libc/arch/sparc64/src/psthread.S
===================================================================
--- uspace/lib/libc/arch/sparc64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/src/psthread.S	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,97 @@
+#
+# Copyright (c) 2005 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#include <libarch/context_offset.h>
+
+.text   
+
+.global context_save
+.global context_restore
+
+.macro CONTEXT_STORE r
+	stx %sp, [\r + OFFSET_SP]
+	stx %o7, [\r + OFFSET_PC]
+	stx %i0, [\r + OFFSET_I0]
+	stx %i1, [\r + OFFSET_I1]
+	stx %i2, [\r + OFFSET_I2]
+	stx %i3, [\r + OFFSET_I3]
+	stx %i4, [\r + OFFSET_I4]
+	stx %i5, [\r + OFFSET_I5]
+	stx %fp, [\r + OFFSET_FP]
+	stx %i7, [\r + OFFSET_I7]
+	stx %l0, [\r + OFFSET_L0]
+	stx %l1, [\r + OFFSET_L1]
+	stx %l2, [\r + OFFSET_L2]
+	stx %l3, [\r + OFFSET_L3]
+	stx %l4, [\r + OFFSET_L4]
+	stx %l5, [\r + OFFSET_L5]
+	stx %l6, [\r + OFFSET_L6]
+	stx %l7, [\r + OFFSET_L7]
+	stx %g7, [\r + OFFSET_TP]
+.endm
+
+.macro CONTEXT_LOAD r
+	ldx [\r + OFFSET_SP], %sp
+	ldx [\r + OFFSET_PC], %o7
+	ldx [\r + OFFSET_I0], %i0
+	ldx [\r + OFFSET_I1], %i1
+	ldx [\r + OFFSET_I2], %i2
+	ldx [\r + OFFSET_I3], %i3
+	ldx [\r + OFFSET_I4], %i4
+	ldx [\r + OFFSET_I5], %i5
+	ldx [\r + OFFSET_FP], %fp
+	ldx [\r + OFFSET_I7], %i7
+	ldx [\r + OFFSET_L0], %l0
+	ldx [\r + OFFSET_L1], %l1
+	ldx [\r + OFFSET_L2], %l2
+	ldx [\r + OFFSET_L3], %l3
+	ldx [\r + OFFSET_L4], %l4
+	ldx [\r + OFFSET_L5], %l5
+	ldx [\r + OFFSET_L6], %l6
+	ldx [\r + OFFSET_L7], %l7
+	ldx [\r + OFFSET_TP], %g7
+.endm
+
+context_save:
+	CONTEXT_STORE %o0
+	retl
+	mov 1, %o0		! context_save_arch returns 1
+
+context_restore:
+	#
+	# Flush all active windows.
+	# This is essential, because CONTEXT_LOAD overwrites
+	# %sp of CWP - 1 with the value written to %fp of CWP.
+	# Flushing all active windows mitigates this problem
+	# as CWP - 1 becomes the overlap window.
+	#		
+	flushw
+	
+	CONTEXT_LOAD %o0
+	retl
+	xor %o0, %o0, %o0	! context_restore_arch returns 0
Index: uspace/lib/libc/arch/sparc64/src/thread.c
===================================================================
--- uspace/lib/libc/arch/sparc64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/src/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcsparc64 sparc64
+ * @ingroup lc
+ * @{
+ */
+/** @file
+ *
+ */
+
+#include <thread.h>
+#include <malloc.h>
+
+/*
+ * sparc64 uses thread-local storage data structures, variant II, as described
+ * in:
+ * 	Drepper U.: ELF Handling For Thread-Local Storage, 2005
+ */
+
+/** Allocate TLS variant II data structures for a thread.
+ *
+ * Only static model is supported.
+ *
+ * @param data Pointer to pointer to thread local data. This is actually an
+ * 	output argument.
+ * @param size Size of thread local data.
+ * @return Pointer to TCB structure.
+ */
+tcb_t * __alloc_tls(void **data, size_t size)
+{
+	tcb_t *tcb;
+	
+	*data = malloc(sizeof(tcb_t) + size);
+
+	tcb = (tcb_t *) (*data + size);
+	tcb->self = tcb;
+
+	return tcb;
+}
+
+/** Free TLS variant II data structures of a thread.
+ *
+ * Only static model is supported.
+ *
+ * @param tcb Pointer to TCB structure.
+ * @param size Size of thread local data.
+ */
+void __free_tls_arch(tcb_t *tcb, size_t size)
+{
+	void *start = ((void *) tcb) - size;
+	free(start);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/arch/sparc64/src/thread_entry.s
===================================================================
--- uspace/lib/libc/arch/sparc64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/arch/sparc64/src/thread_entry.s	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2006 Jakub Jermar
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.text
+	
+.globl __thread_entry
+
+## User-space thread entry point for all but the first threads.
+#
+#
+__thread_entry:
+	sethi %hi(_gp), %l7
+	call __thread_main		! %o0 contains address of uarg
+	or %l7, %lo(_gp), %l7
+	
+	! not reached
+	
+.end __thread_entry
Index: uspace/lib/libc/generic/as.c
===================================================================
--- uspace/lib/libc/generic/as.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/as.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <as.h>
+#include <libc.h>
+#include <unistd.h>
+#include <align.h>
+#include <types.h>
+#include <bitops.h>
+
+/**
+ * Either 4*256M on 32-bit architecures or 16*256M on 64-bit architectures.
+ */
+#define MAX_HEAP_SIZE	(sizeof(uintptr_t)<<28)
+
+/** Create address space area.
+ *
+ * @param address Virtual address where to place new address space area.
+ * @param size Size of the area.
+ * @param flags Flags describing type of the area.
+ *
+ * @return address on success, (void *) -1 otherwise.
+ */
+void *as_area_create(void *address, size_t size, int flags)
+{
+	return (void *) __SYSCALL3(SYS_AS_AREA_CREATE, (sysarg_t ) address,
+	    (sysarg_t) size, (sysarg_t) flags);
+}
+
+/** Resize address space area.
+ *
+ * @param address Virtual address pointing into already existing address space
+ * 	area.
+ * @param size New requested size of the area.
+ * @param flags Currently unused.
+ *
+ * @return Zero on success or a code from @ref errno.h on failure.
+ */
+int as_area_resize(void *address, size_t size, int flags)
+{
+	return __SYSCALL3(SYS_AS_AREA_RESIZE, (sysarg_t ) address,
+	    (sysarg_t) size, (sysarg_t) flags);
+}
+
+/** Destroy address space area.
+ *
+ * @param address Virtual address pointing into the address space area being
+ * 	destroyed.
+ *
+ * @return Zero on success or a code from @ref errno.h on failure.
+ */
+int as_area_destroy(void *address)
+{
+	return __SYSCALL1(SYS_AS_AREA_DESTROY, (sysarg_t ) address);
+}
+
+static size_t heapsize = 0;
+static size_t maxheapsize = (size_t) (-1);
+
+static void * last_allocated = 0;
+
+/* Start of heap linker symbol */
+extern char _heap;
+
+/** Sbrk emulation 
+ *
+ * @param incr New area that should be allocated or negative, 
+               if it should be shrinked
+ * @return Pointer to newly allocated area
+ */
+void *sbrk(ssize_t incr)
+{
+	int rc;
+	void *res;
+	
+	/* Check for invalid values */
+	if (incr < 0 && -incr > heapsize)
+		return NULL;
+	
+	/* Check for too large value */
+	if (incr > 0 && incr+heapsize < heapsize)
+		return NULL;
+	
+	/* Check for too small values */
+	if (incr < 0 && incr+heapsize > heapsize)
+		return NULL;
+	
+	/* Check for user limit */
+	if ((maxheapsize != (size_t) (-1)) && (heapsize + incr) > maxheapsize)
+		return NULL;
+	
+	rc = as_area_resize(&_heap, heapsize + incr, 0);
+	if (rc != 0)
+		return NULL;
+	
+	/* Compute start of new area */
+	res = (void *) &_heap + heapsize;
+
+	heapsize += incr;
+
+	return res;
+}
+
+/** Set maximum heap size and return pointer just after the heap */
+void *set_maxheapsize(size_t mhs)
+{
+	maxheapsize = mhs;
+	/* Return pointer to area not managed by sbrk */
+	return ((void *) &_heap + maxheapsize);
+}
+
+/** Return pointer to some unmapped area, where fits new as_area
+ *
+ * @param sz Requested size of the allocation.
+ *
+ * @return Pointer to the beginning 
+ *
+ * TODO: make some first_fit/... algorithm, we are now just incrementing
+ *       the pointer to last area
+ */
+void *as_get_mappable_page(size_t sz)
+{
+	void *res;
+	uint64_t asz;
+	int i;
+	
+	if (!sz)
+		return NULL;	
+
+	asz = 1 << (fnzb64(sz - 1) + 1);
+
+	/* Set heapsize to some meaningful value */
+	if (maxheapsize == -1)
+		set_maxheapsize(MAX_HEAP_SIZE);
+	
+	/*
+	 * Make sure we allocate from naturally aligned address.
+	 */
+	i = 0;
+	if (!last_allocated) {
+		last_allocated = (void *) ALIGN_UP((void *) &_heap +
+		    maxheapsize, asz);
+	} else {
+		last_allocated = (void *) ALIGN_UP(((uintptr_t)
+		    last_allocated) + (int) (i > 0), asz);
+	}
+
+	res = last_allocated;
+	last_allocated += ALIGN_UP(sz, PAGE_SIZE);
+
+	return res;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/async.c
===================================================================
--- uspace/lib/libc/generic/async.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/async.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,811 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+/**
+ * Asynchronous library
+ *
+ * The aim of this library is facilitating writing programs utilizing 
+ * the asynchronous nature of HelenOS IPC, yet using a normal way
+ * of programming. 
+ *
+ * You should be able to write very simple multithreaded programs, 
+ * the async framework will automatically take care of most synchronization
+ * problems.
+ *
+ * Default semantics:
+ * - send() - send asynchronously. If the kernel refuses to send more
+ *            messages, [ try to get responses from kernel, if nothing
+ *            found, might try synchronous ]
+ *
+ * Example of use:
+ * 
+ * 1) Multithreaded client application
+ *  create_thread(thread1);
+ *  create_thread(thread2);
+ *  ...
+ *  
+ *  thread1() {
+ *        conn = ipc_connect_me_to();
+ *        c1 = send(conn);
+ *        c2 = send(conn);
+ *        wait_for(c1);
+ *        wait_for(c2);
+ *  }
+ *
+ *
+ * 2) Multithreaded server application
+ * main() {
+ *      async_manager();
+ * }
+ * 
+ *
+ * client_connection(icallid, *icall) {
+ *       if (want_refuse) {
+ *           ipc_answer_fast(icallid, ELIMIT, 0, 0);
+ *           return;
+ *       }
+ *       ipc_answer_fast(icallid, 0, 0, 0);
+ *
+ *       callid = async_get_call(&call);
+ *       handle(callid, call);
+ *       ipc_answer_fast(callid, 1, 2, 3);
+ *
+ *       callid = async_get_call(&call);
+ *       ....
+ * }
+ *
+ * TODO: Detaching/joining dead psthreads?
+ */
+#include <futex.h>
+#include <async.h>
+#include <psthread.h>
+#include <stdio.h>
+#include <libadt/hash_table.h>
+#include <libadt/list.h>
+#include <ipc/ipc.h>
+#include <assert.h>
+#include <errno.h>
+#include <time.h>
+#include <arch/barrier.h>
+
+atomic_t async_futex = FUTEX_INITIALIZER;
+static hash_table_t conn_hash_table;
+static LIST_INITIALIZE(timeout_list);
+
+typedef struct {
+	struct timeval expires;		/**< Expiration time for waiting thread */
+	int inlist;             	/**< If true, this struct is in timeout list */
+	link_t link;
+
+	pstid_t ptid;           	/**< Thread waiting for this message */
+	int active;             	/**< If this thread is currently active */
+	int timedout;           	/**< If true, we timed out */
+} awaiter_t;
+
+typedef struct {
+	awaiter_t wdata;
+
+	int done;               	/**< If reply was received */
+	ipc_call_t *dataptr;		/**< Pointer where the answer data
+					  *   is stored */
+	ipcarg_t retval;
+} amsg_t;
+
+typedef struct {
+	link_t link;
+	ipc_callid_t callid;
+	ipc_call_t call;
+} msg_t;
+
+typedef struct {
+	awaiter_t wdata;
+
+	link_t link;			/**< Hash table link */
+	ipcarg_t in_phone_hash;		/**< Incoming phone hash. */
+	link_t msg_queue;		/**< Messages that should be delivered to this thread */
+	/* Structures for connection opening packet */
+	ipc_callid_t callid;
+	ipc_call_t call;
+	ipc_callid_t close_callid;	/* Identification of closing packet */
+	void (*cthread)(ipc_callid_t,ipc_call_t *);
+} connection_t;
+
+/** Identifier of incoming connection handled by current thread */
+__thread connection_t *PS_connection;
+/** If true, it is forbidden to use async_req functions and
+ *  all preemption is disabled */
+__thread int in_interrupt_handler;
+
+static void default_client_connection(ipc_callid_t callid, ipc_call_t *call);
+static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call);
+static async_client_conn_t client_connection = default_client_connection;
+static async_client_conn_t interrupt_received = default_interrupt_received;
+
+/** Add microseconds to give timeval */
+static void tv_add(struct timeval *tv, suseconds_t usecs)
+{
+	tv->tv_sec += usecs / 1000000;
+	tv->tv_usec += usecs % 1000000;
+	if (tv->tv_usec > 1000000) {
+		tv->tv_sec++;
+		tv->tv_usec -= 1000000;
+	}
+}
+
+/** Subtract 2 timevals, return microseconds difference */
+static suseconds_t tv_sub(struct timeval *tv1, struct timeval *tv2)
+{
+	suseconds_t result;
+
+	result = tv1->tv_usec - tv2->tv_usec;
+	result += (tv1->tv_sec - tv2->tv_sec) * 1000000;
+
+	return result;
+}
+
+/** Compare timeval
+ *
+ * @return 1 if tv1 > tv2, otherwise 0
+ */
+static int tv_gt(struct timeval *tv1, struct timeval *tv2)
+{
+	if (tv1->tv_sec > tv2->tv_sec)
+		return 1;
+	if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec > tv2->tv_usec)
+		return 1;
+	return 0;
+}
+static int tv_gteq(struct timeval *tv1, struct timeval *tv2)
+{
+	if (tv1->tv_sec > tv2->tv_sec)
+		return 1;
+	if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec >= tv2->tv_usec)
+		return 1;
+	return 0;
+}
+
+/* Hash table functions */
+#define CONN_HASH_TABLE_CHAINS	32
+
+static hash_index_t conn_hash(unsigned long *key)
+{
+	assert(key);
+	return ((*key) >> 4) % CONN_HASH_TABLE_CHAINS;
+}
+
+static int conn_compare(unsigned long key[], hash_count_t keys, link_t *item)
+{
+	connection_t *hs;
+
+	hs = hash_table_get_instance(item, connection_t, link);
+	
+	return key[0] == hs->in_phone_hash;
+}
+
+static void conn_remove(link_t *item)
+{
+	free(hash_table_get_instance(item, connection_t, link));
+}
+
+
+/** Operations for NS hash table. */
+static hash_table_operations_t conn_hash_table_ops = {
+	.hash = conn_hash,
+	.compare = conn_compare,
+	.remove_callback = conn_remove
+};
+
+/** Insert sort timeout msg into timeouts list
+ *
+ */
+static void insert_timeout(awaiter_t *wd)
+{
+	link_t *tmp;
+	awaiter_t *cur;
+
+	wd->timedout = 0;
+	wd->inlist = 1;
+
+	tmp = timeout_list.next;
+	while (tmp != &timeout_list) {
+		cur = list_get_instance(tmp, awaiter_t, link);
+		if (tv_gteq(&cur->expires, &wd->expires))
+			break;
+		tmp = tmp->next;
+	}
+	list_append(&wd->link, tmp);
+}
+
+/*************************************************/
+
+/** Try to route a call to an appropriate connection thread
+ *
+ */
+static int route_call(ipc_callid_t callid, ipc_call_t *call)
+{
+	connection_t *conn;
+	msg_t *msg;
+	link_t *hlp;
+	unsigned long key;
+
+	futex_down(&async_futex);
+
+	key = call->in_phone_hash;
+	hlp = hash_table_find(&conn_hash_table, &key);
+	if (!hlp) {
+		futex_up(&async_futex);
+		return 0;
+	}
+	conn = hash_table_get_instance(hlp, connection_t, link);
+
+	msg = malloc(sizeof(*msg));
+	msg->callid = callid;
+	msg->call = *call;
+	list_append(&msg->link, &conn->msg_queue);
+
+	if (IPC_GET_METHOD(*call) == IPC_M_PHONE_HUNGUP)
+		conn->close_callid = callid;
+	
+	/* If the call is waiting for event, run it */
+	if (!conn->wdata.active) {
+		/* If in timeout list, remove it */
+		if (conn->wdata.inlist) {
+			conn->wdata.inlist = 0;
+			list_remove(&conn->wdata.link);
+		}
+		conn->wdata.active = 1;
+		psthread_add_ready(conn->wdata.ptid);
+	}
+
+	futex_up(&async_futex);
+
+	return 1;
+}
+
+/** Return new incoming message for current(thread-local) connection */
+ipc_callid_t async_get_call_timeout(ipc_call_t *call, suseconds_t usecs)
+{
+	msg_t *msg;
+	ipc_callid_t callid;
+	connection_t *conn;
+	
+	assert(PS_connection);
+	/* GCC 4.1.0 coughs on PS_connection-> dereference,
+	 * GCC 4.1.1 happilly puts the rdhwr instruction in delay slot.
+	 *           I would never expect to find so many errors in 
+	 *           compiler *($&$(*&$
+	 */
+	conn = PS_connection; 
+
+	futex_down(&async_futex);
+
+	if (usecs) {
+		gettimeofday(&conn->wdata.expires, NULL);
+		tv_add(&conn->wdata.expires, usecs);
+	} else {
+		conn->wdata.inlist = 0;
+	}
+	/* If nothing in queue, wait until something appears */
+	while (list_empty(&conn->msg_queue)) {
+		if (usecs)
+			insert_timeout(&conn->wdata);
+
+		conn->wdata.active = 0;
+		psthread_schedule_next_adv(PS_TO_MANAGER);
+		/* Futex is up after getting back from async_manager 
+		 * get it again */
+		futex_down(&async_futex);
+		if (usecs && conn->wdata.timedout && \
+		    list_empty(&conn->msg_queue)) {
+			/* If we timed out-> exit */
+			futex_up(&async_futex);
+			return 0;
+		}
+	}
+	
+	msg = list_get_instance(conn->msg_queue.next, msg_t, link);
+	list_remove(&msg->link);
+	callid = msg->callid;
+	*call = msg->call;
+	free(msg);
+	
+	futex_up(&async_futex);
+	return callid;
+}
+
+/** Thread function that gets created on new connection
+ *
+ * This function is defined as a weak symbol - to be redefined in
+ * user code.
+ */
+static void default_client_connection(ipc_callid_t callid, ipc_call_t *call)
+{
+	ipc_answer_fast(callid, ENOENT, 0, 0);
+}
+static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call)
+{
+}
+
+/** Wrapper for client connection thread
+ *
+ * When new connection arrives, thread with this function is created.
+ * It calls client_connection and does final cleanup.
+ *
+ * @param arg Connection structure pointer
+ */
+static int connection_thread(void  *arg)
+{
+	unsigned long key;
+	msg_t *msg;
+	int close_answered = 0;
+
+	/* Setup thread local connection pointer */
+	PS_connection = (connection_t *)arg;
+	PS_connection->cthread(PS_connection->callid, &PS_connection->call);
+	
+	/* Remove myself from connection hash table */
+	futex_down(&async_futex);
+	key = PS_connection->in_phone_hash;
+	hash_table_remove(&conn_hash_table, &key, 1);
+	futex_up(&async_futex);
+	
+	/* Answer all remaining messages with ehangup */
+	while (!list_empty(&PS_connection->msg_queue)) {
+		msg = list_get_instance(PS_connection->msg_queue.next, msg_t, link);
+		list_remove(&msg->link);
+		if (msg->callid == PS_connection->close_callid)
+			close_answered = 1;
+		ipc_answer_fast(msg->callid, EHANGUP, 0, 0);
+		free(msg);
+	}
+	if (PS_connection->close_callid)
+		ipc_answer_fast(PS_connection->close_callid, 0, 0, 0);
+	
+	return 0;
+}
+
+/** Create new thread for a new connection 
+ *
+ * Creates new thread for connection, fills in connection
+ * structures and inserts it into the hash table, so that
+ * later we can easily do routing of messages to particular
+ * threads.
+ *
+ * @param in_phone_hash Identification of the incoming connection
+ * @param callid Callid of the IPC_M_CONNECT_ME_TO packet
+ * @param call Call data of the opening packet
+ * @param cthread Thread function that should be called upon
+ *                opening the connection
+ * @return New thread id
+ */
+pstid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid, ipc_call_t *call, void (*cthread)(ipc_callid_t, ipc_call_t *))
+{
+	connection_t *conn;
+	unsigned long key;
+
+	conn = malloc(sizeof(*conn));
+	if (!conn) {
+		ipc_answer_fast(callid, ENOMEM, 0, 0);
+		return NULL;
+	}
+	conn->in_phone_hash = in_phone_hash;
+	list_initialize(&conn->msg_queue);
+	conn->callid = callid;
+	conn->close_callid = 0;
+	if (call)
+		conn->call = *call;
+	conn->wdata.active = 1; /* We will activate it asap */
+	conn->cthread = cthread;
+
+	conn->wdata.ptid = psthread_create(connection_thread, conn);
+	if (!conn->wdata.ptid) {
+		free(conn);
+		ipc_answer_fast(callid, ENOMEM, 0, 0);
+		return NULL;
+	}
+	/* Add connection to hash table */
+	key = conn->in_phone_hash;
+	futex_down(&async_futex);
+	hash_table_insert(&conn_hash_table, &key, &conn->link);
+	futex_up(&async_futex);
+
+	psthread_add_ready(conn->wdata.ptid);
+
+	return conn->wdata.ptid;
+}
+
+/** Handle call that was received */
+static void handle_call(ipc_callid_t callid, ipc_call_t *call)
+{
+	/* Unrouted call - do some default behaviour */
+	if ((callid & IPC_CALLID_NOTIFICATION)) {
+		in_interrupt_handler = 1;
+		(*interrupt_received)(callid,call);
+		in_interrupt_handler = 0;
+		return;
+	}		
+
+	switch (IPC_GET_METHOD(*call)) {
+	case IPC_M_CONNECT_ME_TO:
+		/* Open new connection with thread etc. */
+		async_new_connection(IPC_GET_ARG3(*call), callid, call, client_connection);
+		return;
+	}
+
+	/* Try to route call through connection tables */
+	if (route_call(callid, call))
+		return;
+
+	/* Unknown call from unknown phone - hang it up */
+	ipc_answer_fast(callid, EHANGUP, 0, 0);
+}
+
+/** Fire all timeouts that expired 
+ *
+ */
+static void handle_expired_timeouts(void)
+{
+	struct timeval tv;
+	awaiter_t *waiter;
+	link_t *cur;
+
+	gettimeofday(&tv,NULL);
+	futex_down(&async_futex);
+
+	cur = timeout_list.next;
+	while (cur != &timeout_list) {
+		waiter = list_get_instance(cur,awaiter_t,link);
+		if (tv_gt(&waiter->expires, &tv))
+			break;
+		cur = cur->next;
+		list_remove(&waiter->link);
+		waiter->inlist = 0;
+		waiter->timedout = 1;
+		/* Redundant condition? The thread should not
+		 * be active when it gets here.
+		 */
+		if (!waiter->active) {
+			waiter->active = 1;
+			psthread_add_ready(waiter->ptid);
+		}
+	}
+
+	futex_up(&async_futex);
+}
+
+/** Endless loop dispatching incoming calls and answers */
+static int async_manager_worker(void)
+{
+	ipc_call_t call;
+	ipc_callid_t callid;
+	int timeout;
+	awaiter_t *waiter;
+	struct timeval tv;
+
+	while (1) {
+		if (psthread_schedule_next_adv(PS_FROM_MANAGER)) {
+			futex_up(&async_futex); 
+			/* async_futex is always held
+			 * when entering manager thread
+			 */
+			continue;
+		}
+		futex_down(&async_futex);
+		if (!list_empty(&timeout_list)) {
+			waiter = list_get_instance(timeout_list.next,awaiter_t,link);
+			gettimeofday(&tv,NULL);
+			if (tv_gteq(&tv, &waiter->expires)) {
+				futex_up(&async_futex);
+				handle_expired_timeouts();
+				continue;
+			} else
+				timeout = tv_sub(&waiter->expires, &tv);
+		} else
+			timeout = SYNCH_NO_TIMEOUT;
+		futex_up(&async_futex);
+
+		callid = ipc_wait_cycle(&call, timeout, SYNCH_FLAGS_NONE);
+
+		if (!callid) {
+			handle_expired_timeouts();
+			continue;
+		}
+
+		if (callid & IPC_CALLID_ANSWERED) {
+			continue;
+		}
+
+		handle_call(callid, &call);
+	}
+	
+	return 0;
+}
+
+/** Function to start async_manager as a standalone thread 
+ * 
+ * When more kernel threads are used, one async manager should
+ * exist per thread. The particular implementation may change,
+ * currently one async_manager is started automatically per kernel
+ * thread except main thread. 
+ */
+static int async_manager_thread(void *arg)
+{
+	futex_up(&async_futex);
+	/* async_futex is always locked when entering
+	 * manager */
+	async_manager_worker();
+	
+	return 0;
+}
+
+/** Add one manager to manager list */
+void async_create_manager(void)
+{
+	pstid_t ptid;
+
+	ptid = psthread_create(async_manager_thread, NULL);
+	psthread_add_manager(ptid);
+}
+
+/** Remove one manager from manager list */
+void async_destroy_manager(void)
+{
+	psthread_remove_manager();
+}
+
+/** Initialize internal structures needed for async manager */
+int _async_init(void)
+{
+	if (!hash_table_create(&conn_hash_table, CONN_HASH_TABLE_CHAINS, 1, &conn_hash_table_ops)) {
+		printf("%s: cannot create hash table\n", "async");
+		return ENOMEM;
+	}
+	
+	return 0;
+}
+
+/** IPC handler for messages in async framework
+ *
+ * Notify thread that is waiting for this message, that it arrived
+ */
+static void reply_received(void *private, int retval,
+			   ipc_call_t *data)
+{
+	amsg_t *msg = (amsg_t *) private;
+
+	msg->retval = retval;
+
+	futex_down(&async_futex);
+	/* Copy data after futex_down, just in case the
+	 * call was detached 
+	 */
+	if (msg->dataptr)
+		*msg->dataptr = *data; 
+
+	write_barrier();
+	/* Remove message from timeout list */
+	if (msg->wdata.inlist)
+		list_remove(&msg->wdata.link);
+	msg->done = 1;
+	if (! msg->wdata.active) {
+		msg->wdata.active = 1;
+		psthread_add_ready(msg->wdata.ptid);
+	}
+	futex_up(&async_futex);
+}
+
+/** Send message and return id of the sent message
+ *
+ * The return value can be used as input for async_wait() to wait
+ * for completion.
+ */
+aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
+		   ipc_call_t *dataptr)
+{
+	amsg_t *msg;
+
+	if (in_interrupt_handler) {
+		printf("Cannot send asynchronous request in interrupt handler.\n");
+		_exit(1);
+	}
+
+	msg = malloc(sizeof(*msg));
+	msg->done = 0;
+	msg->dataptr = dataptr;
+
+	msg->wdata.active = 1; /* We may sleep in next method, but it
+				* will use it's own mechanism */
+	ipc_call_async_2(phoneid,method,arg1,arg2,msg,reply_received,1);
+
+	return (aid_t) msg;
+}
+
+/** Send message and return id of the sent message
+ *
+ * The return value can be used as input for async_wait() to wait
+ * for completion.
+ */
+aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
+		   ipcarg_t arg3, ipc_call_t *dataptr)
+{
+	amsg_t *msg;
+
+	if (in_interrupt_handler) {
+		printf("Cannot send asynchronous request in interrupt handler.\n");
+		_exit(1);
+	}
+
+	msg = malloc(sizeof(*msg));
+	msg->done = 0;
+	msg->dataptr = dataptr;
+
+	msg->wdata.active = 1; /* We may sleep in next method, but it
+				* will use it's own mechanism */
+	ipc_call_async_3(phoneid,method,arg1,arg2,arg3, msg,reply_received,1);
+
+	return (aid_t) msg;
+}
+
+/** Wait for a message sent by async framework
+ *
+ * @param amsgid Message ID to wait for
+ * @param retval Pointer to variable where will be stored retval
+ *               of the answered message. If NULL, it is ignored.
+ *
+ */
+void async_wait_for(aid_t amsgid, ipcarg_t *retval)
+{
+	amsg_t *msg = (amsg_t *) amsgid;
+
+	futex_down(&async_futex);
+	if (msg->done) {
+		futex_up(&async_futex);
+		goto done;
+	}
+
+	msg->wdata.ptid = psthread_get_id();
+	msg->wdata.active = 0;
+	msg->wdata.inlist = 0;
+	/* Leave locked async_futex when entering this function */
+	psthread_schedule_next_adv(PS_TO_MANAGER);
+	/* futex is up automatically after psthread_schedule_next...*/
+done:
+	if (retval)
+		*retval = msg->retval;
+	free(msg);
+}
+
+/** Wait for a message sent by async framework with timeout
+ *
+ * @param amsgid Message ID to wait for
+ * @param retval Pointer to variable where will be stored retval
+ *               of the answered message. If NULL, it is ignored.
+ * @param timeout Timeout in usecs
+ * @return 0 on success, ETIMEOUT if timeout expired
+ *
+ */
+int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout)
+{
+	amsg_t *msg = (amsg_t *) amsgid;
+
+	/* TODO: Let it go through the event read at least once */
+	if (timeout < 0)
+		return ETIMEOUT;
+
+	futex_down(&async_futex);
+	if (msg->done) {
+		futex_up(&async_futex);
+		goto done;
+	}
+
+	gettimeofday(&msg->wdata.expires, NULL);
+	tv_add(&msg->wdata.expires, timeout);
+
+	msg->wdata.ptid = psthread_get_id();
+	msg->wdata.active = 0;
+	insert_timeout(&msg->wdata);
+
+	/* Leave locked async_futex when entering this function */
+	psthread_schedule_next_adv(PS_TO_MANAGER);
+	/* futex is up automatically after psthread_schedule_next...*/
+
+	if (!msg->done)
+		return ETIMEOUT;
+
+done:
+	if (retval)
+		*retval = msg->retval;
+	free(msg);
+
+	return 0;
+}
+
+/** Wait specified time, but in the meantime handle incoming events
+ *
+ * @param timeout Time in microseconds to wait
+ */
+void async_usleep(suseconds_t timeout)
+{
+	amsg_t *msg;
+	
+	if (in_interrupt_handler) {
+		printf("Cannot call async_usleep in interrupt handler.\n");
+		_exit(1);
+	}
+
+	msg = malloc(sizeof(*msg));
+	if (!msg)
+		return;
+
+	msg->wdata.ptid = psthread_get_id();
+	msg->wdata.active = 0;
+
+	gettimeofday(&msg->wdata.expires, NULL);
+	tv_add(&msg->wdata.expires, timeout);
+
+	futex_down(&async_futex);
+	insert_timeout(&msg->wdata);
+	/* Leave locked async_futex when entering this function */
+	psthread_schedule_next_adv(PS_TO_MANAGER);
+	/* futex is up automatically after psthread_schedule_next...*/
+	free(msg);
+}
+
+/** Set function that is called, IPC_M_CONNECT_ME_TO is received
+ *
+ * @param conn Function that will form new psthread.
+ */
+void async_set_client_connection(async_client_conn_t conn)
+{
+	client_connection = conn;
+}
+void async_set_interrupt_received(async_client_conn_t conn)
+{
+	interrupt_received = conn;
+}
+
+/* Primitive functions for simple communication */
+void async_msg_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+		 ipcarg_t arg2, ipcarg_t arg3)
+{
+	ipc_call_async_3(phoneid, method, arg1, arg2, arg3, NULL, NULL, !in_interrupt_handler);
+}
+
+void async_msg_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2)
+{
+	ipc_call_async_2(phoneid, method, arg1, arg2, NULL, NULL, !in_interrupt_handler);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/cap.c
===================================================================
--- uspace/lib/libc/generic/cap.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/cap.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file	cap.c
+ * @brief	Functions to grant/revoke capabilities to/from a task.
+ */
+
+#include <cap.h>
+#include <task.h>
+#include <libc.h>
+#include <kernel/syscall/sysarg64.h>
+
+/** Grant capabilities to a task.
+ *
+ * @param id Destination task ID.
+ * @param caps Capabilities to grant.
+ *
+ * @return Zero on success or a value from @ref errno.h on failure.
+ */
+int cap_grant(task_id_t id, unsigned int caps)
+{
+	sysarg64_t arg;
+	
+	arg.value = (unsigned long long) id;
+
+	return __SYSCALL2(SYS_CAP_GRANT, (sysarg_t) &arg, (sysarg_t) caps);
+}
+
+/** Revoke capabilities from a task.
+ *
+ * @param id Destination task ID.
+ * @param caps Capabilities to revoke.
+ *
+ * @return Zero on success or a value from @ref errno.h on failure.
+ */
+int cap_revoke(task_id_t id, unsigned int caps)
+{
+	sysarg64_t arg;
+	
+	arg.value = (unsigned long long) id;
+
+	return __SYSCALL2(SYS_CAP_REVOKE, (sysarg_t) &arg, (sysarg_t) caps);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/ddi.c
===================================================================
--- uspace/lib/libc/generic/ddi.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/ddi.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <ddi.h>
+#include <libc.h>
+#include <task.h>
+#include <kernel/ddi/ddi_arg.h>
+
+/** Map piece of physical memory to task.
+ *
+ * Caller of this function must have the CAP_MEM_MANAGER capability.
+ *
+ * @param pf Physical address of the starting frame.
+ * @param vp Virtual address of the sterting page.
+ * @param pages Number of pages to map.
+ * @param flags Flags for the new address space area.
+ *
+ * @return 0 on success, EPERM if the caller lacks the CAP_MEM_MANAGER capability,
+ *	   ENOENT if there is no task with specified ID and ENOMEM if there
+ *	   was some problem in creating address space area.
+ */
+int physmem_map(void *pf, void *vp, unsigned long pages, int flags)
+{
+	return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp, pages, flags);
+}
+
+/** Enable I/O space range to task.
+ *
+ * Caller of this function must have the IO_MEM_MANAGER capability.
+ *
+ * @param id Task ID.
+ * @param ioaddr Starting address of the I/O range.
+ * @param size Size of the range.
+ *
+ * @return 0 on success, EPERM if the caller lacks the CAP_IO_MANAGER capability,
+ *	   ENOENT if there is no task with specified ID and ENOMEM if there
+ *	   was some problem in allocating memory.
+ */
+int iospace_enable(task_id_t id, void *ioaddr, unsigned long size)
+{
+	ddi_ioarg_t arg;
+
+	arg.task_id = id;
+	arg.ioaddr = ioaddr;
+	arg.size = size;
+
+	return __SYSCALL1(SYS_IOSPACE_ENABLE, (sysarg_t) &arg);
+}
+
+/** Interrupt control
+ *
+ * @param enable 1 - enable interrupts, 0 - disable interrupts
+ */
+int preemption_control(int enable)
+{
+	return __SYSCALL1(SYS_PREEMPT_CONTROL, (sysarg_t) enable);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/err.c
===================================================================
--- uspace/lib/libc/generic/err.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/err.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* TODO
+void errx(int __status, __const char *__format, ...)
+{
+	_exit(0);
+}
+*/
+
+/** @}
+ */
Index: uspace/lib/libc/generic/futex.c
===================================================================
--- uspace/lib/libc/generic/futex.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/futex.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <futex.h>
+#include <atomic.h>
+#include <libc.h>
+#include <stdio.h>
+#include <types.h>
+#include <kernel/synch/synch.h>
+
+/*
+ * Note about race conditions.
+ * Because of non-atomic nature of operations performed sequentially on the futex
+ * counter and the futex wait queue, there is a race condition:
+ *
+ * (wq->missed_wakeups == 1) && (futex->count = 1)
+ *
+ * Scenario 1 (wait queue timeout vs. futex_up()):
+ * 1. assume wq->missed_wakeups == 0 && futex->count == -1
+ *    (ie. thread A sleeping, thread B in the critical section)
+ * 2. A receives timeout and gets removed from the wait queue
+ * 3. B wants to leave the critical section and calls futex_up()
+ * 4. B thus changes futex->count from -1 to 0
+ * 5. B has to call SYS_FUTEX_WAKEUP syscall to wake up the sleeping thread
+ * 6. B finds the wait queue empty and changes wq->missed_wakeups from 0 to 1
+ * 7. A fixes futex->count (i.e. the number of waiting threads) by changing it from 0 to 1
+ *
+ * Scenario 2 (conditional down operation vs. futex_up)
+ * 1. assume wq->missed_wakeups == 0 && futex->count == 0
+ *    (i.e. thread A is in the critical section)
+ * 2. thread B performs futex_trydown() operation and changes futex->count from 0 to -1
+ *    B is now obliged to call SYS_FUTEX_SLEEP syscall
+ * 3. A wants to leave the critical section and does futex_up()
+ * 4. A thus changes futex->count from -1 to 0 and must call SYS_FUTEX_WAKEUP syscall
+ * 5. B finds the wait queue empty and immediatelly aborts the conditional sleep
+ * 6. No thread is queueing in the wait queue so wq->missed_wakeups changes from 0 to 1
+ * 6. B fixes futex->count (i.e. the number of waiting threads) by changing it from 0 to 1
+ *
+ * Both scenarios allow two threads to be in the critical section simultaneously.
+ * One without kernel intervention and the other through wq->missed_wakeups being 1.
+ *
+ * To mitigate this problem, futex_down_timeout() detects that the syscall didn't sleep
+ * in the wait queue, fixes the futex counter and RETRIES the whole operation again.
+ *
+ */
+
+/** Initialize futex counter.
+ *
+ * @param futex Futex.
+ * @param val Initialization value.
+ */
+void futex_initialize(atomic_t *futex, int val)
+{
+	atomic_set(futex, val);
+}
+
+int futex_down(atomic_t *futex)
+{
+	return futex_down_timeout(futex, SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE);
+}
+
+int futex_trydown(atomic_t *futex)
+{
+	return futex_down_timeout(futex, SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NON_BLOCKING);
+}
+
+/** Try to down the futex.
+ *
+ * @param futex Futex.
+ * @param usec Microseconds to wait. Zero value means sleep without timeout.
+ * @param flags Select mode of operation. See comment for waitq_sleep_timeout(). 
+ *
+ * @return ENOENT if there is no such virtual address. One of ESYNCH_OK_ATOMIC
+ *	   and ESYNCH_OK_BLOCKED on success or ESYNCH_TIMEOUT if the lock was
+ *	   not acquired because of a timeout or ESYNCH_WOULD_BLOCK if the
+ *	   operation could not be carried out atomically (if requested so).
+ */
+int futex_down_timeout(atomic_t *futex, uint32_t usec, int flags)
+{
+	int rc;
+	
+	while (atomic_predec(futex) < 0) {
+		rc = __SYSCALL3(SYS_FUTEX_SLEEP, (sysarg_t) &futex->count, (sysarg_t) usec, (sysarg_t) flags);
+		
+		switch (rc) {
+		case ESYNCH_OK_ATOMIC:
+			/*
+			 * Because of a race condition between timeout and futex_up()
+			 * and between conditional futex_down_timeout() and futex_up(),
+			 * we have to give up and try again in this special case.
+			 */
+			atomic_inc(futex);
+			break;
+
+		case ESYNCH_TIMEOUT:
+			atomic_inc(futex);
+			return ESYNCH_TIMEOUT;
+			break;
+
+		case ESYNCH_WOULD_BLOCK:
+			/*
+			 * The conditional down operation should be implemented this way.
+			 * The userspace-only variant tends to accumulate missed wakeups
+			 * in the kernel futex wait queue.
+			 */
+			atomic_inc(futex);
+			return ESYNCH_WOULD_BLOCK;
+			break;
+
+		case ESYNCH_OK_BLOCKED:
+			/*
+			 * Enter the critical section.
+			 * The futex counter has already been incremented for us.
+			 */
+			return ESYNCH_OK_BLOCKED;
+			break;
+		default:
+			return rc;
+		}
+	}
+
+	/*
+	 * Enter the critical section.
+	 */
+	return ESYNCH_OK_ATOMIC;
+}
+
+/** Up the futex.
+ *
+ * @param futex Futex.
+ *
+ * @return ENOENT if there is no such virtual address. Otherwise zero.
+ */
+int futex_up(atomic_t *futex)
+{
+	long val;
+	
+	val = atomic_postinc(futex);
+	if (val < 0)
+		return __SYSCALL1(SYS_FUTEX_WAKEUP, (sysarg_t) &futex->count);
+		
+	return 0;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/file.c
===================================================================
--- uspace/lib/libc/generic/io/file.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/file.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,288 @@
+/*
+ * Copyright (c) 2007 Michal Konopa
+ * Copyright (c) 2007 Martin Jelen
+ * Copyright (c) 2007 Peter Majer
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */ 
+
+/**
+ * @file	file.c
+ * @brief	The user library for working with the file system
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <async.h>
+#include <ipc/services.h>
+#include <ipc/ipc.h>
+#include <sys/mman.h>
+#include <io/file.h>
+#include <bool.h>
+#include <err.h>
+#include <align.h>
+#include "../../../fs/dir.h"
+#include "../../../share/message.h"
+#include "../../../share/shared_proto.h"
+
+#define CONNECT_SLEEP_INTERVAL 10000
+#define CONNECT_SLEEP_TIMEOUT 100000
+
+/**
+*
+*/
+static int fs_phone;
+
+static file_t *file_connect();
+static int file_disconnect(file_t *file);
+
+/**
+ * Connect to the FS task and share memory with it for further data and 
+ * extended memory transfers
+ */
+file_t *file_connect() {
+	file_t *result;
+	
+	size_t size;
+	void *share = NULL;
+	int retval;
+
+	size = ALIGN_UP(BLOCK_SIZE * sizeof(char), PAGE_SIZE);
+	share = mmap(share, size, AS_AREA_READ | AS_AREA_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0);
+	if ((int) share < 0) {
+		f_err = F_MMAP_FAILURE;
+		return NULL;
+	}
+
+	retval = async_req_2(fs_phone, FS_NEW_CONSUMER, task_get_id(), 0, NULL, NULL);
+	if (retval < 0) {
+		f_err = F_COMM_FAILURE;
+		return NULL;
+	}
+
+	int flags = 0;
+	flags = AS_AREA_READ | AS_AREA_WRITE;
+	retval = async_req_3(fs_phone, IPC_M_AS_AREA_SEND, (uintptr_t)share, size, flags, NULL, NULL, NULL);
+	if (retval < 0) {
+		f_err = F_COMM_FAILURE;
+		return NULL;
+	}
+	
+	/* Allocating structure for extended message. */
+	message_params_t *params = malloc(sizeof(message_params_t));
+	memset((void*) params, 0, sizeof(message_params_t));
+	
+	result = malloc(sizeof(file_t));
+	result->share = share;
+	result->size = size;
+	result->params = params;
+	
+	f_err = F_OK;
+	return result;
+}
+
+/**
+ * Disconnect from the FS task, unsharing memory and freeing the file data structure
+ */
+int file_disconnect(file_t *file) {
+	int retval = send_request(fs_phone, FS_DROP_CONSUMER, file->params, file->share);
+	if (retval < 0)
+		return -1;
+	
+	/* Unmapping share area. */ 
+	retval = munmap(file->share, file->size);
+	if (retval < 0)
+		return -1;
+	
+	file->size = ALIGN_UP(BLOCK_SIZE * sizeof(char), PAGE_SIZE);
+	file->share = mmap(file->share, file->size, AS_AREA_READ | AS_AREA_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0);
+	if ((int) (file->share) < 0)
+		return -1;
+	
+	free(file);
+	f_err = F_OK;
+	return F_OK;
+}
+
+/**
+ * List contents of the current directory
+ */
+dir_item_t *ls(unsigned int *length) {
+	dir_item_t *result;
+	unsigned short entries_num;
+
+	file_t *shared_file = file_connect();
+	if (shared_file == NULL)
+		return NULL;
+	
+	/* We want lookup our work directory. */
+	retval = send_request(fs_phone, FS_DSUM, shared_file->params, shared_file->share);
+	if (retval < 0) {
+		f_err = F_READ_ERROR;
+		return NULL;
+	}
+	
+	entries_num = retval;
+	*length = entries_num;
+	
+	result = malloc(entries_num * sizeof (dir_item_t));
+	
+	int entry;
+	for (entry = 0; entry < entries_num; entry++) {
+		shared_file->params->entry_number = entry;
+		retval = send_request(fs_phone, FS_READENTRY, shared_file->params, shared_file->share);
+		if (retval < 0) {
+			f_err = F_READ_ERROR;
+			return NULL;
+		}
+		
+		memcpy(&(result[entry].inode_num), shared_file->share, sizeof(unsigned short));
+		memcpy(result[entry].name, (void *)(shared_file->share+sizeof(unsigned short)), retval-sizeof(unsigned short));
+
+		/* Do not show empty entries. */
+		if (!result[entry].inode_num)
+			continue;
+		 
+	}
+	return result;
+}
+
+/**
+ * Change the current working directory for the task
+ */
+int chdir(char * new_dir)
+{
+	file_t *shared_file = file_connect();
+	
+	if (shared_file == NULL) {
+		f_err = F_READ_ERROR;
+		return F_READ_ERROR;
+	}
+	memcpy(shared_file->params->fname, new_dir, 30);
+	
+	int retval = send_request(fs_phone, FS_CHDIR, shared_file->params, shared_file->share);
+	if (retval < 0) {
+		f_err = F_READ_ERROR;
+		return F_READ_ERROR;
+	}
+
+	retval = file_disconnect(shared_file);
+	f_err = F_OK;
+	return F_OK;
+}
+
+/**
+ * Open a file for reading and/or writing
+ */
+file_t *fopen(char *name, int mode)
+{
+	file_t *file = file_connect();
+	
+	/* We want to work with the specified file. */	
+	memcpy(file->params->fname, name, 30);
+
+	int retval = send_request(fs_phone, FS_OPEN, file->params, file->share);
+	if (retval < 0)
+		return NULL;
+	
+	file->handle = retval;
+	
+	return file;
+}
+
+/**
+ * Read status information about a file
+ */
+int fstat(file_t *file)
+{
+	memcpy(file->params->fname, file->base_info.name, 30);
+	file->params->fd = file->handle;
+
+	int retval = send_request(fs_phone, FS_FSTAT, file->params, file->share);
+	if (retval < 0)
+		return -1;
+	
+	memcpy((void *)(&file->stat), file->share, sizeof(stat_t));
+	
+	f_err = F_OK;
+	return F_OK;
+}
+
+/**
+ * Read data from a file
+ */
+int fread(file_t *file, void* buffer, unsigned int size)
+{
+	file->params->nbytes = size;
+	
+	int retval = send_request(fs_phone, FS_READ, file->params, file->share);
+	if (retval < 0)
+		return -1;
+
+	f_err = F_OK;
+	return F_OK;
+}
+
+/**
+ * Seek to a position within a file
+ */
+int fseek(file_t *file, int offset, int whence)
+{
+	file->params->offset = 0;
+	file->params->whence = 0;	/* from beginning of the file */
+
+	int retval = send_request(fs_phone, FS_SEEK, file->params, file->share);
+	if (retval < 0)
+		return -1;
+
+	f_err = F_OK;
+	return F_OK;
+}
+
+/**
+ * Close a file
+ */
+int fclose(file_t *file)
+{
+	int retval = send_request(fs_phone, FS_CLOSE, file->params, file->share);
+	if (retval < 0)
+		return -1;
+
+	if (file != NULL)
+		file_disconnect(file);
+	
+	f_err = F_OK;
+	return F_OK;
+}
+
+/**
+ *@}
+ */
Index: uspace/lib/libc/generic/io/io.c
===================================================================
--- uspace/lib/libc/generic/io/io.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/io.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <libc.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <io/io.h>
+
+const static char nl = '\n';
+
+int puts(const char *str)
+{
+	size_t count;
+	
+	if (str == NULL)
+		return putnchars("(NULL)", 6);
+	
+	for (count = 0; str[count] != 0; count++);
+	if (write(1, (void *) str, count) == count) {
+		if (write(1, &nl, 1) == 1)
+			return 0;
+	}
+	
+	return EOF;
+}
+
+/** Put count chars from buffer to stdout without adding newline
+ * @param buf Buffer with size at least count bytes - NULL pointer NOT allowed!
+ * @param count 
+ * @return 0 on succes, EOF on fail
+ */
+int putnchars(const char *buf, size_t count)
+{
+	if (write(1, (void *) buf, count) == count)
+			return 0;
+	
+	return EOF;
+}
+
+/** Same as puts, but does not print newline at end
+ *
+ */
+int putstr(const char *str)
+{
+	size_t count;
+	
+	if (str == NULL)
+		return putnchars("(NULL)", 6);
+
+	for (count = 0; str[count] != 0; count++);
+	if (write(1, (void *) str, count) == count)
+			return 0;
+	
+	return EOF;
+}
+
+int putchar(int c)
+{
+	unsigned char ch = c;
+	if (write(1, (void *) &ch, 1) == 1)
+			return c;
+	
+	return EOF;
+}
+
+int getchar(void)
+{
+	unsigned char c;
+	if (read(0, (void *) &c, 1) == 1)
+			return c;
+	
+	return EOF;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/printf.c
===================================================================
--- uspace/lib/libc/generic/io/printf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/printf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <io/printf_core.h>
+#include <stdio.h>
+#include <stdio.h>
+
+/** Print formatted text.
+ * @param fmt	format string
+ * \see For more details about format string see printf_core.
+ */
+int printf(const char *fmt, ...)
+{
+	int ret;
+	va_list args;
+
+	va_start(args, fmt);
+
+	ret = vprintf(fmt, args);
+	
+	va_end(args);
+
+	return ret;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/printf_core.c
===================================================================
--- uspace/lib/libc/generic/io/printf_core.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/printf_core.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,683 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ * @brief	Printing functions.
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <io/printf_core.h>
+#include <ctype.h>
+#include <string.h>
+
+#define __PRINTF_FLAG_PREFIX		0x00000001	/**< show prefixes 0x or 0*/
+#define __PRINTF_FLAG_SIGNED		0x00000002	/**< signed / unsigned number */
+#define __PRINTF_FLAG_ZEROPADDED	0x00000004	/**< print leading zeroes */
+#define __PRINTF_FLAG_LEFTALIGNED	0x00000010	/**< align to left */
+#define __PRINTF_FLAG_SHOWPLUS		0x00000020	/**< always show + sign */
+#define __PRINTF_FLAG_SPACESIGN		0x00000040	/**< print space instead of plus */
+#define __PRINTF_FLAG_BIGCHARS		0x00000080	/**< show big characters */
+#define __PRINTF_FLAG_NEGATIVE		0x00000100	/**< number has - sign */
+
+#define PRINT_NUMBER_BUFFER_SIZE	(64+5)		/**< Buffer big enought for 64 bit number
+							 * printed in base 2, sign, prefix and
+							 * 0 to terminate string.. (last one is only for better testing 
+							 * end of buffer by zero-filling subroutine)
+							 */
+/** Enumeration of possible arguments types.
+ */
+typedef enum {
+	PrintfQualifierByte = 0,
+	PrintfQualifierShort,
+	PrintfQualifierInt,
+	PrintfQualifierLong,
+	PrintfQualifierLongLong,
+	PrintfQualifierSizeT,
+	PrintfQualifierPointer
+} qualifier_t;
+
+static char digits_small[] = "0123456789abcdef";	/**< Small hexadecimal characters */
+static char digits_big[] = "0123456789ABCDEF";		/**< Big hexadecimal characters */
+
+/** Print count chars from buffer without adding newline
+ * @param buf Buffer with size at least count bytes - NULL pointer NOT allowed!
+ * @param count 
+ * @param ps output method and its data
+ * @return number of printed characters
+ */
+static int printf_putnchars(const char * buf, size_t count, struct printf_spec *ps)
+{
+	return ps->write((void *)buf, count, ps->data);
+}
+
+/** Print string without added newline
+ * @param str string to print
+ * @param ps write function specification and support data
+ * @return number of printed characters
+ */
+static int printf_putstr(const char * str, struct printf_spec *ps)
+{
+	size_t count;
+	
+	if (str == NULL)
+		return printf_putnchars("(NULL)", 6, ps);
+
+	for (count = 0; str[count] != 0; count++);
+
+	if (ps->write((void *) str, count, ps->data) == count)
+		return 0;
+	
+	return EOF;
+}
+
+/** Print one character to output
+ * @param c one character
+ * @param ps output method
+ * @return number of printed characters
+ */
+static int printf_putchar(int c, struct printf_spec *ps)
+{
+	unsigned char ch = c;
+	
+	return ps->write((void *) &ch, 1, ps->data);
+}
+
+/** Print one formatted character
+ * @param c character to print
+ * @param width 
+ * @param flags
+ * @return number of printed characters
+ */
+static int print_char(char c, int width, uint64_t flags, struct printf_spec *ps)
+{
+	int counter = 0;
+	
+	if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) {
+		while (--width > 0) { 	/* one space is consumed by character itself hence predecrement */
+			if (printf_putchar(' ', ps) > 0)	
+				++counter;
+		}
+	}
+ 	
+	if (printf_putchar(c, ps) > 0)
+		counter++;
+	
+	while (--width > 0) { /* one space is consumed by character itself hence predecrement */
+		if (printf_putchar(' ', ps) > 0)
+			++counter;
+	}
+	
+	return ++counter;
+}
+
+/** Print one string
+ * @param s string
+ * @param width 
+ * @param precision
+ * @param flags
+ * @return number of printed characters
+ */
+						
+static int print_string(char *s, int width, int precision, uint64_t flags, struct printf_spec *ps)
+{
+	int counter = 0;
+	size_t size;
+	int retval;
+
+	if (s == NULL) {
+		return printf_putstr("(NULL)", ps);
+	}
+	
+	size = strlen(s);
+
+	/* print leading spaces */
+
+	if (precision == 0) 
+		precision = size;
+
+	width -= precision;
+	
+	if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) {
+		while (width-- > 0) { 	
+			if (printf_putchar(' ', ps) == 1)	
+				counter++;
+		}
+	}
+
+	while (precision > size) {
+		precision--;
+		if (printf_putchar(' ', ps) == 1)	
+			++counter;
+	}
+	
+ 	if ((retval = printf_putnchars(s, precision, ps)) < 0) {
+		return -counter;
+	}
+
+	counter += retval;	
+
+	while (width-- > 0) {
+		if (printf_putchar(' ', ps) == 1)	
+			++counter;
+	}
+	
+	return counter;
+}
+
+
+/** Print number in given base
+ *
+ * Print significant digits of a number in given
+ * base.
+ *
+ * @param num  Number to print.
+ * @param width
+ * @param precision
+ * @param base Base to print the number in (should
+ *             be in range 2 .. 16).
+ * @param flags output modifiers
+ * @return number of printed characters
+ *
+ */
+static int print_number(uint64_t num, int width, int precision, int base , uint64_t flags, struct printf_spec *ps)
+{
+	char *digits = digits_small;
+	char d[PRINT_NUMBER_BUFFER_SIZE];	/* this is good enough even for base == 2, prefix and sign */
+	char *ptr = &d[PRINT_NUMBER_BUFFER_SIZE - 1];
+	int size = 0; /* size of number with all prefixes and signs */
+	int number_size; /* size of plain number */
+	char sgn;
+	int retval;
+	int counter = 0;
+	
+	if (flags & __PRINTF_FLAG_BIGCHARS) 
+		digits = digits_big;	
+	
+	*ptr-- = 0; /* Put zero at end of string */
+
+	if (num == 0) {
+		*ptr-- = '0';
+		size++;
+	} else {
+		do {
+			*ptr-- = digits[num % base];
+			size++;
+		} while (num /= base);
+	}
+	
+	number_size = size;
+
+	/* Collect sum of all prefixes/signs/... to calculate padding and leading zeroes */
+	if (flags & __PRINTF_FLAG_PREFIX) {
+		switch(base) {
+		case 2:	/* Binary formating is not standard, but usefull */
+			size += 2;
+			break;
+		case 8:
+			size++;
+			break;
+		case 16:
+			size += 2;
+			break;
+		}
+	}
+
+	sgn = 0;
+	if (flags & __PRINTF_FLAG_SIGNED) {
+		if (flags & __PRINTF_FLAG_NEGATIVE) {
+			sgn = '-';
+			size++;
+		} else if (flags & __PRINTF_FLAG_SHOWPLUS) {
+				sgn = '+';
+				size++;
+			} else if (flags & __PRINTF_FLAG_SPACESIGN) {
+					sgn = ' ';
+					size++;
+				}
+	}
+
+	if (flags & __PRINTF_FLAG_LEFTALIGNED) {
+		flags &= ~__PRINTF_FLAG_ZEROPADDED;
+	}
+
+	/* if number is leftaligned or precision is specified then zeropadding is ignored */
+	if (flags & __PRINTF_FLAG_ZEROPADDED) {
+		if ((precision == 0) && (width > size)) {
+			precision = width - size + number_size;
+		}
+	}
+
+	/* print leading spaces */
+	if (number_size > precision) /* We must print whole number not only a part */
+		precision = number_size;
+
+	width -= precision + size - number_size;
+	
+	if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) {
+		while (width-- > 0) { 	
+			if (printf_putchar(' ', ps) == 1)	
+				counter++;
+		}
+	}
+	
+	/* print sign */
+	if (sgn) {
+		if (printf_putchar(sgn, ps) == 1)
+			counter++;
+	}
+	
+	/* print prefix */
+	
+	if (flags & __PRINTF_FLAG_PREFIX) {
+		switch(base) {
+		case 2:	/* Binary formating is not standard, but usefull */
+			if (printf_putchar('0', ps) == 1)
+				counter++;
+			if (flags & __PRINTF_FLAG_BIGCHARS) {
+				if (printf_putchar('B', ps) == 1)
+					counter++;
+			} else {
+				if (printf_putchar('b', ps) == 1)
+					counter++;
+			}
+			break;
+		case 8:
+			if (printf_putchar('o', ps) == 1)
+				counter++;
+			break;
+		case 16:
+			if (printf_putchar('0', ps) == 1)
+				counter++;
+			if (flags & __PRINTF_FLAG_BIGCHARS) {
+				if (printf_putchar('X', ps) == 1)
+					counter++;
+			} else {
+				if (printf_putchar('x', ps) == 1)
+					counter++;
+			}
+			break;
+		}
+	}
+
+	/* print leading zeroes */
+	precision -= number_size;
+	while (precision-- > 0) { 	
+		if (printf_putchar('0', ps) == 1)
+			counter++;
+	}
+
+	
+	/* print number itself */
+
+	if ((retval = printf_putstr(++ptr, ps)) > 0) {
+		counter += retval;
+	}
+	
+	/* print ending spaces */
+	
+	while (width-- > 0) { 	
+		if (printf_putchar(' ', ps) == 1)	
+			counter++;
+	}
+
+	return counter;
+}
+
+
+/** Print formatted string.
+ *
+ * Print string formatted according to the fmt parameter
+ * and variadic arguments. Each formatting directive
+ * must have the following form:
+ * 
+ * 	\% [ FLAGS ] [ WIDTH ] [ .PRECISION ] [ TYPE ] CONVERSION
+ *
+ * FLAGS:@n
+ * 	- "#" Force to print prefix.
+ * 	For conversion \%o the prefix is 0, for %x and \%X prefixes are 0x and 0X
+ *	and for conversion \%b the prefix is 0b.
+ *
+ * 	- "-"	Align to left.
+ *
+ * 	- "+"	Print positive sign just as negative.
+ *
+ * 	- " "	If the printed number is positive and "+" flag is not set, print space in
+ *	place of sign.
+ *
+ * 	- "0"	Print 0 as padding instead of spaces. Zeroes are placed between sign and the
+ *	rest of the number. This flag is ignored if "-" flag is specified.
+ * 
+ * WIDTH:@n
+ * 	- Specify minimal width of printed argument. If it is bigger, width is ignored.
+ * If width is specified with a "*" character instead of number, width is taken from
+ * parameter list. And integer parameter is expected before parameter for processed
+ * conversion specification. If this value is negative its absolute value is taken
+ * and the "-" flag is set.
+ *
+ * PRECISION:@n
+ * 	- Value precision. For numbers it specifies minimum valid numbers.
+ * Smaller numbers are printed with leading zeroes. Bigger numbers are not affected.
+ * Strings with more than precision characters are cut off.
+ * Just as with width, an "*" can be used used instead of a number.
+ * An integer value is then expected in parameters. When both width and precision
+ * are specified using "*", the first parameter is used for width and the second one
+ * for precision.
+ * 
+ * TYPE:@n
+ * 	- "hh"	Signed or unsigned char.@n
+ * 	- "h"	Signed or usigned short.@n
+ * 	- ""	Signed or usigned int (default value).@n
+ * 	- "l"	Signed or usigned long int.@n
+ * 	- "ll"	Signed or usigned long long int.@n
+ * 	- "z"	Type size_t.@n
+ * 
+ * 
+ * CONVERSION:@n
+ * 	- %	Print percentile character itself.
+ *
+ * 	- c	Print single character.
+ *
+ * 	- s	Print zero terminated string. If a NULL value is passed as value, "(NULL)" is printed instead.
+ * 
+ * 	- P, p	Print value of a pointer. Void * value is expected and it is printed in hexadecimal notation with prefix
+ * 	(as with '\%#X' or '\%#x' for 32bit or '\%#X' or '\%#x' for 64bit long pointers).
+ *
+ * 	- b	Print value as unsigned binary number. Prefix is not printed by default. (Nonstandard extension.)
+ * 
+ * 	- o	Print value as unsigned octal number. Prefix is not printed by default. 
+ *
+ * 	- d,i	Print signed decimal number. There is no difference between d and i conversion.
+ *
+ * 	- u	Print unsigned decimal number.
+ *
+ * 	- X, x	Print hexadecimal number with upper- or lower-case. Prefix is not printed by default.
+ * 
+ * All other characters from fmt except the formatting directives
+ * are printed in verbatim.
+ *
+ * @param fmt Formatting NULL terminated string.
+ * @return Number of printed characters or negative value on failure.
+ */
+int printf_core(const char *fmt, struct printf_spec *ps, va_list ap)
+{
+	int i = 0, j = 0; /* i is index of currently processed char from fmt, j is index to the first not printed nonformating character */
+	int end;
+	int counter; /* counter of printed characters */
+	int retval; /* used to store return values from called functions */
+	char c;
+	qualifier_t qualifier;	/* type of argument */
+	int base;	/* base in which will be parameter (numbers only) printed */
+	uint64_t number; /* argument value */
+	size_t	size; /* byte size of integer parameter */
+	int width, precision;
+	uint64_t flags;
+	
+	counter = 0;
+	
+	while ((c = fmt[i])) {
+		/* control character */
+		if (c == '%' ) { 
+			/* print common characters if any processed */	
+			if (i > j) {
+				if ((retval = printf_putnchars(&fmt[j], (size_t)(i - j), ps)) < 0) { /* error */
+					goto minus_out;
+				}
+				counter += retval;
+			}
+		
+			j = i;
+			/* parse modifiers */
+			flags = 0;
+			end = 0;
+			
+			do {
+				++i;
+				switch (c = fmt[i]) {
+				case '#': flags |= __PRINTF_FLAG_PREFIX; break;
+				case '-': flags |= __PRINTF_FLAG_LEFTALIGNED; break;
+				case '+': flags |= __PRINTF_FLAG_SHOWPLUS; break;
+				case ' ': flags |= __PRINTF_FLAG_SPACESIGN; break;
+				case '0': flags |= __PRINTF_FLAG_ZEROPADDED; break;
+				default: end = 1;
+				};	
+				
+			} while (end == 0);	
+			
+			/* width & '*' operator */
+			width = 0;
+			if (isdigit(fmt[i])) {
+				while (isdigit(fmt[i])) {
+					width *= 10;
+					width += fmt[i++] - '0';
+				}
+			} else if (fmt[i] == '*') {
+				/* get width value from argument list*/
+				i++;
+				width = (int)va_arg(ap, int);
+				if (width < 0) {
+					/* negative width means to set '-' flag */
+					width *= -1;
+					flags |= __PRINTF_FLAG_LEFTALIGNED;
+				}
+			}
+			
+			/* precision and '*' operator */	
+			precision = 0;
+			if (fmt[i] == '.') {
+				++i;
+				if (isdigit(fmt[i])) {
+					while (isdigit(fmt[i])) {
+						precision *= 10;
+						precision += fmt[i++] - '0';
+					}
+				} else if (fmt[i] == '*') {
+					/* get precision value from argument list*/
+					i++;
+					precision = (int)va_arg(ap, int);
+					if (precision < 0) {
+						/* negative precision means to ignore it */
+						precision = 0;
+					}
+				}
+			}
+
+			switch (fmt[i++]) {
+			/** TODO: unimplemented qualifiers:
+			 * t ptrdiff_t - ISO C 99
+			 */
+			case 'h':	/* char or short */
+				qualifier = PrintfQualifierShort;
+				if (fmt[i] == 'h') {
+					i++;
+					qualifier = PrintfQualifierByte;
+				}
+				break;
+			case 'l':	/* long or long long*/
+				qualifier = PrintfQualifierLong;
+				if (fmt[i] == 'l') {
+					i++;
+					qualifier = PrintfQualifierLongLong;
+				}
+				break;
+			case 'z':	/* size_t */
+				qualifier = PrintfQualifierSizeT;
+				break;
+			default:
+				qualifier = PrintfQualifierInt; /* default type */
+				--i;
+			}	
+			
+			base = 10;
+
+			switch (c = fmt[i]) {
+
+				/*
+				* String and character conversions.
+				*/
+			case 's':
+				if ((retval = print_string(va_arg(ap, char*), width, precision, flags, ps)) < 0) {
+					goto minus_out;
+				}
+					
+				counter += retval;
+				j = i + 1; 
+				goto next_char;
+			case 'c':
+				c = va_arg(ap, unsigned int);
+				if ((retval = print_char(c, width, flags, ps)) < 0) {
+					goto minus_out;
+				}
+
+				counter += retval;
+				j = i + 1;
+				goto next_char;
+
+			/* 
+			 * Integer values
+			*/
+			case 'P': /* pointer */
+			       	flags |= __PRINTF_FLAG_BIGCHARS;
+			case 'p':
+				flags |= __PRINTF_FLAG_PREFIX;
+				base = 16;
+				qualifier = PrintfQualifierPointer;
+				break;	
+			case 'b': 
+				base = 2;
+				break;
+			case 'o':
+				base = 8;
+				break;
+			case 'd':
+			case 'i':
+				flags |= __PRINTF_FLAG_SIGNED;  
+			case 'u':
+				break;
+			case 'X':
+				flags |= __PRINTF_FLAG_BIGCHARS;
+			case 'x':
+				base = 16;
+				break;
+			/* percentile itself */
+			case '%': 
+				j = i;
+				goto next_char;
+			/*
+			* Bad formatting.
+			*/
+			default:
+				/* Unknown format
+				 *  now, the j is index of '%' so we will
+				 * print whole bad format sequence
+				 */
+				goto next_char;		
+			}
+		
+		
+		/* Print integers */
+			/* print number */
+			switch (qualifier) {
+			case PrintfQualifierByte:
+				size = sizeof(unsigned char);
+				number = (uint64_t)va_arg(ap, unsigned int);
+				break;
+			case PrintfQualifierShort:
+				size = sizeof(unsigned short);
+				number = (uint64_t)va_arg(ap, unsigned int);
+				break;
+			case PrintfQualifierInt:
+				size = sizeof(unsigned int);
+				number = (uint64_t)va_arg(ap, unsigned int);
+				break;
+			case PrintfQualifierLong:
+				size = sizeof(unsigned long);
+				number = (uint64_t)va_arg(ap, unsigned long);
+				break;
+			case PrintfQualifierLongLong:
+				size = sizeof(unsigned long long);
+				number = (uint64_t)va_arg(ap, unsigned long long);
+				break;
+			case PrintfQualifierPointer:
+				size = sizeof(void *);
+				number = (uint64_t)(unsigned long)va_arg(ap, void *);
+				break;
+			case PrintfQualifierSizeT:
+				size = sizeof(size_t);
+				number = (uint64_t)va_arg(ap, size_t);
+				break;
+			default: /* Unknown qualifier */
+				goto minus_out;
+					
+			}
+			
+			if (flags & __PRINTF_FLAG_SIGNED) {
+				if (number & (0x1 << (size*8 - 1))) {
+					flags |= __PRINTF_FLAG_NEGATIVE;
+				
+					if (size == sizeof(uint64_t)) {
+						number = -((int64_t)number);
+					} else {
+						number = ~number;
+						number &= (~((0xFFFFFFFFFFFFFFFFll) <<  (size * 8)));
+						number++;
+					}
+				}
+			}
+
+			if ((retval = print_number(number, width, precision, base, flags, ps)) < 0 ) {
+				goto minus_out;
+			};
+
+			counter += retval;
+			j = i + 1;
+		}	
+next_char:
+			
+		++i;
+	}
+	
+	if (i > j) {
+		if ((retval = printf_putnchars(&fmt[j], (size_t)(i - j), ps)) < 0) { /* error */
+			goto minus_out;
+		}
+		counter += retval;
+	}
+	
+	return counter;
+minus_out:
+	return -counter;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/snprintf.c
===================================================================
--- uspace/lib/libc/generic/io/snprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/snprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <io/printf_core.h>
+
+/** Print formatted to the given buffer with limited size.
+ * @param str	buffer
+ * @param size	buffer size
+ * @param fmt	format string
+ * \see For more details about format string see printf_core.
+ */
+int snprintf(char *str, size_t size, const char *fmt, ...)
+{
+	int ret;
+	va_list args;
+	
+	va_start(args, fmt);
+	ret = vsnprintf(str, size, fmt, args);
+
+	va_end(args);
+
+	return ret;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/sprintf.c
===================================================================
--- uspace/lib/libc/generic/io/sprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/sprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <io/printf_core.h>
+
+/** Print formatted to the given buffer.
+ * @param str	buffer
+ * @param fmt	format string
+ * \see For more details about format string see printf_core.
+ */
+int sprintf(char *str, const char *fmt, ...)
+{
+	int ret;
+	va_list args;
+	
+	va_start(args, fmt);
+	ret = vsprintf(str, fmt, args);
+
+	va_end(args);
+
+	return ret;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/stream.c
===================================================================
--- uspace/lib/libc/generic/io/stream.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/stream.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,189 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * Copyright (c) 2006 Jakub Vana
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <io/io.h>
+#include <io/stream.h>
+#include <string.h>
+#include <malloc.h>
+#include <libc.h>
+#include <ipc/ipc.h>
+#include <ipc/ns.h>
+#include <ipc/fb.h>
+#include <ipc/services.h>
+#include <console.h>
+#include <unistd.h>
+#include <async.h>
+
+#define FDS 32
+
+typedef struct stream_t {
+	pwritefn_t w;
+	preadfn_t r;
+	void * param;
+	int phone;
+} stream_t;
+
+static int console_phone = -1;
+static stream_t streams[FDS];
+
+static ssize_t write_stderr(void *param, const void *buf, size_t count)
+{
+	return count;
+}
+
+static ssize_t read_stdin(void *param, void *buf, size_t count)
+{
+	ipcarg_t r0,r1;
+	size_t i = 0;
+
+	while (i < count) {
+		if (async_req_2(streams[0].phone, CONSOLE_GETCHAR, 0, 0, &r0, &r1) < 0) {
+			return -1;
+		}
+		((char *) buf)[i++] = r0;
+	}
+	return i;
+}
+
+static ssize_t write_stdout(void *param, const void *buf, size_t count)
+{
+	int i;
+
+	for (i = 0; i < count; i++)
+		async_msg(streams[1].phone, CONSOLE_PUTCHAR, ((const char *) buf)[i]);
+	
+	return count;
+}
+
+static stream_t open_stdin(void)
+{
+	stream_t stream;
+	
+	if (console_phone < 0) {
+		while ((console_phone = ipc_connect_me_to(PHONE_NS, SERVICE_CONSOLE, 0)) < 0) {
+			usleep(10000);
+		}
+	}
+	
+	stream.r = read_stdin;
+	stream.w = NULL;
+	stream.param = 0;
+	stream.phone = console_phone;
+	
+	return stream;
+}
+
+static stream_t open_stdout(void)
+{
+	stream_t stream;
+
+	if (console_phone < 0) {
+		while ((console_phone = ipc_connect_me_to(PHONE_NS, SERVICE_CONSOLE, 0)) < 0) {
+			usleep(10000);
+		}
+	}
+	
+	stream.r = NULL;
+	stream.w = write_stdout;
+	stream.phone = console_phone;
+	stream.param = 0;
+	
+	return stream;
+}
+
+static ssize_t write_null(void *param, const void *buf, size_t count)
+{
+	return count;
+}
+
+fd_t open(const char *fname, int flags)
+{
+	int c = 0;
+
+	while (((streams[c].w) || (streams[c].r)) && (c < FDS))
+		c++;
+	
+	if (c == FDS)
+		return EMFILE;
+	
+	if (!strcmp(fname, "stdin")) {
+		streams[c] = open_stdin();
+		return c;
+	}
+	
+	if (!strcmp(fname, "stdout")) {
+		streams[c] = open_stdout();
+		return c;
+	}
+	
+	if (!strcmp(fname, "stderr")) {
+		streams[c].w = write_stderr;
+		return c;
+	}
+	
+	if (!strcmp(fname, "null")) {
+		streams[c].w = write_null;
+		return c;
+	}
+	
+	return -1;
+}
+
+
+ssize_t write(int fd, const void *buf, size_t count)
+{
+	if (fd < FDS && streams[fd].w)
+		return streams[fd].w(streams[fd].param, buf, count);
+	
+	return 0;
+}
+
+ssize_t read(int fd, void *buf, size_t count)
+{
+	if (fd < FDS && streams[fd].r)
+		return streams[fd].r(streams[fd].param, buf, count);
+	
+	return 0;
+}
+
+int get_fd_phone(int fd)
+{
+	if (fd >= FDS || fd < 0)
+		return -1;
+	return streams[fd].phone;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/vprintf.c
===================================================================
--- uspace/lib/libc/generic/io/vprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/vprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <io/printf_core.h>
+#include <futex.h>
+#include <async.h>
+
+static atomic_t printf_futex = FUTEX_INITIALIZER;
+
+static int vprintf_write(const char *str, size_t count, void *unused)
+{
+	return write(1, str, count);
+}
+
+/** Print formatted text.
+ * @param fmt	format string
+ * @param ap	format parameters
+ * \see For more details about format string see printf_core.
+ */
+int vprintf(const char *fmt, va_list ap)
+{
+	struct printf_spec ps = {
+		(int (*)(void *, size_t, void *)) vprintf_write,
+		 NULL
+	};
+	/*
+	 * Prevent other threads to execute printf_core()
+	 */
+	futex_down(&printf_futex);
+	/*
+	 * Prevent other pseudo threads of the same thread
+	 * to execute printf_core()
+	 */
+	async_serialize_start();
+	int ret = printf_core(fmt, &ps, ap);
+	async_serialize_end();
+	futex_up(&printf_futex);
+	return ret;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/vsnprintf.c
===================================================================
--- uspace/lib/libc/generic/io/vsnprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/vsnprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <io/printf_core.h>
+
+struct vsnprintf_data {
+	size_t size; /* total space for string */
+	size_t len; /* count of currently used characters */
+	char *string; /* destination string */
+};
+
+/** Write string to given buffer.
+ * Write at most data->size characters including trailing zero. According to C99 has snprintf to return number
+ * of characters that would have been written if enough space had been available. Hence the return value is not
+ * number of really printed characters but size of input string. Number of really used characters 
+ * is stored in data->len.
+ * @param str source string to print
+ * @param count size of source string
+ * @param data structure with destination string, counter of used space and total string size.
+ * @return number of characters to print (not characters really printed!)
+ */
+static int vsnprintf_write(const char *str, size_t count, struct vsnprintf_data *data)
+{
+	size_t i;
+	i = data->size - data->len;
+
+	if (i == 0) {
+		return count;
+	}
+	
+	if (i == 1) {
+		/* We have only one free byte left in buffer => write there trailing zero */
+		data->string[data->size - 1] = 0;
+		data->len = data->size;
+		return count;
+	}
+	
+	if (i <= count) {
+		/* We have not enought space for whole string with the trailing zero => print only a part of string */
+			memcpy((void *)(data->string + data->len), (void *)str, i - 1);
+			data->string[data->size - 1] = 0;
+			data->len = data->size;
+			return count;
+	}
+	
+	/* Buffer is big enought to print whole string */
+	memcpy((void *)(data->string + data->len), (void *)str, count);
+	data->len += count;
+	/* Put trailing zero at end, but not count it into data->len so it could be rewritten next time */
+	data->string[data->len] = 0;
+
+	return count;	
+}
+
+/** Print formatted to the given buffer with limited size.
+ * @param str	buffer
+ * @param size	buffer size
+ * @param fmt	format string
+ * \see For more details about format string see printf_core.
+ */
+int vsnprintf(char *str, size_t size, const char *fmt, va_list ap)
+{
+	struct vsnprintf_data data = {size, 0, str};
+	struct printf_spec ps = {(int(*)(void *, size_t, void *)) vsnprintf_write, &data};
+
+	/* Print 0 at end of string - fix the case that nothing will be printed */
+	if (size > 0)
+		str[0] = 0;
+	
+	/* vsnprintf_write ensures that str will be terminated by zero. */
+	return printf_core(fmt, &ps, ap);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/io/vsprintf.c
===================================================================
--- uspace/lib/libc/generic/io/vsprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/io/vsprintf.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <io/printf_core.h>
+
+/** Print formatted to the given buffer.
+ * @param str	buffer
+ * @param fmt	format string
+ * @param ap	argument list
+ * \see For more details about format string see printf_core.
+ */
+int vsprintf(char *str, const char *fmt, va_list ap)
+{
+	return vsnprintf(str, (size_t) - 1, fmt, ap);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/ipc.c
===================================================================
--- uspace/lib/libc/generic/ipc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/ipc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,597 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ * @}
+ */
+
+/** @addtogroup libcipc IPC
+ * @brief HelenOS uspace IPC
+ * @{
+ * @ingroup libc
+ */
+/** @file
+ */ 
+
+#include <ipc/ipc.h>
+#include <libc.h>
+#include <malloc.h>
+#include <errno.h>
+#include <libadt/list.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <futex.h>
+#include <kernel/synch/synch.h>
+#include <async.h>
+#include <psthread.h>
+
+/** Structure used for keeping track of sent asynchronous calls and queing
+ * unsent calls.
+ */
+typedef struct {
+	link_t list;
+
+	ipc_async_callback_t callback;
+	void *private;
+	union {
+		ipc_callid_t callid;
+		struct {
+			ipc_call_t data;
+			int phoneid;
+		} msg;
+	} u;
+	pstid_t ptid;	/**< Pseudothread waiting for sending this call. */
+} async_call_t;
+
+LIST_INITIALIZE(dispatched_calls);
+
+/** List of asynchronous calls that were not accepted by kernel.
+ *
+ * It is protected by async_futex, because if the call cannot be sent into the
+ * kernel, the async framework is used automatically.
+ */
+LIST_INITIALIZE(queued_calls);
+
+static atomic_t ipc_futex = FUTEX_INITIALIZER;
+
+/** Make a fast synchronous call.
+ *
+ * Only one payload argument can be passed using this function. However, this
+ * function is faster than the generic ipc_call_sync_3().
+ *
+ * @param phoneid	Phone handle for the call.
+ * @param method	Requested method.
+ * @param arg1		Service-defined payload argument.
+ * @param result	If non-NULL, the return ARG1 will be stored there.
+ *
+ * @return		Negative values represent errors returned by IPC.
+ *			Otherwise the RETVAL of the answer is returned.
+ */
+int ipc_call_sync(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t *result)
+{
+	ipc_call_t resdata;
+	int callres;
+	
+	callres = __SYSCALL4(SYS_IPC_CALL_SYNC_FAST, phoneid, method, arg1,
+	    (sysarg_t) &resdata);
+	if (callres)
+		return callres;
+	if (result)
+		*result = IPC_GET_ARG1(resdata);
+	return IPC_GET_RETVAL(resdata);
+}
+
+/** Make a synchronous call transmitting 3 arguments of payload.
+ *
+ * @param phoneid	Phone handle for the call.
+ * @param method	Requested method.
+ * @param arg1		Service-defined payload argument.
+ * @param arg2		Service-defined payload argument.
+ * @param arg3		Service-defined payload argument.
+ * @param result1	If non-NULL, storage for the first return argument.
+ * @param result2	If non-NULL, storage for the second return argument.
+ * @param result3	If non-NULL, storage for the third return argument.
+ *
+ * @return		Negative value means IPC error.
+ *			Otherwise the RETVAL of the answer.
+ */
+int ipc_call_sync_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
+    ipcarg_t arg3, ipcarg_t *result1, ipcarg_t *result2, ipcarg_t *result3)
+{
+	ipc_call_t data;
+	int callres;
+
+	IPC_SET_METHOD(data, method);
+	IPC_SET_ARG1(data, arg1);
+	IPC_SET_ARG2(data, arg2);
+	IPC_SET_ARG3(data, arg3);
+
+	callres = __SYSCALL3(SYS_IPC_CALL_SYNC, phoneid, (sysarg_t) &data,
+	    (sysarg_t) &data);
+	if (callres)
+		return callres;
+
+	if (result1)
+		*result1 = IPC_GET_ARG1(data);
+	if (result2)
+		*result2 = IPC_GET_ARG2(data);
+	if (result3)
+		*result3 = IPC_GET_ARG3(data);
+	return IPC_GET_RETVAL(data);
+}
+
+/** Syscall to send asynchronous message.
+ *
+ * @param phoneid	Phone handle for the call.
+ * @param data		Call data with the request.
+ *
+ * @return		Hash of the call or an error code.
+ */
+static ipc_callid_t _ipc_call_async(int phoneid, ipc_call_t *data)
+{
+	return __SYSCALL2(SYS_IPC_CALL_ASYNC, phoneid, (sysarg_t) data);
+}
+
+/** Prolog to ipc_call_async_*() functions.
+ *
+ * @param private	Argument for the answer/error callback.
+ * @param callback	Answer/error callback.
+ *
+ * @return		New, partially initialized async_call structure or NULL.
+ */
+static inline async_call_t *ipc_prepare_async(void *private,
+    ipc_async_callback_t callback)
+{
+	async_call_t *call;
+
+	call = malloc(sizeof(*call));
+	if (!call) {
+		if (callback)
+			callback(private, ENOMEM, NULL);
+		return NULL;
+	}
+	call->callback = callback;
+	call->private = private;
+
+	return call;
+}
+
+/** Epilogue of ipc_call_async_*() functions.
+ *
+ * @param callid	Value returned by the SYS_IPC_CALL_ASYNC_* syscall.
+ * @param phoneid	Phone handle through which the call was made.
+ * @param call		async_call structure returned by ipc_prepare_async().
+ * @param can_preempt	If non-zero, the current pseudo thread can be preempted
+ *			in this call.
+ */
+static inline void ipc_finish_async(ipc_callid_t callid, int phoneid,
+    async_call_t *call, int can_preempt)
+{
+	if (!call) { /* Nothing to do regardless if failed or not */
+		futex_up(&ipc_futex);
+		return;
+	}
+
+	if (callid == IPC_CALLRET_FATAL) {
+		futex_up(&ipc_futex);
+		/* Call asynchronous handler with error code */
+		if (call->callback)
+			call->callback(call->private, ENOENT, NULL);
+		free(call);
+		return;
+	}
+
+	if (callid == IPC_CALLRET_TEMPORARY) {
+		futex_up(&ipc_futex);
+
+		call->u.msg.phoneid = phoneid;
+		
+		futex_down(&async_futex);
+		list_append(&call->list, &queued_calls);
+
+		if (can_preempt) {
+			call->ptid = psthread_get_id();
+			psthread_schedule_next_adv(PS_TO_MANAGER);
+			/* Async futex unlocked by previous call */
+		} else {
+			call->ptid = 0;
+			futex_up(&async_futex);
+		}
+		return;
+	}
+	call->u.callid = callid;
+	/* Add call to the list of dispatched calls */
+	list_append(&call->list, &dispatched_calls);
+	futex_up(&ipc_futex);
+	
+}
+
+/** Make a fast asynchronous call.
+ *
+ * This function can only handle two arguments of payload. It is, however,
+ * faster than the more generic ipc_call_async_3().
+ *
+ * Note that this function is a void function.
+ * During normal opertation, answering this call will trigger the callback.
+ * In case of fatal error, call the callback handler with the proper error code.
+ * If the call cannot be temporarily made, queue it.
+ *
+ * @param phoneid	Phone handle for the call.
+ * @param method	Requested method.
+ * @param arg1		Service-defined payload argument.
+ * @param arg2		Service-defined payload argument.
+ * @param private	Argument to be passed to the answer/error callback.
+ * @param callback	Answer or error callback.
+ * @param can_preempt	If non-zero, the current pseudo thread will be preempted
+ *			in case the kernel temporarily refuses to accept more
+ *			asynchronous calls.
+ */
+void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, void *private, ipc_async_callback_t callback,
+    int can_preempt)
+{
+	async_call_t *call = NULL;
+	ipc_callid_t callid;
+
+	if (callback) {
+		call = ipc_prepare_async(private, callback);
+		if (!call)
+			return;
+	}
+
+	/*
+	 * We need to make sure that we get callid before another thread
+	 * accesses the queue again.
+	 */
+	futex_down(&ipc_futex);
+	callid = __SYSCALL4(SYS_IPC_CALL_ASYNC_FAST, phoneid, method, arg1,
+	    arg2);
+
+	if (callid == IPC_CALLRET_TEMPORARY) {
+		if (!call) {
+			call = ipc_prepare_async(private, callback);
+			if (!call)
+				return;
+		}
+		IPC_SET_METHOD(call->u.msg.data, method);
+		IPC_SET_ARG1(call->u.msg.data, arg1);
+		IPC_SET_ARG2(call->u.msg.data, arg2);
+	}
+	ipc_finish_async(callid, phoneid, call, can_preempt);
+}
+
+/** Make an asynchronous call transmitting the entire payload.
+ *
+ * Note that this function is a void function.
+ * During normal opertation, answering this call will trigger the callback.
+ * In case of fatal error, call the callback handler with the proper error code.
+ * If the call cannot be temporarily made, queue it.
+ *
+ * @param phoneid	Phone handle for the call.
+ * @param method	Requested method.
+ * @param arg1		Service-defined payload argument.
+ * @param arg2		Service-defined payload argument.
+ * @param arg3		Service-defined payload argument.
+ * @param private	Argument to be passed to the answer/error callback.
+ * @param callback	Answer or error callback.
+ * @param can_preempt	If non-zero, the current pseudo thread will be preempted
+ *			in case the kernel temporarily refuses to accept more
+ *			asynchronous calls.
+ *
+ */
+void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, ipcarg_t arg3, void *private, ipc_async_callback_t callback,
+    int can_preempt)
+{
+	async_call_t *call;
+	ipc_callid_t callid;
+
+	call = ipc_prepare_async(private, callback);
+	if (!call)
+		return;
+
+	IPC_SET_METHOD(call->u.msg.data, method);
+	IPC_SET_ARG1(call->u.msg.data, arg1);
+	IPC_SET_ARG2(call->u.msg.data, arg2);
+	IPC_SET_ARG3(call->u.msg.data, arg3);
+	/*
+	 * We need to make sure that we get callid before another thread accesses
+	 * the queue again.
+	 */
+	futex_down(&ipc_futex);
+	callid = _ipc_call_async(phoneid, &call->u.msg.data);
+
+	ipc_finish_async(callid, phoneid, call, can_preempt);
+}
+
+
+/** Answer a received call - fast version.
+ *
+ * The fast answer makes use of passing retval and first two arguments in
+ * registers. If you need to return more, use the ipc_answer() instead.
+ *
+ * @param callid	Hash of the call being answered.
+ * @param retval	Return value.
+ * @param arg1		First return argument.
+ * @param arg2		Second return argument.
+ *
+ * @return		Zero on success or a value from @ref errno.h on failure.
+ */
+ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1,
+    ipcarg_t arg2)
+{
+	return __SYSCALL4(SYS_IPC_ANSWER_FAST, callid, retval, arg1, arg2);
+}
+
+/** Answer a received call - full version.
+ *
+ * @param callid	Hash of the call being answered.
+ * @param call 		Call structure with the answer.
+ *			Must be already initialized by the responder.
+ *
+ * @return		Zero on success or a value from @ref errno.h on failure.
+ */
+ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call)
+{
+	return __SYSCALL2(SYS_IPC_ANSWER, callid, (sysarg_t) call);
+}
+
+
+/** Try to dispatch queued calls from the async queue. */
+static void try_dispatch_queued_calls(void)
+{
+	async_call_t *call;
+	ipc_callid_t callid;
+
+	/** @todo
+	 * Integrate intelligently ipc_futex, so that it is locked during
+	 * ipc_call_async_*(), until it is added to dispatched_calls.
+	 */
+	futex_down(&async_futex);
+	while (!list_empty(&queued_calls)) {
+		call = list_get_instance(queued_calls.next, async_call_t, list);
+		callid = _ipc_call_async(call->u.msg.phoneid, &call->u.msg.data);
+		if (callid == IPC_CALLRET_TEMPORARY) {
+			break;
+		}
+		list_remove(&call->list);
+
+		futex_up(&async_futex);
+		if (call->ptid)
+			psthread_add_ready(call->ptid);
+		
+		if (callid == IPC_CALLRET_FATAL) {
+			if (call->callback)
+				call->callback(call->private, ENOENT, NULL);
+			free(call);
+		} else {
+			call->u.callid = callid;
+			futex_down(&ipc_futex);
+			list_append(&call->list, &dispatched_calls);
+			futex_up(&ipc_futex);
+		}
+		futex_down(&async_futex);
+	}
+	futex_up(&async_futex);
+}
+
+/** Handle a received answer.
+ *
+ * Find the hash of the answer and call the answer callback.
+ *
+ * @todo Make it use hash table.
+ *
+ * @param callid	Hash of the received answer.
+ *			The answer has the same hash as the request OR'ed with
+ *			the IPC_CALLID_ANSWERED bit.
+ * @param data		Call data of the answer.
+ */
+static void handle_answer(ipc_callid_t callid, ipc_call_t *data)
+{
+	link_t *item;
+	async_call_t *call;
+
+	callid &= ~IPC_CALLID_ANSWERED;
+	
+	futex_down(&ipc_futex);
+	for (item = dispatched_calls.next; item != &dispatched_calls;
+	    item = item->next) {
+		call = list_get_instance(item, async_call_t, list);
+		if (call->u.callid == callid) {
+			list_remove(&call->list);
+			futex_up(&ipc_futex);
+			if (call->callback)
+				call->callback(call->private, 
+				    IPC_GET_RETVAL(*data), data);
+			free(call);
+			return;
+		}
+	}
+	futex_up(&ipc_futex);
+}
+
+
+/** Wait for a first call to come.
+ *
+ * @param call		Storage where the incoming call data will be stored.
+ * @param usec		Timeout in microseconds
+ * @param flags		Flags passed to SYS_IPC_WAIT (blocking, nonblocking).
+ *
+ * @return		Hash of the call. Note that certain bits have special
+ *			meaning. IPC_CALLID_ANSWERED will be set in an answer
+ *			and IPC_CALLID_NOTIFICATION is used for notifications.
+ *			
+ */
+ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags)
+{
+	ipc_callid_t callid;
+
+	callid = __SYSCALL3(SYS_IPC_WAIT, (sysarg_t) call, usec, flags);
+	/* Handle received answers */
+	if (callid & IPC_CALLID_ANSWERED) {
+		handle_answer(callid, call);
+		try_dispatch_queued_calls();
+	}
+
+	return callid;
+}
+
+/** Wait some time for an IPC call.
+ *
+ * The call will return after an answer is received.
+ *
+ * @param call		Storage where the incoming call data will be stored.
+ * @param usec		Timeout in microseconds.
+ *
+ * @return		Hash of the answer.
+ */
+ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *call, uint32_t usec)
+{
+	ipc_callid_t callid;
+
+	do {
+		callid = ipc_wait_cycle(call, usec, SYNCH_FLAGS_NONE);
+	} while (callid & IPC_CALLID_ANSWERED);
+
+	return callid;
+}
+
+/** Check if there is an IPC call waiting to be picked up.
+ *
+ * @param call		Storage where the incoming call will be stored.
+ * @return		Hash of the answer.
+ */
+ipc_callid_t ipc_trywait_for_call(ipc_call_t *call)
+{
+	ipc_callid_t callid;
+
+	do {
+		callid = ipc_wait_cycle(call, SYNCH_NO_TIMEOUT,
+		    SYNCH_FLAGS_NON_BLOCKING);
+	} while (callid & IPC_CALLID_ANSWERED);
+
+	return callid;
+}
+
+/** Ask destination to do a callback connection.
+ *
+ * @param phoneid	Phone handle used for contacting the other side.
+ * @param arg1		Service-defined argument.
+ * @param arg2		Service-defined argument.
+ * @param phonehash	Storage where the library will store an opaque
+ *			identifier of the phone that will be used for incoming
+ *			calls. This identifier can be used for connection
+ *			tracking.
+ *
+ * @return		Zero on success or a negative error code.
+ */
+int ipc_connect_to_me(int phoneid, int arg1, int arg2, ipcarg_t *phonehash)
+{
+	return ipc_call_sync_3(phoneid, IPC_M_CONNECT_TO_ME, arg1, arg2, 0, 0, 0,
+	    phonehash);
+}
+
+/** Ask through phone for a new connection to some service.
+ *
+ * @param phoneid	Phone handle used for contacting the other side.
+ * @param arg1		User defined argument.
+ * @param arg2		User defined argument.
+ *
+ * @return		New phone handle on success or a negative error code.
+ */
+int ipc_connect_me_to(int phoneid, int arg1, int arg2)
+{
+	ipcarg_t newphid;
+	int res;
+
+	res =  ipc_call_sync_3(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, 0, 0, 0,
+	    &newphid);
+	if (res)
+		return res;
+	return newphid;
+}
+
+/** Hang up a phone.
+ *
+ * @param phoneid	Handle of the phone to be hung up.
+ *
+ * @return		Zero on success or a negative error code.
+ */
+int ipc_hangup(int phoneid)
+{
+	return __SYSCALL1(SYS_IPC_HANGUP, phoneid);
+}
+
+/** Register IRQ notification.
+ *
+ * @param inr		IRQ number.
+ * @param devno		Device number of the device generating inr.
+ * @param method	Use this method for notifying me.
+ * @param ucode		Top-half pseudocode handler.
+ *
+ * @return		Value returned by the kernel.
+ */
+int ipc_register_irq(int inr, int devno, int method, irq_code_t *ucode)
+{
+	return __SYSCALL4(SYS_IPC_REGISTER_IRQ, inr, devno, method,
+	    (sysarg_t) ucode);
+}
+
+/** Unregister IRQ notification.
+ *
+ * @param inr		IRQ number.
+ * @param devno		Device number of the device generating inr.
+ *
+ * @return		Value returned by the kernel.
+ */
+int ipc_unregister_irq(int inr, int devno)
+{
+	return __SYSCALL2(SYS_IPC_UNREGISTER_IRQ, inr, devno);
+}
+
+/** Forward a received call to another destination.
+ *
+ * @param callid	Hash of the call to forward.
+ * @param phoneid	Phone handle to use for forwarding.
+ * @param method	New method for the forwarded call.
+ * @param arg1		New value of the first argument for the forwarded call.
+ *
+ * @return		Zero on success or an error code.
+ *
+ * For non-system methods, the old method and arg1 are rewritten by the new
+ * values. For system methods, the new method and arg1 are written to the old
+ * arg1 and arg2, respectivelly.
+ */
+int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1)
+{
+	return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/libadt/hash_table.c
===================================================================
--- uspace/lib/libc/generic/libadt/hash_table.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/libadt/hash_table.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+/*
+ * This is an implementation of generic chained hash table.
+ */
+
+#include <libadt/hash_table.h>
+#include <libadt/list.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+/** Create chained hash table.
+ *
+ * @param h Hash table structure. Will be initialized by this call.
+ * @param m Number of slots in the hash table.
+ * @param max_keys Maximal number of keys needed to identify an item.
+ * @param op Hash table operations structure.
+ * @return true on success
+ */
+int hash_table_create(hash_table_t *h, hash_count_t m, hash_count_t max_keys, hash_table_operations_t *op)
+{
+	hash_count_t i;
+
+	assert(h);
+	assert(op && op->hash && op->compare);
+	assert(max_keys > 0);
+	
+	h->entry = malloc(m * sizeof(link_t));
+	if (!h->entry) {
+		printf("cannot allocate memory for hash table\n");
+		return false;
+	}
+	memset((void *) h->entry, 0,  m * sizeof(link_t));
+	
+	for (i = 0; i < m; i++)
+		list_initialize(&h->entry[i]);
+	
+	h->entries = m;
+	h->max_keys = max_keys;
+	h->op = op;
+	return true;
+}
+
+/** Insert item into hash table.
+ *
+ * @param h Hash table.
+ * @param key Array of all keys necessary to compute hash index.
+ * @param item Item to be inserted into the hash table.
+ */
+void hash_table_insert(hash_table_t *h, unsigned long key[], link_t *item)
+{
+	hash_index_t chain;
+
+	assert(item);
+	assert(h && h->op && h->op->hash && h->op->compare);
+
+	chain = h->op->hash(key);
+	assert(chain < h->entries);
+	
+	list_append(item, &h->entry[chain]);
+}
+
+/** Search hash table for an item matching keys.
+ *
+ * @param h Hash table.
+ * @param key Array of all keys needed to compute hash index.
+ *
+ * @return Matching item on success, NULL if there is no such item.
+ */
+link_t *hash_table_find(hash_table_t *h, unsigned long key[])
+{
+	link_t *cur;
+	hash_index_t chain;
+
+	assert(h && h->op && h->op->hash && h->op->compare);
+
+	chain = h->op->hash(key);
+	assert(chain < h->entries);
+	
+	for (cur = h->entry[chain].next; cur != &h->entry[chain]; cur = cur->next) {
+		if (h->op->compare(key, h->max_keys, cur)) {
+			/*
+			 * The entry is there.
+			 */
+			return cur;
+		}
+	}
+	
+	return NULL;
+}
+
+/** Remove all matching items from hash table.
+ *
+ * For each removed item, h->remove_callback() is called.
+ *
+ * @param h Hash table.
+ * @param key Array of keys that will be compared against items of the hash table.
+ * @param keys Number of keys in the 'key' array.
+ */
+void hash_table_remove(hash_table_t *h, unsigned long key[], hash_count_t keys)
+{
+	hash_index_t chain;
+	link_t *cur;
+
+	assert(h && h->op && h->op->hash && h->op->compare && h->op->remove_callback);
+	assert(keys <= h->max_keys);
+	
+	if (keys == h->max_keys) {
+
+		/*
+		 * All keys are known, hash_table_find() can be used to find the entry.
+		 */
+	
+		cur = hash_table_find(h, key);
+		if (cur) {
+			list_remove(cur);
+			h->op->remove_callback(cur);
+		}
+		return;
+	}
+	
+	/*
+	 * Fewer keys were passed.
+	 * Any partially matching entries are to be removed.
+	 */
+	for (chain = 0; chain < h->entries; chain++) {
+		for (cur = h->entry[chain].next; cur != &h->entry[chain]; cur = cur->next) {
+			if (h->op->compare(key, keys, cur)) {
+				link_t *hlp;
+				
+				hlp = cur;
+				cur = cur->prev;
+				
+				list_remove(hlp);
+				h->op->remove_callback(hlp);
+				
+				continue;
+			}
+		}
+	}
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/libadt/list.c
===================================================================
--- uspace/lib/libc/generic/libadt/list.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/libadt/list.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2004 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <libadt/list.h>
+
+
+/** Check for membership
+ *
+ * Check whether link is contained in the list head.
+ * The membership is defined as pointer equivalence.
+ *
+ * @param link Item to look for.
+ * @param head List to look in.
+ *
+ * @return true if link is contained in head, false otherwise.
+ *
+ */
+int list_member(const link_t *link, const link_t *head)
+{
+	int found = false;
+	link_t *hlp = head->next;
+	
+	while (hlp != head) {
+		if (hlp == link) {
+			found = true;
+			break;
+		}
+		hlp = hlp->next;
+	}
+	
+	return found;
+}
+
+
+/** Concatenate two lists
+ *
+ * Concatenate lists head1 and head2, producing a single
+ * list head1 containing items from both (in head1, head2
+ * order) and empty list head2.
+ *
+ * @param head1 First list and concatenated output
+ * @param head2 Second list and empty output.
+ *
+ */
+void list_concat(link_t *head1, link_t *head2)
+{
+	if (list_empty(head2))
+		return;
+
+	head2->next->prev = head1->prev;
+	head2->prev->next = head1;	
+	head1->prev->next = head2->next;
+	head1->prev = head2->prev;
+	list_initialize(head2);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/libc.c
===================================================================
--- uspace/lib/libc/generic/libc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/libc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup lc Libc
+ * @brief	HelenOS C library
+ * @{
+ * @}
+ */
+/** @addtogroup libc generic
+ * @ingroup lc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <libc.h>
+#include <unistd.h>
+#include <thread.h>
+#include <malloc.h>
+#include <psthread.h>
+#include <io/stream.h>
+#include <ipc/ipc.h>
+#include <async.h>
+#include <as.h>
+
+extern char _heap;
+
+void _exit(int status)
+{
+	thread_exit(status);
+}
+
+void __main(void)
+{
+	psthread_data_t *pt;
+
+	(void) as_area_create(&_heap, 1, AS_AREA_WRITE | AS_AREA_READ);
+	_async_init();
+	pt = psthread_setup();
+	__tcb_set(pt->tcb);
+}
+
+void __io_init(void)
+{
+	open("stdin", 0);
+	open("stdout", 0);
+	open("stderr", 0);
+}
+
+void __exit(void)
+{
+	psthread_teardown(__tcb_get()->pst_data);
+	_exit(0);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/mman.c
===================================================================
--- uspace/lib/libc/generic/mman.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/mman.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <sys/mman.h>
+#include <as.h>
+#include <unistd.h>
+
+void *mmap(void  *start, size_t length, int prot, int flags, int fd,
+    off_t offset)
+{
+	if (!start)
+		start = as_get_mappable_page(length);
+	
+//	if (! ((flags & MAP_SHARED) ^ (flags & MAP_PRIVATE)))
+//		return MAP_FAILED;
+	if (! (flags & MAP_ANONYMOUS))
+		return MAP_FAILED;
+
+	return as_area_create(start, length, prot);
+}
+
+int munmap(void *start, size_t length)
+{
+	return as_area_destroy(start);
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/psthread.c
===================================================================
--- uspace/lib/libc/generic/psthread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/psthread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,308 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <libadt/list.h>
+#include <psthread.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <thread.h>
+#include <stdio.h>
+#include <libarch/faddr.h>
+#include <futex.h>
+#include <assert.h>
+#include <async.h>
+
+#ifndef PSTHREAD_INITIAL_STACK_PAGES_NO
+#define PSTHREAD_INITIAL_STACK_PAGES_NO 1
+#endif
+
+static LIST_INITIALIZE(ready_list);
+static LIST_INITIALIZE(serialized_list);
+static LIST_INITIALIZE(manager_list);
+
+static void psthread_main(void);
+
+static atomic_t psthread_futex = FUTEX_INITIALIZER;
+/** Count of real threads that are in async_serialized mode */
+static int serialized_threads; /* Protected by async_futex */
+/** Thread-local count of serialization. If >0, we must not preempt */
+static __thread int serialization_count;
+/** Counter of threads residing in async_manager */
+static int threads_in_manager;
+
+/** Setup psthread information into TCB structure */
+psthread_data_t * psthread_setup()
+{
+	psthread_data_t *pt;
+	tcb_t *tcb;
+
+	tcb = __make_tls();
+	if (!tcb)
+		return NULL;
+
+	pt = malloc(sizeof(*pt));
+	if (!pt) {
+		__free_tls(tcb);
+		return NULL;
+	}
+
+	tcb->pst_data = pt;
+	pt->tcb = tcb;
+
+	return pt;
+}
+
+void psthread_teardown(psthread_data_t *pt)
+{
+	__free_tls(pt->tcb);
+	free(pt);
+}
+
+/** Function that is called on entry to new pseudo thread */
+void psthread_main(void)
+{
+	psthread_data_t *pt = __tcb_get()->pst_data;
+
+	pt->retval = pt->func(pt->arg);
+
+	pt->finished = 1;
+	if (pt->waiter)
+		list_append(&pt->waiter->link, &ready_list);
+
+	psthread_schedule_next_adv(PS_FROM_DEAD);
+}
+
+/** Schedule next userspace pseudo thread.
+ *
+ * If calling with PS_TO_MANAGER parameter, the async_futex should be
+ * held.
+ *
+ * @param ctype Type of switch.
+ * @return 0 if there is no ready pseudo thread, 1 otherwise.
+ */
+int psthread_schedule_next_adv(pschange_type ctype)
+{
+	psthread_data_t *srcpt, *dstpt;
+	int retval = 0;
+	
+	futex_down(&psthread_futex);
+
+	if (ctype == PS_PREEMPT && list_empty(&ready_list))
+		goto ret_0;
+
+	if (ctype == PS_FROM_MANAGER) {
+		if (list_empty(&ready_list) && list_empty(&serialized_list))
+			goto ret_0;
+		/* Do not preempt if there is not sufficient count of thread managers */
+		if (list_empty(&serialized_list) && threads_in_manager <= serialized_threads) {
+			goto ret_0;
+		}
+	}
+	/* If we are going to manager and none exists, create it */
+	if (ctype == PS_TO_MANAGER || ctype == PS_FROM_DEAD) {
+		while (list_empty(&manager_list)) {
+			futex_up(&psthread_futex);
+			async_create_manager();
+			futex_down(&psthread_futex);
+		}
+	}
+	
+	if (ctype != PS_FROM_DEAD) {
+		/* Save current state */
+		srcpt = __tcb_get()->pst_data;
+		if (!context_save(&srcpt->ctx)) {
+			if (serialization_count)
+				srcpt->flags &= ~PSTHREAD_SERIALIZED;
+			return 1; // futex_up already done here
+		}
+
+		/* Save myself to correct run list */
+		if (ctype == PS_PREEMPT)
+			list_append(&srcpt->link, &ready_list);
+		else if (ctype == PS_FROM_MANAGER) {
+			list_append(&srcpt->link, &manager_list);
+			threads_in_manager--;
+		} /* If ctype == PS_TO_MANAGER, don't save ourselves to any list, we should
+		   * already be somewhere, or we will be lost */
+	} else
+		srcpt = NULL; /* Avoid GCC warning, if ctype == PS_FROM_DEAD, srcpt is not used */
+
+	/* Choose new thread to run */
+	if (ctype == PS_TO_MANAGER || ctype == PS_FROM_DEAD) {
+		dstpt = list_get_instance(manager_list.next,psthread_data_t, link);
+		if (serialization_count && ctype == PS_TO_MANAGER) {
+			serialized_threads++;
+			srcpt->flags |= PSTHREAD_SERIALIZED;
+		}
+		threads_in_manager++;
+	} else {
+		if (!list_empty(&serialized_list)) {
+			dstpt = list_get_instance(serialized_list.next, psthread_data_t, link);
+			serialized_threads--;
+		} else
+			dstpt = list_get_instance(ready_list.next, psthread_data_t, link);
+	}
+	list_remove(&dstpt->link);
+
+	futex_up(&psthread_futex);
+	context_restore(&dstpt->ctx);
+
+ret_0:
+	futex_up(&psthread_futex);
+	return retval;
+}
+
+/** Wait for uspace pseudo thread to finish.
+ *
+ * @param psthrid Pseudo thread to wait for.
+ *
+ * @return Value returned by the finished thread.
+ */
+int psthread_join(pstid_t psthrid)
+{
+	volatile psthread_data_t *pt;
+	volatile int retval;
+
+	/* Handle psthrid = Kernel address -> it is wait for call */
+	pt = (psthread_data_t *) psthrid;
+
+	/* TODO */
+	printf("join unsupported\n");
+	_exit(1);
+
+	retval = pt->retval;
+
+	free(pt->stack);
+	psthread_teardown((void *)pt);
+
+	return retval;
+}
+
+/** Create a userspace pseudo thread.
+ *
+ * @param func Pseudo thread function.
+ * @param arg Argument to pass to func.
+ *
+ * @return 0 on failure, TLS of the new pseudo thread.
+ */
+pstid_t psthread_create(int (*func)(void *), void *arg)
+{
+	psthread_data_t *pt;
+
+	pt = psthread_setup();
+	if (!pt) 
+		return 0;
+	pt->stack = (char *) malloc(PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize());
+
+	if (!pt->stack) {
+		psthread_teardown(pt);
+		return 0;
+	}
+
+	pt->arg= arg;
+	pt->func = func;
+	pt->finished = 0;
+	pt->waiter = NULL;
+	pt->flags = 0;
+
+	context_save(&pt->ctx);
+	context_set(&pt->ctx, FADDR(psthread_main), pt->stack, PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize(), pt->tcb);
+
+	return (pstid_t )pt;
+}
+
+/** Add a thread to ready list */
+void psthread_add_ready(pstid_t psthrid)
+{
+	psthread_data_t *pt;
+
+	pt = (psthread_data_t *) psthrid;
+	futex_down(&psthread_futex);
+	if ((pt->flags & PSTHREAD_SERIALIZED))
+		list_append(&pt->link, &serialized_list);
+	else
+		list_append(&pt->link, &ready_list);
+	futex_up(&psthread_futex);
+}
+
+/** Add a thread to manager list */
+void psthread_add_manager(pstid_t psthrid)
+{
+	psthread_data_t *pt;
+
+	pt = (psthread_data_t *) psthrid;
+
+	futex_down(&psthread_futex);
+	list_append(&pt->link, &manager_list);
+	futex_up(&psthread_futex);
+}
+
+/** Remove one manager from manager list */
+void psthread_remove_manager()
+{
+	futex_down(&psthread_futex);
+	if (list_empty(&manager_list)) {
+		futex_up(&psthread_futex);
+		return;
+	}
+	list_remove(manager_list.next);
+	futex_up(&psthread_futex);
+}
+
+/** Return thread id of current running thread */
+pstid_t psthread_get_id(void)
+{
+	return (pstid_t)__tcb_get()->pst_data;
+}
+
+/** Disable preemption 
+ *
+ * If the thread wants to send several message in row and does not want
+ * to be preempted, it should start async_serialize_start() in the beginning
+ * of communication and async_serialize_end() in the end. If it is a
+ * true multithreaded application, it should protect the communication channel
+ * by a futex as well. Interrupt messages will can still be preempted.
+ */
+void psthread_inc_sercount(void)
+{
+	serialization_count++;
+}
+
+void psthread_dec_sercount(void)
+{
+	serialization_count--;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/stdlib.c
===================================================================
--- uspace/lib/libc/generic/stdlib.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/stdlib.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <stdlib.h>
+
+static long glbl_seed = 1;
+
+long int random(void)
+{
+	return glbl_seed = ((1366*glbl_seed + 150889) % RAND_MAX);
+}
+
+void srandom(unsigned int seed)
+{
+	glbl_seed = seed;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/string.c
===================================================================
--- uspace/lib/libc/generic/string.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/string.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#include <string.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <limits.h>
+#include <align.h>
+
+
+/* Dummy implementation of mem/ functions */
+
+void *memset(void *s, int c, size_t n)
+{
+	char *os = s;
+	
+	while (n--)
+		*(os++) = c;
+	
+	return s;
+}
+
+struct along {
+	unsigned long n;
+} __attribute__ ((packed));
+
+static void *unaligned_memcpy(void *dst, const void *src, size_t n)
+{
+	int i, j;
+	struct along *adst = dst;
+	const struct along *asrc = src;
+
+	for (i = 0; i < n / sizeof(unsigned long); i++)
+		adst[i].n = asrc[i].n;
+		
+	for (j = 0; j < n % sizeof(unsigned long); j++)
+		((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *) (((unsigned long *) src) + i))[j];
+		
+	return (char *) src;
+}
+
+void *memcpy(void *dst, const void *src, size_t n)
+{
+	int i, j;
+
+	if (((long) dst & (sizeof(long) - 1)) || ((long) src & (sizeof(long) - 1)))
+ 		return unaligned_memcpy(dst, src, n);
+
+	for (i = 0; i < n / sizeof(unsigned long); i++)
+		((unsigned long *) dst)[i] = ((unsigned long *) src)[i];
+		
+	for (j = 0; j < n % sizeof(unsigned long); j++)
+		((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *) (((unsigned long *) src) + i))[j];
+		
+	return (char *) src;
+}
+
+void *memmove(void *dst, const void *src, size_t n)
+{
+	int i, j;
+	
+	if (src > dst)
+		return memcpy(dst, src, n);
+
+	for (j = (n % sizeof(unsigned long)) - 1; j >= 0; j--)
+		((unsigned char *) ((unsigned long *) dst))[j] = ((unsigned char *) ((unsigned long *) src))[j];
+
+	for (i = n / sizeof(unsigned long) - 1; i >=0 ; i--)
+		((unsigned long *) dst)[i] = ((unsigned long *) src)[i];
+		
+	return (char *) src;
+}
+
+/** Compare two memory areas.
+ *
+ * @param s1	Pointer to the first area to compare.
+ * @param s2	Pointer to the second area to compare.
+ * @param len	Size of the first area in bytes. Both areas must have the same
+ *		length.
+ * @return	If len is 0, return zero. If the areas match, return zero.
+ *		Otherwise return non-zero.
+ */
+int bcmp(const char *s1, const char *s2, size_t len)
+{
+	for (; len && *s1++ == *s2++; len--)
+		;
+	return len;
+}
+
+/** Count the number of characters in the string, not including terminating 0.
+ * @param str string
+ * @return number of characters in string.
+ */
+size_t strlen(const char *str) 
+{
+	size_t counter = 0;
+
+	while (str[counter] != 0)
+		counter++;
+
+	return counter;
+}
+
+int strcmp(const char *a, const char *b)
+{
+	int c = 0;
+	
+	while (a[c] && b[c] && (!(a[c] - b[c])))
+		c++;
+	
+	return (a[c] - b[c]);
+	
+}
+
+
+/** Return pointer to the first occurence of character c in string
+ * @param str scanned string 
+ * @param c searched character (taken as one byte)
+ * @return pointer to the matched character or NULL if it is not found in given string.
+ */
+char *strchr(const char *str, int c)
+{
+	while (*str != '\0') {
+		if (*str == (char) c)
+			return (char *) str;
+		str++;
+	}
+
+	return NULL;
+}
+
+/** Return pointer to the last occurence of character c in string
+ * @param str scanned string 
+ * @param c searched character (taken as one byte)
+ * @return pointer to the matched character or NULL if it is not found in given string.
+ */
+char *strrchr(const char *str, int c)
+{
+	char *retval = NULL;
+
+	while (*str != '\0') {
+		if (*str == (char) c)
+			retval = (char *) str;
+		str++;
+	}
+
+	return (char *) retval;
+}
+
+/** Convert string to a number. 
+ * Core of strtol and strtoul functions.
+ * @param nptr pointer to string
+ * @param endptr if not NULL, function stores here pointer to the first invalid character
+ * @param base zero or number between 2 and 36 inclusive
+ * @param sgn its set to 1 if minus found
+ * @return result of conversion.
+ */
+static unsigned long _strtoul(const char *nptr, char **endptr, int base, char *sgn)
+{
+	unsigned char c;
+	unsigned long result = 0;
+	unsigned long a, b;
+	const char *str = nptr;
+	const char *tmpptr;
+	
+	while (isspace(*str))
+		str++;
+	
+	if (*str == '-') {
+		*sgn = 1;
+		++str;
+	} else if (*str == '+')
+		++str;
+	
+	if (base) {
+		if ((base == 1) || (base > 36)) {
+			/* FIXME: set errno to EINVAL */
+			return 0;
+		}
+		if ((base == 16) && (*str == '0') && ((str[1] == 'x') || (str[1] == 'X'))) {
+			str += 2;
+		}
+	} else {
+		base = 10;
+		
+		if (*str == '0') {
+			base = 8;
+			if ((str[1] == 'X') || (str[1] == 'x'))  {
+				base = 16;
+				str += 2;
+			}
+		} 
+	}
+	
+	tmpptr = str;
+
+	while (*str) {
+		c = *str;
+		c = (c >= 'a' ? c - 'a' + 10 : (c >= 'A' ? c - 'A' + 10 : (c <= '9' ? c - '0' : 0xff)));
+		if (c > base) {
+			break;
+		}
+		
+		a = (result & 0xff) * base + c;
+		b = (result >> 8) * base + (a >> 8);
+		
+		if (b > (ULONG_MAX >> 8)) {
+			/* overflow */
+			/* FIXME: errno = ERANGE*/
+			return ULONG_MAX;
+		}
+	
+		result = (b << 8) + (a & 0xff);
+		++str;
+	}
+	
+	if (str == tmpptr) {
+		/* no number was found => first invalid character is the first character of the string */
+		/* FIXME: set errno to EINVAL */
+		str = nptr;
+		result = 0;
+	}
+	
+	if (endptr)
+		*endptr = (char *) str;
+
+	if (nptr == str) { 
+		/*FIXME: errno = EINVAL*/
+		return 0;
+	}
+
+	return result;
+}
+
+/** Convert initial part of string to long int according to given base.
+ * The number may begin with an arbitrary number of whitespaces followed by optional sign (`+' or `-').
+ * If the base is 0 or 16, the prefix `0x' may be inserted and the number will be taken as hexadecimal one.
+ * If the base is 0 and the number begin with a zero, number will be taken as octal one (as with base 8).
+ * Otherwise the base 0 is taken as decimal.
+ * @param nptr pointer to string
+ * @param endptr if not NULL, function stores here pointer to the first invalid character
+ * @param base zero or number between 2 and 36 inclusive
+ * @return result of conversion.
+ */
+long int strtol(const char *nptr, char **endptr, int base)
+{
+	char sgn = 0;
+	unsigned long number = 0;
+	
+	number = _strtoul(nptr, endptr, base, &sgn);
+
+	if (number > LONG_MAX) {
+		if ((sgn) && (number == (unsigned long) (LONG_MAX) + 1)) {
+			/* FIXME: set 0 to errno */
+			return number;		
+		}
+		/* FIXME: set ERANGE to errno */
+		return (sgn ? LONG_MIN : LONG_MAX);	
+	}
+	
+	return (sgn ? -number : number);
+}
+
+
+/** Convert initial part of string to unsigned long according to given base.
+ * The number may begin with an arbitrary number of whitespaces followed by optional sign (`+' or `-').
+ * If the base is 0 or 16, the prefix `0x' may be inserted and the number will be taken as hexadecimal one.
+ * If the base is 0 and the number begin with a zero, number will be taken as octal one (as with base 8).
+ * Otherwise the base 0 is taken as decimal.
+ * @param nptr pointer to string
+ * @param endptr if not NULL, function stores here pointer to the first invalid character
+ * @param base zero or number between 2 and 36 inclusive
+ * @return result of conversion.
+ */
+unsigned long strtoul(const char *nptr, char **endptr, int base)
+{
+	char sgn = 0;
+	unsigned long number = 0;
+	
+	number = _strtoul(nptr, endptr, base, &sgn);
+
+	return (sgn ? -number : number);
+}
+
+char *strcpy(char *dest, const char *src)
+{
+	char *orig = dest;
+	
+	while ((*(dest++) = *(src++)));
+	return orig;
+}
+
+char *strncpy(char *dest, const char *src, size_t n)
+{
+	char *orig = dest;
+	
+	while ((*(dest++) = *(src++)) && --n);
+	return orig;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/sysinfo.c
===================================================================
--- uspace/lib/libc/generic/sysinfo.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/sysinfo.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <libc.h>
+#include <sysinfo.h>
+#include <string.h>
+
+sysarg_t sysinfo_value(char *name)
+{
+	return __SYSCALL2(SYS_SYSINFO_VALUE, (sysarg_t ) name, (sysarg_t) strlen(name));
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/task.c
===================================================================
--- uspace/lib/libc/generic/task.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/task.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <task.h>
+#include <libc.h>
+
+task_id_t task_get_id(void)
+{
+	task_id_t task_id;
+
+	(void) __SYSCALL1(SYS_TASK_GET_ID, (sysarg_t) &task_id);
+
+	return task_id;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/thread.c
===================================================================
--- uspace/lib/libc/generic/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/thread.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <thread.h>
+#include <libc.h>
+#include <stdlib.h>
+#include <libarch/faddr.h>
+#include <kernel/proc/uarg.h>
+#include <psthread.h>
+#include <string.h>
+#include <async.h>
+
+#include <stdio.h>
+
+
+#ifndef THREAD_INITIAL_STACK_PAGES_NO
+#define THREAD_INITIAL_STACK_PAGES_NO 1
+#endif
+
+static LIST_INITIALIZE(thread_garbage);
+
+extern char _tdata_start;
+extern char _tdata_end;
+extern char _tbss_start;
+extern char _tbss_end;
+
+/** Create TLS (Thread Local Storage) data structures.
+ *
+ * The code requires, that sections .tdata and .tbss are adjacent. It may be
+ * changed in the future.
+ *
+ * @return Pointer to TCB.
+ */
+tcb_t *__make_tls(void)
+{
+	void *data;
+	tcb_t *tcb;
+	size_t tls_size = &_tbss_end - &_tdata_start;
+	
+	tcb = __alloc_tls(&data, tls_size);
+	
+	/*
+	 * Copy thread local data from the initialization image.
+	 */
+	memcpy(data, &_tdata_start, &_tdata_end - &_tdata_start);
+	/*
+	 * Zero out the thread local uninitialized data.
+	 */
+	memset(data + (&_tbss_start - &_tdata_start), 0,
+	    &_tbss_end - &_tbss_start);
+
+	return tcb;
+}
+
+void __free_tls(tcb_t *tcb)
+{
+	size_t tls_size = &_tbss_end - &_tdata_start;
+	__free_tls_arch(tcb, tls_size);
+}
+
+/** Main thread function.
+ *
+ * This function is called from __thread_entry() and is used
+ * to call the thread's implementing function and perform cleanup
+ * and exit when thread returns back. Do not call this function
+ * directly.
+ *
+ * @param uarg Pointer to userspace argument structure.
+ */
+void __thread_main(uspace_arg_t *uarg)
+{
+	psthread_data_t *pt;
+
+	pt = psthread_setup();
+	__tcb_set(pt->tcb);
+	
+	uarg->uspace_thread_function(uarg->uspace_thread_arg);
+	/* XXX: we cannot free the userspace stack while running on it */
+//	free(uarg->uspace_stack);
+//	free(uarg);
+
+	/* If there is a manager, destroy it */
+	async_destroy_manager();
+	psthread_teardown(pt);
+
+	thread_exit(0);
+}
+
+/** Create userspace thread.
+ *
+ * This function creates new userspace thread and allocates userspace
+ * stack and userspace argument structure for it.
+ *
+ * @param function Function implementing the thread.
+ * @param arg Argument to be passed to thread.
+ * @param name Symbolic name of the thread.
+ * @param tid Thread ID of the newly created thread.
+ *
+ * @return Zero on success or a code from @ref errno.h on failure.
+ */
+int thread_create(void (* function)(void *), void *arg, char *name,
+    thread_id_t *tid)
+{
+	char *stack;
+	uspace_arg_t *uarg;
+	int rc;
+
+	stack = (char *) malloc(getpagesize() * THREAD_INITIAL_STACK_PAGES_NO);
+	if (!stack)
+		return -1;
+		
+	uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t));
+	if (!uarg) {
+		free(stack);
+		return -1;
+	}
+	
+	uarg->uspace_entry = (void *) FADDR(__thread_entry);
+	uarg->uspace_stack = (void *) stack;
+	uarg->uspace_thread_function = function;
+	uarg->uspace_thread_arg = arg;
+	uarg->uspace_uarg = uarg;
+	
+	rc = __SYSCALL3(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name,
+	    (sysarg_t) tid);
+	
+	if (rc) {
+		/*
+		 * Failed to create a new thread.
+		 * Free up the allocated structures.
+		 */
+		free(uarg);
+		free(stack);
+	}
+
+	return rc;
+}
+
+/** Terminate current thread.
+ *
+ * @param status Exit status. Currently not used.
+ */
+void thread_exit(int status)
+{
+	__SYSCALL1(SYS_THREAD_EXIT, (sysarg_t) status);
+}
+
+/** Detach thread.
+ *
+ * Currently not implemented.
+ *
+ * @param thread TID.
+ */
+void thread_detach(thread_id_t thread)
+{
+}
+
+/** Join thread.
+ *
+ * Currently not implemented.
+ *
+ * @param thread TID.
+ *
+ * @return Thread exit status.
+ */
+int thread_join(thread_id_t thread)
+{
+}
+
+/** Get current thread ID.
+ *
+ * @return Current thread ID.
+ */
+thread_id_t thread_get_id(void)
+{
+	thread_id_t thread_id;
+
+	(void) __SYSCALL1(SYS_THREAD_GET_ID, (sysarg_t) &thread_id);
+
+	return thread_id;
+}
+
+/** @}
+ */
Index: uspace/lib/libc/generic/time.c
===================================================================
--- uspace/lib/libc/generic/time.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/generic/time.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#include <sys/time.h>
+#include <unistd.h>
+#include <ipc/ipc.h>
+#include <stdio.h>
+#include <arch/barrier.h>
+#include <unistd.h>
+#include <atomic.h>
+#include <futex.h>
+#include <sysinfo.h>
+#include <ipc/services.h>
+
+#include <sysinfo.h>
+#include <as.h>
+#include <ddi.h>
+
+/* Pointers to public variables with time */
+struct {
+	volatile sysarg_t seconds1;
+	volatile sysarg_t useconds;
+	volatile sysarg_t seconds2;
+} *ktime = NULL;
+
+
+/** POSIX gettimeofday
+ *
+ * The time variables are memory mapped(RO) from kernel, which updates
+ * them periodically. As it is impossible to read 2 values atomically, we
+ * use a trick: First read a seconds, then read microseconds, then
+ * read seconds again. If a second elapsed in the meantime, set it to zero. 
+ * This provides assurance, that at least the
+ * sequence of subsequent gettimeofday calls is ordered.
+ */
+int gettimeofday(struct timeval *tv, struct timezone *tz)
+{
+	void *mapping;
+	sysarg_t s1, s2;
+	sysarg_t rights;
+	int res;
+
+	if (!ktime) {
+		mapping = as_get_mappable_page(PAGE_SIZE);
+		/* Get the mapping of kernel clock */
+		res = ipc_call_sync_3(PHONE_NS, IPC_M_AS_AREA_RECV,
+		    (sysarg_t) mapping, PAGE_SIZE, SERVICE_MEM_REALTIME, NULL,
+		    &rights, NULL);
+		if (res) {
+			printf("Failed to initialize timeofday memarea\n");
+			_exit(1);
+		}
+		if (! (rights & AS_AREA_READ)) {
+			printf("Received bad rights on time area: %X\n",
+			       rights);
+			as_area_destroy(mapping);
+			_exit(1);
+		}
+		ktime = mapping;
+	}
+	if (tz) {
+		tz->tz_minuteswest = 0;
+		tz->tz_dsttime = DST_NONE;
+	}
+
+	s2 = ktime->seconds2;
+	read_barrier();
+	tv->tv_usec = ktime->useconds;
+	read_barrier();
+	s1 = ktime->seconds1;
+	if (s1 != s2) {
+		tv->tv_usec = 0;
+		tv->tv_sec = s1 > s2 ? s1 : s2;
+	} else
+		tv->tv_sec = s1;
+
+	return 0;
+}
+
+/** Wait unconditionally for specified number of microseconds */
+void usleep(unsigned long usec)
+{
+	atomic_t futex = FUTEX_INITIALIZER;
+
+	futex_initialize(&futex, 0);
+	futex_down_timeout(&futex, usec, 0);
+}
+
+/** Wait unconditionally for specified number of seconds */
+unsigned int sleep(unsigned int seconds)
+{
+	atomic_t futex = FUTEX_INITIALIZER;
+
+	futex_initialize(&futex, 0);
+	
+	/* Sleep in 1000 second steps to support
+	   full argument range */
+	while (seconds > 0) {
+		unsigned int period = (seconds > 1000) ? 1000 : seconds;
+	
+		futex_down_timeout(&futex, period * 1000000, 0);
+		seconds -= period;
+	}
+}
+
+/** @}
+ */
Index: uspace/lib/libc/include/align.h
===================================================================
--- uspace/lib/libc/include/align.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/align.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ALIGN_H_
+#define LIBC_ALIGN_H_
+
+/** Align to the nearest lower address.
+ *
+ * @param s Address or size to be aligned.
+ * @param a Size of alignment, must be power of 2.
+ */
+#define ALIGN_DOWN(s, a)	((s) & ~((a) - 1))
+
+
+/** Align to the nearest higher address.
+ *
+ * @param s Address or size to be aligned.
+ * @param a Size of alignment, must be power of 2.
+ */
+#define ALIGN_UP(s, a)		((long)((s) + ((a) - 1)) & ~((long) (a) - 1))
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/as.h
===================================================================
--- uspace/lib/libc/include/as.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/as.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_AS_H_
+#define LIBC_AS_H_
+
+#include <types.h>
+#include <task.h>
+#include <kernel/mm/as.h>
+#include <libarch/config.h>
+
+extern void *as_area_create(void *address, size_t size, int flags);
+extern int as_area_resize(void *address, size_t size, int flags);
+extern int as_area_destroy(void *address);
+extern void *set_maxheapsize(size_t mhs);
+extern void * as_get_mappable_page(size_t sz);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/assert.h
===================================================================
--- uspace/lib/libc/include/assert.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/assert.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ASSERT_H_
+#define LIBC_ASSERT_H_
+
+/** Debugging assert macro
+ *
+ * If NDEBUG is not set, the assert() macro
+ * evaluates expr and if it is false prints 
+ * error message and terminate program.
+ *
+ * @param expr Expression which is expected to be true.
+ *
+ */
+
+#include <stdlib.h>
+#ifndef NDEBUG
+#	define assert(expr) if (!(expr)) { printf("Assertion failed (%s) at file '%s', line %d.\n", #expr, __FILE__, __LINE__); abort();}
+#else
+#	define assert(expr)
+#endif
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/async.h
===================================================================
--- uspace/lib/libc/include/async.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/async.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ASYNC_H_
+#define LIBC_ASYNC_H_
+
+#include <ipc/ipc.h>
+#include <psthread.h>
+#include <sys/time.h>
+#include <atomic.h>
+
+typedef ipc_callid_t aid_t;
+typedef void (*async_client_conn_t)(ipc_callid_t callid, ipc_call_t *call);
+
+static inline void async_manager(void)
+{
+	psthread_schedule_next_adv(PS_TO_MANAGER);
+}
+
+ipc_callid_t async_get_call_timeout(ipc_call_t *call, suseconds_t usecs);
+static inline ipc_callid_t async_get_call(ipc_call_t *data)
+{
+	return async_get_call_timeout(data, 0);
+}
+
+aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
+		   ipc_call_t *dataptr);
+aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
+		   ipcarg_t arg3, ipc_call_t *dataptr);
+void async_wait_for(aid_t amsgid, ipcarg_t *result);
+int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout);
+
+/** Pseudo-synchronous message sending
+ *
+ * Send message through IPC, wait in the event loop, until it is received
+ *
+ * @return Return code of message
+ */
+static inline ipcarg_t async_req_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t *r1, ipcarg_t *r2)
+{
+	ipc_call_t result;
+	ipcarg_t rc;
+
+	aid_t eid = async_send_2(phoneid, method, arg1, arg2, &result);
+	async_wait_for(eid, &rc);
+	if (r1) 
+		*r1 = IPC_GET_ARG1(result);
+	if (r2)
+		*r2 = IPC_GET_ARG2(result);
+	return rc;
+}
+#define async_req(phoneid, method, arg1, r1) async_req_2(phoneid, method, arg1, 0, r1, 0)
+
+static inline ipcarg_t async_req_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+				   ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *r1, 
+				   ipcarg_t *r2, ipcarg_t *r3)
+{
+	ipc_call_t result;
+	ipcarg_t rc;
+
+	aid_t eid = async_send_3(phoneid, method, arg1, arg2, arg3, &result);
+	async_wait_for(eid, &rc);
+	if (r1) 
+		*r1 = IPC_GET_ARG1(result);
+	if (r2)
+		*r2 = IPC_GET_ARG2(result);
+	if (r3)
+		*r3 = IPC_GET_ARG3(result);
+	return rc;
+}
+
+
+pstid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid, 
+			     ipc_call_t *call,
+			     void (*cthread)(ipc_callid_t,ipc_call_t *));
+void async_usleep(suseconds_t timeout);
+void async_create_manager(void);
+void async_destroy_manager(void);
+void async_set_client_connection(async_client_conn_t conn);
+void async_set_interrupt_received(async_client_conn_t conn);
+int _async_init(void);
+
+
+/* Primitve functions for IPC communication */
+void async_msg_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, 
+		 ipcarg_t arg3);
+void async_msg_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2);
+#define async_msg(ph, m, a1) async_msg_2(ph, m, a1, 0)
+
+static inline void async_serialize_start(void)
+{
+	psthread_inc_sercount();
+}
+
+static inline void async_serialize_end(void)
+{
+	psthread_dec_sercount();
+}
+
+extern atomic_t async_futex;
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/atomic.h
===================================================================
--- uspace/lib/libc/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/atomic.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ATOMIC_H_
+#define LIBC_ATOMIC_H_
+
+typedef struct atomic {
+	volatile long count;
+} atomic_t;
+
+#include <libarch/atomic.h>
+
+static inline void atomic_set(atomic_t *val, long i)
+{
+        val->count = i;
+}
+
+static inline long atomic_get(atomic_t *val)
+{
+        return val->count;
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/bitops.h
===================================================================
--- uspace/lib/libc/include/bitops.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/bitops.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup generic	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_BITOPS_H_
+#define LIBC_BITOPS_H_
+
+#include <types.h>
+
+
+/** Return position of first non-zero bit from left (i.e. [log_2(arg)]).
+ *
+ * If number is zero, it returns 0
+ */
+static inline int fnzb32(uint32_t arg)
+{
+	int n = 0;
+
+	if (arg >> 16) {
+		arg >>= 16;
+		n += 16;
+	}
+	
+	if (arg >> 8) {
+		arg >>= 8;
+		n += 8;
+	}
+	
+	if (arg >> 4) {
+		arg >>= 4;
+		n += 4;
+	}
+	
+	if (arg >> 2) {
+		arg >>= 2;
+		n += 2;
+	}
+	
+	if (arg >> 1) {
+		arg >>= 1;
+		n += 1;
+	}
+	
+	return n;
+}
+
+static inline int fnzb64(uint64_t arg)
+{
+	int n = 0;
+
+	if (arg >> 32) {
+		arg >>= 32;
+		n += 32;
+	}
+	
+	return n + fnzb32((uint32_t) arg);
+}
+
+#define fnzb(x) fnzb32(x)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/bool.h
===================================================================
--- uspace/lib/libc/include/bool.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/bool.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_BOOL_H_
+#define LIBC_BOOL_H_
+
+#define false 0
+#define true 1
+
+typedef short bool;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/cap.h
===================================================================
--- uspace/lib/libc/include/cap.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/cap.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIB_CAP_H_
+#define LIB_CAP_H_
+
+#include <task.h>
+
+extern int cap_grant(task_id_t id, unsigned int caps);
+extern int cap_revoke(task_id_t id, unsigned int caps);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/ctype.h
===================================================================
--- uspace/lib/libc/include/ctype.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/ctype.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_CTYPE_H_
+#define LIBC_CTYPE_H_
+
+static inline int isdigit(int c)
+{
+	return ((c >= '0' )&&( c <= '9'));
+}
+
+static inline int isspace(int c)
+{
+	switch(c) {
+	case ' ':
+	case '\n':
+	case '\t':
+	case '\f':
+	case '\r':
+	case '\v':
+		return 1;
+		break;
+	default:
+		return 0;
+	}
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/ddi.h
===================================================================
--- uspace/lib/libc/include/ddi.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/ddi.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_DDI_H_
+#define LIBC_DDI_H_
+
+#include <task.h>
+
+extern int physmem_map(void *pf, void *vp, unsigned long pages, int flags);
+extern int iospace_enable(task_id_t id, void *ioaddr, unsigned long size);
+extern int preemption_control(int enable);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/endian.h
===================================================================
--- uspace/lib/libc/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/endian.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ENDIAN_H_
+#define LIBC_ENDIAN_H_
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN	4321
+#define __PDP_ENDIAN	3412
+
+#include <libarch/endian.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/err.h
===================================================================
--- uspace/lib/libc/include/err.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/err.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ERR_H_
+#define LIBC_ERR_H_
+
+#define errx(status, fmt, ...) { \
+	printf((fmt), ##__VA_ARGS__); \
+	_exit(status); \
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/errno.h
===================================================================
--- uspace/lib/libc/include/errno.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/errno.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_ERRNO_H_
+#define LIBC_ERRNO_H_
+
+#include <kernel/errno.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/futex.h
===================================================================
--- uspace/lib/libc/include/futex.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/futex.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_FUTEX_H_
+#define LIBC_FUTEX_H_
+
+#include <atomic.h>
+#include <types.h>
+
+#define FUTEX_INITIALIZER     {1}
+
+extern void futex_initialize(atomic_t *futex, int value);
+extern int futex_down(atomic_t *futex);
+extern int futex_trydown(atomic_t *futex);
+extern int futex_down_timeout(atomic_t *futex, uint32_t usec, int flags);
+extern int futex_up(atomic_t *futex);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/io/file.h
===================================================================
--- uspace/lib/libc/include/io/file.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/io/file.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2007 Michal Konopa
+ * Copyright (c) 2007 Martin Jelen
+ * Copyright (c) 2007 Peter Majer
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */ 
+
+/**
+ * @file	file.h
+ * @brief	The main header for the user library for working with the file system
+ */
+
+#ifndef _FILE_H
+#define _FILE_H
+
+#include "../../../fs/const.h"
+#include "../../../fs/type.h"
+#include "../../../fs/stat.h"
+#include "../../../fs/dir.h"
+#include "../../../share/message.h"
+
+#define F_OK			0x00
+#define F_FILE_NOT_FOUND	0x01
+#define F_FILE_NOT_OPEN		0x02
+#define F_READ_ERROR		0x10
+#define F_READ_OVERFLOW		0x11
+#define F_SYSTEM_ERROR		0xf0
+#define F_IPC_FAILURE		0xf1
+#define F_MMAP_FAILURE		0xf2
+#define F_COMM_FAILURE		0xf3
+
+#define F_ERRTYPE_MASK		0xf0
+
+#define F_MODE_READ		0x01
+#define F_MODE_WRITE		0x02
+#define F_MODE_READ_WRITE	F_MODE_READ | F_MODE_WRITE
+#define F_MODE_APPEND		0x04
+
+/**
+ *
+ */
+typedef struct {
+	char name[30];
+	unsigned short inode_num;
+} dir_item_t;
+
+/**
+ *
+ */
+typedef struct {
+	size_t size;
+	dir_item_t base_info;
+	void *share;
+	message_params_t *params;
+	unsigned int handle;
+	stat_t stat;
+} file_t;
+
+static int f_err;
+
+dir_item_t *ls(unsigned int *length);
+int chdir(char *new_dir);
+
+file_t *fopen(char *name, int mode);
+int fstat(file_t *file);
+int fread(file_t *file, void *buffer, unsigned int size);
+int fseek(file_t * file, int offset, int whence);
+int fclose(file_t *file);
+
+#endif
+
+/**
+ *@}
+ /
Index: uspace/lib/libc/include/io/io.h
===================================================================
--- uspace/lib/libc/include/io/io.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/io/io.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_IO_H_
+#define LIBC_IO_H_
+
+#include <libarch/types.h>
+
+int putnchars(const char * buf, size_t count);
+int putstr(const char * str);
+int putchar(int c);
+int getchar(void);
+
+#endif
+
+/** @}
+ */
+ 
+ 
Index: uspace/lib/libc/include/io/printf_core.h
===================================================================
--- uspace/lib/libc/include/io/printf_core.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/io/printf_core.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_PRINTF_CORE_H_
+#define LIBC_PRINTF_CORE_H_
+
+#include <libarch/types.h>
+#include <stdarg.h>
+
+/** Structure for specifying output methods for different printf clones. */
+struct printf_spec {
+	/* Output function, returns count of printed characters or EOF */
+	int (*write)(void *, size_t, void *);
+	/* Support data - output stream specification, its state, locks,... */
+	void *data;
+
+};
+
+int printf_core(const char *fmt, struct printf_spec *ps ,va_list ap);
+
+#endif
+
+/** @}
+ */
+ 
+ 
Index: uspace/lib/libc/include/io/stream.h
===================================================================
--- uspace/lib/libc/include/io/stream.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/io/stream.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2006 Jakub Vana
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STREAM_H_
+#define LIBC_STREAM_H_
+
+#include <libarch/types.h>
+
+#define EMFILE -17
+
+typedef int fd_t;
+
+typedef ssize_t (*pwritefn_t)(void *, const void *, size_t);
+typedef ssize_t (*preadfn_t)(void *, void *, size_t);
+
+fd_t open(const char *fname, int flags);
+int get_fd_phone(int fd);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/ipc/fb.h
===================================================================
--- uspace/lib/libc/include/ipc/fb.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/ipc/fb.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcipc
+ * @{
+ */
+/** @file
+ */ 
+
+#ifndef LIBC_FB_H_
+#define LIBC_FB_H_
+
+#define FB_PUTCHAR           1025
+#define FB_CLEAR             1026
+#define FB_GET_CSIZE         1027
+#define FB_CURSOR_VISIBILITY 1028
+#define FB_CURSOR_GOTO       1029
+#define FB_SCROLL            1030
+#define FB_VIEWPORT_SWITCH   1031
+#define FB_VIEWPORT_CREATE   1032
+#define FB_VIEWPORT_DELETE   1033
+#define FB_SET_STYLE         1034
+#define FB_GET_RESOLUTION    1035
+#define FB_DRAW_TEXT_DATA    1036
+#define FB_FLUSH             1037
+#define FB_VIEWPORT_DB       1038
+
+#define FB_DRAW_PPM          1100
+#define FB_PREPARE_SHM       1101
+#define FB_DROP_SHM          1102
+#define FB_SHM2PIXMAP        1103
+
+#define FB_VP_DRAW_PIXMAP    1104
+#define FB_VP2PIXMAP         1105
+#define FB_DROP_PIXMAP       1106
+#define FB_TRANS_PUTCHAR     1107
+
+#define FB_ANIM_CREATE       1200
+#define FB_ANIM_DROP         1201
+#define FB_ANIM_ADDPIXMAP    1202
+#define FB_ANIM_CHGVP        1203
+#define FB_ANIM_START        1204
+#define FB_ANIM_STOP         1205
+
+#define FB_POINTER_MOVE      1300
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/ipc/ipc.h
===================================================================
--- uspace/lib/libc/include/ipc/ipc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/ipc/ipc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcipc
+ * @{
+ */
+/** @file
+ */ 
+
+#ifndef LIBIPC_IPC_H_
+#define LIBIPC_IPC_H_
+
+#include <kernel/ipc/ipc.h>
+#include <kernel/ddi/irq.h>
+#include <libc.h>
+#include <types.h>
+#include <kernel/synch/synch.h>
+
+typedef sysarg_t ipcarg_t;
+typedef struct {
+	ipcarg_t args[IPC_CALL_LEN];
+	ipcarg_t in_phone_hash;
+} ipc_call_t;
+typedef sysarg_t ipc_callid_t;
+
+typedef void (* ipc_async_callback_t)(void *private, int retval,
+    ipc_call_t *data);
+
+#define ipc_call_sync_2(phoneid, method, arg1, arg2, res1, res2) \
+	ipc_call_sync_3((phoneid), (method), (arg1), (arg2), 0, (res1), (res2), \
+	    0)
+extern int ipc_call_sync_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *result1, ipcarg_t *result2,
+    ipcarg_t *result3);
+
+extern int ipc_call_sync(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t *result);
+
+extern ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags);
+extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *data, uint32_t usec);
+static inline ipc_callid_t ipc_wait_for_call(ipc_call_t *data)
+{
+	return ipc_wait_for_call_timeout(data, SYNCH_NO_TIMEOUT);
+}
+extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *data);
+
+extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval,
+    ipcarg_t arg1, ipcarg_t arg2);
+extern ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call);
+
+#define ipc_call_async(phoneid, method, arg1, private, callback, can_preempt) \
+	(ipc_call_async_2(phoneid, method, arg1, 0, private, callback, \
+	    can_preempt))
+extern void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, void *private, ipc_async_callback_t callback,
+    int can_preempt);
+extern void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+    ipcarg_t arg2, ipcarg_t arg3, void *private, ipc_async_callback_t callback,
+    int can_preempt);
+
+extern int ipc_connect_to_me(int phoneid, int arg1, int arg2, ipcarg_t *phone);
+extern int ipc_connect_me_to(int phoneid, int arg1, int arg2);
+extern int ipc_hangup(int phoneid);
+extern int ipc_register_irq(int inr, int devno, int method, irq_code_t *code);
+extern int ipc_unregister_irq(int inr, int devno);
+extern int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method,
+    ipcarg_t arg1);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/ipc/ns.h
===================================================================
--- uspace/lib/libc/include/ipc/ns.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/ipc/ns.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcipc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBIPC_NS_H_
+#define LIBIPC_NS_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/ipc/services.h
===================================================================
--- uspace/lib/libc/include/ipc/services.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/ipc/services.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libcipc
+ * @{
+ */
+/**
+ * @file	services.h
+ * @brief	List of all known services and their codes.
+ */
+
+#ifndef LIBIPC_SERVICES_H_
+#define LIBIPC_SERVICES_H_
+
+#define SERVICE_PCI		1
+#define SERVICE_KEYBOARD	2
+#define SERVICE_VIDEO		3
+#define SERVICE_CONSOLE		4
+#define SERVICE_RD		5
+#define SERVICE_FS		6
+
+/* Memory area to be received from NS */
+#define SERVICE_MEM_REALTIME    1
+#define SERVICE_MEM_KLOG        2
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/libadt/fifo.h
===================================================================
--- uspace/lib/libc/include/libadt/fifo.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/libadt/fifo.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+/*
+ * This implementation of FIFO stores values in an array
+ * (static or dynamic). As such, these FIFOs have upper bound
+ * on number of values they can store. Push and pop operations
+ * are done via accessing the array through head and tail indices.
+ * Because of better operation ordering in fifo_pop(), the access
+ * policy for these two indices is to 'increment (mod size of FIFO)
+ * and use'.
+ */
+
+#ifndef LIBC_FIFO_H_
+#define LIBC_FIFO_H_
+
+#include <malloc.h>
+
+typedef unsigned long fifo_count_t;
+typedef unsigned long fifo_index_t;
+
+#define FIFO_CREATE_STATIC(name, t, itms)		\
+	struct {					\
+		t fifo[(itms)];				\
+		fifo_count_t items;			\
+		fifo_index_t head;			\
+		fifo_index_t tail;			\
+	} name
+
+/** Create and initialize static FIFO.
+ *
+ * FIFO is allocated statically.
+ * This macro is suitable for creating smaller FIFOs.
+ *
+ * @param name Name of FIFO.
+ * @param t Type of values stored in FIFO.
+ * @param itms Number of items that can be stored in FIFO.
+ */
+#define FIFO_INITIALIZE_STATIC(name, t, itms)		\
+	FIFO_CREATE_STATIC(name, t, itms) = {		\
+		.items = (itms),			\
+		.head = 0,				\
+		.tail = 0				\
+	}
+
+/** Create and prepare dynamic FIFO.
+ *
+ * FIFO is allocated dynamically.
+ * This macro is suitable for creating larger FIFOs. 
+ *
+ * @param name Name of FIFO.
+ * @param t Type of values stored in FIFO.
+ * @param itms Number of items that can be stored in FIFO.
+ */
+#define FIFO_INITIALIZE_DYNAMIC(name, t, itms)		\
+	struct {					\
+		t *fifo;				\
+		fifo_count_t items;			\
+		fifo_index_t head;			\
+		fifo_index_t tail;			\
+	} name = {					\
+		.fifo = NULL,				\
+		.items = (itms),			\
+		.head = 0,				\
+		.tail = 0				\
+	}
+
+/** Pop value from head of FIFO.
+ *
+ * @param name FIFO name.
+ *
+ * @return Leading value in FIFO.
+ */
+#define fifo_pop(name) \
+	name.fifo[name.head = (name.head + 1) < name.items ? (name.head + 1) : 0]
+
+/** Push value to tail of FIFO.
+ *
+ * @param name FIFO name.
+ * @param value Value to be appended to FIFO.
+ *
+ */
+#define fifo_push(name, value) \
+	name.fifo[name.tail = (name.tail + 1) < name.items ? (name.tail + 1) : 0] = (value) 
+
+/** Allocate memory for dynamic FIFO.
+ *
+ * @param name FIFO name.
+ */
+#define fifo_create(name) \
+	name.fifo = malloc(sizeof(*name.fifo) * name.items)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/libadt/hash_table.h
===================================================================
--- uspace/lib/libc/include/libadt/hash_table.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/libadt/hash_table.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_HASH_TABLE_H_
+#define LIBC_HASH_TABLE_H_
+
+#include <libadt/list.h>
+#include <unistd.h>
+
+typedef unsigned long hash_count_t;
+typedef unsigned long hash_index_t;
+typedef struct hash_table hash_table_t;
+typedef struct hash_table_operations hash_table_operations_t;
+
+/** Hash table structure. */
+struct hash_table {
+	link_t *entry;
+	hash_count_t entries;
+	hash_count_t max_keys;
+	hash_table_operations_t *op;
+};
+
+/** Set of operations for hash table. */
+struct hash_table_operations {
+	/** Hash function.
+	 *
+	 * @param key Array of keys needed to compute hash index. All keys must be passed.
+	 *
+	 * @return Index into hash table.
+	 */
+	hash_index_t (* hash)(unsigned long key[]);
+	
+	/** Hash table item comparison function.
+	 *
+	 * @param key Array of keys that will be compared with item. It is not necessary to pass all keys.
+	 *
+	 * @return true if the keys match, false otherwise.
+	 */
+	int (*compare)(unsigned long key[], hash_count_t keys, link_t *item);
+
+	/** Hash table item removal callback.
+	 *
+	 * @param item Item that was removed from the hash table.
+	 */
+	void (*remove_callback)(link_t *item);
+};
+
+#define hash_table_get_instance(item, type, member)	list_get_instance((item), type, member)
+
+extern int hash_table_create(hash_table_t *h, hash_count_t m, hash_count_t max_keys, hash_table_operations_t *op);
+extern void hash_table_insert(hash_table_t *h, unsigned long key[], link_t *item);
+extern link_t *hash_table_find(hash_table_t *h, unsigned long key[]);
+extern void hash_table_remove(hash_table_t *h, unsigned long key[], hash_count_t keys);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/libadt/list.h
===================================================================
--- uspace/lib/libc/include/libadt/list.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/libadt/list.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_LIST_H_
+#define LIBC_LIST_H_
+
+#include <unistd.h>
+
+#ifndef true
+# define true 1
+#endif
+#ifndef false
+# define false 0
+#endif
+
+typedef struct link link_t;
+
+/** Doubly linked list head and link type. */
+struct link {
+	link_t *prev;	/**< Pointer to the previous item in the list. */
+	link_t *next;	/**< Pointer to the next item in the list. */
+};
+
+/** Declare and initialize statically allocated list.
+ *
+ * @param name Name of the new statically allocated list.
+ */
+#define LIST_INITIALIZE(name)		link_t name = { .prev = &name, .next = &name }
+
+/** Initialize doubly-linked circular list link
+ *
+ * Initialize doubly-linked list link.
+ *
+ * @param link Pointer to link_t structure to be initialized.
+ */
+static inline void link_initialize(link_t *link)
+{
+	link->prev = NULL;
+	link->next = NULL;
+}
+
+/** Initialize doubly-linked circular list
+ *
+ * Initialize doubly-linked circular list.
+ *
+ * @param head Pointer to link_t structure representing head of the list.
+ */
+static inline void list_initialize(link_t *head)
+{
+	head->prev = head;
+	head->next = head;
+}
+
+/** Add item to the beginning of doubly-linked circular list
+ *
+ * Add item to the beginning of doubly-linked circular list.
+ *
+ * @param link Pointer to link_t structure to be added.
+ * @param head Pointer to link_t structure representing head of the list.
+ */
+static inline void list_prepend(link_t *link, link_t *head)
+{
+	link->next = head->next;
+	link->prev = head;
+	head->next->prev = link;
+	head->next = link;
+}
+
+/** Add item to the end of doubly-linked circular list
+ *
+ * Add item to the end of doubly-linked circular list.
+ *
+ * @param link Pointer to link_t structure to be added.
+ * @param head Pointer to link_t structure representing head of the list.
+ */
+static inline void list_append(link_t *link, link_t *head)
+{
+	link->prev = head->prev;
+	link->next = head;
+	head->prev->next = link;
+	head->prev = link;
+}
+
+/** Remove item from doubly-linked circular list
+ *
+ * Remove item from doubly-linked circular list.
+ *
+ * @param link Pointer to link_t structure to be removed from the list it is contained in.
+ */
+static inline void list_remove(link_t *link)
+{
+	link->next->prev = link->prev;
+	link->prev->next = link->next;
+	link_initialize(link);
+}
+
+/** Query emptiness of doubly-linked circular list
+ *
+ * Query emptiness of doubly-linked circular list.
+ *
+ * @param head Pointer to link_t structure representing head of the list.
+ */
+static inline int list_empty(link_t *head)
+{
+	return head->next == head ? true : false;
+}
+
+
+/** Split or concatenate headless doubly-linked circular list
+ *
+ * Split or concatenate headless doubly-linked circular list.
+ *
+ * Note that the algorithm works both directions:
+ * concatenates splitted lists and splits concatenated lists.
+ *
+ * @param part1 Pointer to link_t structure leading the first (half of the headless) list.
+ * @param part2 Pointer to link_t structure leading the second (half of the headless) list. 
+ */
+static inline void headless_list_split_or_concat(link_t *part1, link_t *part2)
+{
+	link_t *hlp;
+
+	part1->prev->next = part2;
+	part2->prev->next = part1;	
+	hlp = part1->prev;
+	part1->prev = part2->prev;
+	part2->prev = hlp;
+}
+
+
+/** Split headless doubly-linked circular list
+ *
+ * Split headless doubly-linked circular list.
+ *
+ * @param part1 Pointer to link_t structure leading the first half of the headless list.
+ * @param part2 Pointer to link_t structure leading the second half of the headless list. 
+ */
+static inline void headless_list_split(link_t *part1, link_t *part2)
+{
+	headless_list_split_or_concat(part1, part2);
+}
+
+/** Concatenate two headless doubly-linked circular lists
+ *
+ * Concatenate two headless doubly-linked circular lists.
+ *
+ * @param part1 Pointer to link_t structure leading the first headless list.
+ * @param part2 Pointer to link_t structure leading the second headless list. 
+ */
+static inline void headless_list_concat(link_t *part1, link_t *part2)
+{
+	headless_list_split_or_concat(part1, part2);
+}
+
+#define list_get_instance(link,type,member) (type *)(((char *)(link))-((char *)&(((type *)NULL)->member)))
+
+extern int list_member(const link_t *link, const link_t *head);
+extern void list_concat(link_t *head1, link_t *head2);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/libc.h
===================================================================
--- uspace/lib/libc/include/libc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/libc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_LIBC_H_
+#define LIBC_LIBC_H_
+
+#include <types.h>
+#include <kernel/syscall/syscall.h>
+#include <libarch/syscall.h>
+
+#define __SYSCALL0(id) __syscall(0, 0, 0, 0, id)
+#define __SYSCALL1(id, p1) __syscall(p1, 0, 0, 0, id)
+#define __SYSCALL2(id, p1, p2) __syscall(p1, p2, 0, 0, id)
+#define __SYSCALL3(id, p1, p2, p3) __syscall(p1, p2, p3, 0, id)
+#define __SYSCALL4(id, p1, p2, p3, p4) __syscall(p1, p2, p3, p4, id)
+
+extern void __main(void);
+extern void __io_init(void);
+extern void __exit(void);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/limits.h
===================================================================
--- uspace/lib/libc/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/limits.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_LIMITS_H_
+#define LIBC_LIMITS_H_
+
+#include <stdint.h>
+#include <libarch/limits.h>
+
+/* char */
+#define SCHAR_MIN MIN_INT8
+#define SCHAR_MAX MAX_INT8
+#define UCHAR_MIN MIN_UINT8
+#define UCHAR_MAX MAX_UINT8
+
+#ifdef __CHAR_UNSIGNED__
+# define CHAR_MIN UCHAR_MIN
+# define CHAR_MAX UCHAR_MAX
+#else
+# define CHAR_MIN SCHAR_MIN
+# define CHAR_MAX SCHAR_MAX
+#endif
+
+/* short int */
+#define SHRT_MIN MIN_INT16
+#define SHRT_MAX MAX_INT16
+#define USHRT_MIN MIN_UINT16
+#define USHRT_MAX MAX_UINT16
+
+#define INT_MIN MIN_INT32
+#define INT_MAX MAX_INT32
+#define UINT_MIN MIN_UINT32
+#define UINT_MAX MAX_UINT32
+
+#define LLONG_MIN MIN_INT64
+#define LLONG_MAX MAX_INT64
+#define ULLONG_MIN MIN_UINT64
+#define ULLONG_MAX MAX_UINT64
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/malloc.h
===================================================================
--- uspace/lib/libc/include/malloc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/malloc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,537 @@
+/*
+  Default header file for malloc-2.8.x, written by Doug Lea
+  and released to the public domain, as explained at
+  http://creativecommons.org/licenses/publicdomain. 
+ 
+  last update: Mon Aug 15 08:55:52 2005  Doug Lea  (dl at gee)
+
+  This header is for ANSI C/C++ only.  You can set any of
+  the following #defines before including:
+
+  * If USE_DL_PREFIX is defined, it is assumed that malloc.c 
+    was also compiled with this option, so all routines
+    have names starting with "dl".
+
+  * If HAVE_USR_INCLUDE_MALLOC_H is defined, it is assumed that this
+    file will be #included AFTER <malloc.h>. This is needed only if
+    your system defines a struct mallinfo that is incompatible with the
+    standard one declared here.  Otherwise, you can include this file
+    INSTEAD of your system system <malloc.h>.  At least on ANSI, all
+    declarations should be compatible with system versions
+
+  * If MSPACES is defined, declarations for mspace versions are included.
+*/
+
+#ifndef MALLOC_280_H
+#define MALLOC_280_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>   /* for size_t */
+
+#if !ONLY_MSPACES
+
+#ifndef USE_DL_PREFIX
+#define dlcalloc               calloc
+#define dlfree                 free
+#define dlmalloc               malloc
+#define dlmemalign             memalign
+#define dlrealloc              realloc
+#define dlvalloc               valloc
+#define dlpvalloc              pvalloc
+#define dlmallinfo             mallinfo
+#define dlmallopt              mallopt
+#define dlmalloc_trim          malloc_trim
+#define dlmalloc_stats         malloc_stats
+#define dlmalloc_usable_size   malloc_usable_size
+#define dlmalloc_footprint     malloc_footprint
+#define dlmalloc_max_footprint malloc_max_footprint
+#define dlindependent_calloc   independent_calloc
+#define dlindependent_comalloc independent_comalloc
+#endif /* USE_DL_PREFIX */
+
+
+/*
+  malloc(size_t n)
+  Returns a pointer to a newly allocated chunk of at least n bytes, or
+  null if no space is available, in which case errno is set to ENOMEM
+  on ANSI C systems.
+
+  If n is zero, malloc returns a minimum-sized chunk. (The minimum
+  size is 16 bytes on most 32bit systems, and 32 bytes on 64bit
+  systems.)  Note that size_t is an unsigned type, so calls with
+  arguments that would be negative if signed are interpreted as
+  requests for huge amounts of space, which will often fail. The
+  maximum supported value of n differs across systems, but is in all
+  cases less than the maximum representable value of a size_t.
+*/
+void* dlmalloc(size_t);
+
+/*
+  free(void* p)
+  Releases the chunk of memory pointed to by p, that had been previously
+  allocated using malloc or a related routine such as realloc.
+  It has no effect if p is null. If p was not malloced or already
+  freed, free(p) will by default cuase the current program to abort.
+*/
+void  dlfree(void*);
+
+/*
+  calloc(size_t n_elements, size_t element_size);
+  Returns a pointer to n_elements * element_size bytes, with all locations
+  set to zero.
+*/
+void* dlcalloc(size_t, size_t);
+
+/*
+  realloc(void* p, size_t n)
+  Returns a pointer to a chunk of size n that contains the same data
+  as does chunk p up to the minimum of (n, p's size) bytes, or null
+  if no space is available.
+
+  The returned pointer may or may not be the same as p. The algorithm
+  prefers extending p in most cases when possible, otherwise it
+  employs the equivalent of a malloc-copy-free sequence.
+
+  If p is null, realloc is equivalent to malloc.
+
+  If space is not available, realloc returns null, errno is set (if on
+  ANSI) and p is NOT freed.
+
+  if n is for fewer bytes than already held by p, the newly unused
+  space is lopped off and freed if possible.  realloc with a size
+  argument of zero (re)allocates a minimum-sized chunk.
+
+  The old unix realloc convention of allowing the last-free'd chunk
+  to be used as an argument to realloc is not supported.
+*/
+
+void* dlrealloc(void*, size_t);
+
+/*
+  memalign(size_t alignment, size_t n);
+  Returns a pointer to a newly allocated chunk of n bytes, aligned
+  in accord with the alignment argument.
+
+  The alignment argument should be a power of two. If the argument is
+  not a power of two, the nearest greater power is used.
+  8-byte alignment is guaranteed by normal malloc calls, so don't
+  bother calling memalign with an argument of 8 or less.
+
+  Overreliance on memalign is a sure way to fragment space.
+*/
+void* dlmemalign(size_t, size_t);
+
+/*
+  valloc(size_t n);
+  Equivalent to memalign(pagesize, n), where pagesize is the page
+  size of the system. If the pagesize is unknown, 4096 is used.
+*/
+void* dlvalloc(size_t);
+
+/*
+  mallopt(int parameter_number, int parameter_value)
+  Sets tunable parameters The format is to provide a
+  (parameter-number, parameter-value) pair.  mallopt then sets the
+  corresponding parameter to the argument value if it can (i.e., so
+  long as the value is meaningful), and returns 1 if successful else
+  0.  SVID/XPG/ANSI defines four standard param numbers for mallopt,
+  normally defined in malloc.h.  None of these are use in this malloc,
+  so setting them has no effect. But this malloc also supports other
+  options in mallopt:
+
+  Symbol            param #  default    allowed param values
+  M_TRIM_THRESHOLD     -1   2*1024*1024   any   (-1U disables trimming)
+  M_GRANULARITY        -2     page size   any power of 2 >= page size
+  M_MMAP_THRESHOLD     -3      256*1024   any   (or 0 if no MMAP support)
+*/
+int dlmallopt(int, int);
+
+#define M_TRIM_THRESHOLD     (-1)
+#define M_GRANULARITY        (-2)
+#define M_MMAP_THRESHOLD     (-3)
+
+
+/*
+  malloc_footprint();
+  Returns the number of bytes obtained from the system.  The total
+  number of bytes allocated by malloc, realloc etc., is less than this
+  value. Unlike mallinfo, this function returns only a precomputed
+  result, so can be called frequently to monitor memory consumption.
+  Even if locks are otherwise defined, this function does not use them,
+  so results might not be up to date.
+*/
+size_t dlmalloc_footprint(void);
+size_t dlmalloc_max_footprint(void);
+
+#if !NO_MALLINFO
+/*
+  mallinfo()
+  Returns (by copy) a struct containing various summary statistics:
+
+  arena:     current total non-mmapped bytes allocated from system
+  ordblks:   the number of free chunks
+  smblks:    always zero.
+  hblks:     current number of mmapped regions
+  hblkhd:    total bytes held in mmapped regions
+  usmblks:   the maximum total allocated space. This will be greater
+                than current total if trimming has occurred.
+  fsmblks:   always zero
+  uordblks:  current total allocated space (normal or mmapped)
+  fordblks:  total free space
+  keepcost:  the maximum number of bytes that could ideally be released
+               back to system via malloc_trim. ("ideally" means that
+               it ignores page restrictions etc.)
+
+  Because these fields are ints, but internal bookkeeping may
+  be kept as longs, the reported values may wrap around zero and
+  thus be inaccurate.
+*/
+#ifndef HAVE_USR_INCLUDE_MALLOC_H
+#ifndef _MALLOC_H
+#ifndef MALLINFO_FIELD_TYPE
+#define MALLINFO_FIELD_TYPE size_t
+#endif /* MALLINFO_FIELD_TYPE */
+struct mallinfo {
+  MALLINFO_FIELD_TYPE arena;    /* non-mmapped space allocated from system */
+  MALLINFO_FIELD_TYPE ordblks;  /* number of free chunks */
+  MALLINFO_FIELD_TYPE smblks;   /* always 0 */
+  MALLINFO_FIELD_TYPE hblks;    /* always 0 */
+  MALLINFO_FIELD_TYPE hblkhd;   /* space in mmapped regions */
+  MALLINFO_FIELD_TYPE usmblks;  /* maximum total allocated space */
+  MALLINFO_FIELD_TYPE fsmblks;  /* always 0 */
+  MALLINFO_FIELD_TYPE uordblks; /* total allocated space */
+  MALLINFO_FIELD_TYPE fordblks; /* total free space */
+  MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */
+};
+#endif  /* _MALLOC_H */
+#endif  /* HAVE_USR_INCLUDE_MALLOC_H */
+
+struct mallinfo dlmallinfo(void);
+#endif  /* NO_MALLINFO */
+
+/*
+  independent_calloc(size_t n_elements, size_t element_size, void* chunks[]);
+
+  independent_calloc is similar to calloc, but instead of returning a
+  single cleared space, it returns an array of pointers to n_elements
+  independent elements that can hold contents of size elem_size, each
+  of which starts out cleared, and can be independently freed,
+  realloc'ed etc. The elements are guaranteed to be adjacently
+  allocated (this is not guaranteed to occur with multiple callocs or
+  mallocs), which may also improve cache locality in some
+  applications.
+
+  The "chunks" argument is optional (i.e., may be null, which is
+  probably the most typical usage). If it is null, the returned array
+  is itself dynamically allocated and should also be freed when it is
+  no longer needed. Otherwise, the chunks array must be of at least
+  n_elements in length. It is filled in with the pointers to the
+  chunks.
+
+  In either case, independent_calloc returns this pointer array, or
+  null if the allocation failed.  If n_elements is zero and "chunks"
+  is null, it returns a chunk representing an array with zero elements
+  (which should be freed if not wanted).
+
+  Each element must be individually freed when it is no longer
+  needed. If you'd like to instead be able to free all at once, you
+  should instead use regular calloc and assign pointers into this
+  space to represent elements.  (In this case though, you cannot
+  independently free elements.)
+
+  independent_calloc simplifies and speeds up implementations of many
+  kinds of pools.  It may also be useful when constructing large data
+  structures that initially have a fixed number of fixed-sized nodes,
+  but the number is not known at compile time, and some of the nodes
+  may later need to be freed. For example:
+
+  struct Node { int item; struct Node* next; };
+
+  struct Node* build_list() {
+    struct Node** pool;
+    int n = read_number_of_nodes_needed();
+    if (n <= 0) return 0;
+    pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0);
+    if (pool == 0) die();
+    // organize into a linked list...
+    struct Node* first = pool[0];
+    for (i = 0; i < n-1; ++i)
+      pool[i]->next = pool[i+1];
+    free(pool);     // Can now free the array (or not, if it is needed later)
+    return first;
+  }
+*/
+void** dlindependent_calloc(size_t, size_t, void**);
+
+/*
+  independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]);
+
+  independent_comalloc allocates, all at once, a set of n_elements
+  chunks with sizes indicated in the "sizes" array.    It returns
+  an array of pointers to these elements, each of which can be
+  independently freed, realloc'ed etc. The elements are guaranteed to
+  be adjacently allocated (this is not guaranteed to occur with
+  multiple callocs or mallocs), which may also improve cache locality
+  in some applications.
+
+  The "chunks" argument is optional (i.e., may be null). If it is null
+  the returned array is itself dynamically allocated and should also
+  be freed when it is no longer needed. Otherwise, the chunks array
+  must be of at least n_elements in length. It is filled in with the
+  pointers to the chunks.
+
+  In either case, independent_comalloc returns this pointer array, or
+  null if the allocation failed.  If n_elements is zero and chunks is
+  null, it returns a chunk representing an array with zero elements
+  (which should be freed if not wanted).
+
+  Each element must be individually freed when it is no longer
+  needed. If you'd like to instead be able to free all at once, you
+  should instead use a single regular malloc, and assign pointers at
+  particular offsets in the aggregate space. (In this case though, you
+  cannot independently free elements.)
+
+  independent_comallac differs from independent_calloc in that each
+  element may have a different size, and also that it does not
+  automatically clear elements.
+
+  independent_comalloc can be used to speed up allocation in cases
+  where several structs or objects must always be allocated at the
+  same time.  For example:
+
+  struct Head { ... }
+  struct Foot { ... }
+
+  void send_message(char* msg) {
+    int msglen = strlen(msg);
+    size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) };
+    void* chunks[3];
+    if (independent_comalloc(3, sizes, chunks) == 0)
+      die();
+    struct Head* head = (struct Head*)(chunks[0]);
+    char*        body = (char*)(chunks[1]);
+    struct Foot* foot = (struct Foot*)(chunks[2]);
+    // ...
+  }
+
+  In general though, independent_comalloc is worth using only for
+  larger values of n_elements. For small values, you probably won't
+  detect enough difference from series of malloc calls to bother.
+
+  Overuse of independent_comalloc can increase overall memory usage,
+  since it cannot reuse existing noncontiguous small chunks that
+  might be available for some of the elements.
+*/
+void** dlindependent_comalloc(size_t, size_t*, void**);
+
+
+/*
+  pvalloc(size_t n);
+  Equivalent to valloc(minimum-page-that-holds(n)), that is,
+  round up n to nearest pagesize.
+ */
+void*  dlpvalloc(size_t);
+
+/*
+  malloc_trim(size_t pad);
+
+  If possible, gives memory back to the system (via negative arguments
+  to sbrk) if there is unused memory at the `high' end of the malloc
+  pool or in unused MMAP segments. You can call this after freeing
+  large blocks of memory to potentially reduce the system-level memory
+  requirements of a program. However, it cannot guarantee to reduce
+  memory. Under some allocation patterns, some large free blocks of
+  memory will be locked between two used chunks, so they cannot be
+  given back to the system.
+
+  The `pad' argument to malloc_trim represents the amount of free
+  trailing space to leave untrimmed. If this argument is zero, only
+  the minimum amount of memory to maintain internal data structures
+  will be left. Non-zero arguments can be supplied to maintain enough
+  trailing space to service future expected allocations without having
+  to re-obtain memory from the system.
+
+  Malloc_trim returns 1 if it actually released any memory, else 0.
+*/
+int  dlmalloc_trim(size_t);
+
+/*
+  malloc_usable_size(void* p);
+
+  Returns the number of bytes you can actually use in
+  an allocated chunk, which may be more than you requested (although
+  often not) due to alignment and minimum size constraints.
+  You can use this many bytes without worrying about
+  overwriting other allocated objects. This is not a particularly great
+  programming practice. malloc_usable_size can be more useful in
+  debugging and assertions, for example:
+
+  p = malloc(n);
+  assert(malloc_usable_size(p) >= 256);
+*/
+size_t dlmalloc_usable_size(void*);
+
+/*
+  malloc_stats();
+  Prints on stderr the amount of space obtained from the system (both
+  via sbrk and mmap), the maximum amount (which may be more than
+  current if malloc_trim and/or munmap got called), and the current
+  number of bytes allocated via malloc (or realloc, etc) but not yet
+  freed. Note that this is the number of bytes allocated, not the
+  number requested. It will be larger than the number requested
+  because of alignment and bookkeeping overhead. Because it includes
+  alignment wastage as being in use, this figure may be greater than
+  zero even when no user-level chunks are allocated.
+
+  The reported current and maximum system memory can be inaccurate if
+  a program makes other calls to system memory allocation functions
+  (normally sbrk) outside of malloc.
+
+  malloc_stats prints only the most commonly interesting statistics.
+  More information can be obtained by calling mallinfo.
+*/
+void  dlmalloc_stats(void);
+
+#endif /* !ONLY_MSPACES */
+
+#if MSPACES
+
+/*
+  mspace is an opaque type representing an independent
+  region of space that supports mspace_malloc, etc.
+*/
+typedef void* mspace;
+
+/*
+  create_mspace creates and returns a new independent space with the
+  given initial capacity, or, if 0, the default granularity size.  It
+  returns null if there is no system memory available to create the
+  space.  If argument locked is non-zero, the space uses a separate
+  lock to control access. The capacity of the space will grow
+  dynamically as needed to service mspace_malloc requests.  You can
+  control the sizes of incremental increases of this space by
+  compiling with a different DEFAULT_GRANULARITY or dynamically
+  setting with mallopt(M_GRANULARITY, value).
+*/
+mspace create_mspace(size_t capacity, int locked);
+
+/*
+  destroy_mspace destroys the given space, and attempts to return all
+  of its memory back to the system, returning the total number of
+  bytes freed. After destruction, the results of access to all memory
+  used by the space become undefined.
+*/
+size_t destroy_mspace(mspace msp);
+
+/*
+  create_mspace_with_base uses the memory supplied as the initial base
+  of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this
+  space is used for bookkeeping, so the capacity must be at least this
+  large. (Otherwise 0 is returned.) When this initial space is
+  exhausted, additional memory will be obtained from the system.
+  Destroying this space will deallocate all additionally allocated
+  space (if possible) but not the initial base.
+*/
+mspace create_mspace_with_base(void* base, size_t capacity, int locked);
+
+/*
+  mspace_malloc behaves as malloc, but operates within
+  the given space.
+*/
+void* mspace_malloc(mspace msp, size_t bytes);
+
+/*
+  mspace_free behaves as free, but operates within
+  the given space.
+
+  If compiled with FOOTERS==1, mspace_free is not actually needed.
+  free may be called instead of mspace_free because freed chunks from
+  any space are handled by their originating spaces.
+*/
+void mspace_free(mspace msp, void* mem);
+
+/*
+  mspace_realloc behaves as realloc, but operates within
+  the given space.
+
+  If compiled with FOOTERS==1, mspace_realloc is not actually
+  needed.  realloc may be called instead of mspace_realloc because
+  realloced chunks from any space are handled by their originating
+  spaces.
+*/
+void* mspace_realloc(mspace msp, void* mem, size_t newsize);
+
+/*
+  mspace_calloc behaves as calloc, but operates within
+  the given space.
+*/
+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size);
+
+/*
+  mspace_memalign behaves as memalign, but operates within
+  the given space.
+*/
+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes);
+
+/*
+  mspace_independent_calloc behaves as independent_calloc, but
+  operates within the given space.
+*/
+void** mspace_independent_calloc(mspace msp, size_t n_elements,
+                                 size_t elem_size, void* chunks[]);
+
+/*
+  mspace_independent_comalloc behaves as independent_comalloc, but
+  operates within the given space.
+*/
+void** mspace_independent_comalloc(mspace msp, size_t n_elements,
+                                   size_t sizes[], void* chunks[]);
+
+/*
+  mspace_footprint() returns the number of bytes obtained from the
+  system for this space.
+*/
+size_t mspace_footprint(mspace msp);
+
+
+#if !NO_MALLINFO
+/*
+  mspace_mallinfo behaves as mallinfo, but reports properties of
+  the given space.
+*/
+struct mallinfo mspace_mallinfo(mspace msp);
+#endif /* NO_MALLINFO */
+
+/*
+  mspace_malloc_stats behaves as malloc_stats, but reports
+  properties of the given space.
+*/
+void mspace_malloc_stats(mspace msp);
+
+/*
+  mspace_trim behaves as malloc_trim, but
+  operates within the given space.
+*/
+int mspace_trim(mspace msp, size_t pad);
+
+/*
+  An alias for mallopt.
+*/
+int mspace_mallopt(int, int);
+
+#endif  /* MSPACES */
+
+#ifdef __cplusplus
+};  /* end of extern "C" */
+#endif
+
+#endif /* MALLOC_280_H */
+
+
+ /** @}
+ */
+ 
+ 
Index: uspace/lib/libc/include/psthread.h
===================================================================
--- uspace/lib/libc/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/psthread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_PSTHREAD_H_
+#define LIBC_PSTHREAD_H_
+
+#include <libarch/psthread.h>
+#include <libadt/list.h>
+#include <libarch/thread.h>
+
+#ifndef context_set
+#define context_set(c, _pc, stack, size, ptls) 			\
+	(c)->pc = (sysarg_t) (_pc);				\
+	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
+        (c)->tls = (sysarg_t) (ptls);
+#endif /* context_set */
+
+#define PSTHREAD_SERIALIZED   1
+
+typedef enum {
+	PS_TO_MANAGER,
+	PS_FROM_MANAGER,
+	PS_PREEMPT,
+	PS_FROM_DEAD
+} pschange_type;
+
+typedef sysarg_t pstid_t;
+
+struct psthread_data {
+	link_t link;
+	context_t ctx;
+	void *stack;
+	void *arg;
+	int (*func)(void *);
+	tcb_t *tcb;
+
+	struct psthread_data *waiter;
+	int finished;
+	int retval;
+	int flags;
+};
+typedef struct psthread_data psthread_data_t;
+
+extern int context_save(context_t *c);
+extern void context_restore(context_t *c) __attribute__ ((noreturn));
+
+pstid_t psthread_create(int (*func)(void *), void *arg);
+int psthread_join(pstid_t psthrid);
+psthread_data_t * psthread_setup(void);
+void psthread_teardown(psthread_data_t *pt);
+int psthread_schedule_next_adv(pschange_type ctype);
+void psthread_add_ready(pstid_t ptid);
+void psthread_add_manager(pstid_t psthrid);
+void psthread_remove_manager(void);
+pstid_t psthread_get_id(void);
+void psthread_inc_sercount(void);
+void psthread_dec_sercount(void);
+
+static inline int psthread_schedule_next() {
+	return psthread_schedule_next_adv(PS_PREEMPT);
+}
+
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/stdarg.h
===================================================================
--- uspace/lib/libc/include/stdarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/stdarg.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STDARG_H_
+#define LIBC_STDARG_H_
+
+#include <types.h>
+#include <libarch/stackarg.h>
+
+#ifndef __VARARGS_DEFINED
+# define __VARARGS_DEFINED
+
+typedef __builtin_va_list va_list;
+
+# define va_start(ap, last) 		__builtin_va_start(ap, last)
+# define va_arg(ap, type) 		__builtin_va_arg(ap, type)
+# define va_end(ap)			__builtin_va_end(ap)
+
+# endif
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/stddef.h
===================================================================
--- uspace/lib/libc/include/stddef.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/stddef.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STDDEF_H_
+#define LIBC_STDDEF_H_
+
+#include <types.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/stdint.h
===================================================================
--- uspace/lib/libc/include/stdint.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/stdint.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STDINT_H_
+#define LIBC_STDINT_H_
+
+/* Definitions of types with fixed size*/
+#include <types.h>
+
+#define MAX_INT8 (0x7F)
+#define MIN_INT8 (0x80)
+#define MAX_UINT8 (0xFFu)
+#define MIN_UINT8 (0u)
+
+#define MAX_INT16 (0x7FFF)
+#define MIN_INT16 (0x8000)
+#define MAX_UINT16 (0xFFFFu)
+#define MIN_UINT16 (0u)
+
+#define MAX_INT32 (0x7FFFFFFF)
+#define MIN_INT32 (0x80000000)
+#define MAX_UINT32 (0xFFFFFFFFu)
+#define MIN_UINT32 (0u)
+
+#define MAX_INT64 (0x7FFFFFFFFFFFFFFFll)
+#define MIN_INT64 (0x8000000000000000ll)
+#define MAX_UINT64 (0xFFFFFFFFFFFFFFFFull)
+#define MIN_UINT64 (0ull)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/stdio.h
===================================================================
--- uspace/lib/libc/include/stdio.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/stdio.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STDIO_H_
+#define LIBC_STDIO_H_
+
+#include <types.h>
+#include <stdarg.h>
+
+#define EOF (-1)
+
+#include <string.h>
+#include <io/stream.h>
+
+#define DEBUG(fmt, ...) \
+{ \
+	char buf[256]; \
+	int n; \
+	n = snprintf(buf, sizeof(buf), fmt, ##__VA_ARGS__); \
+	if (n > 0) \
+		(void) __SYSCALL3(SYS_IO, 1, (sysarg_t) buf, strlen(buf)); \
+}
+
+extern int getchar(void);
+
+extern int puts(const char * str);
+extern int putchar(int c);
+
+extern int printf(const char *fmt, ...);
+extern int sprintf(char *str, const char *fmt, ...);
+extern int snprintf(char *str, size_t size, const char *fmt, ...);
+
+extern int vprintf(const char *fmt, va_list ap);
+extern int vsprintf(char *str, const char *fmt, va_list ap);
+extern int vsnprintf(char *str, size_t size, const char *fmt, va_list ap);
+
+#define fprintf(f, fmt, ...) printf(fmt, ##__VA_ARGS__)
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/stdlib.h
===================================================================
--- uspace/lib/libc/include/stdlib.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/stdlib.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STDLIB_H_
+#define LIBC_STDLIB_H_
+
+#include <unistd.h>
+#include <malloc.h>
+
+#define abort() _exit(1)
+#define exit(status)	_exit((status))
+
+#define RAND_MAX 714025
+
+extern long int random(void);
+extern void srandom(unsigned int seed);
+
+static inline int rand(void)
+{
+	return random();
+}
+static inline void srand(unsigned int seed)
+{
+	srandom(seed);
+}
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/string.h
===================================================================
--- uspace/lib/libc/include/string.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/string.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_STRING_H_
+#define LIBC_STRING_H_
+
+#include <types.h>
+
+#define bzero(ptr, len)	memset((ptr), 0, (len))
+
+void * memset(void *s, int c, size_t n);
+void * memcpy(void *dest, const void *src, size_t n);
+void * memmove(void *dest, const void *src, size_t n);
+
+int bcmp(const char *s1, const char *s2, size_t n);
+
+int strcmp(const char *, const char *);
+
+char *strcpy(char *dest, const char *src);
+char *strncpy(char *dest, const char *src, size_t n);
+
+size_t strlen(const char *str);
+
+char *strchr(const char *str, int c);
+char *strrchr(const char *str, int c);
+
+long int strtol(const char *nptr, char **endptr, int base);
+unsigned long strtoul(const char *nptr, char **endptr, int base);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/sys/mman.h
===================================================================
--- uspace/lib/libc/include/sys/mman.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/sys/mman.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_MMAN_H_
+#define LIBC_MMAN_H_
+
+#include <as.h>
+
+#define MAP_FAILED  ((void *) -1)
+
+#define MAP_SHARED       (1 << 0)
+#define MAP_PRIVATE      (1 << 1)
+#define MAP_FIXED        (1 << 2)
+#define MAP_ANONYMOUS    (1 << 3)
+
+#define PROTO_READ   AS_AREA_READ
+#define PROTO_WRITE  AS_AREA_WRITE
+#define PROTO_EXEC   AS_AREA_EXEC
+
+extern void  *mmap(void  *start, size_t length, int prot, int flags, int fd,
+		   off_t offset);
+extern int munmap(void *start, size_t length);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/sys/time.h
===================================================================
--- uspace/lib/libc/include/sys/time.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/sys/time.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#ifndef LIBC_TIME_H_
+#define LIBC_TIME_H_
+
+#include <types.h>
+
+#define DST_NONE 0
+
+typedef long time_t;
+typedef long suseconds_t;
+
+struct timeval {
+	time_t         tv_sec;        /* seconds */
+	suseconds_t    tv_usec;  /* microseconds */
+};
+
+struct timezone {
+	int  tz_minuteswest; /* minutes W of Greenwich */
+	int  tz_dsttime;     /* type of dst correction */
+};
+
+int gettimeofday(struct timeval *tv, struct timezone *tz);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/sys/types.h
===================================================================
--- uspace/lib/libc/include/sys/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/sys/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_SYS_TYPES_H_
+#define LIBC_SYS_TYPES_H_
+
+#include <types.h>
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/syscall.h
===================================================================
--- uspace/lib/libc/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/syscall.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/**
+ * @file
+ * @brief	Syscall function declaration for architectures that don't inline syscalls.
+ */
+
+#ifndef LIBC_SYSCALL_H_
+#define LIBC_SYSCALL_H_
+
+#include <types.h>
+#include <kernel/syscall/syscall.h>
+
+extern sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/sysinfo.h
===================================================================
--- uspace/lib/libc/include/sysinfo.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/sysinfo.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#ifndef LIBC_SYSINFO_H_
+#define LIBC_SYSINFO_H_
+
+#include <libc.h>
+#include <sysinfo.h>
+#include <string.h>
+
+sysarg_t sysinfo_value(char *name);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/task.h
===================================================================
--- uspace/lib/libc/include/task.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/task.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_TASK_H_
+#define LIBC_TASK_H_
+
+#include <types.h>
+
+typedef uint64_t task_id_t;
+
+extern task_id_t task_get_id(void);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/thread.h
===================================================================
--- uspace/lib/libc/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/thread.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_THREAD_H_
+#define LIBC_THREAD_H_
+
+#include <kernel/proc/uarg.h>
+#include <libarch/thread.h>
+#include <types.h>
+
+typedef uint64_t thread_id_t;
+
+extern void __thread_entry(void);
+extern void __thread_main(uspace_arg_t *uarg);
+
+extern int thread_create(void (* function)(void *), void *arg, char *name, thread_id_t *tid);
+extern void thread_exit(int status);
+extern void thread_detach(thread_id_t thread);
+extern int thread_join(thread_id_t thread);
+extern thread_id_t thread_get_id(void);
+extern tcb_t * __make_tls(void);
+extern tcb_t * __alloc_tls(void **data, size_t size);
+extern void __free_tls(tcb_t *);
+extern void __free_tls_arch(tcb_t *, size_t size);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/time.h
===================================================================
--- uspace/lib/libc/include/time.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/time.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */ 
+
+#ifndef LIBC_TIME_H_
+#define LIBC_TIME_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/include/types.h
===================================================================
--- uspace/lib/libc/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+#include <libarch/types.h>
Index: uspace/lib/libc/include/unistd.h
===================================================================
--- uspace/lib/libc/include/unistd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/include/unistd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libc
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBC_UNISTD_H_
+#define LIBC_UNISTD_H_
+
+#include <types.h>
+#include <libarch/config.h>
+
+#define NULL 0
+#define getpagesize()     (PAGE_SIZE)
+
+extern ssize_t write(int fd, const void * buf, size_t count);
+extern ssize_t read(int fd, void * buf, size_t count);
+extern void _exit(int status);
+extern void *sbrk(ssize_t incr);
+extern void usleep(unsigned long usec);
+extern unsigned int sleep(unsigned int seconds);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/libc/malloc/malloc.c
===================================================================
--- uspace/lib/libc/malloc/malloc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/libc/malloc/malloc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,4425 @@
+/*
+  This is a version (aka dlmalloc) of malloc/free/realloc written by
+  Doug Lea and released to the public domain, as explained at
+  http://creativecommons.org/licenses/publicdomain.  Send questions,
+  comments, complaints, performance data, etc to dl@cs.oswego.edu
+
+* Version 2.8.3 Thu Sep 22 11:16:15 2005  Doug Lea  (dl at gee)
+
+   Note: There may be an updated version of this malloc obtainable at
+           ftp://gee.cs.oswego.edu/pub/misc/malloc.c
+         Check before installing!
+
+* Quickstart
+
+  This library is all in one file to simplify the most common usage:
+  ftp it, compile it (-O3), and link it into another program. All of
+  the compile-time options default to reasonable values for use on
+  most platforms.  You might later want to step through various
+  compile-time and dynamic tuning options.
+
+  For convenience, an include file for code using this malloc is at:
+     ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h
+  You don't really need this .h file unless you call functions not
+  defined in your system include files.  The .h file contains only the
+  excerpts from this file needed for using this malloc on ANSI C/C++
+  systems, so long as you haven't changed compile-time options about
+  naming and tuning parameters.  If you do, then you can create your
+  own malloc.h that does include all settings by cutting at the point
+  indicated below. Note that you may already by default be using a C
+  library containing a malloc that is based on some version of this
+  malloc (for example in linux). You might still want to use the one
+  in this file to customize settings or to avoid overheads associated
+  with library versions.
+
+* Vital statistics:
+
+  Supported pointer/size_t representation:       4 or 8 bytes
+       size_t MUST be an unsigned type of the same width as
+       pointers. (If you are using an ancient system that declares
+       size_t as a signed type, or need it to be a different width
+       than pointers, you can use a previous release of this malloc
+       (e.g. 2.7.2) supporting these.)
+
+  Alignment:                                     8 bytes (default)
+       This suffices for nearly all current machines and C compilers.
+       However, you can define MALLOC_ALIGNMENT to be wider than this
+       if necessary (up to 128bytes), at the expense of using more space.
+
+  Minimum overhead per allocated chunk:   4 or  8 bytes (if 4byte sizes)
+                                          8 or 16 bytes (if 8byte sizes)
+       Each malloced chunk has a hidden word of overhead holding size
+       and status information, and additional cross-check word
+       if FOOTERS is defined.
+
+  Minimum allocated size: 4-byte ptrs:  16 bytes    (including overhead)
+                          8-byte ptrs:  32 bytes    (including overhead)
+
+       Even a request for zero bytes (i.e., malloc(0)) returns a
+       pointer to something of the minimum allocatable size.
+       The maximum overhead wastage (i.e., number of extra bytes
+       allocated than were requested in malloc) is less than or equal
+       to the minimum size, except for requests >= mmap_threshold that
+       are serviced via mmap(), where the worst case wastage is about
+       32 bytes plus the remainder from a system page (the minimal
+       mmap unit); typically 4096 or 8192 bytes.
+
+  Security: static-safe; optionally more or less
+       The "security" of malloc refers to the ability of malicious
+       code to accentuate the effects of errors (for example, freeing
+       space that is not currently malloc'ed or overwriting past the
+       ends of chunks) in code that calls malloc.  This malloc
+       guarantees not to modify any memory locations below the base of
+       heap, i.e., static variables, even in the presence of usage
+       errors.  The routines additionally detect most improper frees
+       and reallocs.  All this holds as long as the static bookkeeping
+       for malloc itself is not corrupted by some other means.  This
+       is only one aspect of security -- these checks do not, and
+       cannot, detect all possible programming errors.
+
+       If FOOTERS is defined nonzero, then each allocated chunk
+       carries an additional check word to verify that it was malloced
+       from its space.  These check words are the same within each
+       execution of a program using malloc, but differ across
+       executions, so externally crafted fake chunks cannot be
+       freed. This improves security by rejecting frees/reallocs that
+       could corrupt heap memory, in addition to the checks preventing
+       writes to statics that are always on.  This may further improve
+       security at the expense of time and space overhead.  (Note that
+       FOOTERS may also be worth using with MSPACES.)
+
+       By default detected errors cause the program to abort (calling
+       "abort()"). You can override this to instead proceed past
+       errors by defining PROCEED_ON_ERROR.  In this case, a bad free
+       has no effect, and a malloc that encounters a bad address
+       caused by user overwrites will ignore the bad address by
+       dropping pointers and indices to all known memory. This may
+       be appropriate for programs that should continue if at all
+       possible in the face of programming errors, although they may
+       run out of memory because dropped memory is never reclaimed.
+
+       If you don't like either of these options, you can define
+       CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything
+       else. And if if you are sure that your program using malloc has
+       no errors or vulnerabilities, you can define INSECURE to 1,
+       which might (or might not) provide a small performance improvement.
+
+  Thread-safety: NOT thread-safe unless USE_LOCKS defined
+       When USE_LOCKS is defined, each public call to malloc, free,
+       etc is surrounded with either a pthread mutex or a win32
+       spinlock (depending on WIN32). This is not especially fast, and
+       can be a major bottleneck.  It is designed only to provide
+       minimal protection in concurrent environments, and to provide a
+       basis for extensions.  If you are using malloc in a concurrent
+       program, consider instead using ptmalloc, which is derived from
+       a version of this malloc. (See http://www.malloc.de).
+
+  System requirements: Any combination of MORECORE and/or MMAP/MUNMAP
+       This malloc can use unix sbrk or any emulation (invoked using
+       the CALL_MORECORE macro) and/or mmap/munmap or any emulation
+       (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system
+       memory.  On most unix systems, it tends to work best if both
+       MORECORE and MMAP are enabled.  On Win32, it uses emulations
+       based on VirtualAlloc. It also uses common C library functions
+       like memset.
+
+  Compliance: I believe it is compliant with the Single Unix Specification
+       (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably
+       others as well.
+
+* Overview of algorithms
+
+  This is not the fastest, most space-conserving, most portable, or
+  most tunable malloc ever written. However it is among the fastest
+  while also being among the most space-conserving, portable and
+  tunable.  Consistent balance across these factors results in a good
+  general-purpose allocator for malloc-intensive programs.
+
+  In most ways, this malloc is a best-fit allocator. Generally, it
+  chooses the best-fitting existing chunk for a request, with ties
+  broken in approximately least-recently-used order. (This strategy
+  normally maintains low fragmentation.) However, for requests less
+  than 256bytes, it deviates from best-fit when there is not an
+  exactly fitting available chunk by preferring to use space adjacent
+  to that used for the previous small request, as well as by breaking
+  ties in approximately most-recently-used order. (These enhance
+  locality of series of small allocations.)  And for very large requests
+  (>= 256Kb by default), it relies on system memory mapping
+  facilities, if supported.  (This helps avoid carrying around and
+  possibly fragmenting memory used only for large chunks.)
+
+  All operations (except malloc_stats and mallinfo) have execution
+  times that are bounded by a constant factor of the number of bits in
+  a size_t, not counting any clearing in calloc or copying in realloc,
+  or actions surrounding MORECORE and MMAP that have times
+  proportional to the number of non-contiguous regions returned by
+  system allocation routines, which is often just 1.
+
+  The implementation is not very modular and seriously overuses
+  macros. Perhaps someday all C compilers will do as good a job
+  inlining modular code as can now be done by brute-force expansion,
+  but now, enough of them seem not to.
+
+  Some compilers issue a lot of warnings about code that is
+  dead/unreachable only on some platforms, and also about intentional
+  uses of negation on unsigned types. All known cases of each can be
+  ignored.
+
+  For a longer but out of date high-level description, see
+     http://gee.cs.oswego.edu/dl/html/malloc.html
+
+* MSPACES
+  If MSPACES is defined, then in addition to malloc, free, etc.,
+  this file also defines mspace_malloc, mspace_free, etc. These
+  are versions of malloc routines that take an "mspace" argument
+  obtained using create_mspace, to control all internal bookkeeping.
+  If ONLY_MSPACES is defined, only these versions are compiled.
+  So if you would like to use this allocator for only some allocations,
+  and your system malloc for others, you can compile with
+  ONLY_MSPACES and then do something like...
+    static mspace mymspace = create_mspace(0,0); // for example
+    #define mymalloc(bytes)  mspace_malloc(mymspace, bytes)
+
+  (Note: If you only need one instance of an mspace, you can instead
+  use "USE_DL_PREFIX" to relabel the global malloc.)
+
+  You can similarly create thread-local allocators by storing
+  mspaces as thread-locals. For example:
+    static __thread mspace tlms = 0;
+    void*  tlmalloc(size_t bytes) {
+      if (tlms == 0) tlms = create_mspace(0, 0);
+      return mspace_malloc(tlms, bytes);
+    }
+    void  tlfree(void* mem) { mspace_free(tlms, mem); }
+
+  Unless FOOTERS is defined, each mspace is completely independent.
+  You cannot allocate from one and free to another (although
+  conformance is only weakly checked, so usage errors are not always
+  caught). If FOOTERS is defined, then each chunk carries around a tag
+  indicating its originating mspace, and frees are directed to their
+  originating spaces.
+
+ -------------------------  Compile-time options ---------------------------
+
+Be careful in setting #define values for numerical constants of type
+size_t. On some systems, literal values are not automatically extended
+to size_t precision unless they are explicitly casted.
+
+WIN32                    default: defined if _WIN32 defined
+  Defining WIN32 sets up defaults for MS environment and compilers.
+  Otherwise defaults are for unix.
+
+MALLOC_ALIGNMENT         default: (size_t)8
+  Controls the minimum alignment for malloc'ed chunks.  It must be a
+  power of two and at least 8, even on machines for which smaller
+  alignments would suffice. It may be defined as larger than this
+  though. Note however that code and data structures are optimized for
+  the case of 8-byte alignment.
+
+MSPACES                  default: 0 (false)
+  If true, compile in support for independent allocation spaces.
+  This is only supported if HAVE_MMAP is true.
+
+ONLY_MSPACES             default: 0 (false)
+  If true, only compile in mspace versions, not regular versions.
+
+USE_LOCKS                default: 0 (false)
+  Causes each call to each public routine to be surrounded with
+  pthread or WIN32 mutex lock/unlock. (If set true, this can be
+  overridden on a per-mspace basis for mspace versions.)
+
+FOOTERS                  default: 0
+  If true, provide extra checking and dispatching by placing
+  information in the footers of allocated chunks. This adds
+  space and time overhead.
+
+INSECURE                 default: 0
+  If true, omit checks for usage errors and heap space overwrites.
+
+USE_DL_PREFIX            default: NOT defined
+  Causes compiler to prefix all public routines with the string 'dl'.
+  This can be useful when you only want to use this malloc in one part
+  of a program, using your regular system malloc elsewhere.
+
+ABORT                    default: defined as abort()
+  Defines how to abort on failed checks.  On most systems, a failed
+  check cannot die with an "assert" or even print an informative
+  message, because the underlying print routines in turn call malloc,
+  which will fail again.  Generally, the best policy is to simply call
+  abort(). It's not very useful to do more than this because many
+  errors due to overwriting will show up as address faults (null, odd
+  addresses etc) rather than malloc-triggered checks, so will also
+  abort.  Also, most compilers know that abort() does not return, so
+  can better optimize code conditionally calling it.
+
+PROCEED_ON_ERROR           default: defined as 0 (false)
+  Controls whether detected bad addresses cause them to bypassed
+  rather than aborting. If set, detected bad arguments to free and
+  realloc are ignored. And all bookkeeping information is zeroed out
+  upon a detected overwrite of freed heap space, thus losing the
+  ability to ever return it from malloc again, but enabling the
+  application to proceed. If PROCEED_ON_ERROR is defined, the
+  static variable malloc_corruption_error_count is compiled in
+  and can be examined to see if errors have occurred. This option
+  generates slower code than the default abort policy.
+
+DEBUG                    default: NOT defined
+  The DEBUG setting is mainly intended for people trying to modify
+  this code or diagnose problems when porting to new platforms.
+  However, it may also be able to better isolate user errors than just
+  using runtime checks.  The assertions in the check routines spell
+  out in more detail the assumptions and invariants underlying the
+  algorithms.  The checking is fairly extensive, and will slow down
+  execution noticeably. Calling malloc_stats or mallinfo with DEBUG
+  set will attempt to check every non-mmapped allocated and free chunk
+  in the course of computing the summaries.
+
+ABORT_ON_ASSERT_FAILURE   default: defined as 1 (true)
+  Debugging assertion failures can be nearly impossible if your
+  version of the assert macro causes malloc to be called, which will
+  lead to a cascade of further failures, blowing the runtime stack.
+  ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(),
+  which will usually make debugging easier.
+
+MALLOC_FAILURE_ACTION     default: sets errno to ENOMEM, or no-op on win32
+  The action to take before "return 0" when malloc fails to be able to
+  return memory because there is none available.
+
+HAVE_MORECORE             default: 1 (true) unless win32 or ONLY_MSPACES
+  True if this system supports sbrk or an emulation of it.
+
+MORECORE                  default: sbrk
+  The name of the sbrk-style system routine to call to obtain more
+  memory.  See below for guidance on writing custom MORECORE
+  functions. The type of the argument to sbrk/MORECORE varies across
+  systems.  It cannot be size_t, because it supports negative
+  arguments, so it is normally the signed type of the same width as
+  size_t (sometimes declared as "intptr_t").  It doesn't much matter
+  though. Internally, we only call it with arguments less than half
+  the max value of a size_t, which should work across all reasonable
+  possibilities, although sometimes generating compiler warnings.  See
+  near the end of this file for guidelines for creating a custom
+  version of MORECORE.
+
+MORECORE_CONTIGUOUS       default: 1 (true)
+  If true, take advantage of fact that consecutive calls to MORECORE
+  with positive arguments always return contiguous increasing
+  addresses.  This is true of unix sbrk. It does not hurt too much to
+  set it true anyway, since malloc copes with non-contiguities.
+  Setting it false when definitely non-contiguous saves time
+  and possibly wasted space it would take to discover this though.
+
+MORECORE_CANNOT_TRIM      default: NOT defined
+  True if MORECORE cannot release space back to the system when given
+  negative arguments. This is generally necessary only if you are
+  using a hand-crafted MORECORE function that cannot handle negative
+  arguments.
+
+HAVE_MMAP                 default: 1 (true)
+  True if this system supports mmap or an emulation of it.  If so, and
+  HAVE_MORECORE is not true, MMAP is used for all system
+  allocation. If set and HAVE_MORECORE is true as well, MMAP is
+  primarily used to directly allocate very large blocks. It is also
+  used as a backup strategy in cases where MORECORE fails to provide
+  space from system. Note: A single call to MUNMAP is assumed to be
+  able to unmap memory that may have be allocated using multiple calls
+  to MMAP, so long as they are adjacent.
+
+HAVE_MREMAP               default: 1 on linux, else 0
+  If true realloc() uses mremap() to re-allocate large blocks and
+  extend or shrink allocation spaces.
+
+MMAP_CLEARS               default: 1 on unix
+  True if mmap clears memory so calloc doesn't need to. This is true
+  for standard unix mmap using /dev/zero.
+
+USE_BUILTIN_FFS            default: 0 (i.e., not used)
+  Causes malloc to use the builtin ffs() function to compute indices.
+  Some compilers may recognize and intrinsify ffs to be faster than the
+  supplied C version. Also, the case of x86 using gcc is special-cased
+  to an asm instruction, so is already as fast as it can be, and so
+  this setting has no effect. (On most x86s, the asm version is only
+  slightly faster than the C version.)
+
+malloc_getpagesize         default: derive from system includes, or 4096.
+  The system page size. To the extent possible, this malloc manages
+  memory from the system in page-size units.  This may be (and
+  usually is) a function rather than a constant. This is ignored
+  if WIN32, where page size is determined using getSystemInfo during
+  initialization.
+
+USE_DEV_RANDOM             default: 0 (i.e., not used)
+  Causes malloc to use /dev/random to initialize secure magic seed for
+  stamping footers. Otherwise, the current time is used.
+
+NO_MALLINFO                default: 0
+  If defined, don't compile "mallinfo". This can be a simple way
+  of dealing with mismatches between system declarations and
+  those in this file.
+
+MALLINFO_FIELD_TYPE        default: size_t
+  The type of the fields in the mallinfo struct. This was originally
+  defined as "int" in SVID etc, but is more usefully defined as
+  size_t. The value is used only if  HAVE_USR_INCLUDE_MALLOC_H is not set
+
+REALLOC_ZERO_BYTES_FREES    default: not defined
+  This should be set if a call to realloc with zero bytes should 
+  be the same as a call to free. Some people think it should. Otherwise, 
+  since this malloc returns a unique pointer for malloc(0), so does 
+  realloc(p, 0).
+
+LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H
+LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H,  LACKS_ERRNO_H
+LACKS_STDLIB_H                default: NOT defined unless on WIN32
+  Define these if your system does not have these header files.
+  You might need to manually insert some of the declarations they provide.
+
+DEFAULT_GRANULARITY        default: page size if MORECORE_CONTIGUOUS,
+                                system_info.dwAllocationGranularity in WIN32,
+                                otherwise 64K.
+      Also settable using mallopt(M_GRANULARITY, x)
+  The unit for allocating and deallocating memory from the system.  On
+  most systems with contiguous MORECORE, there is no reason to
+  make this more than a page. However, systems with MMAP tend to
+  either require or encourage larger granularities.  You can increase
+  this value to prevent system allocation functions to be called so
+  often, especially if they are slow.  The value must be at least one
+  page and must be a power of two.  Setting to 0 causes initialization
+  to either page size or win32 region size.  (Note: In previous
+  versions of malloc, the equivalent of this option was called
+  "TOP_PAD")
+
+DEFAULT_TRIM_THRESHOLD    default: 2MB
+      Also settable using mallopt(M_TRIM_THRESHOLD, x)
+  The maximum amount of unused top-most memory to keep before
+  releasing via malloc_trim in free().  Automatic trimming is mainly
+  useful in long-lived programs using contiguous MORECORE.  Because
+  trimming via sbrk can be slow on some systems, and can sometimes be
+  wasteful (in cases where programs immediately afterward allocate
+  more large chunks) the value should be high enough so that your
+  overall system performance would improve by releasing this much
+  memory.  As a rough guide, you might set to a value close to the
+  average size of a process (program) running on your system.
+  Releasing this much memory would allow such a process to run in
+  memory.  Generally, it is worth tuning trim thresholds when a
+  program undergoes phases where several large chunks are allocated
+  and released in ways that can reuse each other's storage, perhaps
+  mixed with phases where there are no such chunks at all. The trim
+  value must be greater than page size to have any useful effect.  To
+  disable trimming completely, you can set to MAX_SIZE_T. Note that the trick
+  some people use of mallocing a huge space and then freeing it at
+  program startup, in an attempt to reserve system memory, doesn't
+  have the intended effect under automatic trimming, since that memory
+  will immediately be returned to the system.
+
+DEFAULT_MMAP_THRESHOLD       default: 256K
+      Also settable using mallopt(M_MMAP_THRESHOLD, x)
+  The request size threshold for using MMAP to directly service a
+  request. Requests of at least this size that cannot be allocated
+  using already-existing space will be serviced via mmap.  (If enough
+  normal freed space already exists it is used instead.)  Using mmap
+  segregates relatively large chunks of memory so that they can be
+  individually obtained and released from the host system. A request
+  serviced through mmap is never reused by any other request (at least
+  not directly; the system may just so happen to remap successive
+  requests to the same locations).  Segregating space in this way has
+  the benefits that: Mmapped space can always be individually released
+  back to the system, which helps keep the system level memory demands
+  of a long-lived program low.  Also, mapped memory doesn't become
+  `locked' between other chunks, as can happen with normally allocated
+  chunks, which means that even trimming via malloc_trim would not
+  release them.  However, it has the disadvantage that the space
+  cannot be reclaimed, consolidated, and then used to service later
+  requests, as happens with normal chunks.  The advantages of mmap
+  nearly always outweigh disadvantages for "large" chunks, but the
+  value of "large" may vary across systems.  The default is an
+  empirically derived value that works well in most systems. You can
+  disable mmap by setting to MAX_SIZE_T.
+
+*/
+
+/** @addtogroup libcmalloc malloc
+  * @brief Malloc originally written by Doug Lea and ported to HelenOS.
+  * @ingroup libc
+ * @{
+ */
+/** @file
+ */
+
+
+#include <sys/types.h>  /* For size_t */
+
+/** Non-default helenos customizations */
+#define LACKS_FCNTL_H
+#define LACKS_SYS_MMAN_H
+#define LACKS_SYS_PARAM_H
+#undef HAVE_MMAP
+#define HAVE_MMAP 0
+#define LACKS_ERRNO_H
+/* Set errno? */
+#undef MALLOC_FAILURE_ACTION
+#define MALLOC_FAILURE_ACTION
+
+/* The maximum possible size_t value has all bits set */
+#define MAX_SIZE_T           (~(size_t)0)
+
+#define ONLY_MSPACES 0
+#define MSPACES 0
+
+#ifdef MALLOC_ALIGNMENT_16
+#define MALLOC_ALIGNMENT ((size_t)16U)
+#else
+#define MALLOC_ALIGNMENT ((size_t)8U)
+#endif
+
+#define FOOTERS 0
+#define ABORT  abort()
+#define ABORT_ON_ASSERT_FAILURE 1
+#define PROCEED_ON_ERROR 0
+#define USE_LOCKS 1
+#define INSECURE 0
+#define HAVE_MMAP 0
+
+#define MMAP_CLEARS 1
+
+#define HAVE_MORECORE 1
+#define MORECORE_CONTIGUOUS 1
+#define MORECORE sbrk
+#define DEFAULT_GRANULARITY (0)  /* 0 means to compute in init_mparams */
+
+#ifndef DEFAULT_TRIM_THRESHOLD
+#ifndef MORECORE_CANNOT_TRIM
+#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U)
+#else   /* MORECORE_CANNOT_TRIM */
+#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T
+#endif  /* MORECORE_CANNOT_TRIM */
+#endif  /* DEFAULT_TRIM_THRESHOLD */
+#ifndef DEFAULT_MMAP_THRESHOLD
+#if HAVE_MMAP
+#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U)
+#else   /* HAVE_MMAP */
+#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T
+#endif  /* HAVE_MMAP */
+#endif  /* DEFAULT_MMAP_THRESHOLD */
+#ifndef USE_BUILTIN_FFS
+#define USE_BUILTIN_FFS 0
+#endif  /* USE_BUILTIN_FFS */
+#ifndef USE_DEV_RANDOM
+#define USE_DEV_RANDOM 0
+#endif  /* USE_DEV_RANDOM */
+#ifndef NO_MALLINFO
+#define NO_MALLINFO 0
+#endif  /* NO_MALLINFO */
+#ifndef MALLINFO_FIELD_TYPE
+#define MALLINFO_FIELD_TYPE size_t
+#endif  /* MALLINFO_FIELD_TYPE */
+
+/*
+  mallopt tuning options.  SVID/XPG defines four standard parameter
+  numbers for mallopt, normally defined in malloc.h.  None of these
+  are used in this malloc, so setting them has no effect. But this
+  malloc does support the following options.
+*/
+
+#define M_TRIM_THRESHOLD     (-1)
+#define M_GRANULARITY        (-2)
+#define M_MMAP_THRESHOLD     (-3)
+
+/*
+  ========================================================================
+  To make a fully customizable malloc.h header file, cut everything
+  above this line, put into file malloc.h, edit to suit, and #include it
+  on the next line, as well as in programs that use this malloc.
+  ========================================================================
+*/
+
+#include "malloc.h"
+
+/*------------------------------ internal #includes ---------------------- */
+
+#include <stdio.h>       /* for printing in malloc_stats */
+#include <string.h>
+
+#ifndef LACKS_ERRNO_H
+#include <errno.h>       /* for MALLOC_FAILURE_ACTION */
+#endif /* LACKS_ERRNO_H */
+#if FOOTERS
+#include <time.h>        /* for magic initialization */
+#endif /* FOOTERS */
+#ifndef LACKS_STDLIB_H
+#include <stdlib.h>      /* for abort() */
+#endif /* LACKS_STDLIB_H */
+#ifdef DEBUG
+#if ABORT_ON_ASSERT_FAILURE
+#define assert(x) {if(!(x)) {printf(#x);ABORT;}}
+#else /* ABORT_ON_ASSERT_FAILURE */
+#include <assert.h>
+#endif /* ABORT_ON_ASSERT_FAILURE */
+#else  /* DEBUG */
+#define assert(x)
+#endif /* DEBUG */
+#if USE_BUILTIN_FFS
+#ifndef LACKS_STRINGS_H
+#include <strings.h>     /* for ffs */
+#endif /* LACKS_STRINGS_H */
+#endif /* USE_BUILTIN_FFS */
+#if HAVE_MMAP
+#ifndef LACKS_SYS_MMAN_H
+#include <sys/mman.h>    /* for mmap */
+#endif /* LACKS_SYS_MMAN_H */
+#ifndef LACKS_FCNTL_H
+#include <fcntl.h>
+#endif /* LACKS_FCNTL_H */
+#endif /* HAVE_MMAP */
+#if HAVE_MORECORE
+#ifndef LACKS_UNISTD_H
+#include <unistd.h>     /* for sbrk */
+#else /* LACKS_UNISTD_H */
+#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
+extern void*     sbrk(ptrdiff_t);
+#endif /* FreeBSD etc */
+#endif /* LACKS_UNISTD_H */
+#endif /* HAVE_MMAP */
+
+#ifndef WIN32
+#ifndef malloc_getpagesize
+#  ifdef _SC_PAGESIZE         /* some SVR4 systems omit an underscore */
+#    ifndef _SC_PAGE_SIZE
+#      define _SC_PAGE_SIZE _SC_PAGESIZE
+#    endif
+#  endif
+#  ifdef _SC_PAGE_SIZE
+#    define malloc_getpagesize sysconf(_SC_PAGE_SIZE)
+#  else
+#    if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE)
+       extern size_t getpagesize();
+#      define malloc_getpagesize getpagesize()
+#    else
+#      ifdef WIN32 /* use supplied emulation of getpagesize */
+#        define malloc_getpagesize getpagesize()
+#      else
+#        ifndef LACKS_SYS_PARAM_H
+#          include <sys/param.h>
+#        endif
+#        ifdef EXEC_PAGESIZE
+#          define malloc_getpagesize EXEC_PAGESIZE
+#        else
+#          ifdef NBPG
+#            ifndef CLSIZE
+#              define malloc_getpagesize NBPG
+#            else
+#              define malloc_getpagesize (NBPG * CLSIZE)
+#            endif
+#          else
+#            ifdef NBPC
+#              define malloc_getpagesize NBPC
+#            else
+#              ifdef PAGESIZE
+#                define malloc_getpagesize PAGESIZE
+#              else /* just guess */
+#                define malloc_getpagesize ((size_t)4096U)
+#              endif
+#            endif
+#          endif
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+#endif
+
+/* ------------------- size_t and alignment properties -------------------- */
+
+/* The byte and bit size of a size_t */
+#define SIZE_T_SIZE         (sizeof(size_t))
+#define SIZE_T_BITSIZE      (sizeof(size_t) << 3)
+
+/* Some constants coerced to size_t */
+/* Annoying but necessary to avoid errors on some plaftorms */
+#define SIZE_T_ZERO         ((size_t)0)
+#define SIZE_T_ONE          ((size_t)1)
+#define SIZE_T_TWO          ((size_t)2)
+#define TWO_SIZE_T_SIZES    (SIZE_T_SIZE<<1)
+#define FOUR_SIZE_T_SIZES   (SIZE_T_SIZE<<2)
+#define SIX_SIZE_T_SIZES    (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)
+#define HALF_MAX_SIZE_T     (MAX_SIZE_T / 2U)
+
+/* The bit mask value corresponding to MALLOC_ALIGNMENT */
+#define CHUNK_ALIGN_MASK    (MALLOC_ALIGNMENT - SIZE_T_ONE)
+
+/* True if address a has acceptable alignment */
+#define is_aligned(A)       (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0)
+
+/* the number of bytes to offset an address to align it */
+#define align_offset(A)\
+ ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
+  ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK))
+
+/* -------------------------- MMAP preliminaries ------------------------- */
+
+/*
+   If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and
+   checks to fail so compiler optimizer can delete code rather than
+   using so many "#if"s.
+*/
+
+
+/* MORECORE and MMAP must return MFAIL on failure */
+#define MFAIL                ((void*)(MAX_SIZE_T))
+#define CMFAIL               ((char*)(MFAIL)) /* defined for convenience */
+
+#if !HAVE_MMAP
+#define IS_MMAPPED_BIT       (SIZE_T_ZERO)
+#define USE_MMAP_BIT         (SIZE_T_ZERO)
+#define CALL_MMAP(s)         MFAIL
+#define CALL_MUNMAP(a, s)    (-1)
+#define DIRECT_MMAP(s)       MFAIL
+
+#else /* HAVE_MMAP */
+#define IS_MMAPPED_BIT       (SIZE_T_ONE)
+#define USE_MMAP_BIT         (SIZE_T_ONE)
+
+#ifndef WIN32
+#define CALL_MUNMAP(a, s)    munmap((a), (s))
+#define MMAP_PROT            (PROT_READ|PROT_WRITE)
+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
+#define MAP_ANONYMOUS        MAP_ANON
+#endif /* MAP_ANON */
+#ifdef MAP_ANONYMOUS
+#define MMAP_FLAGS           (MAP_PRIVATE|MAP_ANONYMOUS)
+#define CALL_MMAP(s)         mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0)
+#else /* MAP_ANONYMOUS */
+/*
+   Nearly all versions of mmap support MAP_ANONYMOUS, so the following
+   is unlikely to be needed, but is supplied just in case.
+*/
+#define MMAP_FLAGS           (MAP_PRIVATE)
+static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
+#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \
+           (dev_zero_fd = open("/dev/zero", O_RDWR), \
+            mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \
+            mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0))
+#endif /* MAP_ANONYMOUS */
+
+#define DIRECT_MMAP(s)       CALL_MMAP(s)
+#else /* WIN32 */
+
+/* Win32 MMAP via VirtualAlloc */
+static void* win32mmap(size_t size) {
+  void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
+  return (ptr != 0)? ptr: MFAIL;
+}
+
+/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */
+static void* win32direct_mmap(size_t size) {
+  void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
+                           PAGE_READWRITE);
+  return (ptr != 0)? ptr: MFAIL;
+}
+
+/* This function supports releasing coalesed segments */
+static int win32munmap(void* ptr, size_t size) {
+  MEMORY_BASIC_INFORMATION minfo;
+  char* cptr = ptr;
+  while (size) {
+    if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0)
+      return -1;
+    if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr ||
+        minfo.State != MEM_COMMIT || minfo.RegionSize > size)
+      return -1;
+    if (VirtualFree(cptr, 0, MEM_RELEASE) == 0)
+      return -1;
+    cptr += minfo.RegionSize;
+    size -= minfo.RegionSize;
+  }
+  return 0;
+}
+
+#define CALL_MMAP(s)         win32mmap(s)
+#define CALL_MUNMAP(a, s)    win32munmap((a), (s))
+#define DIRECT_MMAP(s)       win32direct_mmap(s)
+#endif /* WIN32 */
+#endif /* HAVE_MMAP */
+
+#if HAVE_MMAP && HAVE_MREMAP
+#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv))
+#else  /* HAVE_MMAP && HAVE_MREMAP */
+#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL
+#endif /* HAVE_MMAP && HAVE_MREMAP */
+
+#if HAVE_MORECORE
+#define CALL_MORECORE(S)     MORECORE(S)
+#else  /* HAVE_MORECORE */
+#define CALL_MORECORE(S)     MFAIL
+#endif /* HAVE_MORECORE */
+
+/* mstate bit set if continguous morecore disabled or failed */
+#define USE_NONCONTIGUOUS_BIT (4U)
+
+/* segment bit set in create_mspace_with_base */
+#define EXTERN_BIT            (8U)
+
+
+/* --------------------------- Lock preliminaries ------------------------ */
+
+#if USE_LOCKS
+
+/*
+  When locks are defined, there are up to two global locks:
+
+  * If HAVE_MORECORE, morecore_mutex protects sequences of calls to
+    MORECORE.  In many cases sys_alloc requires two calls, that should
+    not be interleaved with calls by other threads.  This does not
+    protect against direct calls to MORECORE by other threads not
+    using this lock, so there is still code to cope the best we can on
+    interference.
+
+  * magic_init_mutex ensures that mparams.magic and other
+    unique mparams values are initialized only once.
+*/
+
+/* By default use posix locks */
+#include <futex.h>
+#define MLOCK_T atomic_t
+#define INITIAL_LOCK(l)      futex_initialize(l, 1)
+/* futex_down cannot fail, but can return different
+ * retvals for OK
+ */
+#define ACQUIRE_LOCK(l)      ({futex_down(l);0;})
+#define RELEASE_LOCK(l)      futex_up(l)
+
+#if HAVE_MORECORE
+static MLOCK_T morecore_mutex = FUTEX_INITIALIZER;
+#endif /* HAVE_MORECORE */
+
+static MLOCK_T magic_init_mutex = FUTEX_INITIALIZER;
+
+
+#define USE_LOCK_BIT               (2U)
+#else  /* USE_LOCKS */
+#define USE_LOCK_BIT               (0U)
+#define INITIAL_LOCK(l)
+#endif /* USE_LOCKS */
+
+#if USE_LOCKS && HAVE_MORECORE
+#define ACQUIRE_MORECORE_LOCK()    ACQUIRE_LOCK(&morecore_mutex);
+#define RELEASE_MORECORE_LOCK()    RELEASE_LOCK(&morecore_mutex);
+#else /* USE_LOCKS && HAVE_MORECORE */
+#define ACQUIRE_MORECORE_LOCK()
+#define RELEASE_MORECORE_LOCK()
+#endif /* USE_LOCKS && HAVE_MORECORE */
+
+#if USE_LOCKS
+#define ACQUIRE_MAGIC_INIT_LOCK()  ACQUIRE_LOCK(&magic_init_mutex);
+#define RELEASE_MAGIC_INIT_LOCK()  RELEASE_LOCK(&magic_init_mutex);
+#else  /* USE_LOCKS */
+#define ACQUIRE_MAGIC_INIT_LOCK()
+#define RELEASE_MAGIC_INIT_LOCK()
+#endif /* USE_LOCKS */
+
+
+/* -----------------------  Chunk representations ------------------------ */
+
+/*
+  (The following includes lightly edited explanations by Colin Plumb.)
+
+  The malloc_chunk declaration below is misleading (but accurate and
+  necessary).  It declares a "view" into memory allowing access to
+  necessary fields at known offsets from a given base.
+
+  Chunks of memory are maintained using a `boundary tag' method as
+  originally described by Knuth.  (See the paper by Paul Wilson
+  ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such
+  techniques.)  Sizes of free chunks are stored both in the front of
+  each chunk and at the end.  This makes consolidating fragmented
+  chunks into bigger chunks fast.  The head fields also hold bits
+  representing whether chunks are free or in use.
+
+  Here are some pictures to make it clearer.  They are "exploded" to
+  show that the state of a chunk can be thought of as extending from
+  the high 31 bits of the head field of its header through the
+  prev_foot and PINUSE_BIT bit of the following chunk header.
+
+  A chunk that's in use looks like:
+
+   chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+           | Size of previous chunk (if P = 1)                             |
+           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
+         | Size of this chunk                                         1| +-+
+   mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         |                                                               |
+         +-                                                             -+
+         |                                                               |
+         +-                                                             -+
+         |                                                               :
+         +-      size - sizeof(size_t) available payload bytes          -+
+         :                                                               |
+ chunk-> +-                                                             -+
+         |                                                               |
+         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1|
+       | Size of next chunk (may or may not be in use)               | +-+
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+    And if it's free, it looks like this:
+
+   chunk-> +-                                                             -+
+           | User payload (must be in use, or we would have merged!)       |
+           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
+         | Size of this chunk                                         0| +-+
+   mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         | Next pointer                                                  |
+         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         | Prev pointer                                                  |
+         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         |                                                               :
+         +-      size - sizeof(struct chunk) unused bytes               -+
+         :                                                               |
+ chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         | Size of this chunk                                            |
+         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0|
+       | Size of next chunk (must be in use, or we would have merged)| +-+
+ mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+       |                                                               :
+       +- User payload                                                -+
+       :                                                               |
+       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+                                                                     |0|
+                                                                     +-+
+  Note that since we always merge adjacent free chunks, the chunks
+  adjacent to a free chunk must be in use.
+
+  Given a pointer to a chunk (which can be derived trivially from the
+  payload pointer) we can, in O(1) time, find out whether the adjacent
+  chunks are free, and if so, unlink them from the lists that they
+  are on and merge them with the current chunk.
+
+  Chunks always begin on even word boundaries, so the mem portion
+  (which is returned to the user) is also on an even word boundary, and
+  thus at least double-word aligned.
+
+  The P (PINUSE_BIT) bit, stored in the unused low-order bit of the
+  chunk size (which is always a multiple of two words), is an in-use
+  bit for the *previous* chunk.  If that bit is *clear*, then the
+  word before the current chunk size contains the previous chunk
+  size, and can be used to find the front of the previous chunk.
+  The very first chunk allocated always has this bit set, preventing
+  access to non-existent (or non-owned) memory. If pinuse is set for
+  any given chunk, then you CANNOT determine the size of the
+  previous chunk, and might even get a memory addressing fault when
+  trying to do so.
+
+  The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of
+  the chunk size redundantly records whether the current chunk is
+  inuse. This redundancy enables usage checks within free and realloc,
+  and reduces indirection when freeing and consolidating chunks.
+
+  Each freshly allocated chunk must have both cinuse and pinuse set.
+  That is, each allocated chunk borders either a previously allocated
+  and still in-use chunk, or the base of its memory arena. This is
+  ensured by making all allocations from the the `lowest' part of any
+  found chunk.  Further, no free chunk physically borders another one,
+  so each free chunk is known to be preceded and followed by either
+  inuse chunks or the ends of memory.
+
+  Note that the `foot' of the current chunk is actually represented
+  as the prev_foot of the NEXT chunk. This makes it easier to
+  deal with alignments etc but can be very confusing when trying
+  to extend or adapt this code.
+
+  The exceptions to all this are
+
+     1. The special chunk `top' is the top-most available chunk (i.e.,
+        the one bordering the end of available memory). It is treated
+        specially.  Top is never included in any bin, is used only if
+        no other chunk is available, and is released back to the
+        system if it is very large (see M_TRIM_THRESHOLD).  In effect,
+        the top chunk is treated as larger (and thus less well
+        fitting) than any other available chunk.  The top chunk
+        doesn't update its trailing size field since there is no next
+        contiguous chunk that would have to index off it. However,
+        space is still allocated for it (TOP_FOOT_SIZE) to enable
+        separation or merging when space is extended.
+
+     3. Chunks allocated via mmap, which have the lowest-order bit
+        (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set
+        PINUSE_BIT in their head fields.  Because they are allocated
+        one-by-one, each must carry its own prev_foot field, which is
+        also used to hold the offset this chunk has within its mmapped
+        region, which is needed to preserve alignment. Each mmapped
+        chunk is trailed by the first two fields of a fake next-chunk
+        for sake of usage checks.
+
+*/
+
+struct malloc_chunk {
+  size_t               prev_foot;  /* Size of previous chunk (if free).  */
+  size_t               head;       /* Size and inuse bits. */
+  struct malloc_chunk* fd;         /* double links -- used only if free. */
+  struct malloc_chunk* bk;
+};
+
+typedef struct malloc_chunk  mchunk;
+typedef struct malloc_chunk* mchunkptr;
+typedef struct malloc_chunk* sbinptr;  /* The type of bins of chunks */
+typedef unsigned int bindex_t;         /* Described below */
+typedef unsigned int binmap_t;         /* Described below */
+typedef unsigned int flag_t;           /* The type of various bit flag sets */
+
+/* ------------------- Chunks sizes and alignments ----------------------- */
+
+#define MCHUNK_SIZE         (sizeof(mchunk))
+
+#if FOOTERS
+#define CHUNK_OVERHEAD      (TWO_SIZE_T_SIZES)
+#else /* FOOTERS */
+#define CHUNK_OVERHEAD      (SIZE_T_SIZE)
+#endif /* FOOTERS */
+
+/* MMapped chunks need a second word of overhead ... */
+#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
+/* ... and additional padding for fake next-chunk at foot */
+#define MMAP_FOOT_PAD       (FOUR_SIZE_T_SIZES)
+
+/* The smallest size we can malloc is an aligned minimal chunk */
+#define MIN_CHUNK_SIZE\
+  ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
+
+/* conversion from malloc headers to user pointers, and back */
+#define chunk2mem(p)        ((void*)((char*)(p)       + TWO_SIZE_T_SIZES))
+#define mem2chunk(mem)      ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES))
+/* chunk associated with aligned address A */
+#define align_as_chunk(A)   (mchunkptr)((A) + align_offset(chunk2mem(A)))
+
+/* Bounds on request (not chunk) sizes. */
+#define MAX_REQUEST         ((-MIN_CHUNK_SIZE) << 2)
+#define MIN_REQUEST         (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE)
+
+/* pad request bytes into a usable size */
+#define pad_request(req) \
+   (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
+
+/* pad request, checking for minimum (but not maximum) */
+#define request2size(req) \
+  (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req))
+
+
+/* ------------------ Operations on head and foot fields ----------------- */
+
+/*
+  The head field of a chunk is or'ed with PINUSE_BIT when previous
+  adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in
+  use. If the chunk was obtained with mmap, the prev_foot field has
+  IS_MMAPPED_BIT set, otherwise holding the offset of the base of the
+  mmapped region to the base of the chunk.
+*/
+
+#define PINUSE_BIT          (SIZE_T_ONE)
+#define CINUSE_BIT          (SIZE_T_TWO)
+#define INUSE_BITS          (PINUSE_BIT|CINUSE_BIT)
+
+/* Head value for fenceposts */
+#define FENCEPOST_HEAD      (INUSE_BITS|SIZE_T_SIZE)
+
+/* extraction of fields from head words */
+#define cinuse(p)           ((p)->head & CINUSE_BIT)
+#define pinuse(p)           ((p)->head & PINUSE_BIT)
+#define chunksize(p)        ((p)->head & ~(INUSE_BITS))
+
+#define clear_pinuse(p)     ((p)->head &= ~PINUSE_BIT)
+#define clear_cinuse(p)     ((p)->head &= ~CINUSE_BIT)
+
+/* Treat space at ptr +/- offset as a chunk */
+#define chunk_plus_offset(p, s)  ((mchunkptr)(((char*)(p)) + (s)))
+#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s)))
+
+/* Ptr to next or previous physical malloc_chunk. */
+#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS)))
+#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) ))
+
+/* extract next chunk's pinuse bit */
+#define next_pinuse(p)  ((next_chunk(p)->head) & PINUSE_BIT)
+
+/* Get/set size at footer */
+#define get_foot(p, s)  (((mchunkptr)((char*)(p) + (s)))->prev_foot)
+#define set_foot(p, s)  (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s))
+
+/* Set size, pinuse bit, and foot */
+#define set_size_and_pinuse_of_free_chunk(p, s)\
+  ((p)->head = (s|PINUSE_BIT), set_foot(p, s))
+
+/* Set size, pinuse bit, foot, and clear next pinuse */
+#define set_free_with_pinuse(p, s, n)\
+  (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s))
+
+#define is_mmapped(p)\
+  (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT))
+
+/* Get the internal overhead associated with chunk p */
+#define overhead_for(p)\
+ (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD)
+
+/* Return true if malloced space is not necessarily cleared */
+#if MMAP_CLEARS
+#define calloc_must_clear(p) (!is_mmapped(p))
+#else /* MMAP_CLEARS */
+#define calloc_must_clear(p) (1)
+#endif /* MMAP_CLEARS */
+
+/* ---------------------- Overlaid data structures ----------------------- */
+
+/*
+  When chunks are not in use, they are treated as nodes of either
+  lists or trees.
+
+  "Small"  chunks are stored in circular doubly-linked lists, and look
+  like this:
+
+    chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Size of previous chunk                            |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    `head:' |             Size of chunk, in bytes                         |P|
+      mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Forward pointer to next chunk in list             |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Back pointer to previous chunk in list            |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Unused space (may be 0 bytes long)                .
+            .                                                               .
+            .                                                               |
+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    `foot:' |             Size of chunk, in bytes                           |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+  Larger chunks are kept in a form of bitwise digital trees (aka
+  tries) keyed on chunksizes.  Because malloc_tree_chunks are only for
+  free chunks greater than 256 bytes, their size doesn't impose any
+  constraints on user chunk sizes.  Each node looks like:
+
+    chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Size of previous chunk                            |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    `head:' |             Size of chunk, in bytes                         |P|
+      mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Forward pointer to next chunk of same size        |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Back pointer to previous chunk of same size       |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Pointer to left child (child[0])                  |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Pointer to right child (child[1])                 |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Pointer to parent                                 |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             bin index of this chunk                           |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+            |             Unused space                                      .
+            .                                                               |
+nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    `foot:' |             Size of chunk, in bytes                           |
+            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+  Each tree holding treenodes is a tree of unique chunk sizes.  Chunks
+  of the same size are arranged in a circularly-linked list, with only
+  the oldest chunk (the next to be used, in our FIFO ordering)
+  actually in the tree.  (Tree members are distinguished by a non-null
+  parent pointer.)  If a chunk with the same size an an existing node
+  is inserted, it is linked off the existing node using pointers that
+  work in the same way as fd/bk pointers of small chunks.
+
+  Each tree contains a power of 2 sized range of chunk sizes (the
+  smallest is 0x100 <= x < 0x180), which is is divided in half at each
+  tree level, with the chunks in the smaller half of the range (0x100
+  <= x < 0x140 for the top nose) in the left subtree and the larger
+  half (0x140 <= x < 0x180) in the right subtree.  This is, of course,
+  done by inspecting individual bits.
+
+  Using these rules, each node's left subtree contains all smaller
+  sizes than its right subtree.  However, the node at the root of each
+  subtree has no particular ordering relationship to either.  (The
+  dividing line between the subtree sizes is based on trie relation.)
+  If we remove the last chunk of a given size from the interior of the
+  tree, we need to replace it with a leaf node.  The tree ordering
+  rules permit a node to be replaced by any leaf below it.
+
+  The smallest chunk in a tree (a common operation in a best-fit
+  allocator) can be found by walking a path to the leftmost leaf in
+  the tree.  Unlike a usual binary tree, where we follow left child
+  pointers until we reach a null, here we follow the right child
+  pointer any time the left one is null, until we reach a leaf with
+  both child pointers null. The smallest chunk in the tree will be
+  somewhere along that path.
+
+  The worst case number of steps to add, find, or remove a node is
+  bounded by the number of bits differentiating chunks within
+  bins. Under current bin calculations, this ranges from 6 up to 21
+  (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case
+  is of course much better.
+*/
+
+struct malloc_tree_chunk {
+  /* The first four fields must be compatible with malloc_chunk */
+  size_t                    prev_foot;
+  size_t                    head;
+  struct malloc_tree_chunk* fd;
+  struct malloc_tree_chunk* bk;
+
+  struct malloc_tree_chunk* child[2];
+  struct malloc_tree_chunk* parent;
+  bindex_t                  index;
+};
+
+typedef struct malloc_tree_chunk  tchunk;
+typedef struct malloc_tree_chunk* tchunkptr;
+typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */
+
+/* A little helper macro for trees */
+#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1])
+
+/* ----------------------------- Segments -------------------------------- */
+
+/*
+  Each malloc space may include non-contiguous segments, held in a
+  list headed by an embedded malloc_segment record representing the
+  top-most space. Segments also include flags holding properties of
+  the space. Large chunks that are directly allocated by mmap are not
+  included in this list. They are instead independently created and
+  destroyed without otherwise keeping track of them.
+
+  Segment management mainly comes into play for spaces allocated by
+  MMAP.  Any call to MMAP might or might not return memory that is
+  adjacent to an existing segment.  MORECORE normally contiguously
+  extends the current space, so this space is almost always adjacent,
+  which is simpler and faster to deal with. (This is why MORECORE is
+  used preferentially to MMAP when both are available -- see
+  sys_alloc.)  When allocating using MMAP, we don't use any of the
+  hinting mechanisms (inconsistently) supported in various
+  implementations of unix mmap, or distinguish reserving from
+  committing memory. Instead, we just ask for space, and exploit
+  contiguity when we get it.  It is probably possible to do
+  better than this on some systems, but no general scheme seems
+  to be significantly better.
+
+  Management entails a simpler variant of the consolidation scheme
+  used for chunks to reduce fragmentation -- new adjacent memory is
+  normally prepended or appended to an existing segment. However,
+  there are limitations compared to chunk consolidation that mostly
+  reflect the fact that segment processing is relatively infrequent
+  (occurring only when getting memory from system) and that we
+  don't expect to have huge numbers of segments:
+
+  * Segments are not indexed, so traversal requires linear scans.  (It
+    would be possible to index these, but is not worth the extra
+    overhead and complexity for most programs on most platforms.)
+  * New segments are only appended to old ones when holding top-most
+    memory; if they cannot be prepended to others, they are held in
+    different segments.
+
+  Except for the top-most segment of an mstate, each segment record
+  is kept at the tail of its segment. Segments are added by pushing
+  segment records onto the list headed by &mstate.seg for the
+  containing mstate.
+
+  Segment flags control allocation/merge/deallocation policies:
+  * If EXTERN_BIT set, then we did not allocate this segment,
+    and so should not try to deallocate or merge with others.
+    (This currently holds only for the initial segment passed
+    into create_mspace_with_base.)
+  * If IS_MMAPPED_BIT set, the segment may be merged with
+    other surrounding mmapped segments and trimmed/de-allocated
+    using munmap.
+  * If neither bit is set, then the segment was obtained using
+    MORECORE so can be merged with surrounding MORECORE'd segments
+    and deallocated/trimmed using MORECORE with negative arguments.
+*/
+
+struct malloc_segment {
+  char*        base;             /* base address */
+  size_t       size;             /* allocated size */
+  struct malloc_segment* next;   /* ptr to next segment */
+  flag_t       sflags;           /* mmap and extern flag */
+};
+
+#define is_mmapped_segment(S)  ((S)->sflags & IS_MMAPPED_BIT)
+#define is_extern_segment(S)   ((S)->sflags & EXTERN_BIT)
+
+typedef struct malloc_segment  msegment;
+typedef struct malloc_segment* msegmentptr;
+
+/* ---------------------------- malloc_state ----------------------------- */
+
+/*
+   A malloc_state holds all of the bookkeeping for a space.
+   The main fields are:
+
+  Top
+    The topmost chunk of the currently active segment. Its size is
+    cached in topsize.  The actual size of topmost space is
+    topsize+TOP_FOOT_SIZE, which includes space reserved for adding
+    fenceposts and segment records if necessary when getting more
+    space from the system.  The size at which to autotrim top is
+    cached from mparams in trim_check, except that it is disabled if
+    an autotrim fails.
+
+  Designated victim (dv)
+    This is the preferred chunk for servicing small requests that
+    don't have exact fits.  It is normally the chunk split off most
+    recently to service another small request.  Its size is cached in
+    dvsize. The link fields of this chunk are not maintained since it
+    is not kept in a bin.
+
+  SmallBins
+    An array of bin headers for free chunks.  These bins hold chunks
+    with sizes less than MIN_LARGE_SIZE bytes. Each bin contains
+    chunks of all the same size, spaced 8 bytes apart.  To simplify
+    use in double-linked lists, each bin header acts as a malloc_chunk
+    pointing to the real first node, if it exists (else pointing to
+    itself).  This avoids special-casing for headers.  But to avoid
+    waste, we allocate only the fd/bk pointers of bins, and then use
+    repositioning tricks to treat these as the fields of a chunk.
+
+  TreeBins
+    Treebins are pointers to the roots of trees holding a range of
+    sizes. There are 2 equally spaced treebins for each power of two
+    from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything
+    larger.
+
+  Bin maps
+    There is one bit map for small bins ("smallmap") and one for
+    treebins ("treemap).  Each bin sets its bit when non-empty, and
+    clears the bit when empty.  Bit operations are then used to avoid
+    bin-by-bin searching -- nearly all "search" is done without ever
+    looking at bins that won't be selected.  The bit maps
+    conservatively use 32 bits per map word, even if on 64bit system.
+    For a good description of some of the bit-based techniques used
+    here, see Henry S. Warren Jr's book "Hacker's Delight" (and
+    supplement at http://hackersdelight.org/). Many of these are
+    intended to reduce the branchiness of paths through malloc etc, as
+    well as to reduce the number of memory locations read or written.
+
+  Segments
+    A list of segments headed by an embedded malloc_segment record
+    representing the initial space.
+
+  Address check support
+    The least_addr field is the least address ever obtained from
+    MORECORE or MMAP. Attempted frees and reallocs of any address less
+    than this are trapped (unless INSECURE is defined).
+
+  Magic tag
+    A cross-check field that should always hold same value as mparams.magic.
+
+  Flags
+    Bits recording whether to use MMAP, locks, or contiguous MORECORE
+
+  Statistics
+    Each space keeps track of current and maximum system memory
+    obtained via MORECORE or MMAP.
+
+  Locking
+    If USE_LOCKS is defined, the "mutex" lock is acquired and released
+    around every public call using this mspace.
+*/
+
+/* Bin types, widths and sizes */
+#define NSMALLBINS        (32U)
+#define NTREEBINS         (32U)
+#define SMALLBIN_SHIFT    (3U)
+#define SMALLBIN_WIDTH    (SIZE_T_ONE << SMALLBIN_SHIFT)
+#define TREEBIN_SHIFT     (8U)
+#define MIN_LARGE_SIZE    (SIZE_T_ONE << TREEBIN_SHIFT)
+#define MAX_SMALL_SIZE    (MIN_LARGE_SIZE - SIZE_T_ONE)
+#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD)
+
+struct malloc_state {
+  binmap_t   smallmap;
+  binmap_t   treemap;
+  size_t     dvsize;
+  size_t     topsize;
+  char*      least_addr;
+  mchunkptr  dv;
+  mchunkptr  top;
+  size_t     trim_check;
+  size_t     magic;
+  mchunkptr  smallbins[(NSMALLBINS+1)*2];
+  tbinptr    treebins[NTREEBINS];
+  size_t     footprint;
+  size_t     max_footprint;
+  flag_t     mflags;
+#if USE_LOCKS
+  MLOCK_T    mutex;     /* locate lock among fields that rarely change */
+#endif /* USE_LOCKS */
+  msegment   seg;
+};
+
+typedef struct malloc_state*    mstate;
+
+/* ------------- Global malloc_state and malloc_params ------------------- */
+
+/*
+  malloc_params holds global properties, including those that can be
+  dynamically set using mallopt. There is a single instance, mparams,
+  initialized in init_mparams.
+*/
+
+struct malloc_params {
+  size_t magic;
+  size_t page_size;
+  size_t granularity;
+  size_t mmap_threshold;
+  size_t trim_threshold;
+  flag_t default_mflags;
+};
+
+static struct malloc_params mparams;
+
+/* The global malloc_state used for all non-"mspace" calls */
+static struct malloc_state _gm_;
+#define gm                 (&_gm_)
+#define is_global(M)       ((M) == &_gm_)
+#define is_initialized(M)  ((M)->top != 0)
+
+/* -------------------------- system alloc setup ------------------------- */
+
+/* Operations on mflags */
+
+#define use_lock(M)           ((M)->mflags &   USE_LOCK_BIT)
+#define enable_lock(M)        ((M)->mflags |=  USE_LOCK_BIT)
+#define disable_lock(M)       ((M)->mflags &= ~USE_LOCK_BIT)
+
+#define use_mmap(M)           ((M)->mflags &   USE_MMAP_BIT)
+#define enable_mmap(M)        ((M)->mflags |=  USE_MMAP_BIT)
+#define disable_mmap(M)       ((M)->mflags &= ~USE_MMAP_BIT)
+
+#define use_noncontiguous(M)  ((M)->mflags &   USE_NONCONTIGUOUS_BIT)
+#define disable_contiguous(M) ((M)->mflags |=  USE_NONCONTIGUOUS_BIT)
+
+#define set_lock(M,L)\
+ ((M)->mflags = (L)?\
+  ((M)->mflags | USE_LOCK_BIT) :\
+  ((M)->mflags & ~USE_LOCK_BIT))
+
+/* page-align a size */
+#define page_align(S)\
+ (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE))
+
+/* granularity-align a size */
+#define granularity_align(S)\
+  (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE))
+
+#define is_page_aligned(S)\
+   (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0)
+#define is_granularity_aligned(S)\
+   (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0)
+
+/*  True if segment S holds address A */
+#define segment_holds(S, A)\
+  ((char*)(A) >= S->base && (char*)(A) < S->base + S->size)
+
+/* Return segment holding given address */
+static msegmentptr segment_holding(mstate m, char* addr) {
+  msegmentptr sp = &m->seg;
+  for (;;) {
+    if (addr >= sp->base && addr < sp->base + sp->size)
+      return sp;
+    if ((sp = sp->next) == 0)
+      return 0;
+  }
+}
+
+/* Return true if segment contains a segment link */
+static int has_segment_link(mstate m, msegmentptr ss) {
+  msegmentptr sp = &m->seg;
+  for (;;) {
+    if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size)
+      return 1;
+    if ((sp = sp->next) == 0)
+      return 0;
+  }
+}
+
+#ifndef MORECORE_CANNOT_TRIM
+#define should_trim(M,s)  ((s) > (M)->trim_check)
+#else  /* MORECORE_CANNOT_TRIM */
+#define should_trim(M,s)  (0)
+#endif /* MORECORE_CANNOT_TRIM */
+
+/*
+  TOP_FOOT_SIZE is padding at the end of a segment, including space
+  that may be needed to place segment records and fenceposts when new
+  noncontiguous segments are added.
+*/
+#define TOP_FOOT_SIZE\
+  (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE)
+
+
+/* -------------------------------  Hooks -------------------------------- */
+
+/*
+  PREACTION should be defined to return 0 on success, and nonzero on
+  failure. If you are not using locking, you can redefine these to do
+  anything you like.
+*/
+
+#if USE_LOCKS
+
+/* Ensure locks are initialized */
+#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams())
+
+#define PREACTION(M)  ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0)
+#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); }
+#else /* USE_LOCKS */
+
+#ifndef PREACTION
+#define PREACTION(M) (0)
+#endif  /* PREACTION */
+
+#ifndef POSTACTION
+#define POSTACTION(M)
+#endif  /* POSTACTION */
+
+#endif /* USE_LOCKS */
+
+/*
+  CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses.
+  USAGE_ERROR_ACTION is triggered on detected bad frees and
+  reallocs. The argument p is an address that might have triggered the
+  fault. It is ignored by the two predefined actions, but might be
+  useful in custom actions that try to help diagnose errors.
+*/
+
+#if PROCEED_ON_ERROR
+
+/* A count of the number of corruption errors causing resets */
+int malloc_corruption_error_count;
+
+/* default corruption action */
+static void reset_on_error(mstate m);
+
+#define CORRUPTION_ERROR_ACTION(m)  reset_on_error(m)
+#define USAGE_ERROR_ACTION(m, p)
+
+#else /* PROCEED_ON_ERROR */
+
+#ifndef CORRUPTION_ERROR_ACTION
+#define CORRUPTION_ERROR_ACTION(m) ABORT
+#endif /* CORRUPTION_ERROR_ACTION */
+
+#ifndef USAGE_ERROR_ACTION
+#define USAGE_ERROR_ACTION(m,p) ABORT
+#endif /* USAGE_ERROR_ACTION */
+
+#endif /* PROCEED_ON_ERROR */
+
+/* -------------------------- Debugging setup ---------------------------- */
+
+#if ! DEBUG
+
+#define check_free_chunk(M,P)
+#define check_inuse_chunk(M,P)
+#define check_malloced_chunk(M,P,N)
+#define check_mmapped_chunk(M,P)
+#define check_malloc_state(M)
+#define check_top_chunk(M,P)
+
+#else /* DEBUG */
+#define check_free_chunk(M,P)       do_check_free_chunk(M,P)
+#define check_inuse_chunk(M,P)      do_check_inuse_chunk(M,P)
+#define check_top_chunk(M,P)        do_check_top_chunk(M,P)
+#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N)
+#define check_mmapped_chunk(M,P)    do_check_mmapped_chunk(M,P)
+#define check_malloc_state(M)       do_check_malloc_state(M)
+
+static void   do_check_any_chunk(mstate m, mchunkptr p);
+static void   do_check_top_chunk(mstate m, mchunkptr p);
+static void   do_check_mmapped_chunk(mstate m, mchunkptr p);
+static void   do_check_inuse_chunk(mstate m, mchunkptr p);
+static void   do_check_free_chunk(mstate m, mchunkptr p);
+static void   do_check_malloced_chunk(mstate m, void* mem, size_t s);
+static void   do_check_tree(mstate m, tchunkptr t);
+static void   do_check_treebin(mstate m, bindex_t i);
+static void   do_check_smallbin(mstate m, bindex_t i);
+static void   do_check_malloc_state(mstate m);
+static int    bin_find(mstate m, mchunkptr x);
+static size_t traverse_and_check(mstate m);
+#endif /* DEBUG */
+
+/* ---------------------------- Indexing Bins ---------------------------- */
+
+#define is_small(s)         (((s) >> SMALLBIN_SHIFT) < NSMALLBINS)
+#define small_index(s)      ((s)  >> SMALLBIN_SHIFT)
+#define small_index2size(i) ((i)  << SMALLBIN_SHIFT)
+#define MIN_SMALL_INDEX     (small_index(MIN_CHUNK_SIZE))
+
+/* addressing by index. See above about smallbin repositioning */
+#define smallbin_at(M, i)   ((sbinptr)((char*)&((M)->smallbins[(i)<<1])))
+#define treebin_at(M,i)     (&((M)->treebins[i]))
+
+/* assign tree index for size S to variable I */
+#if defined(__GNUC__) && defined(i386)
+#define compute_tree_index(S, I)\
+{\
+  size_t X = S >> TREEBIN_SHIFT;\
+  if (X == 0)\
+    I = 0;\
+  else if (X > 0xFFFF)\
+    I = NTREEBINS-1;\
+  else {\
+    unsigned int K;\
+    asm("bsrl %1,%0\n\t" : "=r" (K) : "rm"  (X));\
+    I =  (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\
+  }\
+}
+#else /* GNUC */
+#define compute_tree_index(S, I)\
+{\
+  size_t X = S >> TREEBIN_SHIFT;\
+  if (X == 0)\
+    I = 0;\
+  else if (X > 0xFFFF)\
+    I = NTREEBINS-1;\
+  else {\
+    unsigned int Y = (unsigned int)X;\
+    unsigned int N = ((Y - 0x100) >> 16) & 8;\
+    unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\
+    N += K;\
+    N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\
+    K = 14 - N + ((Y <<= K) >> 15);\
+    I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\
+  }\
+}
+#endif /* GNUC */
+
+/* Bit representing maximum resolved size in a treebin at i */
+#define bit_for_tree_index(i) \
+   (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2)
+
+/* Shift placing maximum resolved bit in a treebin at i as sign bit */
+#define leftshift_for_tree_index(i) \
+   ((i == NTREEBINS-1)? 0 : \
+    ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2)))
+
+/* The size of the smallest chunk held in bin with index i */
+#define minsize_for_tree_index(i) \
+   ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) |  \
+   (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1)))
+
+
+/* ------------------------ Operations on bin maps ----------------------- */
+
+/* bit corresponding to given index */
+#define idx2bit(i)              ((binmap_t)(1) << (i))
+
+/* Mark/Clear bits with given index */
+#define mark_smallmap(M,i)      ((M)->smallmap |=  idx2bit(i))
+#define clear_smallmap(M,i)     ((M)->smallmap &= ~idx2bit(i))
+#define smallmap_is_marked(M,i) ((M)->smallmap &   idx2bit(i))
+
+#define mark_treemap(M,i)       ((M)->treemap  |=  idx2bit(i))
+#define clear_treemap(M,i)      ((M)->treemap  &= ~idx2bit(i))
+#define treemap_is_marked(M,i)  ((M)->treemap  &   idx2bit(i))
+
+/* index corresponding to given bit */
+
+#if defined(__GNUC__) && defined(i386)
+#define compute_bit2idx(X, I)\
+{\
+  unsigned int J;\
+  asm("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\
+  I = (bindex_t)J;\
+}
+
+#else /* GNUC */
+#if  USE_BUILTIN_FFS
+#define compute_bit2idx(X, I) I = ffs(X)-1
+
+#else /* USE_BUILTIN_FFS */
+#define compute_bit2idx(X, I)\
+{\
+  unsigned int Y = X - 1;\
+  unsigned int K = Y >> (16-4) & 16;\
+  unsigned int N = K;        Y >>= K;\
+  N += K = Y >> (8-3) &  8;  Y >>= K;\
+  N += K = Y >> (4-2) &  4;  Y >>= K;\
+  N += K = Y >> (2-1) &  2;  Y >>= K;\
+  N += K = Y >> (1-0) &  1;  Y >>= K;\
+  I = (bindex_t)(N + Y);\
+}
+#endif /* USE_BUILTIN_FFS */
+#endif /* GNUC */
+
+/* isolate the least set bit of a bitmap */
+#define least_bit(x)         ((x) & -(x))
+
+/* mask with all bits to left of least bit of x on */
+#define left_bits(x)         ((x<<1) | -(x<<1))
+
+/* mask with all bits to left of or equal to least bit of x on */
+#define same_or_left_bits(x) ((x) | -(x))
+
+
+/* ----------------------- Runtime Check Support ------------------------- */
+
+/*
+  For security, the main invariant is that malloc/free/etc never
+  writes to a static address other than malloc_state, unless static
+  malloc_state itself has been corrupted, which cannot occur via
+  malloc (because of these checks). In essence this means that we
+  believe all pointers, sizes, maps etc held in malloc_state, but
+  check all of those linked or offsetted from other embedded data
+  structures.  These checks are interspersed with main code in a way
+  that tends to minimize their run-time cost.
+
+  When FOOTERS is defined, in addition to range checking, we also
+  verify footer fields of inuse chunks, which can be used guarantee
+  that the mstate controlling malloc/free is intact.  This is a
+  streamlined version of the approach described by William Robertson
+  et al in "Run-time Detection of Heap-based Overflows" LISA'03
+  http://www.usenix.org/events/lisa03/tech/robertson.html The footer
+  of an inuse chunk holds the xor of its mstate and a random seed,
+  that is checked upon calls to free() and realloc().  This is
+  (probablistically) unguessable from outside the program, but can be
+  computed by any code successfully malloc'ing any chunk, so does not
+  itself provide protection against code that has already broken
+  security through some other means.  Unlike Robertson et al, we
+  always dynamically check addresses of all offset chunks (previous,
+  next, etc). This turns out to be cheaper than relying on hashes.
+*/
+
+#if !INSECURE
+/* Check if address a is at least as high as any from MORECORE or MMAP */
+#define ok_address(M, a) ((char*)(a) >= (M)->least_addr)
+/* Check if address of next chunk n is higher than base chunk p */
+#define ok_next(p, n)    ((char*)(p) < (char*)(n))
+/* Check if p has its cinuse bit on */
+#define ok_cinuse(p)     cinuse(p)
+/* Check if p has its pinuse bit on */
+#define ok_pinuse(p)     pinuse(p)
+
+#else /* !INSECURE */
+#define ok_address(M, a) (1)
+#define ok_next(b, n)    (1)
+#define ok_cinuse(p)     (1)
+#define ok_pinuse(p)     (1)
+#endif /* !INSECURE */
+
+#if (FOOTERS && !INSECURE)
+/* Check if (alleged) mstate m has expected magic field */
+#define ok_magic(M)      ((M)->magic == mparams.magic)
+#else  /* (FOOTERS && !INSECURE) */
+#define ok_magic(M)      (1)
+#endif /* (FOOTERS && !INSECURE) */
+
+
+/* In gcc, use __builtin_expect to minimize impact of checks */
+#if !INSECURE
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define RTCHECK(e)  __builtin_expect(e, 1)
+#else /* GNUC */
+#define RTCHECK(e)  (e)
+#endif /* GNUC */
+#else /* !INSECURE */
+#define RTCHECK(e)  (1)
+#endif /* !INSECURE */
+
+/* macros to set up inuse chunks with or without footers */
+
+#if !FOOTERS
+
+#define mark_inuse_foot(M,p,s)
+
+/* Set cinuse bit and pinuse bit of next chunk */
+#define set_inuse(M,p,s)\
+  ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
+  ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
+
+/* Set cinuse and pinuse of this chunk and pinuse of next chunk */
+#define set_inuse_and_pinuse(M,p,s)\
+  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
+  ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
+
+/* Set size, cinuse and pinuse bit of this chunk */
+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
+  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT))
+
+#else /* FOOTERS */
+
+/* Set foot of inuse chunk to be xor of mstate and seed */
+#define mark_inuse_foot(M,p,s)\
+  (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic))
+
+#define get_mstate_for(p)\
+  ((mstate)(((mchunkptr)((char*)(p) +\
+    (chunksize(p))))->prev_foot ^ mparams.magic))
+
+#define set_inuse(M,p,s)\
+  ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
+  (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \
+  mark_inuse_foot(M,p,s))
+
+#define set_inuse_and_pinuse(M,p,s)\
+  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
+  (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\
+ mark_inuse_foot(M,p,s))
+
+#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
+  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
+  mark_inuse_foot(M, p, s))
+
+#endif /* !FOOTERS */
+
+/* ---------------------------- setting mparams -------------------------- */
+
+/* Initialize mparams */
+static int init_mparams(void) {
+  if (mparams.page_size == 0) {
+    size_t s;
+
+    mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD;
+    mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD;
+#if MORECORE_CONTIGUOUS
+    mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT;
+#else  /* MORECORE_CONTIGUOUS */
+    mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT;
+#endif /* MORECORE_CONTIGUOUS */
+
+#if (FOOTERS && !INSECURE)
+    {
+#if USE_DEV_RANDOM
+      int fd;
+      unsigned char buf[sizeof(size_t)];
+      /* Try to use /dev/urandom, else fall back on using time */
+      if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 &&
+          read(fd, buf, sizeof(buf)) == sizeof(buf)) {
+        s = *((size_t *) buf);
+        close(fd);
+      }
+      else
+#endif /* USE_DEV_RANDOM */
+        s = (size_t)(time(0) ^ (size_t)0x55555555U);
+
+      s |= (size_t)8U;    /* ensure nonzero */
+      s &= ~(size_t)7U;   /* improve chances of fault for bad values */
+
+    }
+#else /* (FOOTERS && !INSECURE) */
+    s = (size_t)0x58585858U;
+#endif /* (FOOTERS && !INSECURE) */
+    ACQUIRE_MAGIC_INIT_LOCK();
+    if (mparams.magic == 0) {
+      mparams.magic = s;
+      /* Set up lock for main malloc area */
+      INITIAL_LOCK(&gm->mutex);
+      gm->mflags = mparams.default_mflags;
+    }
+    RELEASE_MAGIC_INIT_LOCK();
+
+#ifndef WIN32
+    mparams.page_size = malloc_getpagesize;
+    mparams.granularity = ((DEFAULT_GRANULARITY != 0)?
+                           DEFAULT_GRANULARITY : mparams.page_size);
+#else /* WIN32 */
+    {
+      SYSTEM_INFO system_info;
+      GetSystemInfo(&system_info);
+      mparams.page_size = system_info.dwPageSize;
+      mparams.granularity = system_info.dwAllocationGranularity;
+    }
+#endif /* WIN32 */
+
+    /* Sanity-check configuration:
+       size_t must be unsigned and as wide as pointer type.
+       ints must be at least 4 bytes.
+       alignment must be at least 8.
+       Alignment, min chunk size, and page size must all be powers of 2.
+    */
+    if ((sizeof(size_t) != sizeof(char*)) ||
+        (MAX_SIZE_T < MIN_CHUNK_SIZE)  ||
+        (sizeof(int) < 4)  ||
+        (MALLOC_ALIGNMENT < (size_t)8U) ||
+        ((MALLOC_ALIGNMENT    & (MALLOC_ALIGNMENT-SIZE_T_ONE))    != 0) ||
+        ((MCHUNK_SIZE         & (MCHUNK_SIZE-SIZE_T_ONE))         != 0) ||
+        ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) ||
+        ((mparams.page_size   & (mparams.page_size-SIZE_T_ONE))   != 0))
+      ABORT;
+  }
+  return 0;
+}
+
+/* support for mallopt */
+static int change_mparam(int param_number, int value) {
+  size_t val = (size_t)value;
+  init_mparams();
+  switch(param_number) {
+  case M_TRIM_THRESHOLD:
+    mparams.trim_threshold = val;
+    return 1;
+  case M_GRANULARITY:
+    if (val >= mparams.page_size && ((val & (val-1)) == 0)) {
+      mparams.granularity = val;
+      return 1;
+    }
+    else
+      return 0;
+  case M_MMAP_THRESHOLD:
+    mparams.mmap_threshold = val;
+    return 1;
+  default:
+    return 0;
+  }
+}
+
+#if DEBUG
+/* ------------------------- Debugging Support --------------------------- */
+
+/* Check properties of any chunk, whether free, inuse, mmapped etc  */
+static void do_check_any_chunk(mstate m, mchunkptr p) {
+  assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
+  assert(ok_address(m, p));
+}
+
+/* Check properties of top chunk */
+static void do_check_top_chunk(mstate m, mchunkptr p) {
+  msegmentptr sp = segment_holding(m, (char*)p);
+  size_t  sz = chunksize(p);
+  assert(sp != 0);
+  assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
+  assert(ok_address(m, p));
+  assert(sz == m->topsize);
+  assert(sz > 0);
+  assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE);
+  assert(pinuse(p));
+  assert(!next_pinuse(p));
+}
+
+/* Check properties of (inuse) mmapped chunks */
+static void do_check_mmapped_chunk(mstate m, mchunkptr p) {
+  size_t  sz = chunksize(p);
+  size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD);
+  assert(is_mmapped(p));
+  assert(use_mmap(m));
+  assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
+  assert(ok_address(m, p));
+  assert(!is_small(sz));
+  assert((len & (mparams.page_size-SIZE_T_ONE)) == 0);
+  assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD);
+  assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0);
+}
+
+/* Check properties of inuse chunks */
+static void do_check_inuse_chunk(mstate m, mchunkptr p) {
+  do_check_any_chunk(m, p);
+  assert(cinuse(p));
+  assert(next_pinuse(p));
+  /* If not pinuse and not mmapped, previous chunk has OK offset */
+  assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p);
+  if (is_mmapped(p))
+    do_check_mmapped_chunk(m, p);
+}
+
+/* Check properties of free chunks */
+static void do_check_free_chunk(mstate m, mchunkptr p) {
+  size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT);
+  mchunkptr next = chunk_plus_offset(p, sz);
+  do_check_any_chunk(m, p);
+  assert(!cinuse(p));
+  assert(!next_pinuse(p));
+  assert (!is_mmapped(p));
+  if (p != m->dv && p != m->top) {
+    if (sz >= MIN_CHUNK_SIZE) {
+      assert((sz & CHUNK_ALIGN_MASK) == 0);
+      assert(is_aligned(chunk2mem(p)));
+      assert(next->prev_foot == sz);
+      assert(pinuse(p));
+      assert (next == m->top || cinuse(next));
+      assert(p->fd->bk == p);
+      assert(p->bk->fd == p);
+    }
+    else  /* markers are always of size SIZE_T_SIZE */
+      assert(sz == SIZE_T_SIZE);
+  }
+}
+
+/* Check properties of malloced chunks at the point they are malloced */
+static void do_check_malloced_chunk(mstate m, void* mem, size_t s) {
+  if (mem != 0) {
+    mchunkptr p = mem2chunk(mem);
+    size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT);
+    do_check_inuse_chunk(m, p);
+    assert((sz & CHUNK_ALIGN_MASK) == 0);
+    assert(sz >= MIN_CHUNK_SIZE);
+    assert(sz >= s);
+    /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */
+    assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE));
+  }
+}
+
+/* Check a tree and its subtrees.  */
+static void do_check_tree(mstate m, tchunkptr t) {
+  tchunkptr head = 0;
+  tchunkptr u = t;
+  bindex_t tindex = t->index;
+  size_t tsize = chunksize(t);
+  bindex_t idx;
+  compute_tree_index(tsize, idx);
+  assert(tindex == idx);
+  assert(tsize >= MIN_LARGE_SIZE);
+  assert(tsize >= minsize_for_tree_index(idx));
+  assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1))));
+
+  do { /* traverse through chain of same-sized nodes */
+    do_check_any_chunk(m, ((mchunkptr)u));
+    assert(u->index == tindex);
+    assert(chunksize(u) == tsize);
+    assert(!cinuse(u));
+    assert(!next_pinuse(u));
+    assert(u->fd->bk == u);
+    assert(u->bk->fd == u);
+    if (u->parent == 0) {
+      assert(u->child[0] == 0);
+      assert(u->child[1] == 0);
+    }
+    else {
+      assert(head == 0); /* only one node on chain has parent */
+      head = u;
+      assert(u->parent != u);
+      assert (u->parent->child[0] == u ||
+              u->parent->child[1] == u ||
+              *((tbinptr*)(u->parent)) == u);
+      if (u->child[0] != 0) {
+        assert(u->child[0]->parent == u);
+        assert(u->child[0] != u);
+        do_check_tree(m, u->child[0]);
+      }
+      if (u->child[1] != 0) {
+        assert(u->child[1]->parent == u);
+        assert(u->child[1] != u);
+        do_check_tree(m, u->child[1]);
+      }
+      if (u->child[0] != 0 && u->child[1] != 0) {
+        assert(chunksize(u->child[0]) < chunksize(u->child[1]));
+      }
+    }
+    u = u->fd;
+  } while (u != t);
+  assert(head != 0);
+}
+
+/*  Check all the chunks in a treebin.  */
+static void do_check_treebin(mstate m, bindex_t i) {
+  tbinptr* tb = treebin_at(m, i);
+  tchunkptr t = *tb;
+  int empty = (m->treemap & (1U << i)) == 0;
+  if (t == 0)
+    assert(empty);
+  if (!empty)
+    do_check_tree(m, t);
+}
+
+/*  Check all the chunks in a smallbin.  */
+static void do_check_smallbin(mstate m, bindex_t i) {
+  sbinptr b = smallbin_at(m, i);
+  mchunkptr p = b->bk;
+  unsigned int empty = (m->smallmap & (1U << i)) == 0;
+  if (p == b)
+    assert(empty);
+  if (!empty) {
+    for (; p != b; p = p->bk) {
+      size_t size = chunksize(p);
+      mchunkptr q;
+      /* each chunk claims to be free */
+      do_check_free_chunk(m, p);
+      /* chunk belongs in bin */
+      assert(small_index(size) == i);
+      assert(p->bk == b || chunksize(p->bk) == chunksize(p));
+      /* chunk is followed by an inuse chunk */
+      q = next_chunk(p);
+      if (q->head != FENCEPOST_HEAD)
+        do_check_inuse_chunk(m, q);
+    }
+  }
+}
+
+/* Find x in a bin. Used in other check functions. */
+static int bin_find(mstate m, mchunkptr x) {
+  size_t size = chunksize(x);
+  if (is_small(size)) {
+    bindex_t sidx = small_index(size);
+    sbinptr b = smallbin_at(m, sidx);
+    if (smallmap_is_marked(m, sidx)) {
+      mchunkptr p = b;
+      do {
+        if (p == x)
+          return 1;
+      } while ((p = p->fd) != b);
+    }
+  }
+  else {
+    bindex_t tidx;
+    compute_tree_index(size, tidx);
+    if (treemap_is_marked(m, tidx)) {
+      tchunkptr t = *treebin_at(m, tidx);
+      size_t sizebits = size << leftshift_for_tree_index(tidx);
+      while (t != 0 && chunksize(t) != size) {
+        t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
+        sizebits <<= 1;
+      }
+      if (t != 0) {
+        tchunkptr u = t;
+        do {
+          if (u == (tchunkptr)x)
+            return 1;
+        } while ((u = u->fd) != t);
+      }
+    }
+  }
+  return 0;
+}
+
+/* Traverse each chunk and check it; return total */
+static size_t traverse_and_check(mstate m) {
+  size_t sum = 0;
+  if (is_initialized(m)) {
+    msegmentptr s = &m->seg;
+    sum += m->topsize + TOP_FOOT_SIZE;
+    while (s != 0) {
+      mchunkptr q = align_as_chunk(s->base);
+      mchunkptr lastq = 0;
+      assert(pinuse(q));
+      while (segment_holds(s, q) &&
+             q != m->top && q->head != FENCEPOST_HEAD) {
+        sum += chunksize(q);
+        if (cinuse(q)) {
+          assert(!bin_find(m, q));
+          do_check_inuse_chunk(m, q);
+        }
+        else {
+          assert(q == m->dv || bin_find(m, q));
+          assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */
+          do_check_free_chunk(m, q);
+        }
+        lastq = q;
+        q = next_chunk(q);
+      }
+      s = s->next;
+    }
+  }
+  return sum;
+}
+
+/* Check all properties of malloc_state. */
+static void do_check_malloc_state(mstate m) {
+  bindex_t i;
+  size_t total;
+  /* check bins */
+  for (i = 0; i < NSMALLBINS; ++i)
+    do_check_smallbin(m, i);
+  for (i = 0; i < NTREEBINS; ++i)
+    do_check_treebin(m, i);
+
+  if (m->dvsize != 0) { /* check dv chunk */
+    do_check_any_chunk(m, m->dv);
+    assert(m->dvsize == chunksize(m->dv));
+    assert(m->dvsize >= MIN_CHUNK_SIZE);
+    assert(bin_find(m, m->dv) == 0);
+  }
+
+  if (m->top != 0) {   /* check top chunk */
+    do_check_top_chunk(m, m->top);
+    assert(m->topsize == chunksize(m->top));
+    assert(m->topsize > 0);
+    assert(bin_find(m, m->top) == 0);
+  }
+
+  total = traverse_and_check(m);
+  assert(total <= m->footprint);
+  assert(m->footprint <= m->max_footprint);
+}
+#endif /* DEBUG */
+
+/* ----------------------------- statistics ------------------------------ */
+
+#if !NO_MALLINFO
+static struct mallinfo internal_mallinfo(mstate m) {
+  struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+  if (!PREACTION(m)) {
+    check_malloc_state(m);
+    if (is_initialized(m)) {
+      size_t nfree = SIZE_T_ONE; /* top always free */
+      size_t mfree = m->topsize + TOP_FOOT_SIZE;
+      size_t sum = mfree;
+      msegmentptr s = &m->seg;
+      while (s != 0) {
+        mchunkptr q = align_as_chunk(s->base);
+        while (segment_holds(s, q) &&
+               q != m->top && q->head != FENCEPOST_HEAD) {
+          size_t sz = chunksize(q);
+          sum += sz;
+          if (!cinuse(q)) {
+            mfree += sz;
+            ++nfree;
+          }
+          q = next_chunk(q);
+        }
+        s = s->next;
+      }
+
+      nm.arena    = sum;
+      nm.ordblks  = nfree;
+      nm.hblkhd   = m->footprint - sum;
+      nm.usmblks  = m->max_footprint;
+      nm.uordblks = m->footprint - mfree;
+      nm.fordblks = mfree;
+      nm.keepcost = m->topsize;
+    }
+
+    POSTACTION(m);
+  }
+  return nm;
+}
+#endif /* !NO_MALLINFO */
+
+static void internal_malloc_stats(mstate m) {
+  if (!PREACTION(m)) {
+    size_t maxfp = 0;
+    size_t fp = 0;
+    size_t used = 0;
+    check_malloc_state(m);
+    if (is_initialized(m)) {
+      msegmentptr s = &m->seg;
+      maxfp = m->max_footprint;
+      fp = m->footprint;
+      used = fp - (m->topsize + TOP_FOOT_SIZE);
+
+      while (s != 0) {
+        mchunkptr q = align_as_chunk(s->base);
+        while (segment_holds(s, q) &&
+               q != m->top && q->head != FENCEPOST_HEAD) {
+          if (!cinuse(q))
+            used -= chunksize(q);
+          q = next_chunk(q);
+        }
+        s = s->next;
+      }
+    }
+
+    fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp));
+    fprintf(stderr, "system bytes     = %10lu\n", (unsigned long)(fp));
+    fprintf(stderr, "in use bytes     = %10lu\n", (unsigned long)(used));
+
+    POSTACTION(m);
+  }
+}
+
+/* ----------------------- Operations on smallbins ----------------------- */
+
+/*
+  Various forms of linking and unlinking are defined as macros.  Even
+  the ones for trees, which are very long but have very short typical
+  paths.  This is ugly but reduces reliance on inlining support of
+  compilers.
+*/
+
+/* Link a free chunk into a smallbin  */
+#define insert_small_chunk(M, P, S) {\
+  bindex_t I  = small_index(S);\
+  mchunkptr B = smallbin_at(M, I);\
+  mchunkptr F = B;\
+  assert(S >= MIN_CHUNK_SIZE);\
+  if (!smallmap_is_marked(M, I))\
+    mark_smallmap(M, I);\
+  else if (RTCHECK(ok_address(M, B->fd)))\
+    F = B->fd;\
+  else {\
+    CORRUPTION_ERROR_ACTION(M);\
+  }\
+  B->fd = P;\
+  F->bk = P;\
+  P->fd = F;\
+  P->bk = B;\
+}
+
+/* Unlink a chunk from a smallbin  */
+#define unlink_small_chunk(M, P, S) {\
+  mchunkptr F = P->fd;\
+  mchunkptr B = P->bk;\
+  bindex_t I = small_index(S);\
+  assert(P != B);\
+  assert(P != F);\
+  assert(chunksize(P) == small_index2size(I));\
+  if (F == B)\
+    clear_smallmap(M, I);\
+  else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\
+                   (B == smallbin_at(M,I) || ok_address(M, B)))) {\
+    F->bk = B;\
+    B->fd = F;\
+  }\
+  else {\
+    CORRUPTION_ERROR_ACTION(M);\
+  }\
+}
+
+/* Unlink the first chunk from a smallbin */
+#define unlink_first_small_chunk(M, B, P, I) {\
+  mchunkptr F = P->fd;\
+  assert(P != B);\
+  assert(P != F);\
+  assert(chunksize(P) == small_index2size(I));\
+  if (B == F)\
+    clear_smallmap(M, I);\
+  else if (RTCHECK(ok_address(M, F))) {\
+    B->fd = F;\
+    F->bk = B;\
+  }\
+  else {\
+    CORRUPTION_ERROR_ACTION(M);\
+  }\
+}
+
+/* Replace dv node, binning the old one */
+/* Used only when dvsize known to be small */
+#define replace_dv(M, P, S) {\
+  size_t DVS = M->dvsize;\
+  if (DVS != 0) {\
+    mchunkptr DV = M->dv;\
+    assert(is_small(DVS));\
+    insert_small_chunk(M, DV, DVS);\
+  }\
+  M->dvsize = S;\
+  M->dv = P;\
+}
+
+/* ------------------------- Operations on trees ------------------------- */
+
+/* Insert chunk into tree */
+#define insert_large_chunk(M, X, S) {\
+  tbinptr* H;\
+  bindex_t I;\
+  compute_tree_index(S, I);\
+  H = treebin_at(M, I);\
+  X->index = I;\
+  X->child[0] = X->child[1] = 0;\
+  if (!treemap_is_marked(M, I)) {\
+    mark_treemap(M, I);\
+    *H = X;\
+    X->parent = (tchunkptr)H;\
+    X->fd = X->bk = X;\
+  }\
+  else {\
+    tchunkptr T = *H;\
+    size_t K = S << leftshift_for_tree_index(I);\
+    for (;;) {\
+      if (chunksize(T) != S) {\
+        tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\
+        K <<= 1;\
+        if (*C != 0)\
+          T = *C;\
+        else if (RTCHECK(ok_address(M, C))) {\
+          *C = X;\
+          X->parent = T;\
+          X->fd = X->bk = X;\
+          break;\
+        }\
+        else {\
+          CORRUPTION_ERROR_ACTION(M);\
+          break;\
+        }\
+      }\
+      else {\
+        tchunkptr F = T->fd;\
+        if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\
+          T->fd = F->bk = X;\
+          X->fd = F;\
+          X->bk = T;\
+          X->parent = 0;\
+          break;\
+        }\
+        else {\
+          CORRUPTION_ERROR_ACTION(M);\
+          break;\
+        }\
+      }\
+    }\
+  }\
+}
+
+/*
+  Unlink steps:
+
+  1. If x is a chained node, unlink it from its same-sized fd/bk links
+     and choose its bk node as its replacement.
+  2. If x was the last node of its size, but not a leaf node, it must
+     be replaced with a leaf node (not merely one with an open left or
+     right), to make sure that lefts and rights of descendents
+     correspond properly to bit masks.  We use the rightmost descendent
+     of x.  We could use any other leaf, but this is easy to locate and
+     tends to counteract removal of leftmosts elsewhere, and so keeps
+     paths shorter than minimally guaranteed.  This doesn't loop much
+     because on average a node in a tree is near the bottom.
+  3. If x is the base of a chain (i.e., has parent links) relink
+     x's parent and children to x's replacement (or null if none).
+*/
+
+#define unlink_large_chunk(M, X) {\
+  tchunkptr XP = X->parent;\
+  tchunkptr R;\
+  if (X->bk != X) {\
+    tchunkptr F = X->fd;\
+    R = X->bk;\
+    if (RTCHECK(ok_address(M, F))) {\
+      F->bk = R;\
+      R->fd = F;\
+    }\
+    else {\
+      CORRUPTION_ERROR_ACTION(M);\
+    }\
+  }\
+  else {\
+    tchunkptr* RP;\
+    if (((R = *(RP = &(X->child[1]))) != 0) ||\
+        ((R = *(RP = &(X->child[0]))) != 0)) {\
+      tchunkptr* CP;\
+      while ((*(CP = &(R->child[1])) != 0) ||\
+             (*(CP = &(R->child[0])) != 0)) {\
+        R = *(RP = CP);\
+      }\
+      if (RTCHECK(ok_address(M, RP)))\
+        *RP = 0;\
+      else {\
+        CORRUPTION_ERROR_ACTION(M);\
+      }\
+    }\
+  }\
+  if (XP != 0) {\
+    tbinptr* H = treebin_at(M, X->index);\
+    if (X == *H) {\
+      if ((*H = R) == 0) \
+        clear_treemap(M, X->index);\
+    }\
+    else if (RTCHECK(ok_address(M, XP))) {\
+      if (XP->child[0] == X) \
+        XP->child[0] = R;\
+      else \
+        XP->child[1] = R;\
+    }\
+    else\
+      CORRUPTION_ERROR_ACTION(M);\
+    if (R != 0) {\
+      if (RTCHECK(ok_address(M, R))) {\
+        tchunkptr C0, C1;\
+        R->parent = XP;\
+        if ((C0 = X->child[0]) != 0) {\
+          if (RTCHECK(ok_address(M, C0))) {\
+            R->child[0] = C0;\
+            C0->parent = R;\
+          }\
+          else\
+            CORRUPTION_ERROR_ACTION(M);\
+        }\
+        if ((C1 = X->child[1]) != 0) {\
+          if (RTCHECK(ok_address(M, C1))) {\
+            R->child[1] = C1;\
+            C1->parent = R;\
+          }\
+          else\
+            CORRUPTION_ERROR_ACTION(M);\
+        }\
+      }\
+      else\
+        CORRUPTION_ERROR_ACTION(M);\
+    }\
+  }\
+}
+
+/* Relays to large vs small bin operations */
+
+#define insert_chunk(M, P, S)\
+  if (is_small(S)) insert_small_chunk(M, P, S)\
+  else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); }
+
+#define unlink_chunk(M, P, S)\
+  if (is_small(S)) unlink_small_chunk(M, P, S)\
+  else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); }
+
+
+/* Relays to internal calls to malloc/free from realloc, memalign etc */
+
+#if ONLY_MSPACES
+#define internal_malloc(m, b) mspace_malloc(m, b)
+#define internal_free(m, mem) mspace_free(m,mem);
+#else /* ONLY_MSPACES */
+#if MSPACES
+#define internal_malloc(m, b)\
+   (m == gm)? dlmalloc(b) : mspace_malloc(m, b)
+#define internal_free(m, mem)\
+   if (m == gm) dlfree(mem); else mspace_free(m,mem);
+#else /* MSPACES */
+#define internal_malloc(m, b) dlmalloc(b)
+#define internal_free(m, mem) dlfree(mem)
+#endif /* MSPACES */
+#endif /* ONLY_MSPACES */
+
+/* -----------------------  Direct-mmapping chunks ----------------------- */
+
+/*
+  Directly mmapped chunks are set up with an offset to the start of
+  the mmapped region stored in the prev_foot field of the chunk. This
+  allows reconstruction of the required argument to MUNMAP when freed,
+  and also allows adjustment of the returned chunk to meet alignment
+  requirements (especially in memalign).  There is also enough space
+  allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain
+  the PINUSE bit so frees can be checked.
+*/
+
+/* Malloc using mmap */
+static void* mmap_alloc(mstate m, size_t nb) {
+  size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
+  if (mmsize > nb) {     /* Check for wrap around 0 */
+    char* mm = (char*)(DIRECT_MMAP(mmsize));
+    if (mm != CMFAIL) {
+      size_t offset = align_offset(chunk2mem(mm));
+      size_t psize = mmsize - offset - MMAP_FOOT_PAD;
+      mchunkptr p = (mchunkptr)(mm + offset);
+      p->prev_foot = offset | IS_MMAPPED_BIT;
+      (p)->head = (psize|CINUSE_BIT);
+      mark_inuse_foot(m, p, psize);
+      chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD;
+      chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0;
+
+      if (mm < m->least_addr)
+        m->least_addr = mm;
+      if ((m->footprint += mmsize) > m->max_footprint)
+        m->max_footprint = m->footprint;
+      assert(is_aligned(chunk2mem(p)));
+      check_mmapped_chunk(m, p);
+      return chunk2mem(p);
+    }
+  }
+  return 0;
+}
+
+/* Realloc using mmap */
+static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) {
+  size_t oldsize = chunksize(oldp);
+  if (is_small(nb)) /* Can't shrink mmap regions below small size */
+    return 0;
+  /* Keep old chunk if big enough but not too big */
+  if (oldsize >= nb + SIZE_T_SIZE &&
+      (oldsize - nb) <= (mparams.granularity << 1))
+    return oldp;
+  else {
+    size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT;
+    size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD;
+    size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES +
+                                         CHUNK_ALIGN_MASK);
+    char* cp = (char*)CALL_MREMAP((char*)oldp - offset,
+                                  oldmmsize, newmmsize, 1);
+    if (cp != CMFAIL) {
+      mchunkptr newp = (mchunkptr)(cp + offset);
+      size_t psize = newmmsize - offset - MMAP_FOOT_PAD;
+      newp->head = (psize|CINUSE_BIT);
+      mark_inuse_foot(m, newp, psize);
+      chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD;
+      chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0;
+
+      if (cp < m->least_addr)
+        m->least_addr = cp;
+      if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint)
+        m->max_footprint = m->footprint;
+      check_mmapped_chunk(m, newp);
+      return newp;
+    }
+  }
+  return 0;
+}
+
+/* -------------------------- mspace management -------------------------- */
+
+/* Initialize top chunk and its size */
+static void init_top(mstate m, mchunkptr p, size_t psize) {
+  /* Ensure alignment */
+  size_t offset = align_offset(chunk2mem(p));
+  p = (mchunkptr)((char*)p + offset);
+  psize -= offset;
+
+  m->top = p;
+  m->topsize = psize;
+  p->head = psize | PINUSE_BIT;
+  /* set size of fake trailing chunk holding overhead space only once */
+  chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE;
+  m->trim_check = mparams.trim_threshold; /* reset on each update */
+}
+
+/* Initialize bins for a new mstate that is otherwise zeroed out */
+static void init_bins(mstate m) {
+  /* Establish circular links for smallbins */
+  bindex_t i;
+  for (i = 0; i < NSMALLBINS; ++i) {
+    sbinptr bin = smallbin_at(m,i);
+    bin->fd = bin->bk = bin;
+  }
+}
+
+#if PROCEED_ON_ERROR
+
+/* default corruption action */
+static void reset_on_error(mstate m) {
+  int i;
+  ++malloc_corruption_error_count;
+  /* Reinitialize fields to forget about all memory */
+  m->smallbins = m->treebins = 0;
+  m->dvsize = m->topsize = 0;
+  m->seg.base = 0;
+  m->seg.size = 0;
+  m->seg.next = 0;
+  m->top = m->dv = 0;
+  for (i = 0; i < NTREEBINS; ++i)
+    *treebin_at(m, i) = 0;
+  init_bins(m);
+}
+#endif /* PROCEED_ON_ERROR */
+
+/* Allocate chunk and prepend remainder with chunk in successor base. */
+static void* prepend_alloc(mstate m, char* newbase, char* oldbase,
+                           size_t nb) {
+  mchunkptr p = align_as_chunk(newbase);
+  mchunkptr oldfirst = align_as_chunk(oldbase);
+  size_t psize = (char*)oldfirst - (char*)p;
+  mchunkptr q = chunk_plus_offset(p, nb);
+  size_t qsize = psize - nb;
+  set_size_and_pinuse_of_inuse_chunk(m, p, nb);
+
+  assert((char*)oldfirst > (char*)q);
+  assert(pinuse(oldfirst));
+  assert(qsize >= MIN_CHUNK_SIZE);
+
+  /* consolidate remainder with first chunk of old base */
+  if (oldfirst == m->top) {
+    size_t tsize = m->topsize += qsize;
+    m->top = q;
+    q->head = tsize | PINUSE_BIT;
+    check_top_chunk(m, q);
+  }
+  else if (oldfirst == m->dv) {
+    size_t dsize = m->dvsize += qsize;
+    m->dv = q;
+    set_size_and_pinuse_of_free_chunk(q, dsize);
+  }
+  else {
+    if (!cinuse(oldfirst)) {
+      size_t nsize = chunksize(oldfirst);
+      unlink_chunk(m, oldfirst, nsize);
+      oldfirst = chunk_plus_offset(oldfirst, nsize);
+      qsize += nsize;
+    }
+    set_free_with_pinuse(q, qsize, oldfirst);
+    insert_chunk(m, q, qsize);
+    check_free_chunk(m, q);
+  }
+
+  check_malloced_chunk(m, chunk2mem(p), nb);
+  return chunk2mem(p);
+}
+
+
+/* Add a segment to hold a new noncontiguous region */
+static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
+  /* Determine locations and sizes of segment, fenceposts, old top */
+  char* old_top = (char*)m->top;
+  msegmentptr oldsp = segment_holding(m, old_top);
+  char* old_end = oldsp->base + oldsp->size;
+  size_t ssize = pad_request(sizeof(struct malloc_segment));
+  char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
+  size_t offset = align_offset(chunk2mem(rawsp));
+  char* asp = rawsp + offset;
+  char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp;
+  mchunkptr sp = (mchunkptr)csp;
+  msegmentptr ss = (msegmentptr)(chunk2mem(sp));
+  mchunkptr tnext = chunk_plus_offset(sp, ssize);
+  mchunkptr p = tnext;
+  int nfences = 0;
+
+  /* reset top to new space */
+  init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
+
+  /* Set up segment record */
+  assert(is_aligned(ss));
+  set_size_and_pinuse_of_inuse_chunk(m, sp, ssize);
+  *ss = m->seg; /* Push current record */
+  m->seg.base = tbase;
+  m->seg.size = tsize;
+  m->seg.sflags = mmapped;
+  m->seg.next = ss;
+
+  /* Insert trailing fenceposts */
+  for (;;) {
+    mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE);
+    p->head = FENCEPOST_HEAD;
+    ++nfences;
+    if ((char*)(&(nextp->head)) < old_end)
+      p = nextp;
+    else
+      break;
+  }
+  assert(nfences >= 2);
+
+  /* Insert the rest of old top into a bin as an ordinary free chunk */
+  if (csp != old_top) {
+    mchunkptr q = (mchunkptr)old_top;
+    size_t psize = csp - old_top;
+    mchunkptr tn = chunk_plus_offset(q, psize);
+    set_free_with_pinuse(q, psize, tn);
+    insert_chunk(m, q, psize);
+  }
+
+  check_top_chunk(m, m->top);
+}
+
+/* -------------------------- System allocation -------------------------- */
+
+/* Get memory from system using MORECORE or MMAP */
+static void* sys_alloc(mstate m, size_t nb) {
+  char* tbase = CMFAIL;
+  size_t tsize = 0;
+  flag_t mmap_flag = 0;
+
+  init_mparams();
+
+  /* Directly map large chunks */
+  if (use_mmap(m) && nb >= mparams.mmap_threshold) {
+    void* mem = mmap_alloc(m, nb);
+    if (mem != 0)
+      return mem;
+  }
+
+  /*
+    Try getting memory in any of three ways (in most-preferred to
+    least-preferred order):
+    1. A call to MORECORE that can normally contiguously extend memory.
+       (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or
+       or main space is mmapped or a previous contiguous call failed)
+    2. A call to MMAP new space (disabled if not HAVE_MMAP).
+       Note that under the default settings, if MORECORE is unable to
+       fulfill a request, and HAVE_MMAP is true, then mmap is
+       used as a noncontiguous system allocator. This is a useful backup
+       strategy for systems with holes in address spaces -- in this case
+       sbrk cannot contiguously expand the heap, but mmap may be able to
+       find space.
+    3. A call to MORECORE that cannot usually contiguously extend memory.
+       (disabled if not HAVE_MORECORE)
+  */
+
+  if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) {
+    char* br = CMFAIL;
+    msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top);
+    size_t asize = 0;
+    ACQUIRE_MORECORE_LOCK();
+
+    if (ss == 0) {  /* First time through or recovery */
+      char* base = (char*)CALL_MORECORE(0);
+      if (base != CMFAIL) {
+        asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE);
+        /* Adjust to end on a page boundary */
+        if (!is_page_aligned(base))
+          asize += (page_align((size_t)base) - (size_t)base);
+        /* Can't call MORECORE if size is negative when treated as signed */
+        if (asize < HALF_MAX_SIZE_T &&
+            (br = (char*)(CALL_MORECORE(asize))) == base) {
+          tbase = base;
+          tsize = asize;
+        }
+      }
+    }
+    else {
+      /* Subtract out existing available top space from MORECORE request. */
+      asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE);
+      /* Use mem here only if it did continuously extend old space */
+      if (asize < HALF_MAX_SIZE_T &&
+          (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) {
+        tbase = br;
+        tsize = asize;
+      }
+    }
+
+    if (tbase == CMFAIL) {    /* Cope with partial failure */
+      if (br != CMFAIL) {    /* Try to use/extend the space we did get */
+        if (asize < HALF_MAX_SIZE_T &&
+            asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) {
+          size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize);
+          if (esize < HALF_MAX_SIZE_T) {
+            char* end = (char*)CALL_MORECORE(esize);
+            if (end != CMFAIL)
+              asize += esize;
+            else {            /* Can't use; try to release */
+              CALL_MORECORE(-asize);
+              br = CMFAIL;
+            }
+          }
+        }
+      }
+      if (br != CMFAIL) {    /* Use the space we did get */
+        tbase = br;
+        tsize = asize;
+      }
+      else
+        disable_contiguous(m); /* Don't try contiguous path in the future */
+    }
+
+    RELEASE_MORECORE_LOCK();
+  }
+
+  if (HAVE_MMAP && tbase == CMFAIL) {  /* Try MMAP */
+    size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE;
+    size_t rsize = granularity_align(req);
+    if (rsize > nb) { /* Fail if wraps around zero */
+      char* mp = (char*)(CALL_MMAP(rsize));
+      if (mp != CMFAIL) {
+        tbase = mp;
+        tsize = rsize;
+        mmap_flag = IS_MMAPPED_BIT;
+      }
+    }
+  }
+
+  if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */
+    size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE);
+    if (asize < HALF_MAX_SIZE_T) {
+      char* br = CMFAIL;
+      char* end = CMFAIL;
+      ACQUIRE_MORECORE_LOCK();
+      br = (char*)(CALL_MORECORE(asize));
+      end = (char*)(CALL_MORECORE(0));
+      RELEASE_MORECORE_LOCK();
+      if (br != CMFAIL && end != CMFAIL && br < end) {
+        size_t ssize = end - br;
+        if (ssize > nb + TOP_FOOT_SIZE) {
+          tbase = br;
+          tsize = ssize;
+        }
+      }
+    }
+  }
+
+  if (tbase != CMFAIL) {
+
+    if ((m->footprint += tsize) > m->max_footprint)
+      m->max_footprint = m->footprint;
+
+    if (!is_initialized(m)) { /* first-time initialization */
+      m->seg.base = m->least_addr = tbase;
+      m->seg.size = tsize;
+      m->seg.sflags = mmap_flag;
+      m->magic = mparams.magic;
+      init_bins(m);
+      if (is_global(m)) 
+        init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
+      else {
+        /* Offset top by embedded malloc_state */
+        mchunkptr mn = next_chunk(mem2chunk(m));
+        init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE);
+      }
+    }
+
+    else {
+      /* Try to merge with an existing segment */
+      msegmentptr sp = &m->seg;
+      while (sp != 0 && tbase != sp->base + sp->size)
+        sp = sp->next;
+      if (sp != 0 &&
+          !is_extern_segment(sp) &&
+          (sp->sflags & IS_MMAPPED_BIT) == mmap_flag &&
+          segment_holds(sp, m->top)) { /* append */
+        sp->size += tsize;
+        init_top(m, m->top, m->topsize + tsize);
+      }
+      else {
+        if (tbase < m->least_addr)
+          m->least_addr = tbase;
+        sp = &m->seg;
+        while (sp != 0 && sp->base != tbase + tsize)
+          sp = sp->next;
+        if (sp != 0 &&
+            !is_extern_segment(sp) &&
+            (sp->sflags & IS_MMAPPED_BIT) == mmap_flag) {
+          char* oldbase = sp->base;
+          sp->base = tbase;
+          sp->size += tsize;
+          return prepend_alloc(m, tbase, oldbase, nb);
+        }
+        else
+          add_segment(m, tbase, tsize, mmap_flag);
+      }
+    }
+
+    if (nb < m->topsize) { /* Allocate from new or extended top space */
+      size_t rsize = m->topsize -= nb;
+      mchunkptr p = m->top;
+      mchunkptr r = m->top = chunk_plus_offset(p, nb);
+      r->head = rsize | PINUSE_BIT;
+      set_size_and_pinuse_of_inuse_chunk(m, p, nb);
+      check_top_chunk(m, m->top);
+      check_malloced_chunk(m, chunk2mem(p), nb);
+      return chunk2mem(p);
+    }
+  }
+
+  MALLOC_FAILURE_ACTION;
+  return 0;
+}
+
+/* -----------------------  system deallocation -------------------------- */
+
+/* Unmap and unlink any mmapped segments that don't contain used chunks */
+static size_t release_unused_segments(mstate m) {
+  size_t released = 0;
+  msegmentptr pred = &m->seg;
+  msegmentptr sp = pred->next;
+  while (sp != 0) {
+    char* base = sp->base;
+    size_t size = sp->size;
+    msegmentptr next = sp->next;
+    if (is_mmapped_segment(sp) && !is_extern_segment(sp)) {
+      mchunkptr p = align_as_chunk(base);
+      size_t psize = chunksize(p);
+      /* Can unmap if first chunk holds entire segment and not pinned */
+      if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) {
+        tchunkptr tp = (tchunkptr)p;
+        assert(segment_holds(sp, (char*)sp));
+        if (p == m->dv) {
+          m->dv = 0;
+          m->dvsize = 0;
+        }
+        else {
+          unlink_large_chunk(m, tp);
+        }
+        if (CALL_MUNMAP(base, size) == 0) {
+          released += size;
+          m->footprint -= size;
+          /* unlink obsoleted record */
+          sp = pred;
+          sp->next = next;
+        }
+        else { /* back out if cannot unmap */
+          insert_large_chunk(m, tp, psize);
+        }
+      }
+    }
+    pred = sp;
+    sp = next;
+  }
+  return released;
+}
+
+static int sys_trim(mstate m, size_t pad) {
+  size_t released = 0;
+  if (pad < MAX_REQUEST && is_initialized(m)) {
+    pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */
+
+    if (m->topsize > pad) {
+      /* Shrink top space in granularity-size units, keeping at least one */
+      size_t unit = mparams.granularity;
+      size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit -
+                      SIZE_T_ONE) * unit;
+      msegmentptr sp = segment_holding(m, (char*)m->top);
+
+      if (!is_extern_segment(sp)) {
+        if (is_mmapped_segment(sp)) {
+          if (HAVE_MMAP &&
+              sp->size >= extra &&
+              !has_segment_link(m, sp)) { /* can't shrink if pinned */
+            /* Prefer mremap, fall back to munmap */
+            if ((CALL_MREMAP(sp->base, sp->size, sp->size - extra, 0) != MFAIL) ||
+                (CALL_MUNMAP(sp->base + sp->size - extra, extra) == 0)) {
+              released = extra;
+            }
+          }
+        }
+        else if (HAVE_MORECORE) {
+          if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */
+            extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit;
+          ACQUIRE_MORECORE_LOCK();
+          {
+            /* Make sure end of memory is where we last set it. */
+            char* old_br = (char*)(CALL_MORECORE(0));
+            if (old_br == sp->base + sp->size) {
+              char* rel_br = (char*)(CALL_MORECORE(-extra));
+              char* new_br = (char*)(CALL_MORECORE(0));
+              if (rel_br != CMFAIL && new_br < old_br)
+                released = old_br - new_br;
+            }
+          }
+          RELEASE_MORECORE_LOCK();
+        }
+      }
+
+      if (released != 0) {
+        sp->size -= released;
+        m->footprint -= released;
+        init_top(m, m->top, m->topsize - released);
+        check_top_chunk(m, m->top);
+      }
+    }
+
+    /* Unmap any unused mmapped segments */
+    if (HAVE_MMAP) 
+      released += release_unused_segments(m);
+
+    /* On failure, disable autotrim to avoid repeated failed future calls */
+    if (released == 0)
+      m->trim_check = MAX_SIZE_T;
+  }
+
+  return (released != 0)? 1 : 0;
+}
+
+/* ---------------------------- malloc support --------------------------- */
+
+/* allocate a large request from the best fitting chunk in a treebin */
+static void* tmalloc_large(mstate m, size_t nb) {
+  tchunkptr v = 0;
+  size_t rsize = -nb; /* Unsigned negation */
+  tchunkptr t;
+  bindex_t idx;
+  compute_tree_index(nb, idx);
+
+  if ((t = *treebin_at(m, idx)) != 0) {
+    /* Traverse tree for this bin looking for node with size == nb */
+    size_t sizebits = nb << leftshift_for_tree_index(idx);
+    tchunkptr rst = 0;  /* The deepest untaken right subtree */
+    for (;;) {
+      tchunkptr rt;
+      size_t trem = chunksize(t) - nb;
+      if (trem < rsize) {
+        v = t;
+        if ((rsize = trem) == 0)
+          break;
+      }
+      rt = t->child[1];
+      t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
+      if (rt != 0 && rt != t)
+        rst = rt;
+      if (t == 0) {
+        t = rst; /* set t to least subtree holding sizes > nb */
+        break;
+      }
+      sizebits <<= 1;
+    }
+  }
+
+  if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */
+    binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap;
+    if (leftbits != 0) {
+      bindex_t i;
+      binmap_t leastbit = least_bit(leftbits);
+      compute_bit2idx(leastbit, i);
+      t = *treebin_at(m, i);
+    }
+  }
+
+  while (t != 0) { /* find smallest of tree or subtree */
+    size_t trem = chunksize(t) - nb;
+    if (trem < rsize) {
+      rsize = trem;
+      v = t;
+    }
+    t = leftmost_child(t);
+  }
+
+  /*  If dv is a better fit, return 0 so malloc will use it */
+  if (v != 0 && rsize < (size_t)(m->dvsize - nb)) {
+    if (RTCHECK(ok_address(m, v))) { /* split */
+      mchunkptr r = chunk_plus_offset(v, nb);
+      assert(chunksize(v) == rsize + nb);
+      if (RTCHECK(ok_next(v, r))) {
+        unlink_large_chunk(m, v);
+        if (rsize < MIN_CHUNK_SIZE)
+          set_inuse_and_pinuse(m, v, (rsize + nb));
+        else {
+          set_size_and_pinuse_of_inuse_chunk(m, v, nb);
+          set_size_and_pinuse_of_free_chunk(r, rsize);
+          insert_chunk(m, r, rsize);
+        }
+        return chunk2mem(v);
+      }
+    }
+    CORRUPTION_ERROR_ACTION(m);
+  }
+  return 0;
+}
+
+/* allocate a small request from the best fitting chunk in a treebin */
+static void* tmalloc_small(mstate m, size_t nb) {
+  tchunkptr t, v;
+  size_t rsize;
+  bindex_t i;
+  binmap_t leastbit = least_bit(m->treemap);
+  compute_bit2idx(leastbit, i);
+
+  v = t = *treebin_at(m, i);
+  rsize = chunksize(t) - nb;
+
+  while ((t = leftmost_child(t)) != 0) {
+    size_t trem = chunksize(t) - nb;
+    if (trem < rsize) {
+      rsize = trem;
+      v = t;
+    }
+  }
+
+  if (RTCHECK(ok_address(m, v))) {
+    mchunkptr r = chunk_plus_offset(v, nb);
+    assert(chunksize(v) == rsize + nb);
+    if (RTCHECK(ok_next(v, r))) {
+      unlink_large_chunk(m, v);
+      if (rsize < MIN_CHUNK_SIZE)
+        set_inuse_and_pinuse(m, v, (rsize + nb));
+      else {
+        set_size_and_pinuse_of_inuse_chunk(m, v, nb);
+        set_size_and_pinuse_of_free_chunk(r, rsize);
+        replace_dv(m, r, rsize);
+      }
+      return chunk2mem(v);
+    }
+  }
+
+  CORRUPTION_ERROR_ACTION(m);
+  return 0;
+}
+
+/* --------------------------- realloc support --------------------------- */
+
+static void* internal_realloc(mstate m, void* oldmem, size_t bytes) {
+  if (bytes >= MAX_REQUEST) {
+    MALLOC_FAILURE_ACTION;
+    return 0;
+  }
+  if (!PREACTION(m)) {
+    mchunkptr oldp = mem2chunk(oldmem);
+    size_t oldsize = chunksize(oldp);
+    mchunkptr next = chunk_plus_offset(oldp, oldsize);
+    mchunkptr newp = 0;
+    void* extra = 0;
+
+    /* Try to either shrink or extend into top. Else malloc-copy-free */
+
+    if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) &&
+                ok_next(oldp, next) && ok_pinuse(next))) {
+      size_t nb = request2size(bytes);
+      if (is_mmapped(oldp))
+        newp = mmap_resize(m, oldp, nb);
+      else if (oldsize >= nb) { /* already big enough */
+        size_t rsize = oldsize - nb;
+        newp = oldp;
+        if (rsize >= MIN_CHUNK_SIZE) {
+          mchunkptr remainder = chunk_plus_offset(newp, nb);
+          set_inuse(m, newp, nb);
+          set_inuse(m, remainder, rsize);
+          extra = chunk2mem(remainder);
+        }
+      }
+      else if (next == m->top && oldsize + m->topsize > nb) {
+        /* Expand into top */
+        size_t newsize = oldsize + m->topsize;
+        size_t newtopsize = newsize - nb;
+        mchunkptr newtop = chunk_plus_offset(oldp, nb);
+        set_inuse(m, oldp, nb);
+        newtop->head = newtopsize |PINUSE_BIT;
+        m->top = newtop;
+        m->topsize = newtopsize;
+        newp = oldp;
+      }
+    }
+    else {
+      USAGE_ERROR_ACTION(m, oldmem);
+      POSTACTION(m);
+      return 0;
+    }
+
+    POSTACTION(m);
+
+    if (newp != 0) {
+      if (extra != 0) {
+        internal_free(m, extra);
+      }
+      check_inuse_chunk(m, newp);
+      return chunk2mem(newp);
+    }
+    else {
+      void* newmem = internal_malloc(m, bytes);
+      if (newmem != 0) {
+        size_t oc = oldsize - overhead_for(oldp);
+        memcpy(newmem, oldmem, (oc < bytes)? oc : bytes);
+        internal_free(m, oldmem);
+      }
+      return newmem;
+    }
+  }
+  return 0;
+}
+
+/* --------------------------- memalign support -------------------------- */
+
+static void* internal_memalign(mstate m, size_t alignment, size_t bytes) {
+  if (alignment <= MALLOC_ALIGNMENT)    /* Can just use malloc */
+    return internal_malloc(m, bytes);
+  if (alignment <  MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */
+    alignment = MIN_CHUNK_SIZE;
+  if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */
+    size_t a = MALLOC_ALIGNMENT << 1;
+    while (a < alignment) a <<= 1;
+    alignment = a;
+  }
+  
+  if (bytes >= MAX_REQUEST - alignment) {
+    if (m != 0)  { /* Test isn't needed but avoids compiler warning */
+      MALLOC_FAILURE_ACTION;
+    }
+  }
+  else {
+    size_t nb = request2size(bytes);
+    size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD;
+    char* mem = (char*)internal_malloc(m, req);
+    if (mem != 0) {
+      void* leader = 0;
+      void* trailer = 0;
+      mchunkptr p = mem2chunk(mem);
+
+      if (PREACTION(m)) return 0;
+      if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */
+        /*
+          Find an aligned spot inside chunk.  Since we need to give
+          back leading space in a chunk of at least MIN_CHUNK_SIZE, if
+          the first calculation places us at a spot with less than
+          MIN_CHUNK_SIZE leader, we can move to the next aligned spot.
+          We've allocated enough total room so that this is always
+          possible.
+        */
+        char* br = (char*)mem2chunk((size_t)(((size_t)(mem +
+                                                       alignment -
+                                                       SIZE_T_ONE)) &
+                                             -alignment));
+        char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)?
+          br : br+alignment;
+        mchunkptr newp = (mchunkptr)pos;
+        size_t leadsize = pos - (char*)(p);
+        size_t newsize = chunksize(p) - leadsize;
+
+        if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */
+          newp->prev_foot = p->prev_foot + leadsize;
+          newp->head = (newsize|CINUSE_BIT);
+        }
+        else { /* Otherwise, give back leader, use the rest */
+          set_inuse(m, newp, newsize);
+          set_inuse(m, p, leadsize);
+          leader = chunk2mem(p);
+        }
+        p = newp;
+      }
+
+      /* Give back spare room at the end */
+      if (!is_mmapped(p)) {
+        size_t size = chunksize(p);
+        if (size > nb + MIN_CHUNK_SIZE) {
+          size_t remainder_size = size - nb;
+          mchunkptr remainder = chunk_plus_offset(p, nb);
+          set_inuse(m, p, nb);
+          set_inuse(m, remainder, remainder_size);
+          trailer = chunk2mem(remainder);
+        }
+      }
+
+      assert (chunksize(p) >= nb);
+      assert((((size_t)(chunk2mem(p))) % alignment) == 0);
+      check_inuse_chunk(m, p);
+      POSTACTION(m);
+      if (leader != 0) {
+        internal_free(m, leader);
+      }
+      if (trailer != 0) {
+        internal_free(m, trailer);
+      }
+      return chunk2mem(p);
+    }
+  }
+  return 0;
+}
+
+/* ------------------------ comalloc/coalloc support --------------------- */
+
+static void** ialloc(mstate m,
+                     size_t n_elements,
+                     size_t* sizes,
+                     int opts,
+                     void* chunks[]) {
+  /*
+    This provides common support for independent_X routines, handling
+    all of the combinations that can result.
+
+    The opts arg has:
+    bit 0 set if all elements are same size (using sizes[0])
+    bit 1 set if elements should be zeroed
+  */
+
+  size_t    element_size;   /* chunksize of each element, if all same */
+  size_t    contents_size;  /* total size of elements */
+  size_t    array_size;     /* request size of pointer array */
+  void*     mem;            /* malloced aggregate space */
+  mchunkptr p;              /* corresponding chunk */
+  size_t    remainder_size; /* remaining bytes while splitting */
+  void**    marray;         /* either "chunks" or malloced ptr array */
+  mchunkptr array_chunk;    /* chunk for malloced ptr array */
+  flag_t    was_enabled;    /* to disable mmap */
+  size_t    size;
+  size_t    i;
+
+  /* compute array length, if needed */
+  if (chunks != 0) {
+    if (n_elements == 0)
+      return chunks; /* nothing to do */
+    marray = chunks;
+    array_size = 0;
+  }
+  else {
+    /* if empty req, must still return chunk representing empty array */
+    if (n_elements == 0)
+      return (void**)internal_malloc(m, 0);
+    marray = 0;
+    array_size = request2size(n_elements * (sizeof(void*)));
+  }
+
+  /* compute total element size */
+  if (opts & 0x1) { /* all-same-size */
+    element_size = request2size(*sizes);
+    contents_size = n_elements * element_size;
+  }
+  else { /* add up all the sizes */
+    element_size = 0;
+    contents_size = 0;
+    for (i = 0; i != n_elements; ++i)
+      contents_size += request2size(sizes[i]);
+  }
+
+  size = contents_size + array_size;
+
+  /*
+     Allocate the aggregate chunk.  First disable direct-mmapping so
+     malloc won't use it, since we would not be able to later
+     free/realloc space internal to a segregated mmap region.
+  */
+  was_enabled = use_mmap(m);
+  disable_mmap(m);
+  mem = internal_malloc(m, size - CHUNK_OVERHEAD);
+  if (was_enabled)
+    enable_mmap(m);
+  if (mem == 0)
+    return 0;
+
+  if (PREACTION(m)) return 0;
+  p = mem2chunk(mem);
+  remainder_size = chunksize(p);
+
+  assert(!is_mmapped(p));
+
+  if (opts & 0x2) {       /* optionally clear the elements */
+    memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size);
+  }
+
+  /* If not provided, allocate the pointer array as final part of chunk */
+  if (marray == 0) {
+    size_t  array_chunk_size;
+    array_chunk = chunk_plus_offset(p, contents_size);
+    array_chunk_size = remainder_size - contents_size;
+    marray = (void**) (chunk2mem(array_chunk));
+    set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size);
+    remainder_size = contents_size;
+  }
+
+  /* split out elements */
+  for (i = 0; ; ++i) {
+    marray[i] = chunk2mem(p);
+    if (i != n_elements-1) {
+      if (element_size != 0)
+        size = element_size;
+      else
+        size = request2size(sizes[i]);
+      remainder_size -= size;
+      set_size_and_pinuse_of_inuse_chunk(m, p, size);
+      p = chunk_plus_offset(p, size);
+    }
+    else { /* the final element absorbs any overallocation slop */
+      set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size);
+      break;
+    }
+  }
+
+#if DEBUG
+  if (marray != chunks) {
+    /* final element must have exactly exhausted chunk */
+    if (element_size != 0) {
+      assert(remainder_size == element_size);
+    }
+    else {
+      assert(remainder_size == request2size(sizes[i]));
+    }
+    check_inuse_chunk(m, mem2chunk(marray));
+  }
+  for (i = 0; i != n_elements; ++i)
+    check_inuse_chunk(m, mem2chunk(marray[i]));
+
+#endif /* DEBUG */
+
+  POSTACTION(m);
+  return marray;
+}
+
+
+/* -------------------------- public routines ---------------------------- */
+
+#if !ONLY_MSPACES
+
+void* dlmalloc(size_t bytes) {
+  /*
+     Basic algorithm:
+     If a small request (< 256 bytes minus per-chunk overhead):
+       1. If one exists, use a remainderless chunk in associated smallbin.
+          (Remainderless means that there are too few excess bytes to
+          represent as a chunk.)
+       2. If it is big enough, use the dv chunk, which is normally the
+          chunk adjacent to the one used for the most recent small request.
+       3. If one exists, split the smallest available chunk in a bin,
+          saving remainder in dv.
+       4. If it is big enough, use the top chunk.
+       5. If available, get memory from system and use it
+     Otherwise, for a large request:
+       1. Find the smallest available binned chunk that fits, and use it
+          if it is better fitting than dv chunk, splitting if necessary.
+       2. If better fitting than any binned chunk, use the dv chunk.
+       3. If it is big enough, use the top chunk.
+       4. If request size >= mmap threshold, try to directly mmap this chunk.
+       5. If available, get memory from system and use it
+
+     The ugly goto's here ensure that postaction occurs along all paths.
+  */
+
+  if (!PREACTION(gm)) {
+    void* mem;
+    size_t nb;
+    if (bytes <= MAX_SMALL_REQUEST) {
+      bindex_t idx;
+      binmap_t smallbits;
+      nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
+      idx = small_index(nb);
+      smallbits = gm->smallmap >> idx;
+
+      if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
+        mchunkptr b, p;
+        idx += ~smallbits & 1;       /* Uses next bin if idx empty */
+        b = smallbin_at(gm, idx);
+        p = b->fd;
+        assert(chunksize(p) == small_index2size(idx));
+        unlink_first_small_chunk(gm, b, p, idx);
+        set_inuse_and_pinuse(gm, p, small_index2size(idx));
+        mem = chunk2mem(p);
+        check_malloced_chunk(gm, mem, nb);
+        goto postaction;
+      }
+
+      else if (nb > gm->dvsize) {
+        if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
+          mchunkptr b, p, r;
+          size_t rsize;
+          bindex_t i;
+          binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
+          binmap_t leastbit = least_bit(leftbits);
+          compute_bit2idx(leastbit, i);
+          b = smallbin_at(gm, i);
+          p = b->fd;
+          assert(chunksize(p) == small_index2size(i));
+          unlink_first_small_chunk(gm, b, p, i);
+          rsize = small_index2size(i) - nb;
+          /* Fit here cannot be remainderless if 4byte sizes */
+          if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
+            set_inuse_and_pinuse(gm, p, small_index2size(i));
+          else {
+            set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
+            r = chunk_plus_offset(p, nb);
+            set_size_and_pinuse_of_free_chunk(r, rsize);
+            replace_dv(gm, r, rsize);
+          }
+          mem = chunk2mem(p);
+          check_malloced_chunk(gm, mem, nb);
+          goto postaction;
+        }
+
+        else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) {
+          check_malloced_chunk(gm, mem, nb);
+          goto postaction;
+        }
+      }
+    }
+    else if (bytes >= MAX_REQUEST)
+      nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
+    else {
+      nb = pad_request(bytes);
+      if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) {
+        check_malloced_chunk(gm, mem, nb);
+        goto postaction;
+      }
+    }
+
+    if (nb <= gm->dvsize) {
+      size_t rsize = gm->dvsize - nb;
+      mchunkptr p = gm->dv;
+      if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
+        mchunkptr r = gm->dv = chunk_plus_offset(p, nb);
+        gm->dvsize = rsize;
+        set_size_and_pinuse_of_free_chunk(r, rsize);
+        set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
+      }
+      else { /* exhaust dv */
+        size_t dvs = gm->dvsize;
+        gm->dvsize = 0;
+        gm->dv = 0;
+        set_inuse_and_pinuse(gm, p, dvs);
+      }
+      mem = chunk2mem(p);
+      check_malloced_chunk(gm, mem, nb);
+      goto postaction;
+    }
+
+    else if (nb < gm->topsize) { /* Split top */
+      size_t rsize = gm->topsize -= nb;
+      mchunkptr p = gm->top;
+      mchunkptr r = gm->top = chunk_plus_offset(p, nb);
+      r->head = rsize | PINUSE_BIT;
+      set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
+      mem = chunk2mem(p);
+      check_top_chunk(gm, gm->top);
+      check_malloced_chunk(gm, mem, nb);
+      goto postaction;
+    }
+
+    mem = sys_alloc(gm, nb);
+
+  postaction:
+    POSTACTION(gm);
+    return mem;
+  }
+
+  return 0;
+}
+
+void dlfree(void* mem) {
+  /*
+     Consolidate freed chunks with preceeding or succeeding bordering
+     free chunks, if they exist, and then place in a bin.  Intermixed
+     with special cases for top, dv, mmapped chunks, and usage errors.
+  */
+
+  if (mem != 0) {
+    mchunkptr p  = mem2chunk(mem);
+#if FOOTERS
+    mstate fm = get_mstate_for(p);
+    if (!ok_magic(fm)) {
+      USAGE_ERROR_ACTION(fm, p);
+      return;
+    }
+#else /* FOOTERS */
+#define fm gm
+#endif /* FOOTERS */
+    if (!PREACTION(fm)) {
+      check_inuse_chunk(fm, p);
+      if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) {
+        size_t psize = chunksize(p);
+        mchunkptr next = chunk_plus_offset(p, psize);
+        if (!pinuse(p)) {
+          size_t prevsize = p->prev_foot;
+          if ((prevsize & IS_MMAPPED_BIT) != 0) {
+            prevsize &= ~IS_MMAPPED_BIT;
+            psize += prevsize + MMAP_FOOT_PAD;
+            if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
+              fm->footprint -= psize;
+            goto postaction;
+          }
+          else {
+            mchunkptr prev = chunk_minus_offset(p, prevsize);
+            psize += prevsize;
+            p = prev;
+            if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
+              if (p != fm->dv) {
+                unlink_chunk(fm, p, prevsize);
+              }
+              else if ((next->head & INUSE_BITS) == INUSE_BITS) {
+                fm->dvsize = psize;
+                set_free_with_pinuse(p, psize, next);
+                goto postaction;
+              }
+            }
+            else
+              goto erroraction;
+          }
+        }
+
+        if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
+          if (!cinuse(next)) {  /* consolidate forward */
+            if (next == fm->top) {
+              size_t tsize = fm->topsize += psize;
+              fm->top = p;
+              p->head = tsize | PINUSE_BIT;
+              if (p == fm->dv) {
+                fm->dv = 0;
+                fm->dvsize = 0;
+              }
+              if (should_trim(fm, tsize))
+                sys_trim(fm, 0);
+              goto postaction;
+            }
+            else if (next == fm->dv) {
+              size_t dsize = fm->dvsize += psize;
+              fm->dv = p;
+              set_size_and_pinuse_of_free_chunk(p, dsize);
+              goto postaction;
+            }
+            else {
+              size_t nsize = chunksize(next);
+              psize += nsize;
+              unlink_chunk(fm, next, nsize);
+              set_size_and_pinuse_of_free_chunk(p, psize);
+              if (p == fm->dv) {
+                fm->dvsize = psize;
+                goto postaction;
+              }
+            }
+          }
+          else
+            set_free_with_pinuse(p, psize, next);
+          insert_chunk(fm, p, psize);
+          check_free_chunk(fm, p);
+          goto postaction;
+        }
+      }
+    erroraction:
+      USAGE_ERROR_ACTION(fm, p);
+    postaction:
+      POSTACTION(fm);
+    }
+  }
+#if !FOOTERS
+#undef fm
+#endif /* FOOTERS */
+}
+
+void* dlcalloc(size_t n_elements, size_t elem_size) {
+  void* mem;
+  size_t req = 0;
+  if (n_elements != 0) {
+    req = n_elements * elem_size;
+    if (((n_elements | elem_size) & ~(size_t)0xffff) &&
+        (req / n_elements != elem_size))
+      req = MAX_SIZE_T; /* force downstream failure on overflow */
+  }
+  mem = dlmalloc(req);
+  if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
+    memset(mem, 0, req);
+  return mem;
+}
+
+void* dlrealloc(void* oldmem, size_t bytes) {
+  if (oldmem == 0)
+    return dlmalloc(bytes);
+#ifdef REALLOC_ZERO_BYTES_FREES
+  if (bytes == 0) {
+    dlfree(oldmem);
+    return 0;
+  }
+#endif /* REALLOC_ZERO_BYTES_FREES */
+  else {
+#if ! FOOTERS
+    mstate m = gm;
+#else /* FOOTERS */
+    mstate m = get_mstate_for(mem2chunk(oldmem));
+    if (!ok_magic(m)) {
+      USAGE_ERROR_ACTION(m, oldmem);
+      return 0;
+    }
+#endif /* FOOTERS */
+    return internal_realloc(m, oldmem, bytes);
+  }
+}
+
+void* dlmemalign(size_t alignment, size_t bytes) {
+  return internal_memalign(gm, alignment, bytes);
+}
+
+void** dlindependent_calloc(size_t n_elements, size_t elem_size,
+                                 void* chunks[]) {
+  size_t sz = elem_size; /* serves as 1-element array */
+  return ialloc(gm, n_elements, &sz, 3, chunks);
+}
+
+void** dlindependent_comalloc(size_t n_elements, size_t sizes[],
+                                   void* chunks[]) {
+  return ialloc(gm, n_elements, sizes, 0, chunks);
+}
+
+void* dlvalloc(size_t bytes) {
+  size_t pagesz;
+  init_mparams();
+  pagesz = mparams.page_size;
+  return dlmemalign(pagesz, bytes);
+}
+
+void* dlpvalloc(size_t bytes) {
+  size_t pagesz;
+  init_mparams();
+  pagesz = mparams.page_size;
+  return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE));
+}
+
+int dlmalloc_trim(size_t pad) {
+  int result = 0;
+  if (!PREACTION(gm)) {
+    result = sys_trim(gm, pad);
+    POSTACTION(gm);
+  }
+  return result;
+}
+
+size_t dlmalloc_footprint(void) {
+  return gm->footprint;
+}
+
+size_t dlmalloc_max_footprint(void) {
+  return gm->max_footprint;
+}
+
+#if !NO_MALLINFO
+struct mallinfo dlmallinfo(void) {
+  return internal_mallinfo(gm);
+}
+#endif /* NO_MALLINFO */
+
+void dlmalloc_stats() {
+  internal_malloc_stats(gm);
+}
+
+size_t dlmalloc_usable_size(void* mem) {
+  if (mem != 0) {
+    mchunkptr p = mem2chunk(mem);
+    if (cinuse(p))
+      return chunksize(p) - overhead_for(p);
+  }
+  return 0;
+}
+
+int dlmallopt(int param_number, int value) {
+  return change_mparam(param_number, value);
+}
+
+#endif /* !ONLY_MSPACES */
+
+/* ----------------------------- user mspaces ---------------------------- */
+
+#if MSPACES
+
+static mstate init_user_mstate(char* tbase, size_t tsize) {
+  size_t msize = pad_request(sizeof(struct malloc_state));
+  mchunkptr mn;
+  mchunkptr msp = align_as_chunk(tbase);
+  mstate m = (mstate)(chunk2mem(msp));
+  memset(m, 0, msize);
+  INITIAL_LOCK(&m->mutex);
+  msp->head = (msize|PINUSE_BIT|CINUSE_BIT);
+  m->seg.base = m->least_addr = tbase;
+  m->seg.size = m->footprint = m->max_footprint = tsize;
+  m->magic = mparams.magic;
+  m->mflags = mparams.default_mflags;
+  disable_contiguous(m);
+  init_bins(m);
+  mn = next_chunk(mem2chunk(m));
+  init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE);
+  check_top_chunk(m, m->top);
+  return m;
+}
+
+mspace create_mspace(size_t capacity, int locked) {
+  mstate m = 0;
+  size_t msize = pad_request(sizeof(struct malloc_state));
+  init_mparams(); /* Ensure pagesize etc initialized */
+
+  if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
+    size_t rs = ((capacity == 0)? mparams.granularity :
+                 (capacity + TOP_FOOT_SIZE + msize));
+    size_t tsize = granularity_align(rs);
+    char* tbase = (char*)(CALL_MMAP(tsize));
+    if (tbase != CMFAIL) {
+      m = init_user_mstate(tbase, tsize);
+      m->seg.sflags = IS_MMAPPED_BIT;
+      set_lock(m, locked);
+    }
+  }
+  return (mspace)m;
+}
+
+mspace create_mspace_with_base(void* base, size_t capacity, int locked) {
+  mstate m = 0;
+  size_t msize = pad_request(sizeof(struct malloc_state));
+  init_mparams(); /* Ensure pagesize etc initialized */
+
+  if (capacity > msize + TOP_FOOT_SIZE &&
+      capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
+    m = init_user_mstate((char*)base, capacity);
+    m->seg.sflags = EXTERN_BIT;
+    set_lock(m, locked);
+  }
+  return (mspace)m;
+}
+
+size_t destroy_mspace(mspace msp) {
+  size_t freed = 0;
+  mstate ms = (mstate)msp;
+  if (ok_magic(ms)) {
+    msegmentptr sp = &ms->seg;
+    while (sp != 0) {
+      char* base = sp->base;
+      size_t size = sp->size;
+      flag_t flag = sp->sflags;
+      sp = sp->next;
+      if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) &&
+          CALL_MUNMAP(base, size) == 0)
+        freed += size;
+    }
+  }
+  else {
+    USAGE_ERROR_ACTION(ms,ms);
+  }
+  return freed;
+}
+
+/*
+  mspace versions of routines are near-clones of the global
+  versions. This is not so nice but better than the alternatives.
+*/
+
+
+void* mspace_malloc(mspace msp, size_t bytes) {
+  mstate ms = (mstate)msp;
+  if (!ok_magic(ms)) {
+    USAGE_ERROR_ACTION(ms,ms);
+    return 0;
+  }
+  if (!PREACTION(ms)) {
+    void* mem;
+    size_t nb;
+    if (bytes <= MAX_SMALL_REQUEST) {
+      bindex_t idx;
+      binmap_t smallbits;
+      nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
+      idx = small_index(nb);
+      smallbits = ms->smallmap >> idx;
+
+      if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
+        mchunkptr b, p;
+        idx += ~smallbits & 1;       /* Uses next bin if idx empty */
+        b = smallbin_at(ms, idx);
+        p = b->fd;
+        assert(chunksize(p) == small_index2size(idx));
+        unlink_first_small_chunk(ms, b, p, idx);
+        set_inuse_and_pinuse(ms, p, small_index2size(idx));
+        mem = chunk2mem(p);
+        check_malloced_chunk(ms, mem, nb);
+        goto postaction;
+      }
+
+      else if (nb > ms->dvsize) {
+        if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
+          mchunkptr b, p, r;
+          size_t rsize;
+          bindex_t i;
+          binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
+          binmap_t leastbit = least_bit(leftbits);
+          compute_bit2idx(leastbit, i);
+          b = smallbin_at(ms, i);
+          p = b->fd;
+          assert(chunksize(p) == small_index2size(i));
+          unlink_first_small_chunk(ms, b, p, i);
+          rsize = small_index2size(i) - nb;
+          /* Fit here cannot be remainderless if 4byte sizes */
+          if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
+            set_inuse_and_pinuse(ms, p, small_index2size(i));
+          else {
+            set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
+            r = chunk_plus_offset(p, nb);
+            set_size_and_pinuse_of_free_chunk(r, rsize);
+            replace_dv(ms, r, rsize);
+          }
+          mem = chunk2mem(p);
+          check_malloced_chunk(ms, mem, nb);
+          goto postaction;
+        }
+
+        else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) {
+          check_malloced_chunk(ms, mem, nb);
+          goto postaction;
+        }
+      }
+    }
+    else if (bytes >= MAX_REQUEST)
+      nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
+    else {
+      nb = pad_request(bytes);
+      if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) {
+        check_malloced_chunk(ms, mem, nb);
+        goto postaction;
+      }
+    }
+
+    if (nb <= ms->dvsize) {
+      size_t rsize = ms->dvsize - nb;
+      mchunkptr p = ms->dv;
+      if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
+        mchunkptr r = ms->dv = chunk_plus_offset(p, nb);
+        ms->dvsize = rsize;
+        set_size_and_pinuse_of_free_chunk(r, rsize);
+        set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
+      }
+      else { /* exhaust dv */
+        size_t dvs = ms->dvsize;
+        ms->dvsize = 0;
+        ms->dv = 0;
+        set_inuse_and_pinuse(ms, p, dvs);
+      }
+      mem = chunk2mem(p);
+      check_malloced_chunk(ms, mem, nb);
+      goto postaction;
+    }
+
+    else if (nb < ms->topsize) { /* Split top */
+      size_t rsize = ms->topsize -= nb;
+      mchunkptr p = ms->top;
+      mchunkptr r = ms->top = chunk_plus_offset(p, nb);
+      r->head = rsize | PINUSE_BIT;
+      set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
+      mem = chunk2mem(p);
+      check_top_chunk(ms, ms->top);
+      check_malloced_chunk(ms, mem, nb);
+      goto postaction;
+    }
+
+    mem = sys_alloc(ms, nb);
+
+  postaction:
+    POSTACTION(ms);
+    return mem;
+  }
+
+  return 0;
+}
+
+void mspace_free(mspace msp, void* mem) {
+  if (mem != 0) {
+    mchunkptr p  = mem2chunk(mem);
+#if FOOTERS
+    mstate fm = get_mstate_for(p);
+#else /* FOOTERS */
+    mstate fm = (mstate)msp;
+#endif /* FOOTERS */
+    if (!ok_magic(fm)) {
+      USAGE_ERROR_ACTION(fm, p);
+      return;
+    }
+    if (!PREACTION(fm)) {
+      check_inuse_chunk(fm, p);
+      if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) {
+        size_t psize = chunksize(p);
+        mchunkptr next = chunk_plus_offset(p, psize);
+        if (!pinuse(p)) {
+          size_t prevsize = p->prev_foot;
+          if ((prevsize & IS_MMAPPED_BIT) != 0) {
+            prevsize &= ~IS_MMAPPED_BIT;
+            psize += prevsize + MMAP_FOOT_PAD;
+            if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
+              fm->footprint -= psize;
+            goto postaction;
+          }
+          else {
+            mchunkptr prev = chunk_minus_offset(p, prevsize);
+            psize += prevsize;
+            p = prev;
+            if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
+              if (p != fm->dv) {
+                unlink_chunk(fm, p, prevsize);
+              }
+              else if ((next->head & INUSE_BITS) == INUSE_BITS) {
+                fm->dvsize = psize;
+                set_free_with_pinuse(p, psize, next);
+                goto postaction;
+              }
+            }
+            else
+              goto erroraction;
+          }
+        }
+
+        if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
+          if (!cinuse(next)) {  /* consolidate forward */
+            if (next == fm->top) {
+              size_t tsize = fm->topsize += psize;
+              fm->top = p;
+              p->head = tsize | PINUSE_BIT;
+              if (p == fm->dv) {
+                fm->dv = 0;
+                fm->dvsize = 0;
+              }
+              if (should_trim(fm, tsize))
+                sys_trim(fm, 0);
+              goto postaction;
+            }
+            else if (next == fm->dv) {
+              size_t dsize = fm->dvsize += psize;
+              fm->dv = p;
+              set_size_and_pinuse_of_free_chunk(p, dsize);
+              goto postaction;
+            }
+            else {
+              size_t nsize = chunksize(next);
+              psize += nsize;
+              unlink_chunk(fm, next, nsize);
+              set_size_and_pinuse_of_free_chunk(p, psize);
+              if (p == fm->dv) {
+                fm->dvsize = psize;
+                goto postaction;
+              }
+            }
+          }
+          else
+            set_free_with_pinuse(p, psize, next);
+          insert_chunk(fm, p, psize);
+          check_free_chunk(fm, p);
+          goto postaction;
+        }
+      }
+    erroraction:
+      USAGE_ERROR_ACTION(fm, p);
+    postaction:
+      POSTACTION(fm);
+    }
+  }
+}
+
+void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) {
+  void* mem;
+  size_t req = 0;
+  mstate ms = (mstate)msp;
+  if (!ok_magic(ms)) {
+    USAGE_ERROR_ACTION(ms,ms);
+    return 0;
+  }
+  if (n_elements != 0) {
+    req = n_elements * elem_size;
+    if (((n_elements | elem_size) & ~(size_t)0xffff) &&
+        (req / n_elements != elem_size))
+      req = MAX_SIZE_T; /* force downstream failure on overflow */
+  }
+  mem = internal_malloc(ms, req);
+  if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
+    memset(mem, 0, req);
+  return mem;
+}
+
+void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) {
+  if (oldmem == 0)
+    return mspace_malloc(msp, bytes);
+#ifdef REALLOC_ZERO_BYTES_FREES
+  if (bytes == 0) {
+    mspace_free(msp, oldmem);
+    return 0;
+  }
+#endif /* REALLOC_ZERO_BYTES_FREES */
+  else {
+#if FOOTERS
+    mchunkptr p  = mem2chunk(oldmem);
+    mstate ms = get_mstate_for(p);
+#else /* FOOTERS */
+    mstate ms = (mstate)msp;
+#endif /* FOOTERS */
+    if (!ok_magic(ms)) {
+      USAGE_ERROR_ACTION(ms,ms);
+      return 0;
+    }
+    return internal_realloc(ms, oldmem, bytes);
+  }
+}
+
+void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) {
+  mstate ms = (mstate)msp;
+  if (!ok_magic(ms)) {
+    USAGE_ERROR_ACTION(ms,ms);
+    return 0;
+  }
+  return internal_memalign(ms, alignment, bytes);
+}
+
+void** mspace_independent_calloc(mspace msp, size_t n_elements,
+                                 size_t elem_size, void* chunks[]) {
+  size_t sz = elem_size; /* serves as 1-element array */
+  mstate ms = (mstate)msp;
+  if (!ok_magic(ms)) {
+    USAGE_ERROR_ACTION(ms,ms);
+    return 0;
+  }
+  return ialloc(ms, n_elements, &sz, 3, chunks);
+}
+
+void** mspace_independent_comalloc(mspace msp, size_t n_elements,
+                                   size_t sizes[], void* chunks[]) {
+  mstate ms = (mstate)msp;
+  if (!ok_magic(ms)) {
+    USAGE_ERROR_ACTION(ms,ms);
+    return 0;
+  }
+  return ialloc(ms, n_elements, sizes, 0, chunks);
+}
+
+int mspace_trim(mspace msp, size_t pad) {
+  int result = 0;
+  mstate ms = (mstate)msp;
+  if (ok_magic(ms)) {
+    if (!PREACTION(ms)) {
+      result = sys_trim(ms, pad);
+      POSTACTION(ms);
+    }
+  }
+  else {
+    USAGE_ERROR_ACTION(ms,ms);
+  }
+  return result;
+}
+
+void mspace_malloc_stats(mspace msp) {
+  mstate ms = (mstate)msp;
+  if (ok_magic(ms)) {
+    internal_malloc_stats(ms);
+  }
+  else {
+    USAGE_ERROR_ACTION(ms,ms);
+  }
+}
+
+size_t mspace_footprint(mspace msp) {
+  size_t result;
+  mstate ms = (mstate)msp;
+  if (ok_magic(ms)) {
+    result = ms->footprint;
+  }
+  USAGE_ERROR_ACTION(ms,ms);
+  return result;
+}
+
+
+size_t mspace_max_footprint(mspace msp) {
+  size_t result;
+  mstate ms = (mstate)msp;
+  if (ok_magic(ms)) {
+    result = ms->max_footprint;
+  }
+  USAGE_ERROR_ACTION(ms,ms);
+  return result;
+}
+
+
+#if !NO_MALLINFO
+struct mallinfo mspace_mallinfo(mspace msp) {
+  mstate ms = (mstate)msp;
+  if (!ok_magic(ms)) {
+    USAGE_ERROR_ACTION(ms,ms);
+  }
+  return internal_mallinfo(ms);
+}
+#endif /* NO_MALLINFO */
+
+int mspace_mallopt(int param_number, int value) {
+  return change_mparam(param_number, value);
+}
+
+#endif /* MSPACES */
+
+/* -------------------- Alternative MORECORE functions ------------------- */
+
+/*
+  Guidelines for creating a custom version of MORECORE:
+
+  * For best performance, MORECORE should allocate in multiples of pagesize.
+  * MORECORE may allocate more memory than requested. (Or even less,
+      but this will usually result in a malloc failure.)
+  * MORECORE must not allocate memory when given argument zero, but
+      instead return one past the end address of memory from previous
+      nonzero call.
+  * For best performance, consecutive calls to MORECORE with positive
+      arguments should return increasing addresses, indicating that
+      space has been contiguously extended.
+  * Even though consecutive calls to MORECORE need not return contiguous
+      addresses, it must be OK for malloc'ed chunks to span multiple
+      regions in those cases where they do happen to be contiguous.
+  * MORECORE need not handle negative arguments -- it may instead
+      just return MFAIL when given negative arguments.
+      Negative arguments are always multiples of pagesize. MORECORE
+      must not misinterpret negative args as large positive unsigned
+      args. You can suppress all such calls from even occurring by defining
+      MORECORE_CANNOT_TRIM,
+
+  As an example alternative MORECORE, here is a custom allocator
+  kindly contributed for pre-OSX macOS.  It uses virtually but not
+  necessarily physically contiguous non-paged memory (locked in,
+  present and won't get swapped out).  You can use it by uncommenting
+  this section, adding some #includes, and setting up the appropriate
+  defines above:
+
+      #define MORECORE osMoreCore
+
+  There is also a shutdown routine that should somehow be called for
+  cleanup upon program exit.
+
+  #define MAX_POOL_ENTRIES 100
+  #define MINIMUM_MORECORE_SIZE  (64 * 1024U)
+  static int next_os_pool;
+  void *our_os_pools[MAX_POOL_ENTRIES];
+
+  void *osMoreCore(int size)
+  {
+    void *ptr = 0;
+    static void *sbrk_top = 0;
+
+    if (size > 0)
+    {
+      if (size < MINIMUM_MORECORE_SIZE)
+         size = MINIMUM_MORECORE_SIZE;
+      if (CurrentExecutionLevel() == kTaskLevel)
+         ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0);
+      if (ptr == 0)
+      {
+        return (void *) MFAIL;
+      }
+      // save ptrs so they can be freed during cleanup
+      our_os_pools[next_os_pool] = ptr;
+      next_os_pool++;
+      ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK);
+      sbrk_top = (char *) ptr + size;
+      return ptr;
+    }
+    else if (size < 0)
+    {
+      // we don't currently support shrink behavior
+      return (void *) MFAIL;
+    }
+    else
+    {
+      return sbrk_top;
+    }
+  }
+
+  // cleanup any allocated memory pools
+  // called as last thing before shutting down driver
+
+  void osCleanupMem(void)
+  {
+    void **ptr;
+
+    for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++)
+      if (*ptr)
+      {
+         PoolDeallocate(*ptr);
+         *ptr = 0;
+      }
+  }
+
+*/
+
+
+/* -----------------------------------------------------------------------
+History:
+    V2.8.3 Thu Sep 22 11:16:32 2005  Doug Lea  (dl at gee)
+      * Add max_footprint functions
+      * Ensure all appropriate literals are size_t
+      * Fix conditional compilation problem for some #define settings
+      * Avoid concatenating segments with the one provided
+        in create_mspace_with_base
+      * Rename some variables to avoid compiler shadowing warnings
+      * Use explicit lock initialization.
+      * Better handling of sbrk interference.
+      * Simplify and fix segment insertion, trimming and mspace_destroy
+      * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x
+      * Thanks especially to Dennis Flanagan for help on these.
+
+    V2.8.2 Sun Jun 12 16:01:10 2005  Doug Lea  (dl at gee)
+      * Fix memalign brace error.
+
+    V2.8.1 Wed Jun  8 16:11:46 2005  Doug Lea  (dl at gee)
+      * Fix improper #endif nesting in C++
+      * Add explicit casts needed for C++
+
+    V2.8.0 Mon May 30 14:09:02 2005  Doug Lea  (dl at gee)
+      * Use trees for large bins
+      * Support mspaces
+      * Use segments to unify sbrk-based and mmap-based system allocation,
+        removing need for emulation on most platforms without sbrk.
+      * Default safety checks
+      * Optional footer checks. Thanks to William Robertson for the idea.
+      * Internal code refactoring
+      * Incorporate suggestions and platform-specific changes.
+        Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas,
+        Aaron Bachmann,  Emery Berger, and others.
+      * Speed up non-fastbin processing enough to remove fastbins.
+      * Remove useless cfree() to avoid conflicts with other apps.
+      * Remove internal memcpy, memset. Compilers handle builtins better.
+      * Remove some options that no one ever used and rename others.
+
+    V2.7.2 Sat Aug 17 09:07:30 2002  Doug Lea  (dl at gee)
+      * Fix malloc_state bitmap array misdeclaration
+
+    V2.7.1 Thu Jul 25 10:58:03 2002  Doug Lea  (dl at gee)
+      * Allow tuning of FIRST_SORTED_BIN_SIZE
+      * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte.
+      * Better detection and support for non-contiguousness of MORECORE.
+        Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger
+      * Bypass most of malloc if no frees. Thanks To Emery Berger.
+      * Fix freeing of old top non-contiguous chunk im sysmalloc.
+      * Raised default trim and map thresholds to 256K.
+      * Fix mmap-related #defines. Thanks to Lubos Lunak.
+      * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield.
+      * Branch-free bin calculation
+      * Default trim and mmap thresholds now 256K.
+
+    V2.7.0 Sun Mar 11 14:14:06 2001  Doug Lea  (dl at gee)
+      * Introduce independent_comalloc and independent_calloc.
+        Thanks to Michael Pachos for motivation and help.
+      * Make optional .h file available
+      * Allow > 2GB requests on 32bit systems.
+      * new WIN32 sbrk, mmap, munmap, lock code from <Walter@GeNeSys-e.de>.
+        Thanks also to Andreas Mueller <a.mueller at paradatec.de>,
+        and Anonymous.
+      * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for
+        helping test this.)
+      * memalign: check alignment arg
+      * realloc: don't try to shift chunks backwards, since this
+        leads to  more fragmentation in some programs and doesn't
+        seem to help in any others.
+      * Collect all cases in malloc requiring system memory into sysmalloc
+      * Use mmap as backup to sbrk
+      * Place all internal state in malloc_state
+      * Introduce fastbins (although similar to 2.5.1)
+      * Many minor tunings and cosmetic improvements
+      * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK
+      * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS
+        Thanks to Tony E. Bennett <tbennett@nvidia.com> and others.
+      * Include errno.h to support default failure action.
+
+    V2.6.6 Sun Dec  5 07:42:19 1999  Doug Lea  (dl at gee)
+      * return null for negative arguments
+      * Added Several WIN32 cleanups from Martin C. Fong <mcfong at yahoo.com>
+         * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h'
+          (e.g. WIN32 platforms)
+         * Cleanup header file inclusion for WIN32 platforms
+         * Cleanup code to avoid Microsoft Visual C++ compiler complaints
+         * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing
+           memory allocation routines
+         * Set 'malloc_getpagesize' for WIN32 platforms (needs more work)
+         * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to
+           usage of 'assert' in non-WIN32 code
+         * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to
+           avoid infinite loop
+      * Always call 'fREe()' rather than 'free()'
+
+    V2.6.5 Wed Jun 17 15:57:31 1998  Doug Lea  (dl at gee)
+      * Fixed ordering problem with boundary-stamping
+
+    V2.6.3 Sun May 19 08:17:58 1996  Doug Lea  (dl at gee)
+      * Added pvalloc, as recommended by H.J. Liu
+      * Added 64bit pointer support mainly from Wolfram Gloger
+      * Added anonymously donated WIN32 sbrk emulation
+      * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen
+      * malloc_extend_top: fix mask error that caused wastage after
+        foreign sbrks
+      * Add linux mremap support code from HJ Liu
+
+    V2.6.2 Tue Dec  5 06:52:55 1995  Doug Lea  (dl at gee)
+      * Integrated most documentation with the code.
+      * Add support for mmap, with help from
+        Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
+      * Use last_remainder in more cases.
+      * Pack bins using idea from  colin@nyx10.cs.du.edu
+      * Use ordered bins instead of best-fit threshhold
+      * Eliminate block-local decls to simplify tracing and debugging.
+      * Support another case of realloc via move into top
+      * Fix error occuring when initial sbrk_base not word-aligned.
+      * Rely on page size for units instead of SBRK_UNIT to
+        avoid surprises about sbrk alignment conventions.
+      * Add mallinfo, mallopt. Thanks to Raymond Nijssen
+        (raymond@es.ele.tue.nl) for the suggestion.
+      * Add `pad' argument to malloc_trim and top_pad mallopt parameter.
+      * More precautions for cases where other routines call sbrk,
+        courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
+      * Added macros etc., allowing use in linux libc from
+        H.J. Lu (hjl@gnu.ai.mit.edu)
+      * Inverted this history list
+
+    V2.6.1 Sat Dec  2 14:10:57 1995  Doug Lea  (dl at gee)
+      * Re-tuned and fixed to behave more nicely with V2.6.0 changes.
+      * Removed all preallocation code since under current scheme
+        the work required to undo bad preallocations exceeds
+        the work saved in good cases for most test programs.
+      * No longer use return list or unconsolidated bins since
+        no scheme using them consistently outperforms those that don't
+        given above changes.
+      * Use best fit for very large chunks to prevent some worst-cases.
+      * Added some support for debugging
+
+    V2.6.0 Sat Nov  4 07:05:23 1995  Doug Lea  (dl at gee)
+      * Removed footers when chunks are in use. Thanks to
+        Paul Wilson (wilson@cs.texas.edu) for the suggestion.
+
+    V2.5.4 Wed Nov  1 07:54:51 1995  Doug Lea  (dl at gee)
+      * Added malloc_trim, with help from Wolfram Gloger
+        (wmglo@Dent.MED.Uni-Muenchen.DE).
+
+    V2.5.3 Tue Apr 26 10:16:01 1994  Doug Lea  (dl at g)
+
+    V2.5.2 Tue Apr  5 16:20:40 1994  Doug Lea  (dl at g)
+      * realloc: try to expand in both directions
+      * malloc: swap order of clean-bin strategy;
+      * realloc: only conditionally expand backwards
+      * Try not to scavenge used bins
+      * Use bin counts as a guide to preallocation
+      * Occasionally bin return list chunks in first scan
+      * Add a few optimizations from colin@nyx10.cs.du.edu
+
+    V2.5.1 Sat Aug 14 15:40:43 1993  Doug Lea  (dl at g)
+      * faster bin computation & slightly different binning
+      * merged all consolidations to one part of malloc proper
+         (eliminating old malloc_find_space & malloc_clean_bin)
+      * Scan 2 returns chunks (not just 1)
+      * Propagate failure in realloc if malloc returns 0
+      * Add stuff to allow compilation on non-ANSI compilers
+          from kpv@research.att.com
+
+    V2.5 Sat Aug  7 07:41:59 1993  Doug Lea  (dl at g.oswego.edu)
+      * removed potential for odd address access in prev_chunk
+      * removed dependency on getpagesize.h
+      * misc cosmetics and a bit more internal documentation
+      * anticosmetics: mangled names in macros to evade debugger strangeness
+      * tested on sparc, hp-700, dec-mips, rs6000
+          with gcc & native cc (hp, dec only) allowing
+          Detlefs & Zorn comparison study (in SIGPLAN Notices.)
+
+    Trial version Fri Aug 28 13:14:29 1992  Doug Lea  (dl at g.oswego.edu)
+      * Based loosely on libg++-1.2X malloc. (It retains some of the overall
+         structure of old version,  but most details differ.)
+ 
+*/
+
+/** @}
+ */
+
Index: uspace/lib/softfloat/Makefile
===================================================================
--- uspace/lib/softfloat/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,81 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Common compiler flags
+#
+
+LIBC_PREFIX = ../libc
+## Setup toolchain
+#
+
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+CFLAGS +=-Iinclude -Iarch/$(ARCH)/include/
+
+## Sources
+#
+
+GENERIC_SOURCES =		\
+	generic/add.c		\
+	generic/common.c	\
+	generic/comparison.c	\
+	generic/conversion.c	\
+	generic/div.c		\
+	generic/mul.c		\
+	generic/other.c		\
+	generic/softfloat.c	\
+	generic/sub.c
+
+ARCH_SOURCES =
+
+GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
+
+.PHONY: all clean depend
+
+all: libsoftfloat.a
+
+-include Makefile.depend
+
+clean:
+	-rm -f libsoftfloat.a Makefile.depend
+	find generic/ -name '*.o' -follow -exec rm \{\} \;
+
+depend:
+	-makedepend $(DEFS) $(CFLAGS) -f - $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
+
+libsoftfloat.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
+	$(AR) rc libsoftfloat.a $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/lib/softfloat/arch/amd64/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/amd64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/amd64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloatamd64 amd64	
+ * @ingroup sfl 
+ * @brief softfloat architecture dependent definitions 
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int64(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int64(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint64(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint64(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int64_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int64_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint64_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint64_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+
+/** @}
+ */
+
Index: uspace/lib/softfloat/arch/arm32/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/arm32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/arm32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloatarm32 arm32	
+ * @ingroup sfl
+ * @brief Softfloat architecture dependent definitions.
+ * @{
+ */
+/** @file 
+ *  @brief Softfloat architecture dependent definitions.
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int32(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int32(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint32(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint32(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int32_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int32_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint32_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint32_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/softfloat/arch/ia32/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/ia32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/ia32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloatia32 ia32	
+ * @ingroup sfl
+ * @brief softfloat architecture dependent definitions 
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int32(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int32(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint32(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint32(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int32_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int32_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint32_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint32_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/softfloat/arch/ia64/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/ia64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/ia64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloatia64 ia64
+ * @ingroup sfl 
+ * @brief softfloat architecture dependent definitions 
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int64(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int64(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint64(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint64(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int64_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int64_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint64_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint64_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/arch/mips32/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/mips32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/mips32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloatmips32 mips32	
+ * @ingroup sfl
+ * @brief softfloat architecture dependent definitions 
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int32(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int32(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint32(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint32(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int32_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int32_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint32_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint32_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/arch/mips32eb/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/mips32eb/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/mips32eb/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloatmipseb32 mipseb32	
+ * @ingroup sfl
+ * @brief softfloat architecture dependent definitions 
+ * * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int32(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int32(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint32(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint32(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int32_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int32_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint32_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint32_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/arch/ppc32/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/ppc32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/ppc32/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloatppc32 ppc32	
+ * @ingroup sfl
+ * @brief softfloat architecture dependent definitions 
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int32(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int32(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint32(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint32(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int32_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int32_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint32_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint32_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/arch/ppc64/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/ppc64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/ppc64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloatppc64 ppc64	
+ * @ingroup sfl
+ * @brief softfloat architecture dependent definitions 
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int64(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int64(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint64(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint64(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int64_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int64_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint64_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint64_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/arch/sparc64/include/functions.h
===================================================================
--- uspace/lib/softfloat/arch/sparc64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/arch/sparc64/include/functions.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloatsparc64 sparc64	
+ * @ingroup sfl
+ * @brief softfloat architecture dependent definitions 
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_FUNCTIONS_H__
+#define __SOFTFLOAT_FUNCTIONS_H__
+
+#define float32_to_int(X) float32_to_int32(X);
+#define float32_to_long(X) float32_to_int64(X);
+#define float32_to_longlong(X) float32_to_int64(X);
+
+#define float64_to_int(X) float64_to_int32(X);
+#define float64_to_long(X) float64_to_int64(X);
+#define float64_to_longlong(X) float64_to_int64(X);
+
+#define float32_to_uint(X) float32_to_uint32(X);
+#define float32_to_ulong(X) float32_to_uint64(X);
+#define float32_to_ulonglong(X) float32_to_uint64(X);
+
+#define float64_to_uint(X) float64_to_uint32(X);
+#define float64_to_ulong(X) float64_to_uint64(X);
+#define float64_to_ulonglong(X) float64_to_uint64(X);
+
+#define int_to_float32(X) int32_to_float32(X);
+#define long_to_float32(X) int64_to_float32(X);
+#define longlong_to_float32(X) int64_to_float32(X);
+
+#define int_to_float64(X) int32_to_float64(X);
+#define long_to_float64(X) int64_to_float64(X);
+#define longlong_to_float64(X) int64_to_float64(X);
+
+#define uint_to_float32(X) uint32_to_float32(X);
+#define ulong_to_float32(X) uint64_to_float32(X);
+#define ulonglong_to_float32(X) uint64_to_float32(X);
+
+#define uint_to_float64(X) uint32_to_float64(X);
+#define ulong_to_float64(X) uint64_to_float64(X);
+#define ulonglong_to_float64(X) uint64_to_float64(X);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/generic/add.c
===================================================================
--- uspace/lib/softfloat/generic/add.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/add.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#include<sftypes.h>
+#include<add.h>
+#include<comparison.h>
+
+/** Add two Float32 numbers with same signs
+ */
+float32 addFloat32(float32 a, float32 b)
+{
+	int expdiff;
+	uint32_t exp1, exp2,frac1, frac2;
+	
+	expdiff = a.parts.exp - b.parts.exp;
+	if (expdiff < 0) {
+		if (isFloat32NaN(b)) {
+			/* TODO: fix SigNaN */
+			if (isFloat32SigNaN(b)) {
+			};
+
+			return b;
+		};
+		
+		if (b.parts.exp == FLOAT32_MAX_EXPONENT) { 
+			return b;
+		}
+		
+		frac1 = b.parts.fraction;
+		exp1 = b.parts.exp;
+		frac2 = a.parts.fraction;
+		exp2 = a.parts.exp;
+		expdiff *= -1;
+	} else {
+		if ((isFloat32NaN(a)) || (isFloat32NaN(b))) {
+			/* TODO: fix SigNaN */
+			if (isFloat32SigNaN(a) || isFloat32SigNaN(b)) {
+			};
+			return (isFloat32NaN(a)?a:b);
+		};
+		
+		if (a.parts.exp == FLOAT32_MAX_EXPONENT) { 
+			return a;
+		}
+		
+		frac1 = a.parts.fraction;
+		exp1 = a.parts.exp;
+		frac2 = b.parts.fraction;
+		exp2 = b.parts.exp;
+	};
+	
+	if (exp1 == 0) {
+		/* both are denormalized */
+		frac1 += frac2;
+		if (frac1 & FLOAT32_HIDDEN_BIT_MASK ) {
+			/* result is not denormalized */
+			a.parts.exp = 1;
+		};
+		a.parts.fraction = frac1;
+		return a;
+	};
+	
+	frac1 |= FLOAT32_HIDDEN_BIT_MASK; /* add hidden bit */
+
+	if (exp2 == 0) {
+		/* second operand is denormalized */
+		--expdiff;
+	} else {
+		/* add hidden bit to second operand */
+		frac2 |= FLOAT32_HIDDEN_BIT_MASK; 
+	};
+	
+	/* create some space for rounding */
+	frac1 <<= 6;
+	frac2 <<= 6;
+	
+	if (expdiff < (FLOAT32_FRACTION_SIZE + 2) ) {
+		frac2 >>= expdiff;
+		frac1 += frac2;
+	} else {
+		a.parts.exp = exp1;
+		a.parts.fraction = (frac1 >> 6) & (~(FLOAT32_HIDDEN_BIT_MASK));
+		return a;
+	}
+	
+	if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7) ) {
+		++exp1;
+		frac1 >>= 1;
+	};
+	
+	/* rounding - if first bit after fraction is set then round up */
+	frac1 += (0x1 << 5);
+	
+	if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) { 
+		/* rounding overflow */
+		++exp1;
+		frac1 >>= 1;
+	};
+	
+	
+	if ((exp1 == FLOAT32_MAX_EXPONENT ) || (exp2 > exp1)) {
+			/* overflow - set infinity as result */
+			a.parts.exp = FLOAT32_MAX_EXPONENT;
+			a.parts.fraction = 0;
+			return a;
+			}
+	
+	a.parts.exp = exp1;
+	
+	/*Clear hidden bit and shift */
+	a.parts.fraction = ((frac1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)) ; 
+	return a;
+}
+
+
+/** Add two Float64 numbers with same signs
+ */
+float64 addFloat64(float64 a, float64 b)
+{
+	int expdiff;
+	uint32_t exp1, exp2;
+	uint64_t frac1, frac2;
+	
+	expdiff = ((int )a.parts.exp) - b.parts.exp;
+	if (expdiff < 0) {
+		if (isFloat64NaN(b)) {
+			/* TODO: fix SigNaN */
+			if (isFloat64SigNaN(b)) {
+			};
+
+			return b;
+		};
+		
+		/* b is infinity and a not */	
+		if (b.parts.exp == FLOAT64_MAX_EXPONENT ) { 
+			return b;
+		}
+		
+		frac1 = b.parts.fraction;
+		exp1 = b.parts.exp;
+		frac2 = a.parts.fraction;
+		exp2 = a.parts.exp;
+		expdiff *= -1;
+	} else {
+		if (isFloat64NaN(a)) {
+			/* TODO: fix SigNaN */
+			if (isFloat64SigNaN(a) || isFloat64SigNaN(b)) {
+			};
+			return a;
+		};
+		
+		/* a is infinity and b not */
+		if (a.parts.exp == FLOAT64_MAX_EXPONENT ) { 
+			return a;
+		}
+		
+		frac1 = a.parts.fraction;
+		exp1 = a.parts.exp;
+		frac2 = b.parts.fraction;
+		exp2 = b.parts.exp;
+	};
+	
+	if (exp1 == 0) {
+		/* both are denormalized */
+		frac1 += frac2;
+		if (frac1 & FLOAT64_HIDDEN_BIT_MASK) { 
+			/* result is not denormalized */
+			a.parts.exp = 1;
+		};
+		a.parts.fraction = frac1;
+		return a;
+	};
+	
+	/* add hidden bit - frac1 is sure not denormalized */
+	frac1 |= FLOAT64_HIDDEN_BIT_MASK;
+
+	/* second operand ... */
+	if (exp2 == 0) {
+		/* ... is denormalized */
+		--expdiff;	
+	} else {
+		/* is not denormalized */
+		frac2 |= FLOAT64_HIDDEN_BIT_MASK;
+	};
+	
+	/* create some space for rounding */
+	frac1 <<= 6;
+	frac2 <<= 6;
+	
+	if (expdiff < (FLOAT64_FRACTION_SIZE + 2) ) {
+		frac2 >>= expdiff;
+		frac1 += frac2;
+	} else {
+		a.parts.exp = exp1;
+		a.parts.fraction = (frac1 >> 6) & (~(FLOAT64_HIDDEN_BIT_MASK));
+		return a;
+	}
+	
+	if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7) ) {
+		++exp1;
+		frac1 >>= 1;
+	};
+	
+	/* rounding - if first bit after fraction is set then round up */
+	frac1 += (0x1 << 5); 
+	
+	if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) { 
+		/* rounding overflow */
+		++exp1;
+		frac1 >>= 1;
+	};
+	
+	if ((exp1 == FLOAT64_MAX_EXPONENT ) || (exp2 > exp1)) {
+			/* overflow - set infinity as result */
+			a.parts.exp = FLOAT64_MAX_EXPONENT;
+			a.parts.fraction = 0;
+			return a;
+			}
+	
+	a.parts.exp = exp1;
+	/*Clear hidden bit and shift */
+	a.parts.fraction = ( (frac1 >> 6 ) & (~FLOAT64_HIDDEN_BIT_MASK));
+	
+	return a;
+}
+
+/** @}
+ */
Index: uspace/lib/softfloat/generic/common.c
===================================================================
--- uspace/lib/softfloat/generic/common.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/common.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#include<sftypes.h>
+#include<common.h>
+
+/* Table for fast leading zeroes counting */
+char zeroTable[256] = {
+	8, 7, 7, 6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, \
+	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, \
+	2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \
+	2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+
+
+/** Take fraction shifted by 10 bits to left, round it, normalize it and detect exceptions
+ * @param cexp exponent with bias
+ * @param cfrac fraction shifted 10 places left with added hidden bit
+ * @param sign
+ * @return valied float64
+ */
+float64 finishFloat64(int32_t cexp, uint64_t cfrac, char sign)
+{
+	float64 result;
+
+	result.parts.sign = sign;
+
+	/* find first nonzero digit and shift result and detect possibly underflow */
+	while ((cexp > 0) && (cfrac) && (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1 ) )))) {
+		cexp--; 
+		cfrac <<= 1;
+			/* TODO: fix underflow */
+	};
+	
+	if ((cexp < 0) || ( cexp == 0 && (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1)))))) {
+		/* FIXME: underflow */
+		result.parts.exp = 0;
+		if ((cexp + FLOAT64_FRACTION_SIZE + 1) < 0) { /* +1 is place for rounding */
+			result.parts.fraction = 0;
+			return result;
+		}
+		
+		while (cexp < 0) {
+			cexp++;
+			cfrac >>= 1;
+		}
+	
+		cfrac += (0x1 << (64 - FLOAT64_FRACTION_SIZE - 3)); 
+		
+		if (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1)))) {
+			
+			result.parts.fraction = ((cfrac >>(64 - FLOAT64_FRACTION_SIZE - 2) ) & (~FLOAT64_HIDDEN_BIT_MASK)); 
+			return result;
+		}	
+	} else {
+		cfrac += (0x1 << (64 - FLOAT64_FRACTION_SIZE - 3)); 
+	}
+	
+	++cexp;
+
+	if (cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1 ))) {
+		++cexp;
+		cfrac >>= 1;
+	}	
+
+	/* check overflow */
+	if (cexp >= FLOAT64_MAX_EXPONENT ) {
+		/* FIXME: overflow, return infinity */
+		result.parts.exp = FLOAT64_MAX_EXPONENT;
+		result.parts.fraction = 0;
+		return result;
+	}
+
+	result.parts.exp = (uint32_t)cexp;
+	
+	result.parts.fraction = ((cfrac >>(64 - FLOAT64_FRACTION_SIZE - 2 ) ) & (~FLOAT64_HIDDEN_BIT_MASK)); 
+	
+	return result;	
+}
+
+/** Counts leading zeroes in 64bit unsigned integer
+ * @param i 
+ */
+int countZeroes64(uint64_t i)
+{
+	int j;
+	for (j =0; j < 64; j += 8) {
+		if ( i & (0xFFll << (56 - j))) {
+			return (j + countZeroes8(i >> (56 - j)));
+		}
+	}
+
+	return 64;
+}
+
+/** Counts leading zeroes in 32bit unsigned integer
+ * @param i 
+ */
+int countZeroes32(uint32_t i)
+{
+	int j;
+	for (j =0; j < 32; j += 8) {
+		if ( i & (0xFF << (24 - j))) {
+			return (j + countZeroes8(i >> (24 - j)));
+		}
+	}
+
+	return 32;
+}
+
+/** Counts leading zeroes in byte
+ * @param i 
+ */
+int countZeroes8(uint8_t i)
+{
+	return zeroTable[i];
+}
+
+/** Round and normalize number expressed by exponent and fraction with first bit (equal to hidden bit) at 30. bit
+ * @param exp exponent 
+ * @param fraction part with hidden bit shifted to 30. bit
+ */
+void roundFloat32(int32_t *exp, uint32_t *fraction)
+{
+	/* rounding - if first bit after fraction is set then round up */
+	(*fraction) += (0x1 << 6);
+	
+	if ((*fraction) & (FLOAT32_HIDDEN_BIT_MASK << 8)) { 
+		/* rounding overflow */
+		++(*exp);
+		(*fraction) >>= 1;
+	};
+	
+	if (((*exp) >= FLOAT32_MAX_EXPONENT ) || ((*exp) < 0)) {
+		/* overflow - set infinity as result */
+		(*exp) = FLOAT32_MAX_EXPONENT;
+		(*fraction) = 0;
+		return;
+	}
+
+	return;
+}
+
+/** Round and normalize number expressed by exponent and fraction with first bit (equal to hidden bit) at 62. bit
+ * @param exp exponent 
+ * @param fraction part with hidden bit shifted to 62. bit
+ */
+void roundFloat64(int32_t *exp, uint64_t *fraction)
+{
+	/* rounding - if first bit after fraction is set then round up */
+	(*fraction) += (0x1 << 9);
+	
+	if ((*fraction) & (FLOAT64_HIDDEN_BIT_MASK << 11)) { 
+		/* rounding overflow */
+		++(*exp);
+		(*fraction) >>= 1;
+	};
+	
+	if (((*exp) >= FLOAT64_MAX_EXPONENT ) || ((*exp) < 0)) {
+		/* overflow - set infinity as result */
+		(*exp) = FLOAT64_MAX_EXPONENT;
+		(*fraction) = 0;
+		return;
+	}
+
+	return;
+}
+
+/** @}
+ */
+
Index: uspace/lib/softfloat/generic/comparison.c
===================================================================
--- uspace/lib/softfloat/generic/comparison.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/comparison.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#include<sftypes.h>
+#include<comparison.h>
+
+inline int isFloat32NaN(float32 f)
+{	/* NaN : exp = 0xff and nonzero fraction */
+	return ((f.parts.exp==0xFF)&&(f.parts.fraction));
+}
+
+inline int isFloat64NaN(float64 d)
+{	/* NaN : exp = 0x7ff and nonzero fraction */
+	return ((d.parts.exp==0x7FF)&&(d.parts.fraction));
+}
+
+inline int isFloat32SigNaN(float32 f)
+{	/* SigNaN : exp = 0xff fraction = 0xxxxx..x (binary), where at least one x is nonzero */
+	return ((f.parts.exp==0xFF)&&(f.parts.fraction<0x400000)&&(f.parts.fraction));
+}
+
+inline int isFloat64SigNaN(float64 d)
+{	/* SigNaN : exp = 0x7ff fraction = 0xxxxx..x (binary), where at least one x is nonzero */
+	return ((d.parts.exp==0x7FF)&&(d.parts.fraction)&&(d.parts.fraction<0x8000000000000ll));
+}
+
+inline int isFloat32Infinity(float32 f) 
+{
+	return ((f.parts.exp==0xFF)&&(f.parts.fraction==0x0));
+}
+
+inline int isFloat64Infinity(float64 d) 
+{
+	return ((d.parts.exp==0x7FF)&&(d.parts.fraction==0x0));
+}
+
+inline int isFloat32Zero(float32 f)
+{
+	return (((f.binary) & 0x7FFFFFFF) == 0);
+}
+
+inline int isFloat64Zero(float64 d)
+{
+	return (((d.binary) & 0x7FFFFFFFFFFFFFFFll) == 0);
+}
+
+/**
+ * @return 1, if both floats are equal - but NaNs are not recognized 
+ */
+inline int isFloat32eq(float32 a, float32 b)
+{
+	return ((a.binary==b.binary)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
+}
+
+/**
+ * @return 1, if a<b - but NaNs are not recognized 
+ */
+inline int isFloat32lt(float32 a, float32 b) 
+{
+	if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
+		return 0; /* +- zeroes */
+	};
+	
+	if ((a.parts.sign)&&(b.parts.sign)) {
+		/*if both are negative, smaller is that with greater binary value*/
+		return (a.binary>b.binary);
+		};
+	
+	/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
+	a.parts.sign=!a.parts.sign;
+	b.parts.sign=!b.parts.sign;
+	return (a.binary<b.binary);
+			
+}
+
+/**
+ * @return 1, if a>b - but NaNs are not recognized 
+ */
+inline int isFloat32gt(float32 a, float32 b) 
+{
+	if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
+		return 0; /* zeroes are equal with any sign */
+	};
+	
+	if ((a.parts.sign)&&(b.parts.sign)) {
+		/*if both are negative, greater is that with smaller binary value*/
+		return (a.binary<b.binary);
+		};
+	
+	/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
+	a.parts.sign=!a.parts.sign;
+	b.parts.sign=!b.parts.sign;
+	return (a.binary>b.binary);
+			
+}
+
+/** @}
+ */
Index: uspace/lib/softfloat/generic/conversion.c
===================================================================
--- uspace/lib/softfloat/generic/conversion.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/conversion.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,593 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#include "sftypes.h"
+#include "conversion.h"
+#include "comparison.h"
+#include "common.h"
+
+float64 convertFloat32ToFloat64(float32 a) 
+{
+	float64 result;
+	uint64_t frac;
+	
+	result.parts.sign = a.parts.sign;
+	result.parts.fraction = a.parts.fraction;
+	result.parts.fraction <<= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE );
+	
+	if ((isFloat32Infinity(a))||(isFloat32NaN(a))) {
+		result.parts.exp = 0x7FF;
+		/* TODO; check if its correct for SigNaNs*/
+		return result;
+	};
+	
+	result.parts.exp = a.parts.exp + ( (int)FLOAT64_BIAS - FLOAT32_BIAS );
+	if (a.parts.exp == 0) {
+		/* normalize denormalized numbers */
+
+		if (result.parts.fraction == 0ll) { /* fix zero */
+			result.parts.exp = 0ll;
+			return result;
+		}
+			
+		frac = result.parts.fraction;
+		
+		while (!(frac & (0x10000000000000ll))) {
+			frac <<= 1;
+			--result.parts.exp;
+		};
+		
+		++result.parts.exp;
+		result.parts.fraction = frac;
+	};
+	
+	return result;
+	
+}
+
+float32 convertFloat64ToFloat32(float64 a) 
+{
+	float32 result;
+	int32_t exp;
+	uint64_t frac;
+	
+	result.parts.sign = a.parts.sign;
+	
+	if (isFloat64NaN(a)) {
+		
+		result.parts.exp = 0xFF;
+		
+		if (isFloat64SigNaN(a)) {
+			result.parts.fraction = 0x400000; /* set first bit of fraction nonzero */
+			return result;
+		}
+	
+		result.parts.fraction = 0x1; /* fraction nonzero but its first bit is zero */
+		return result;
+	};
+
+	if (isFloat64Infinity(a)) {
+		result.parts.fraction = 0;
+		result.parts.exp = 0xFF;
+		return result;
+	};
+
+	exp = (int)a.parts.exp - FLOAT64_BIAS + FLOAT32_BIAS;
+	
+	if (exp >= 0xFF) {
+		/*FIXME: overflow*/
+		result.parts.fraction = 0;
+		result.parts.exp = 0xFF;
+		return result;
+		
+	} else if (exp <= 0 ) {
+		
+		/* underflow or denormalized */
+		
+		result.parts.exp = 0;
+		
+		exp *= -1;	
+		if (exp > FLOAT32_FRACTION_SIZE ) {
+			/* FIXME: underflow */
+			result.parts.fraction = 0;
+			return result;
+		};
+		
+		/* denormalized */
+		
+		frac = a.parts.fraction; 
+		frac |= 0x10000000000000ll; /* denormalize and set hidden bit */
+		
+		frac >>= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE + 1);
+		
+		while (exp > 0) {
+			--exp;
+			frac >>= 1;
+		};
+		result.parts.fraction = frac;
+		
+		return result;
+	};
+
+	result.parts.exp = exp;
+	result.parts.fraction = a.parts.fraction >> (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE);
+	return result;
+}
+
+
+/** Helping procedure for converting float32 to uint32
+ * @param a floating point number in normalized form (no NaNs or Inf are checked )
+ * @return unsigned integer
+ */
+static uint32_t _float32_to_uint32_helper(float32 a)
+{
+	uint32_t frac;
+	
+	if (a.parts.exp < FLOAT32_BIAS) {
+		/*TODO: rounding*/
+		return 0;
+	}
+	
+	frac = a.parts.fraction;
+	
+	frac |= FLOAT32_HIDDEN_BIT_MASK;
+	/* shift fraction to left so hidden bit will be the most significant bit */
+	frac <<= 32 - FLOAT32_FRACTION_SIZE - 1; 
+
+	frac >>= 32 - (a.parts.exp - FLOAT32_BIAS) - 1;
+	if ((a.parts.sign == 1) && (frac != 0)) {
+		frac = ~frac;
+		++frac;
+	}
+	
+	return frac;
+}
+
+/* Convert float to unsigned int32
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+uint32_t float32_to_uint32(float32 a)
+{
+	if (isFloat32NaN(a)) {
+		return MAX_UINT32;
+	}
+	
+	if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS)))  {
+		if (a.parts.sign) {
+			return MIN_UINT32;
+		}
+		return MAX_UINT32;
+	}
+	
+	return _float32_to_uint32_helper(a);	
+}
+
+/* Convert float to signed int32
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+int32_t float32_to_int32(float32 a)
+{
+	if (isFloat32NaN(a)) {
+		return MAX_INT32;
+	}
+	
+	if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS)))  {
+		if (a.parts.sign) {
+			return MIN_INT32;
+		}
+		return MAX_INT32;
+	}
+	return _float32_to_uint32_helper(a);
+}	
+
+
+/** Helping procedure for converting float64 to uint64
+ * @param a floating point number in normalized form (no NaNs or Inf are checked )
+ * @return unsigned integer
+ */
+static uint64_t _float64_to_uint64_helper(float64 a)
+{
+	uint64_t frac;
+	
+	if (a.parts.exp < FLOAT64_BIAS) {
+		/*TODO: rounding*/
+		return 0;
+	}
+	
+	frac = a.parts.fraction;
+	
+	frac |= FLOAT64_HIDDEN_BIT_MASK;
+	/* shift fraction to left so hidden bit will be the most significant bit */
+	frac <<= 64 - FLOAT64_FRACTION_SIZE - 1; 
+
+	frac >>= 64 - (a.parts.exp - FLOAT64_BIAS) - 1;
+	if ((a.parts.sign == 1) && (frac != 0)) {
+		frac = ~frac;
+		++frac;
+	}
+	
+	return frac;
+}
+
+/* Convert float to unsigned int64
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+uint64_t float64_to_uint64(float64 a)
+{
+	if (isFloat64NaN(a)) {
+		return MAX_UINT64;
+	}
+	
+	if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS)))  {
+		if (a.parts.sign) {
+			return MIN_UINT64;
+		}
+		return MAX_UINT64;
+	}
+	
+	return _float64_to_uint64_helper(a);	
+}
+
+/* Convert float to signed int64
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+int64_t float64_to_int64(float64 a)
+{
+	if (isFloat64NaN(a)) {
+		return MAX_INT64;
+	}
+	
+	if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS)))  {
+		if (a.parts.sign) {
+			return MIN_INT64;
+		}
+		return MAX_INT64;
+	}
+	return _float64_to_uint64_helper(a);
+}	
+
+
+
+
+
+/** Helping procedure for converting float32 to uint64
+ * @param a floating point number in normalized form (no NaNs or Inf are checked )
+ * @return unsigned integer
+ */
+static uint64_t _float32_to_uint64_helper(float32 a)
+{
+	uint64_t frac;
+	
+	if (a.parts.exp < FLOAT32_BIAS) {
+		/*TODO: rounding*/
+		return 0;
+	}
+	
+	frac = a.parts.fraction;
+	
+	frac |= FLOAT32_HIDDEN_BIT_MASK;
+	/* shift fraction to left so hidden bit will be the most significant bit */
+	frac <<= 64 - FLOAT32_FRACTION_SIZE - 1; 
+
+	frac >>= 64 - (a.parts.exp - FLOAT32_BIAS) - 1;
+	if ((a.parts.sign == 1) && (frac != 0)) {
+		frac = ~frac;
+		++frac;
+	}
+	
+	return frac;
+}
+
+/* Convert float to unsigned int64
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+uint64_t float32_to_uint64(float32 a)
+{
+	if (isFloat32NaN(a)) {
+		return MAX_UINT64;
+	}
+	
+	if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS)))  {
+		if (a.parts.sign) {
+			return MIN_UINT64;
+		}
+		return MAX_UINT64;
+	}
+	
+	return _float32_to_uint64_helper(a);	
+}
+
+/* Convert float to signed int64
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+int64_t float32_to_int64(float32 a)
+{
+	if (isFloat32NaN(a)) {
+		return MAX_INT64;
+	}
+	
+	if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS)))  {
+		if (a.parts.sign) {
+			return (MIN_INT64);
+		}
+		return MAX_INT64;
+	}
+	return _float32_to_uint64_helper(a);
+}	
+
+
+/* Convert float64 to unsigned int32
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+uint32_t float64_to_uint32(float64 a)
+{
+	if (isFloat64NaN(a)) {
+		return MAX_UINT32;
+	}
+	
+	if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS)))  {
+		if (a.parts.sign) {
+			return MIN_UINT32;
+		}
+		return MAX_UINT32;
+	}
+	
+	return (uint32_t)_float64_to_uint64_helper(a);	
+}
+
+/* Convert float64 to signed int32
+ * FIXME: Im not sure what to return if overflow/underflow happens 
+ * 	- now its the biggest or the smallest int
+ */ 
+int32_t float64_to_int32(float64 a)
+{
+	if (isFloat64NaN(a)) {
+		return MAX_INT32;
+	}
+	
+	if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS)))  {
+		if (a.parts.sign) {
+			return MIN_INT32;
+		}
+		return MAX_INT32;
+	}
+	return (int32_t)_float64_to_uint64_helper(a);
+}	
+
+/** Convert unsigned integer to float32
+ *
+ *
+ */
+float32 uint32_to_float32(uint32_t i)
+{
+	int counter;
+	int32_t exp;
+	float32 result;
+	
+	result.parts.sign = 0;
+	result.parts.fraction = 0;
+
+	counter = countZeroes32(i);
+
+	exp = FLOAT32_BIAS + 32 - counter - 1;
+	
+	if (counter == 32) {
+		result.binary = 0;
+		return result;
+	}
+	
+	if (counter > 0) {
+		i <<= counter - 1;
+	} else {
+		i >>= 1;
+	}
+
+	roundFloat32(&exp, &i);
+
+	result.parts.fraction = i >> 7;
+	result.parts.exp = exp;
+
+	return result;
+}
+
+float32 int32_to_float32(int32_t i) 
+{
+	float32 result;
+
+	if (i < 0) {
+		result = uint32_to_float32((uint32_t)(-i));
+	} else {
+		result = uint32_to_float32((uint32_t)i);
+	}
+	
+	result.parts.sign = i < 0;
+
+ 	return result;
+}
+
+
+float32 uint64_to_float32(uint64_t i) 
+{
+	int counter;
+	int32_t exp;
+	uint32_t j;
+	float32 result;
+	
+	result.parts.sign = 0;
+	result.parts.fraction = 0;
+
+	counter = countZeroes64(i);
+
+	exp = FLOAT32_BIAS + 64 - counter - 1;
+	
+	if (counter == 64) {
+		result.binary = 0;
+		return result;
+	}
+	
+	/* Shift all to the first 31 bits (31. will be hidden 1)*/
+	if (counter > 33) {
+		i <<= counter - 1 - 32;
+	} else {
+		i >>= 1 + 32 - counter;
+	}
+	
+	j = (uint32_t)i;
+	roundFloat32(&exp, &j);
+
+	result.parts.fraction = j >> 7;
+	result.parts.exp = exp;
+	return result;
+}
+
+float32 int64_to_float32(int64_t i) 
+{
+	float32 result;
+
+	if (i < 0) {
+		result = uint64_to_float32((uint64_t)(-i));
+	} else {
+		result = uint64_to_float32((uint64_t)i);
+	}
+	
+	result.parts.sign = i < 0;
+
+ 	return result;
+}
+
+/** Convert unsigned integer to float64
+ *
+ *
+ */
+float64 uint32_to_float64(uint32_t i)
+{
+	int counter;
+	int32_t exp;
+	float64 result;
+	uint64_t frac;
+	
+	result.parts.sign = 0;
+	result.parts.fraction = 0;
+
+	counter = countZeroes32(i);
+
+	exp = FLOAT64_BIAS + 32 - counter - 1;
+	
+	if (counter == 32) {
+		result.binary = 0;
+		return result;
+	}
+	
+	frac = i;
+	frac <<= counter + 32 - 1; 
+
+	roundFloat64(&exp, &frac);
+
+	result.parts.fraction = frac >> 10;
+	result.parts.exp = exp;
+
+	return result;
+}
+
+float64 int32_to_float64(int32_t i) 
+{
+	float64 result;
+
+	if (i < 0) {
+		result = uint32_to_float64((uint32_t)(-i));
+	} else {
+		result = uint32_to_float64((uint32_t)i);
+	}
+	
+	result.parts.sign = i < 0;
+
+ 	return result;
+}
+
+
+float64 uint64_to_float64(uint64_t i) 
+{
+	int counter;
+	int32_t exp;
+	float64 result;
+	
+	result.parts.sign = 0;
+	result.parts.fraction = 0;
+
+	counter = countZeroes64(i);
+
+	exp = FLOAT64_BIAS + 64 - counter - 1;
+	
+	if (counter == 64) {
+		result.binary = 0;
+		return result;
+	}
+	
+	if (counter > 0) {
+		i <<= counter - 1;
+	} else {
+		i >>= 1;
+	}
+
+	roundFloat64(&exp, &i);
+
+	result.parts.fraction = i >> 10;
+	result.parts.exp = exp;
+	return result;
+}
+
+float64 int64_to_float64(int64_t i) 
+{
+	float64 result;
+
+	if (i < 0) {
+		result = uint64_to_float64((uint64_t)(-i));
+	} else {
+		result = uint64_to_float64((uint64_t)i);
+	}
+	
+	result.parts.sign = i < 0;
+
+ 	return result;
+}
+
+/** @}
+ */
Index: uspace/lib/softfloat/generic/div.c
===================================================================
--- uspace/lib/softfloat/generic/div.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/div.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,364 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#include<sftypes.h>
+#include<add.h>
+#include<div.h>
+#include<comparison.h>
+#include<mul.h>
+#include<common.h>
+
+
+float32 divFloat32(float32 a, float32 b) 
+{
+	float32 result;
+	int32_t aexp, bexp, cexp;
+	uint64_t afrac, bfrac, cfrac;
+	
+	result.parts.sign = a.parts.sign ^ b.parts.sign;
+	
+	if (isFloat32NaN(a)) {
+		if (isFloat32SigNaN(a)) {
+			/*FIXME: SigNaN*/
+		}
+		/*NaN*/
+		return a;
+	}
+	
+	if (isFloat32NaN(b)) {
+		if (isFloat32SigNaN(b)) {
+			/*FIXME: SigNaN*/
+		}
+		/*NaN*/
+		return b;
+	}
+	
+	if (isFloat32Infinity(a)) {
+		if (isFloat32Infinity(b)) {
+			/*FIXME: inf / inf */
+			result.binary = FLOAT32_NAN;
+			return result;
+		}
+		/* inf / num */
+		result.parts.exp = a.parts.exp;
+		result.parts.fraction = a.parts.fraction;
+		return result;
+	}
+
+	if (isFloat32Infinity(b)) {
+		if (isFloat32Zero(a)) {
+			/* FIXME 0 / inf */
+			result.parts.exp = 0;
+			result.parts.fraction = 0;
+			return result;
+		}
+		/* FIXME: num / inf*/
+		result.parts.exp = 0;
+		result.parts.fraction = 0;
+		return result;
+	}
+	
+	if (isFloat32Zero(b)) {
+		if (isFloat32Zero(a)) {
+			/*FIXME: 0 / 0*/
+			result.binary = FLOAT32_NAN;
+			return result;
+		}
+		/* FIXME: division by zero */
+		result.parts.exp = 0;
+		result.parts.fraction = 0;
+		return result;
+	}
+
+	
+	afrac = a.parts.fraction;
+	aexp = a.parts.exp;
+	bfrac = b.parts.fraction;
+	bexp = b.parts.exp;
+	
+	/* denormalized numbers */
+	if (aexp == 0) {
+		if (afrac == 0) {
+		result.parts.exp = 0;
+		result.parts.fraction = 0;
+		return result;
+		}
+		/* normalize it*/
+		
+		afrac <<= 1;
+			/* afrac is nonzero => it must stop */	
+		while (! (afrac & FLOAT32_HIDDEN_BIT_MASK) ) {
+			afrac <<= 1;
+			aexp--;
+		}
+	}
+
+	if (bexp == 0) {
+		bfrac <<= 1;
+			/* bfrac is nonzero => it must stop */	
+		while (! (bfrac & FLOAT32_HIDDEN_BIT_MASK) ) {
+			bfrac <<= 1;
+			bexp--;
+		}
+	}
+
+	afrac =	(afrac | FLOAT32_HIDDEN_BIT_MASK ) << (32 - FLOAT32_FRACTION_SIZE - 1 );
+	bfrac =	(bfrac | FLOAT32_HIDDEN_BIT_MASK ) << (32 - FLOAT32_FRACTION_SIZE );
+
+	if ( bfrac <= (afrac << 1) ) {
+		afrac >>= 1;
+		aexp++;
+	}
+	
+	cexp = aexp - bexp + FLOAT32_BIAS - 2;
+	
+	cfrac = (afrac << 32) / bfrac;
+	if ((  cfrac & 0x3F ) == 0) { 
+		cfrac |= ( bfrac * cfrac != afrac << 32 );
+	}
+	
+	/* pack and round */
+	
+	/* find first nonzero digit and shift result and detect possibly underflow */
+	while ((cexp > 0) && (cfrac) && (!(cfrac & (FLOAT32_HIDDEN_BIT_MASK << 7 )))) {
+		cexp--;
+		cfrac <<= 1;
+			/* TODO: fix underflow */
+	};
+	
+	cfrac += (0x1 << 6); /* FIXME: 7 is not sure*/
+	
+	if (cfrac & (FLOAT32_HIDDEN_BIT_MASK << 7)) {
+		++cexp;
+		cfrac >>= 1;
+		}	
+
+	/* check overflow */
+	if (cexp >= FLOAT32_MAX_EXPONENT ) {
+		/* FIXME: overflow, return infinity */
+		result.parts.exp = FLOAT32_MAX_EXPONENT;
+		result.parts.fraction = 0;
+		return result;
+	}
+
+	if (cexp < 0) {
+		/* FIXME: underflow */
+		result.parts.exp = 0;
+		if ((cexp + FLOAT32_FRACTION_SIZE) < 0) {
+			result.parts.fraction = 0;
+			return result;
+		}
+		cfrac >>= 1;
+		while (cexp < 0) {
+			cexp ++;
+			cfrac >>= 1;
+		}
+		
+	} else {
+		result.parts.exp = (uint32_t)cexp;
+	}
+	
+	result.parts.fraction = ((cfrac >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)); 
+	
+	return result;	
+}
+
+float64 divFloat64(float64 a, float64 b) 
+{
+	float64 result;
+	int64_t aexp, bexp, cexp;
+	uint64_t afrac, bfrac, cfrac; 
+	uint64_t remlo, remhi;
+	
+	result.parts.sign = a.parts.sign ^ b.parts.sign;
+	
+	if (isFloat64NaN(a)) {
+		
+		if (isFloat64SigNaN(b)) {
+			/*FIXME: SigNaN*/
+			return b;
+		}
+		
+		if (isFloat64SigNaN(a)) {
+			/*FIXME: SigNaN*/
+		}
+		/*NaN*/
+		return a;
+	}
+	
+	if (isFloat64NaN(b)) {
+		if (isFloat64SigNaN(b)) {
+			/*FIXME: SigNaN*/
+		}
+		/*NaN*/
+		return b;
+	}
+	
+	if (isFloat64Infinity(a)) {
+		if (isFloat64Infinity(b) || isFloat64Zero(b)) {
+			/*FIXME: inf / inf */
+			result.binary = FLOAT64_NAN;
+			return result;
+		}
+		/* inf / num */
+		result.parts.exp = a.parts.exp;
+		result.parts.fraction = a.parts.fraction;
+		return result;
+	}
+
+	if (isFloat64Infinity(b)) {
+		if (isFloat64Zero(a)) {
+			/* FIXME 0 / inf */
+			result.parts.exp = 0;
+			result.parts.fraction = 0;
+			return result;
+		}
+		/* FIXME: num / inf*/
+		result.parts.exp = 0;
+		result.parts.fraction = 0;
+		return result;
+	}
+	
+	if (isFloat64Zero(b)) {
+		if (isFloat64Zero(a)) {
+			/*FIXME: 0 / 0*/
+			result.binary = FLOAT64_NAN;
+			return result;
+		}
+		/* FIXME: division by zero */
+		result.parts.exp = 0;
+		result.parts.fraction = 0;
+		return result;
+	}
+
+	
+	afrac = a.parts.fraction;
+	aexp = a.parts.exp;
+	bfrac = b.parts.fraction;
+	bexp = b.parts.exp;
+	
+	/* denormalized numbers */
+	if (aexp == 0) {
+		if (afrac == 0) {
+			result.parts.exp = 0;
+			result.parts.fraction = 0;
+			return result;
+		}
+		/* normalize it*/
+		
+		aexp++;
+			/* afrac is nonzero => it must stop */	
+		while (! (afrac & FLOAT64_HIDDEN_BIT_MASK) ) {
+			afrac <<= 1;
+			aexp--;
+		}
+	}
+
+	if (bexp == 0) {
+		bexp++;
+			/* bfrac is nonzero => it must stop */	
+		while (! (bfrac & FLOAT64_HIDDEN_BIT_MASK) ) {
+			bfrac <<= 1;
+			bexp--;
+		}
+	}
+
+	afrac =	(afrac | FLOAT64_HIDDEN_BIT_MASK ) << (64 - FLOAT64_FRACTION_SIZE - 2 );
+	bfrac =	(bfrac | FLOAT64_HIDDEN_BIT_MASK ) << (64 - FLOAT64_FRACTION_SIZE - 1);
+
+	if ( bfrac <= (afrac << 1) ) {
+		afrac >>= 1;
+		aexp++;
+	}
+	
+	cexp = aexp - bexp + FLOAT64_BIAS - 2; 
+	
+	cfrac = divFloat64estim(afrac, bfrac);
+	
+	if ((  cfrac & 0x1FF ) <= 2) { /*FIXME:?? */
+		mul64integers( bfrac, cfrac, &remlo, &remhi);
+		/* (__u128)afrac << 64 - ( ((__u128)remhi<<64) + (__u128)remlo )*/	
+		remhi = afrac - remhi - ( remlo > 0);
+		remlo = - remlo;
+		
+		while ((int64_t) remhi < 0) {
+			cfrac--;
+			remlo += bfrac;
+			remhi += ( remlo < bfrac );
+		}
+		cfrac |= ( remlo != 0 );
+	}
+	
+	/* round and shift */
+	result = finishFloat64(cexp, cfrac, result.parts.sign);
+	return result;
+
+}
+
+uint64_t divFloat64estim(uint64_t a, uint64_t b)
+{
+	uint64_t bhi;
+	uint64_t remhi, remlo;
+	uint64_t result;
+	
+	if ( b <= a ) {
+		return 0xFFFFFFFFFFFFFFFFull;
+	}
+	
+	bhi = b >> 32;
+	result = ((bhi << 32) <= a) ?( 0xFFFFFFFFull << 32) : ( a / bhi) << 32;
+	mul64integers(b, result, &remlo, &remhi);
+	
+	remhi = a - remhi - (remlo > 0);
+	remlo = - remlo;
+
+	b <<= 32;
+	while ( (int64_t) remhi < 0 ) {
+			result -= 0x1ll << 32;	
+			remlo += b;
+			remhi += bhi + ( remlo < b );
+		}
+	remhi = (remhi << 32) | (remlo >> 32);
+	if (( bhi << 32) <= remhi) {
+		result |= 0xFFFFFFFF;
+	} else {
+		result |= remhi / bhi;
+	}
+	
+	
+	return result;
+}
+
+/** @}
+ */
Index: uspace/lib/softfloat/generic/mul.c
===================================================================
--- uspace/lib/softfloat/generic/mul.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/mul.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,294 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#include<sftypes.h>
+#include<mul.h>
+#include<comparison.h>
+#include<common.h>
+
+/** Multiply two 32 bit float numbers
+ *
+ */
+float32 mulFloat32(float32 a, float32 b)
+{
+	float32 result;
+	uint64_t frac1, frac2;
+	int32_t exp;
+
+	result.parts.sign = a.parts.sign ^ b.parts.sign;
+	
+	if (isFloat32NaN(a) || isFloat32NaN(b) ) {
+		/* TODO: fix SigNaNs */
+		if (isFloat32SigNaN(a)) {
+			result.parts.fraction = a.parts.fraction;
+			result.parts.exp = a.parts.exp;
+			return result;
+		};
+		if (isFloat32SigNaN(b)) { /* TODO: fix SigNaN */
+			result.parts.fraction = b.parts.fraction;
+			result.parts.exp = b.parts.exp;
+			return result;
+		};
+		/* set NaN as result */
+		result.binary = FLOAT32_NAN;
+		return result;
+	};
+		
+	if (isFloat32Infinity(a)) { 
+		if (isFloat32Zero(b)) {
+			/* FIXME: zero * infinity */
+			result.binary = FLOAT32_NAN;
+			return result;
+		}
+		result.parts.fraction = a.parts.fraction;
+		result.parts.exp = a.parts.exp;
+		return result;
+	}
+
+	if (isFloat32Infinity(b)) { 
+		if (isFloat32Zero(a)) {
+			/* FIXME: zero * infinity */
+			result.binary = FLOAT32_NAN;
+			return result;
+		}
+		result.parts.fraction = b.parts.fraction;
+		result.parts.exp = b.parts.exp;
+		return result;
+	}
+
+	/* exp is signed so we can easy detect underflow */
+	exp = a.parts.exp + b.parts.exp;
+	exp -= FLOAT32_BIAS;
+	
+	if (exp >= FLOAT32_MAX_EXPONENT) {
+		/* FIXME: overflow */
+		/* set infinity as result */
+		result.binary = FLOAT32_INF;
+		result.parts.sign = a.parts.sign ^ b.parts.sign;
+		return result;
+	};
+	
+	if (exp < 0) { 
+		/* FIXME: underflow */
+		/* return signed zero */
+		result.parts.fraction = 0x0;
+		result.parts.exp = 0x0;
+		return result;
+	};
+	
+	frac1 = a.parts.fraction;
+	if (a.parts.exp > 0) {
+		frac1 |= FLOAT32_HIDDEN_BIT_MASK;
+	} else {
+		++exp;
+	};
+	
+	frac2 = b.parts.fraction;
+
+	if (b.parts.exp > 0) {
+		frac2 |= FLOAT32_HIDDEN_BIT_MASK;
+	} else {
+		++exp;
+	};
+
+	frac1 <<= 1; /* one bit space for rounding */
+
+	frac1 = frac1 * frac2;
+/* round and return */
+	
+	while ((exp < FLOAT32_MAX_EXPONENT) && (frac1 >= ( 1 << (FLOAT32_FRACTION_SIZE + 2)))) { 
+		/* 23 bits of fraction + one more for hidden bit (all shifted 1 bit left)*/
+		++exp;
+		frac1 >>= 1;
+	};
+
+	/* rounding */
+	/* ++frac1; FIXME: not works - without it is ok */
+	frac1 >>= 1; /* shift off rounding space */
+	
+	if ((exp < FLOAT32_MAX_EXPONENT) && (frac1 >= (1 << (FLOAT32_FRACTION_SIZE + 1)))) {
+		++exp;
+		frac1 >>= 1;
+	};
+
+	if (exp >= FLOAT32_MAX_EXPONENT ) {	
+		/* TODO: fix overflow */
+		/* return infinity*/
+		result.parts.exp = FLOAT32_MAX_EXPONENT;
+		result.parts.fraction = 0x0;
+		return result;
+	}
+	
+	exp -= FLOAT32_FRACTION_SIZE;
+
+	if (exp <= FLOAT32_FRACTION_SIZE) { 
+		/* denormalized number */
+		frac1 >>= 1; /* denormalize */
+		while ((frac1 > 0) && (exp < 0)) {
+			frac1 >>= 1;
+			++exp;
+		};
+		if (frac1 == 0) {
+			/* FIXME : underflow */
+		result.parts.exp = 0;
+		result.parts.fraction = 0;
+		return result;
+		};
+	};
+	result.parts.exp = exp; 
+	result.parts.fraction = frac1 & ( (1 << FLOAT32_FRACTION_SIZE) - 1);
+	
+	return result;	
+	
+}
+
+/** Multiply two 64 bit float numbers
+ *
+ */
+float64 mulFloat64(float64 a, float64 b)
+{
+	float64 result;
+	uint64_t frac1, frac2;
+	int32_t exp;
+
+	result.parts.sign = a.parts.sign ^ b.parts.sign;
+	
+	if (isFloat64NaN(a) || isFloat64NaN(b) ) {
+		/* TODO: fix SigNaNs */
+		if (isFloat64SigNaN(a)) {
+			result.parts.fraction = a.parts.fraction;
+			result.parts.exp = a.parts.exp;
+			return result;
+		};
+		if (isFloat64SigNaN(b)) { /* TODO: fix SigNaN */
+			result.parts.fraction = b.parts.fraction;
+			result.parts.exp = b.parts.exp;
+			return result;
+		};
+		/* set NaN as result */
+		result.binary = FLOAT64_NAN;
+		return result;
+	};
+		
+	if (isFloat64Infinity(a)) { 
+		if (isFloat64Zero(b)) {
+			/* FIXME: zero * infinity */
+			result.binary = FLOAT64_NAN;
+			return result;
+		}
+		result.parts.fraction = a.parts.fraction;
+		result.parts.exp = a.parts.exp;
+		return result;
+	}
+
+	if (isFloat64Infinity(b)) { 
+		if (isFloat64Zero(a)) {
+			/* FIXME: zero * infinity */
+			result.binary = FLOAT64_NAN;
+			return result;
+		}
+		result.parts.fraction = b.parts.fraction;
+		result.parts.exp = b.parts.exp;
+		return result;
+	}
+
+	/* exp is signed so we can easy detect underflow */
+	exp = a.parts.exp + b.parts.exp - FLOAT64_BIAS;
+	
+	frac1 = a.parts.fraction;
+
+	if (a.parts.exp > 0) {
+		frac1 |= FLOAT64_HIDDEN_BIT_MASK;
+	} else {
+		++exp;
+	};
+	
+	frac2 = b.parts.fraction;
+
+	if (b.parts.exp > 0) {
+		frac2 |= FLOAT64_HIDDEN_BIT_MASK;
+	} else {
+		++exp;
+	};
+
+	frac1 <<= (64 - FLOAT64_FRACTION_SIZE - 1);
+	frac2 <<= (64 - FLOAT64_FRACTION_SIZE - 2);
+
+	mul64integers(frac1, frac2, &frac1, &frac2);
+
+	frac2 |= (frac1 != 0);
+	if (frac2 & (0x1ll << 62)) {
+		frac2 <<= 1;
+		exp--;
+	}
+
+	result = finishFloat64(exp, frac2, result.parts.sign);
+	return result;
+}
+
+/** Multiply two 64 bit numbers and return result in two parts
+ * @param a first operand
+ * @param b second operand
+ * @param lo lower part from result
+ * @param hi higher part of result
+ */
+void mul64integers(uint64_t a,uint64_t b, uint64_t *lo, uint64_t *hi)
+{
+	uint64_t low, high, middle1, middle2;
+	uint32_t alow, blow;
+
+	alow = a & 0xFFFFFFFF;
+	blow = b & 0xFFFFFFFF;
+	
+	a >>= 32;
+	b >>= 32;
+	
+	low = ((uint64_t)alow) * blow;
+	middle1 = a * blow;
+	middle2 = alow * b;
+	high = a * b;
+
+	middle1 += middle2;
+	high += (((uint64_t)(middle1 < middle2)) << 32) + (middle1 >> 32);
+	middle1 <<= 32;
+	low += middle1;
+	high += (low < middle1);
+	*lo = low;
+	*hi = high;
+	
+	return;
+}
+
+/** @}
+ */
Index: uspace/lib/softfloat/generic/other.c
===================================================================
--- uspace/lib/softfloat/generic/other.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/other.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+
+/** @}
+ */
Index: uspace/lib/softfloat/generic/softfloat.c
===================================================================
--- uspace/lib/softfloat/generic/softfloat.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/softfloat.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,499 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softfloat generic
+ * @ingroup sfl
+ * @brief Architecture independent parts of FPU software emulation library.
+ * @{
+ */
+/** @file
+ */
+
+#include<softfloat.h>
+#include<sftypes.h>
+
+#include<add.h>
+#include<sub.h>
+#include<mul.h>
+#include<div.h>
+
+#include<conversion.h>
+#include<comparison.h>
+#include<other.h>
+
+#include<functions.h>
+
+/* Arithmetic functions */
+
+float __addsf3(float a, float b)
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if (fa.parts.sign != fb.parts.sign) {
+		if (fa.parts.sign) {
+			fa.parts.sign = 0;
+			return subFloat32(fb, fa).f;
+		};
+		fb.parts.sign = 0;
+		return subFloat32(fa, fb).f;
+	}
+	return addFloat32(fa, fb).f;
+}
+
+double __adddf3(double a, double b)
+{
+	float64 da, db;
+	da.d = a;
+	db.d = b;
+	if (da.parts.sign != db.parts.sign) {
+		if (da.parts.sign) {
+			da.parts.sign = 0;
+			return subFloat64(db, da).d;
+		};
+		db.parts.sign = 0;
+		return subFloat64(da, db).d;
+	}
+	return addFloat64(da, db).d;
+}
+
+float __subsf3(float a, float b)
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if (fa.parts.sign != fb.parts.sign) {
+		fb.parts.sign = !fb.parts.sign;
+		return addFloat32(fa, fb).f;
+	}
+	return subFloat32(fa, fb).f;
+}
+
+double __subdf3(double a, double b)
+{
+	float64 da, db;
+	da.d = a;
+	db.d = b;
+	if (da.parts.sign != db.parts.sign) {
+		db.parts.sign = !db.parts.sign;
+		return addFloat64(da, db).d;
+	}
+	return subFloat64(da, db).d;
+}
+
+float __mulsf3(float a, float b) 
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	return 	mulFloat32(fa, fb).f;
+}
+
+double __muldf3(double a, double b) 
+{
+	float64 da, db;
+	da.d = a;
+	db.d = b;
+	return 	mulFloat64(da, db).d;
+}
+
+float __divsf3(float a, float b) 
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	return 	divFloat32(fa, fb).f;
+}
+
+double __divdf3(double a, double b) 
+{
+	float64 da, db;
+	da.d = a;
+	db.d = b;
+	return 	divFloat64(da, db).d;
+}
+
+float __negsf2(float a)
+{
+	float32 fa;
+	fa.f = a;
+	fa.parts.sign = !fa.parts.sign;
+	return fa.f;
+}
+
+double __negdf2(double a)
+{
+	float64 fa;
+	fa.d = a;
+	fa.parts.sign = !fa.parts.sign;
+	return fa.d;
+}
+
+/* Conversion functions */
+
+double __extendsfdf2(float a) 
+{
+	float32 fa;
+	fa.f = a;
+	return convertFloat32ToFloat64(fa).d;
+}
+
+float __truncdfsf2(double a) 
+{
+	float64 da;
+	da.d = a;
+	return convertFloat64ToFloat32(da).f;
+}
+
+int __fixsfsi(float a)
+{
+	float32 fa;
+	fa.f = a;
+	
+	return float32_to_int(fa);
+}
+int __fixdfsi(double a)
+{
+	float64 da;
+	da.d = a;
+	
+	return float64_to_int(da);
+}
+ 
+long __fixsfdi(float a)
+{
+	float32 fa;
+	fa.f = a;
+	
+	return float32_to_long(fa);
+}
+long __fixdfdi(double a)
+{
+	float64 da;
+	da.d = a;
+	
+	return float64_to_long(da);
+}
+ 
+long long __fixsfti(float a)
+{
+	float32 fa;
+	fa.f = a;
+	
+	return float32_to_longlong(fa);
+}
+long long __fixdfti(double a)
+{
+	float64 da;
+	da.d = a;
+	
+	return float64_to_longlong(da);
+}
+
+unsigned int __fixunssfsi(float a)
+{
+	float32 fa;
+	fa.f = a;
+	
+	return float32_to_uint(fa);
+}
+unsigned int __fixunsdfsi(double a)
+{
+	float64 da;
+	da.d = a;
+	
+	return float64_to_uint(da);
+}
+ 
+unsigned long __fixunssfdi(float a)
+{
+	float32 fa;
+	fa.f = a;
+	
+	return float32_to_ulong(fa);
+}
+unsigned long __fixunsdfdi(double a)
+{
+	float64 da;
+	da.d = a;
+	
+	return float64_to_ulong(da);
+}
+ 
+unsigned long long __fixunssfti(float a)
+{
+	float32 fa;
+	fa.f = a;
+	
+	return float32_to_ulonglong(fa);
+}
+unsigned long long __fixunsdfti(double a)
+{
+	float64 da;
+	da.d = a;
+	
+	return float64_to_ulonglong(da);
+}
+ 
+float __floatsisf(int i)
+{
+	float32 fa;
+	
+	fa = int_to_float32(i);
+	return fa.f;
+}
+double __floatsidf(int i)
+{
+	float64 da;
+	
+	da = int_to_float64(i);
+	return da.d;
+}
+ 
+float __floatdisf(long i)
+{
+	float32 fa;
+	
+	fa = long_to_float32(i);
+	return fa.f;
+}
+double __floatdidf(long i)
+{
+	float64 da;
+	
+	da = long_to_float64(i);
+	return da.d;
+}
+ 
+float __floattisf(long long i)
+{
+	float32 fa;
+	
+	fa = longlong_to_float32(i);
+	return fa.f;
+}
+double __floattidf(long long i)
+{
+	float64 da;
+	
+	da = longlong_to_float64(i);
+	return da.d;
+}
+
+float __floatunsisf(unsigned int i)
+{
+	float32 fa;
+	
+	fa = uint_to_float32(i);
+	return fa.f;
+}
+double __floatunsidf(unsigned int i)
+{
+	float64 da;
+	
+	da = uint_to_float64(i);
+	return da.d;
+}
+ 
+float __floatundisf(unsigned long i)
+{
+	float32 fa;
+	
+	fa = ulong_to_float32(i);
+	return fa.f;
+}
+double __floatundidf(unsigned long i)
+{
+	float64 da;
+	
+	da = ulong_to_float64(i);
+	return da.d;
+}
+ 
+float __floatuntisf(unsigned long long i)
+{
+	float32 fa;
+	
+	fa = ulonglong_to_float32(i);
+	return fa.f;
+}
+double __floatuntidf(unsigned long long i)
+{
+	float64 da;
+	
+	da = ulonglong_to_float64(i);
+	return da.d;
+}
+
+/* Comparison functions */
+/* Comparison functions */
+
+/* a<b .. -1
+ * a=b ..  0
+ * a>b ..  1
+ * */
+
+int __cmpsf2(float a, float b) 
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
+		return 1; /* no special constant for unordered - maybe signaled? */
+	};
+
+	
+	if (isFloat32eq(fa, fb)) {
+		return 0;
+	};
+	
+	if (isFloat32lt(fa, fb)) {
+		return -1;
+		};
+	return 1;
+}
+
+int __unordsf2(float a, float b) 
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	return ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) );
+}
+
+/** 
+ * @return zero, if neither argument is a NaN and are equal
+ * */
+int __eqsf2(float a, float b) 
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
+		/* TODO: sigNaNs*/
+		return 1;
+		};
+	return isFloat32eq(fa, fb) - 1;
+}
+
+/* strange behavior, but it was in gcc documentation */
+int __nesf2(float a, float b) 
+{
+	return __eqsf2(a, b);
+}
+
+/* return value >= 0 if a>=b and neither is NaN */
+int __gesf2(float a, float b)
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
+		/* TODO: sigNaNs*/
+		return -1;
+		};
+	
+	if (isFloat32eq(fa, fb)) {
+		return 0;
+	};
+	
+	if (isFloat32gt(fa, fb)) {
+		return 1;
+		};
+	
+	return -1;
+}
+
+/** Return negative value, if a<b and neither is NaN*/
+int __ltsf2(float a, float b)
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
+		/* TODO: sigNaNs*/
+		return 1;
+		};
+	if (isFloat32lt(fa, fb)) {
+		return -1;
+		};
+	return 0;
+}
+
+/* return value <= 0 if a<=b and neither is NaN */
+int __lesf2(float a, float b)
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
+		/* TODO: sigNaNs*/
+		return 1;
+		};
+	
+	if (isFloat32eq(fa, fb)) {
+		return 0;
+	};
+	
+	if (isFloat32lt(fa, fb)) {
+		return -1;
+		};
+	
+	return 1;
+}
+
+/** Return positive value, if a>b and neither is NaN*/
+int __gtsf2(float a, float b)
+{
+	float32 fa, fb;
+	fa.f = a;
+	fb.f = b;
+	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
+		/* TODO: sigNaNs*/
+		return -1;
+		};
+	if (isFloat32gt(fa, fb)) {
+		return 1;
+		};
+	return 0;
+}
+
+/* Other functions */
+
+float __powisf2(float a, int b)
+{
+/* TODO: */
+	float32 fa;
+	fa.binary = FLOAT32_NAN;
+	return fa.f;
+}
+
+
+/** @}
+ */
+
Index: uspace/lib/softfloat/generic/sub.c
===================================================================
--- uspace/lib/softfloat/generic/sub.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/generic/sub.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,265 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#include<sftypes.h>
+#include<sub.h>
+#include<comparison.h>
+
+/** Subtract two float32 numbers with same signs
+ */
+float32 subFloat32(float32 a, float32 b)
+{
+	int expdiff;
+	uint32_t exp1, exp2, frac1, frac2;
+	float32 result;
+
+	result.f = 0;
+	
+	expdiff = a.parts.exp - b.parts.exp;
+	if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts.fraction < b.parts.fraction))) {
+		if (isFloat32NaN(b)) {
+			/* TODO: fix SigNaN */
+			if (isFloat32SigNaN(b)) {
+			};
+			return b;
+		};
+		
+		if (b.parts.exp == FLOAT32_MAX_EXPONENT) { 
+			b.parts.sign = !b.parts.sign; /* num -(+-inf) = -+inf */
+			return b;
+		}
+		
+		result.parts.sign = !a.parts.sign; 
+		
+		frac1 = b.parts.fraction;
+		exp1 = b.parts.exp;
+		frac2 = a.parts.fraction;
+		exp2 = a.parts.exp;
+		expdiff *= -1;
+	} else {
+		if (isFloat32NaN(a)) {
+			/* TODO: fix SigNaN */
+			if (isFloat32SigNaN(a) || isFloat32SigNaN(b)) {
+			};
+			return a;
+		};
+		
+		if (a.parts.exp == FLOAT32_MAX_EXPONENT) { 
+			if (b.parts.exp == FLOAT32_MAX_EXPONENT) {
+				/* inf - inf => nan */
+				/* TODO: fix exception */
+				result.binary = FLOAT32_NAN;
+				return result;
+			};
+			return a;
+		}
+		
+		result.parts.sign = a.parts.sign;
+		
+		frac1 = a.parts.fraction;
+		exp1 = a.parts.exp;
+		frac2 = b.parts.fraction;
+		exp2 = b.parts.exp;	
+	};
+	
+	if (exp1 == 0) {
+		/* both are denormalized */
+		result.parts.fraction = frac1-frac2;
+		if (result.parts.fraction > frac1) {
+			/* TODO: underflow exception */
+			return result;
+		};
+		result.parts.exp = 0;
+		return result;
+	};
+
+	/* add hidden bit */
+	frac1 |= FLOAT32_HIDDEN_BIT_MASK; 
+	
+	if (exp2 == 0) {
+		/* denormalized */
+		--expdiff;	
+	} else {
+		/* normalized */
+		frac2 |= FLOAT32_HIDDEN_BIT_MASK;
+	};
+	
+	/* create some space for rounding */
+	frac1 <<= 6;
+	frac2 <<= 6;
+	
+	if (expdiff > FLOAT32_FRACTION_SIZE + 1) {
+	     goto done;	
+	     };
+	
+	frac1 = frac1 - (frac2 >> expdiff);
+done:
+	/* TODO: find first nonzero digit and shift result and detect possibly underflow */
+	while ((exp1 > 0) && (!(frac1 & (FLOAT32_HIDDEN_BIT_MASK << 6 )))) {
+		--exp1;
+		frac1 <<= 1;
+			/* TODO: fix underflow - frac1 == 0 does not necessary means underflow... */
+	};
+	
+	/* rounding - if first bit after fraction is set then round up */
+	frac1 += 0x20;
+
+	if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) {
+		++exp1;
+		frac1 >>= 1;
+	};
+	
+	/*Clear hidden bit and shift */
+	result.parts.fraction = ((frac1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)); 
+	result.parts.exp = exp1;
+	
+	return result;
+}
+
+/** Subtract two float64 numbers with same signs
+ */
+float64 subFloat64(float64 a, float64 b)
+{
+	int expdiff;
+	uint32_t exp1, exp2;
+	uint64_t frac1, frac2;
+	float64 result;
+
+	result.d = 0;
+	
+	expdiff = a.parts.exp - b.parts.exp;
+	if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts.fraction < b.parts.fraction))) {
+		if (isFloat64NaN(b)) {
+			/* TODO: fix SigNaN */
+			if (isFloat64SigNaN(b)) {
+			};
+			return b;
+		};
+		
+		if (b.parts.exp == FLOAT64_MAX_EXPONENT) { 
+			b.parts.sign = !b.parts.sign; /* num -(+-inf) = -+inf */
+			return b;
+		}
+		
+		result.parts.sign = !a.parts.sign; 
+		
+		frac1 = b.parts.fraction;
+		exp1 = b.parts.exp;
+		frac2 = a.parts.fraction;
+		exp2 = a.parts.exp;
+		expdiff *= -1;
+	} else {
+		if (isFloat64NaN(a)) {
+			/* TODO: fix SigNaN */
+			if (isFloat64SigNaN(a) || isFloat64SigNaN(b)) {
+			};
+			return a;
+		};
+		
+		if (a.parts.exp == FLOAT64_MAX_EXPONENT) { 
+			if (b.parts.exp == FLOAT64_MAX_EXPONENT) {
+				/* inf - inf => nan */
+				/* TODO: fix exception */
+				result.binary = FLOAT64_NAN;
+				return result;
+			};
+			return a;
+		}
+		
+		result.parts.sign = a.parts.sign;
+		
+		frac1 = a.parts.fraction;
+		exp1 = a.parts.exp;
+		frac2 = b.parts.fraction;
+		exp2 = b.parts.exp;	
+	};
+	
+	if (exp1 == 0) {
+		/* both are denormalized */
+		result.parts.fraction = frac1 - frac2;
+		if (result.parts.fraction > frac1) {
+			/* TODO: underflow exception */
+			return result;
+		};
+		result.parts.exp = 0;
+		return result;
+	};
+
+	/* add hidden bit */
+	frac1 |= FLOAT64_HIDDEN_BIT_MASK; 
+	
+	if (exp2 == 0) {
+		/* denormalized */
+		--expdiff;	
+	} else {
+		/* normalized */
+		frac2 |= FLOAT64_HIDDEN_BIT_MASK;
+	};
+	
+	/* create some space for rounding */
+	frac1 <<= 6;
+	frac2 <<= 6;
+	
+	if (expdiff > FLOAT64_FRACTION_SIZE + 1) {
+	     goto done;	
+	     };
+	
+	frac1 = frac1 - (frac2 >> expdiff);
+done:
+	/* TODO: find first nonzero digit and shift result and detect possibly underflow */
+	while ((exp1 > 0) && (!(frac1 & (FLOAT64_HIDDEN_BIT_MASK << 6 )))) {
+		--exp1;
+		frac1 <<= 1;
+			/* TODO: fix underflow - frac1 == 0 does not necessary means underflow... */
+	};
+	
+	/* rounding - if first bit after fraction is set then round up */
+	frac1 += 0x20;
+
+	if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) {
+		++exp1;
+		frac1 >>= 1;
+	};
+	
+	/*Clear hidden bit and shift */
+	result.parts.fraction = ((frac1 >> 6) & (~FLOAT64_HIDDEN_BIT_MASK)); 
+	result.parts.exp = exp1;
+	
+	return result;
+}
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/add.h
===================================================================
--- uspace/lib/softfloat/include/add.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/add.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __ADD_H__
+#define __ADD_H__
+
+float32 addFloat32(float32 a, float32 b);
+
+float64 addFloat64(float64 a, float64 b);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/common.h
===================================================================
--- uspace/lib/softfloat/include/common.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/common.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __COMMON_H__
+#define __COMMON_H__
+
+#include<sftypes.h>
+
+float64 finishFloat64(int32_t cexp, uint64_t cfrac, char sign);
+
+int countZeroes64(uint64_t i);
+int countZeroes32(uint32_t i);
+int countZeroes8(uint8_t i);
+
+void roundFloat32(int32_t *exp, uint32_t *fraction);
+void roundFloat64(int32_t *exp, uint64_t *fraction);
+
+#endif
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/comparison.h
===================================================================
--- uspace/lib/softfloat/include/comparison.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/comparison.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __COMPARISON_H__
+#define __COMPARISON_H__
+
+inline int isFloat32NaN(float32 f);
+inline int isFloat32SigNaN(float32 f);
+
+inline int isFloat32Infinity(float32 f);
+inline int isFloat32Zero(float32 f);
+
+inline int isFloat64NaN(float64 d);
+inline int isFloat64SigNaN(float64 d);
+
+inline int isFloat64Infinity(float64 d);
+inline int isFloat64Zero(float64 d);
+
+inline int isFloat32eq(float32 a, float32 b);
+inline int isFloat32lt(float32 a, float32 b);
+inline int isFloat32gt(float32 a, float32 b);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/conversion.h
===================================================================
--- uspace/lib/softfloat/include/conversion.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/conversion.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __CONVERSION_H__
+#define __CONVERSION_H__
+
+float64 convertFloat32ToFloat64(float32 a);
+
+float32 convertFloat64ToFloat32(float64 a);
+
+uint32_t float32_to_uint32(float32 a);
+int32_t float32_to_int32(float32 a);
+
+uint64_t float32_to_uint64(float32 a);
+int64_t float32_to_int64(float32 a);
+
+uint64_t float64_to_uint64(float64 a);
+int64_t float64_to_int64(float64 a);
+
+uint32_t float64_to_uint32(float64 a);
+int32_t float64_to_int32(float64 a);
+
+float32 uint32_to_float32(uint32_t i);
+float32 int32_to_float32(int32_t i);
+
+float32 uint64_to_float32(uint64_t i);
+float32 int64_to_float32(int64_t i);
+
+float64 uint32_to_float64(uint32_t i);
+float64 int32_to_float64(int32_t i);
+
+float64 uint64_to_float64(uint64_t i);
+float64 int64_to_float64(int64_t i);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/div.h
===================================================================
--- uspace/lib/softfloat/include/div.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/div.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __DIV_H__
+#define __DIV_H__
+
+float32 divFloat32(float32 a, float32 b);
+float64 divFloat64(float64 a, float64 b);
+
+uint64_t divFloat64estim(uint64_t a, uint64_t b);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/mul.h
===================================================================
--- uspace/lib/softfloat/include/mul.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/mul.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __MUL_H__
+#define __MUL_H__
+
+float32 mulFloat32(float32 a, float32 b);
+
+float64 mulFloat64(float64 a, float64 b);
+
+void mul64integers(uint64_t a,uint64_t b, uint64_t *lo, uint64_t *hi);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/other.h
===================================================================
--- uspace/lib/softfloat/include/other.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/other.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __OTHER_H__
+#define __OTHER_H__
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/sftypes.h
===================================================================
--- uspace/lib/softfloat/include/sftypes.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/sftypes.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SFTYPES_H__
+#define __SFTYPES_H__
+
+#include <endian.h>
+#include <stdint.h>
+
+typedef union {
+	float f;
+	uint32_t binary;
+
+	struct 	{
+		#if __BYTE_ORDER == __BIG_ENDIAN
+		uint32_t sign:1;
+		uint32_t exp:8;
+		uint32_t fraction:23;
+		#elif __BYTE_ORDER == __LITTLE_ENDIAN
+		uint32_t fraction:23;
+		uint32_t exp:8;
+		uint32_t sign:1;
+		#else 
+			#error "Unknown endians."
+		#endif
+		} parts __attribute__ ((packed));
+ 	} float32;
+	
+typedef union {
+	double d;
+	uint64_t binary;
+	
+	struct	{
+		#if __BYTE_ORDER == __BIG_ENDIAN
+		uint64_t sign:1;
+		uint64_t exp:11;
+		uint64_t fraction:52;
+		#elif __BYTE_ORDER == __LITTLE_ENDIAN
+		uint64_t fraction:52;
+		uint64_t exp:11;
+		uint64_t sign:1;
+		#else 
+			#error "Unknown endians."
+		#endif
+		} parts __attribute__ ((packed));
+	} float64;
+
+#define FLOAT32_MAX 0x7f800000
+#define FLOAT32_MIN 0xff800000
+#define FLOAT64_MAX
+#define FLOAT64_MIN
+
+/* For recognizing NaNs or infinity use isFloat32NaN and is Float32Inf, comparing with this constants is not sufficient */
+#define FLOAT32_NAN 0x7FC00001
+#define FLOAT32_SIGNAN 0x7F800001
+#define FLOAT32_INF 0x7F800000
+
+#define FLOAT64_NAN 0x7FF8000000000001ll
+#define FLOAT64_SIGNAN 0x7FF0000000000001ll
+#define FLOAT64_INF 0x7FF0000000000000ll
+
+#define FLOAT32_FRACTION_SIZE 23
+#define FLOAT64_FRACTION_SIZE 52
+
+#define FLOAT32_HIDDEN_BIT_MASK 0x800000
+#define FLOAT64_HIDDEN_BIT_MASK 0x10000000000000ll
+
+#define FLOAT32_MAX_EXPONENT 0xFF
+#define FLOAT64_MAX_EXPONENT 0x7FF
+
+#define FLOAT32_BIAS 0x7F
+#define FLOAT64_BIAS 0x3FF
+#define FLOAT80_BIAS 0x3FFF
+
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/softfloat.h
===================================================================
--- uspace/lib/softfloat/include/softfloat.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/softfloat.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SOFTFLOAT_H__
+#define __SOFTFLOAT_H__
+
+float __addsf3(float a, float b);
+double __adddf3(double a, double b);
+long double __addtf3(long double a, long double b);
+long double __addxf3(long double a, long double b);
+ 
+float __subsf3(float a, float b);
+double __subdf3(double a, double b);
+long double __subtf3(long double a, long double b);
+long double __subxf3(long double a, long double b);
+ 
+float __mulsf3(float a, float b);
+double __muldf3(double a, double b);
+long double __multf3(long double a, long double b);
+long double __mulxf3(long double a, long double b);
+ 
+float __divsf3(float a, float b);
+double __divdf3(double a, double b);
+long double __divtf3(long double a, long double b);
+long double __divxf3(long double a, long double b);
+ 
+float __negsf2(float a);
+double __negdf2(double a);
+long double __negtf2(long double a);
+long double __negxf2(long double a);
+ 
+double __extendsfdf2(float a);
+long double __extendsftf2(float a);
+long double __extendsfxf2(float a);
+long double __extenddftf2(double a);
+long double __extenddfxf2(double a);
+ 
+double __truncxfdf2(long double a);
+double __trunctfdf2(long double a);
+float __truncxfsf2(long double a);
+float __trunctfsf2(long double a);
+float __truncdfsf2(double a);
+ 
+int __fixsfsi(float a);
+int __fixdfsi(double a);
+int __fixtfsi(long double a);
+int __fixxfsi(long double a);
+ 
+long __fixsfdi(float a);
+long __fixdfdi(double a);
+long __fixtfdi(long double a);
+long __fixxfdi(long double a);
+ 
+long long __fixsfti(float a);
+long long __fixdfti(double a);
+long long __fixtfti(long double a);
+long long __fixxfti(long double a);
+ 
+unsigned int __fixunssfsi(float a);
+unsigned int __fixunsdfsi(double a);
+unsigned int __fixunstfsi(long double a);
+unsigned int __fixunsxfsi(long double a);
+ 
+unsigned long __fixunssfdi(float a);
+unsigned long __fixunsdfdi(double a);
+unsigned long __fixunstfdi(long double a);
+unsigned long __fixunsxfdi(long double a);
+ 
+unsigned long long __fixunssfti(float a);
+unsigned long long __fixunsdfti(double a);
+unsigned long long __fixunstfti(long double a);
+unsigned long long __fixunsxfti(long double a);
+ 
+float __floatsisf(int i);
+double __floatsidf(int i);
+long double __floatsitf(int i);
+long double __floatsixf(int i);
+ 
+float __floatdisf(long i);
+double __floatdidf(long i);
+long double __floatditf(long i);
+long double __floatdixf(long i);
+ 
+float __floattisf(long long i);
+double __floattidf(long long i);
+long double __floattitf(long long i);
+long double __floattixf(long long i);
+ 
+float __floatunsisf(unsigned int i);
+double __floatunsidf(unsigned int i);
+long double __floatunsitf(unsigned int i);
+long double __floatunsixf(unsigned int i);
+ 
+float __floatundisf(unsigned long i);
+double __floatundidf(unsigned long i);
+long double __floatunditf(unsigned long i);
+long double __floatundixf(unsigned long i);
+ 
+float __floatuntisf(unsigned long long i);
+double __floatuntidf(unsigned long long i);
+long double __floatuntitf(unsigned long long i);
+long double __floatuntixf(unsigned long long i);
+ 
+int __cmpsf2(float a, float b);
+int __cmpdf2(double a, double b);
+int __cmptf2(long double a, long double b);
+ 
+int __unordsf2(float a, float b);
+int __unorddf2(double a, double b);
+int __unordtf2(long double a, long double b);
+ 
+int __eqsf2(float a, float b);
+int __eqdf2(double a, double b);
+int __eqtf2(long double a, long double b);
+ 
+int __nesf2(float a, float b);
+int __nedf2(double a, double b);
+int __netf2(long double a, long double b);
+ 
+int __gesf2(float a, float b);
+int __gedf2(double a, double b);
+int __getf2(long double a, long double b);
+ 
+int __ltsf2(float a, float b);
+int __ltdf2(double a, double b);
+int __lttf2(long double a, long double b);
+int __lesf2(float a, float b);
+int __ledf2(double a, double b);
+int __letf2(long double a, long double b);
+ 
+int __gtsf2(float a, float b);
+int __gtdf2(double a, double b);
+int __gttf2(long double a, long double b);
+ 
+/* Not implemented yet*/ 
+float __powisf2(float a, int b);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softfloat/include/sub.h
===================================================================
--- uspace/lib/softfloat/include/sub.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softfloat/include/sub.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2005 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /** @addtogroup softfloat	
+ * @{
+ */
+/** @file
+ */
+
+#ifndef __SUB_H__
+#define __SUB_H__
+
+float32 subFloat32(float32 a, float32 b);
+
+float64 subFloat64(float64 a, float64 b);
+
+#endif
+
+
+ /** @}
+ */
+
Index: uspace/lib/softint/Makefile
===================================================================
--- uspace/lib/softint/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softint/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,73 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Common compiler flags
+#
+
+LIBC_PREFIX = ../libc
+## Setup toolchain
+#
+
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+CFLAGS += -Iinclude
+
+## Sources
+#
+
+ARCH_SOURCES =
+
+GENERIC_SOURCES = \
+	generic/division.c
+
+GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
+
+.PHONY: all clean depend
+
+all: libsoftint.a
+
+-include Makefile.depend
+
+clean:
+	-rm -f libsoftint.a Makefile.depend
+	find generic/ -name '*.o' -follow -exec rm \{\} \;
+
+depend:
+	-makedepend $(DEFS) $(CFLAGS) -f - $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
+
+libsoftint.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
+	$(AR) rc libsoftint.a $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/lib/softint/generic/division.c
===================================================================
--- uspace/lib/softint/generic/division.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softint/generic/division.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softint
+ * @{
+ */ 
+/**
+ * @file
+ * SW implementation of 32 and 64 bit division and modulo.
+ */
+
+#include <division.h>
+
+#define ABSVAL(x) ( (x) > 0 ? (x) : -(x))
+#define SGN(x) ( (x) >= 0 ? 1 : 0 )
+				      
+static unsigned int divandmod32(unsigned int a, unsigned int b, unsigned int *remainder)
+{
+	unsigned int result;
+	int steps = sizeof(unsigned int) * 8; 
+	
+	*remainder = 0;
+	result = 0;
+	
+	if (b == 0) {
+		/* FIXME: division by zero */
+		return 0;
+	}
+	
+	if ( a < b) {
+		*remainder = a;
+		return 0;
+	}
+
+	for ( ; steps > 0; steps--) {
+		/* shift one bit to remainder */
+		*remainder = ( (*remainder) << 1) | (( a >> 31) & 0x1);
+		result <<= 1;
+		
+		if (*remainder >= b) {
+				*remainder -= b;
+				result |= 0x1;
+		}
+		a <<= 1;
+	}
+
+	return result;
+}
+
+
+static unsigned long long divandmod64(unsigned long long a, unsigned long long b, unsigned long long *remainder)
+{
+	unsigned long long result;
+	int steps = sizeof(unsigned long long) * 8; 
+	
+	*remainder = 0;
+	result = 0;
+	
+	if (b == 0) {
+		/* FIXME: division by zero */
+		return 0;
+	}
+	
+	if ( a < b) {
+		*remainder = a;
+		return 0;
+	}
+
+	for ( ; steps > 0; steps--) {
+		/* shift one bit to remainder */
+		*remainder = ( (*remainder) << 1) | ((a >> 63) & 0x1);
+		result <<= 1;
+		
+		if (*remainder >= b) {
+				*remainder -= b;
+				result |= 0x1;
+		}
+		a <<= 1;
+	}
+
+	return result;
+}
+
+/* 32bit integer division */
+int __divsi3(int a, int b) 
+{
+	unsigned int rem;
+	int result;
+	
+	result = (int)divandmod32(ABSVAL(a), ABSVAL(b), &rem);
+
+	if ( SGN(a) == SGN(b)) return result;
+	return -result;
+}
+
+/* 64bit integer division */
+long long __divdi3(long long a, long long b) 
+{
+	unsigned long long rem;
+	long long result;
+	
+	result = (long long)divandmod64(ABSVAL(a), ABSVAL(b), &rem);
+
+	if ( SGN(a) == SGN(b)) return result;
+	return -result;
+}
+
+/* 32bit unsigned integer division */
+unsigned int __udivsi3(unsigned int a, unsigned int b)
+{
+	unsigned int rem;
+	return divandmod32(a, b, &rem);
+}
+
+/* 64bit unsigned integer division */
+unsigned long long __udivdi3(unsigned long long a, unsigned long long b)
+{
+	unsigned long long  rem;
+	return divandmod64(a, b, &rem);
+}
+
+/* 32bit remainder of the signed division */
+int __modsi3(int a, int b)
+{
+	unsigned int rem;
+	divandmod32(a, b, &rem);
+	
+	/* if divident is negative, remainder must be too */
+	if (!(SGN(a))) {
+		return -((int)rem);
+	}
+	
+	return (int)rem;
+}
+
+/* 64bit remainder of the signed division */
+long long __moddi3(long long a,long  long b)
+{
+	unsigned long long rem;
+	divandmod64(a, b, &rem);
+	
+	/* if divident is negative, remainder must be too */
+	if (!(SGN(a))) {
+		return -((long long)rem);
+	}
+	
+	return (long long)rem;
+}
+
+/* 32bit remainder of the unsigned division */
+unsigned int __umodsi3(unsigned int a, unsigned int b)
+{
+	unsigned int rem;
+	divandmod32(a, b, &rem);
+	return rem;
+}
+
+/* 64bit remainder of the unsigned division */
+unsigned long long __umoddi3(unsigned long long a, unsigned long long b)
+{
+	unsigned long long rem;
+	divandmod64(a, b, &rem);
+	return rem;
+}
+
+unsigned long long __udivmoddi3(unsigned long long a, unsigned long long b, unsigned long long *c)
+{
+	return divandmod64(a, b, c);
+}
+
+/** @}
+ */
Index: uspace/lib/softint/include/division.h
===================================================================
--- uspace/lib/softint/include/division.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/lib/softint/include/division.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup softint
+ * @{
+ */ 
+/**
+ * @file
+ */
+
+#ifndef __SOFTINT_DIVISION_H__
+#define __SOFTINT_DIVISION_H__
+
+
+/* 32bit integer division */
+int __divsi3(int a, int b);
+
+/* 64bit integer division */
+long long __divdi3(long long a, long long b);
+
+/* 32bit unsigned integer division */
+unsigned int __udivsi3(unsigned int a, unsigned int b);
+
+/* 64bit unsigned integer division */
+unsigned long long __udivdi3(unsigned long long a, unsigned long long b);
+
+/* 32bit remainder of the signed division */
+int __modsi3(int a, int b);
+
+/* 64bit remainder of the signed division */
+long long __moddi3(long long a, long long b);
+
+/* 32bit remainder of the unsigned division */
+unsigned int __umodsi3(unsigned int a, unsigned int b);
+
+/* 64bit remainder of the unsigned division */
+unsigned long long __umoddi3(unsigned long long a, unsigned long long b);
+
+unsigned long long __udivmoddi3(unsigned long long a, unsigned long long b, unsigned long long *c); 
+
+#endif
+
+/** @}
+ */
+
Index: pace/libc/Makefile
===================================================================
--- uspace/libc/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,115 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Common compiler flags
-#
-
-LIBC_PREFIX = .
-SOFTINT_PREFIX = ../softint
-CONSOLE_PREFIX = ../console
-
-## Setup toolchain
-#
-
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-CFLAGS += -I$(CONSOLE_PREFIX)
-
-## Sources
-#
-
-
-GENERIC_SOURCES = \
-	generic/libc.c \
-	generic/ddi.c \
-	generic/as.c \
-	generic/cap.c \
-	generic/string.c \
-	generic/thread.c \
-	generic/task.c \
-	generic/futex.c \
-	generic/io/io.c \
-	generic/io/printf.c \
-	generic/io/stream.c \
-	generic/io/sprintf.c \
-	generic/io/snprintf.c \
-	generic/io/vprintf.c \
-	generic/io/vsprintf.c \
-	generic/io/vsnprintf.c \
-	generic/io/printf_core.c \
-	malloc/malloc.c \
-	generic/psthread.c \
-	generic/sysinfo.c \
-	generic/ipc.c \
-	generic/async.c \
-	generic/libadt/list.o \
-	generic/libadt/hash_table.o \
-	generic/time.c \
-	generic/err.c \
-	generic/stdlib.c \
-	generic/mman.c
-
-ARCH_SOURCES += \
-	arch/$(ARCH)/src/entry.s \
-	arch/$(ARCH)/src/thread_entry.s
-
-GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
-ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
-
-.PHONY: all clean depend kerninc
-
-all: kerninc libc.a arch/$(ARCH)/_link.ld
-
-kerninc:
-	ln -sfn ../../../kernel/generic/include include/kernel
-	ln -sfn kernel/arch include/arch
-	ln -sfn ../arch/$(ARCH)/include include/libarch
-
--include Makefile.depend
-
-clean:
-	-rm -f include/kernel include/arch include/libarch libc.a arch/$(ARCH)/_link.ld Makefile.depend
-	find generic/ arch/$(ARCH)/ -name '*.o' -follow -exec rm \{\} \;
-
-depend: kerninc
-	-makedepend $(DEFS) $(CFLAGS) -f - $(ARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
-
-libc.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
-	$(AR) rc libc.a $(LIBS) $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
-
-arch/$(ARCH)/_link.ld: arch/$(ARCH)/_link.ld.in
-	$(CC) $(DEFS) $(CFLAGS) -E -x c $< | grep -v "^\#" > $@
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/libc/Makefile.toolchain
===================================================================
--- uspace/libc/Makefile.toolchain	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,68 +1,0 @@
-#
-# Copyright (C) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-DEFS = -DARCH=$(ARCH)
-CFLAGS = -fno-builtin -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -O3 -nostdlib -nostdinc -I$(LIBC_PREFIX)/include
-LFLAGS = -M -N $(SOFTINT_PREFIX)/libsoftint.a
-AFLAGS =
-#-Werror
-
-## Setup platform configuration
-#
-
-include $(LIBC_PREFIX)/arch/$(ARCH)/Makefile.inc
-
-## Toolchain configuration
-#
-
-ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	AS = as
-	LD = ld
-	AR = ar
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-endif
-
-ifeq ($(COMPILER),icc_native)
-	CC = icc
-	AS = as
-	LD = ld
-	AR = ar
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-endif
-
-ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
-	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
-	AR = $(TOOLCHAIN_DIR)/$(TARGET)-ar
-	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
-endif
Index: pace/libc/arch/amd64/Makefile.inc
===================================================================
--- uspace/libc/arch/amd64/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = amd64-linux-gnu
-TOOLCHAIN_DIR = /usr/local/amd64/bin
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \
-		arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c
-
-LFLAGS += -N
-
-BFD_NAME = elf64-x86-64
-BFD_ARCH = i386:x86-64
Index: pace/libc/arch/amd64/_link.ld.in
===================================================================
--- uspace/libc/arch/amd64/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x1000;
-	
-	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.rodata*);
-	} :text
-	
-	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.data);
-	} :data
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	
-	.bss : {
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	. = ALIGN(0x1000);
-	_heap = .;
-	
-	/DISCARD/ : {
-		*(*);
-	}
-
-}
Index: pace/libc/arch/amd64/include/atomic.h
===================================================================
--- uspace/libc/arch/amd64/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,80 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64 amd64
- * @ingroup lc
- * @brief	amd64 architecture dependent parts of libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_ATOMIC_H_
-#define LIBC_amd64_ATOMIC_H_
-
-static inline void atomic_inc(atomic_t *val) {
-	asm volatile ("lock incq %0\n" : "=m" (val->count));
-}
-
-static inline void atomic_dec(atomic_t *val) {
-	asm volatile ("lock decq %0\n" : "=m" (val->count));
-}
-
-static inline long atomic_postinc(atomic_t *val) 
-{
-	long r;
-
-	asm volatile (
-		"movq $1, %0\n"
-		"lock xaddq %0, %1\n"
-		: "=r" (r), "=m" (val->count)
-	);
-
-	return r;
-}
-
-static inline long atomic_postdec(atomic_t *val) 
-{
-	long r;
-	
-	asm volatile (
-		"movq $-1, %0\n"
-		"lock xaddq %0, %1\n"
-		: "=r" (r), "=m" (val->count)
-	);
-	
-	return r;
-}
-
-#define atomic_preinc(val) (atomic_postinc(val)+1)
-#define atomic_predec(val) (atomic_postdec(val)-1)
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/config.h
===================================================================
--- uspace/libc/arch/amd64/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_CONFIG_H_
-#define LIBC_amd64_CONFIG_H_
-
-#define PAGE_WIDTH	12
-#define PAGE_SIZE	(1<<PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/* dummy */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/context_offset.h
===================================================================
--- uspace/libc/arch/amd64/include/context_offset.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,12 +1,0 @@
-/* This file is automatically generated by gencontext.c. */
-#define OFFSET_SP  0x0
-#define OFFSET_PC  0x8
-#define OFFSET_RBX 0x10
-#define OFFSET_RBP 0x18
-#define OFFSET_R12 0x20
-#define OFFSET_R13 0x28
-#define OFFSET_R14 0x30
-#define OFFSET_R15 0x38
-#define OFFSET_TLS 0x40
- 
- 
Index: pace/libc/arch/amd64/include/ddi.h
===================================================================
--- uspace/libc/arch/amd64/include/ddi.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../ia32/include/ddi.h
Index: pace/libc/arch/amd64/include/endian.h
===================================================================
--- uspace/libc/arch/amd64/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_ENDIAN_H_
-#define LIBC_amd64_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-#endif
-
-/** @}
- */
- 
- 
Index: pace/libc/arch/amd64/include/faddr.h
===================================================================
--- uspace/libc/arch/amd64/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_FADDR_H_
-#define LIBC_amd64_FADDR_H_
-
-#include <libarch/types.h>
-
-#define FADDR(fptr)		((uintptr_t) (fptr))
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/limits.h
===================================================================
--- uspace/libc/arch/amd64/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_LIMITS_H_
-#define LIBC_amd64_LIMITS_H_
-
-# define LONG_MIN MIN_INT64
-# define LONG_MAX MAX_INT64
-# define ULONG_MIN MIN_UINT64
-# define ULONG_MAX MAX_UINT64
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/psthread.h
===================================================================
--- uspace/libc/arch/amd64/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_PSTHREAD_H_
-#define LIBC_amd64_PSTHREAD_H_
-
-#include <types.h>
-
-/* According to ABI the stack MUST be aligned on 
- * 16-byte boundary. If it is not, the va_arg calling will
- * panic sooner or later
- */
-#define SP_DELTA     16
-
-/* We include only registers that must be preserved
- * during function call
- */
-typedef struct {
-    uint64_t sp;
-    uint64_t pc;
-    
-    uint64_t rbx;
-    uint64_t rbp;
-
-    uint64_t r12;
-    uint64_t r13;
-    uint64_t r14;
-    uint64_t r15;
-
-    uint64_t tls;
-} context_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/stackarg.h
===================================================================
--- uspace/libc/arch/amd64/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STACKARG_H_
-#define LIBC_STACKARG_H_
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/syscall.h
===================================================================
--- uspace/libc/arch/amd64/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- */
-
-#ifndef LIBC_amd64_SYSCALL_H_
-#define LIBC_amd64_SYSCALL_H_
-
-#include <syscall.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/thread.h
===================================================================
--- uspace/libc/arch/amd64/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,61 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_THREAD_H_
-#define LIBC_amd64_THREAD_H_
-
-#include <libc.h>
-
-typedef struct {
-	void *self;
-	void *pst_data;
-} tcb_t;
-
-static inline void __tcb_set(tcb_t *tcb)
-{
-	__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb);
-}
-
-static inline tcb_t * __tcb_get(void)
-{
-	void * retval;
-
-	asm ("movq %%fs:0, %0" : "=r"(retval));
-	return retval;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/include/types.h
===================================================================
--- uspace/libc/arch/amd64/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_amd64_TYPES_H_
-#define LIBC_amd64_TYPES_H_
-
-typedef unsigned long long sysarg_t;
-typedef unsigned long size_t;
-typedef signed long ssize_t;
-typedef ssize_t off_t;
-
-typedef signed char int8_t;
-typedef short int int16_t;
-typedef int int32_t;
-typedef long long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long int uint64_t;
-
-typedef uint64_t uintptr_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/amd64/src/entry.s
===================================================================
--- uspace/libc/arch/amd64/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#
-# Copyright (c) 2006 Ondrej Palkovsky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.section .init, "ax"
-
-.org 0
-
-.globl __entry
-.globl __entry_driver
-
-## User-space task entry point
-#
-#
-__entry:
-	call __main
-	call __io_init
-	call main
-	call __exit
-
-__entry_driver:
-	call __main
-	call main
-	call __exit
Index: pace/libc/arch/amd64/src/psthread.S
===================================================================
--- uspace/libc/arch/amd64/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,87 +1,0 @@
-#
-# Copyright (c) 2001-2004 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global context_save
-.global context_restore
-
-#include <libarch/context_offset.h>
-
-## Save current CPU context
-#
-# Save CPU context to context_t variable
-# pointed by the 1st argument. Returns 1 in EAX.
-#
-context_save:
-	movq (%rsp), %rdx     # the caller's return %eip
-	# In %edi is passed 1st argument
-	movq %rdx, OFFSET_PC(%rdi)
-	movq %rsp, OFFSET_SP(%rdi)
-	
-	movq %rbx, OFFSET_RBX(%rdi)
-	movq %rbp, OFFSET_RBP(%rdi)
-	movq %r12, OFFSET_R12(%rdi)
-	movq %r13, OFFSET_R13(%rdi)
-	movq %r14, OFFSET_R14(%rdi)
-	movq %r15, OFFSET_R15(%rdi)
-
-	# Save TLS
-	movq %fs:0, %rax
-	movq %rax, OFFSET_TLS(%rdi)
-		
-	xorq %rax,%rax		# context_save returns 1
-	incq %rax
-	ret
-
-
-## Restore current CPU context
-#
-# Restore CPU context from context_t variable
-# pointed by the 1st argument. Returns 0 in EAX.
-#
-context_restore:
-	movq OFFSET_R15(%rdi), %r15
-	movq OFFSET_R14(%rdi), %r14
-	movq OFFSET_R13(%rdi), %r13
-	movq OFFSET_R12(%rdi), %r12
-	movq OFFSET_RBP(%rdi), %rbp
-	movq OFFSET_RBX(%rdi), %rbx	
-	
-	movq OFFSET_SP(%rdi), %rsp   # ctx->sp -> %rsp
-	
-	movq OFFSET_PC(%rdi), %rdx
-	movq %rdx,(%rsp)
-
-	# Set thread local storage
-	movq OFFSET_TLS(%rdi), %rdi   # Set arg1 to TLS addr
-	movq $1, %r8
-	syscall
-
-	xorq %rax,%rax		# context_restore returns 0
-	ret
Index: pace/libc/arch/amd64/src/syscall.S
===================================================================
--- uspace/libc/arch/amd64/src/syscall.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,40 +1,0 @@
-#
-# Copyright (c) 2006 Ondrej Palkovsky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-	
-.globl __syscall
-
-	
-__syscall:
-	# rcx gets rewritten on syscall
-	movq %rcx, %r9
-	syscall
-	ret
-	
-.end __syscall
Index: pace/libc/arch/amd64/src/thread.c
===================================================================
--- uspace/libc/arch/amd64/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcamd64 amd64
- * @ingroup lc
- * @{
- */
-/** @file
-  * @ingroup libcia32
- */
-
-#include <thread.h>
-#include <malloc.h>
-
-/** Allocate TLS & TCB for initial module threads
- *
- * @param data Start of data section
- * @return pointer to tcb_t structure
- */
-tcb_t * __alloc_tls(void **data, size_t size)
-{
-	tcb_t *tcb;
-	
-	*data = malloc(sizeof(tcb_t) + size);
-
-	tcb = (tcb_t *) (*data + size);
-	tcb->self = tcb;
-
-	return tcb;
-}
-
-void __free_tls_arch(tcb_t *tcb, size_t size)
-{
-	void *start = ((void *)tcb) - size;
-	free(start);
-}
-
-/** @}
- */
Index: pace/libc/arch/amd64/src/thread_entry.s
===================================================================
--- uspace/libc/arch/amd64/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.globl __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-__thread_entry:
-	#
-	# RAX contains address of uarg
-	#
-	movq %rax, %rdi
-	call __thread_main
-	
-.end __thread_entry
Index: pace/libc/arch/arm32/Makefile.inc
===================================================================
--- uspace/libc/arch/arm32/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#
-# Copyright (c) 2007 Michal Kebrt, Pavel Jancik
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = arm-linux-gnu
-TOOLCHAIN_DIR = /usr/local/arm/bin
-CFLAGS += -ffixed-r9 -mtp=soft 
-LFLAGS += -N ../softint/libsoftint.a
-AFLAGS += 
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
-		arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c \
-		arch/$(ARCH)/src/eabi.S
-
-BFD_NAME = elf32-little
-BFD_ARCH = arm
Index: pace/libc/arch/arm32/_link.ld.in
===================================================================
--- uspace/libc/arch/arm32/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,52 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x1000;
-
-	.init ALIGN(0x1000): SUBALIGN(0x1000) {
-		*(.init);
-	} : text
-	.text : {
-		*(.text);
-        *(.rodata*);
-	} :text
-	
-	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.opd);
-		*(.data .data.*);
-		*(.sdata);
-	} :data
-
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-
-	.bss : {
-		*(.sbss);
-		*(.scommon);
-        *(COMMON);
-        *(.bss);
-	} :data
-	
-	. = ALIGN(0x1000);
-	_heap = .;
-	
-	/DISCARD/ : {
-		*(*);
-	}
-
-}
Index: pace/libc/arch/arm32/include/atomic.h
===================================================================
--- uspace/libc/arch/arm32/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,136 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32	
- * @{
- */
-/** @file
- *  @brief Atomic operations.
- */
-
-#ifndef LIBC_arm32_ATOMIC_H_
-#define LIBC_arm32_ATOMIC_H_
-
-/** Atomic addition.
- *
- * @param val Where to add.
- * @param i   Value to be added.
- *
- * @return Value after addition.
- */
-static inline long atomic_add(atomic_t *val, int i)
-{
-	int ret;
-	volatile long * mem = &(val->count);
-
-	asm volatile (
-	"1:\n"
-		"ldr r2, [%1]\n"
-		"add r3, r2, %2\n"
-		"str r3, %0\n"
-		"swp r3, r3, [%1]\n"
-		"cmp r3, r2\n"
-		"bne 1b\n"
-
-		: "=m" (ret)
-		: "r" (mem), "r" (i)
-		: "r3", "r2"
-	);
-
-	return ret;
-}
-
-
-/** Atomic increment.
- *
- * @param val Variable to be incremented.
- */
-static inline void atomic_inc(atomic_t *val)
-{
-	atomic_add(val, 1);
-}
-
-
-/** Atomic decrement.
- *
- * @param val Variable to be decremented.
- */
-static inline void atomic_dec(atomic_t *val)
-{
-	atomic_add(val, -1);
-}
-
-
-/** Atomic pre-increment.
- *
- * @param val Variable to be incremented.
- * @return    Value after incrementation.
- */
-static inline long atomic_preinc(atomic_t *val)
-{
-	return atomic_add(val, 1);
-}
-
-
-/** Atomic pre-decrement.
- *
- * @param val Variable to be decremented.
- * @return    Value after decrementation.
- */
-static inline long atomic_predec(atomic_t *val)
-{
-	return atomic_add(val, -1);
-}
-
-
-/** Atomic post-increment.
- *
- * @param val Variable to be incremented.
- * @return    Value before incrementation.
- */
-static inline long atomic_postinc(atomic_t *val)
-{
-	return atomic_add(val, 1) - 1;
-}
-
-
-/** Atomic post-decrement.
- *
- * @param val Variable to be decremented.
- * @return    Value before decrementation.
- */
-static inline long atomic_postdec(atomic_t *val)
-{
-	return atomic_add(val, -1) + 1;
-}
-
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/config.h
===================================================================
--- uspace/libc/arch/arm32/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32
- * @{
- */
-/** @file  
- *  @brief Configuration constants.
- */
-
-#ifndef LIBC_arm32_CONFIG_H_
-#define LIBC_arm32_CONFIG_H_
-
-#define PAGE_WIDTH	12
-#define PAGE_SIZE	(1 << PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/* dummy */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/endian.h
===================================================================
--- uspace/libc/arch/arm32/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32	
- * @{
- */
-/** @file 
- *  @brief Endianness definition.
- */
-
-#ifndef LIBC_arm32_ENDIAN_H_
-#define LIBC_arm32_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/faddr.h
===================================================================
--- uspace/libc/arch/arm32/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32	
- * @{
- */
-/** @file 
- *  @brief Function address conversion.
- */
-
-#ifndef LIBC_arm32_FADDR_H_
-#define LIBC_arm32_FADDR_H_
-
-#include <libarch/types.h>
-
-/** Calculate absolute address of function referenced by fptr pointer.
- *
- * @param f Function pointer.
- */
-#define FADDR(f)	 (f)
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/limits.h
===================================================================
--- uspace/libc/arch/arm32/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32	
- * @{
- */
-/** @file 
- *  @brief Limits declarations.
- */
-
-#ifndef LIBC_arm32__LIMITS_H_
-#define LIBC_arm32__LIMITS_H_
-
-#define LONG_MIN MIN_INT32
-#define LONG_MAX MAX_INT32
-#define ULONG_MIN MIN_UINT32
-#define ULONG_MAX MAX_UINT32
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/psthread.h
===================================================================
--- uspace/libc/arch/arm32/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,90 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32	
- * @{
- */
-/** @file 
- *  @brief psthread related declarations.
- */
-
-#ifndef LIBC_arm32_PSTHREAD_H_
-#define LIBC_arm32_PSTHREAD_H_
-
-#include <types.h>
-#include <align.h>
-#include "thread.h"
-
-/** Size of a stack item */
-#define STACK_ITEM_SIZE		4
-
-/** Stack alignment - see <a href="http://www.arm.com/support/faqdev/14269.html">ABI</a> for details */
-#define STACK_ALIGNMENT		8
-
-#define SP_DELTA	(0 + ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT))
-
-
-/** Sets data to the context. 
- *  
- *  @param c     Context (#context_t).
- *  @param _pc   Program counter.
- *  @param stack Stack address.
- *  @param size  Stack size.
- *  @param ptls  Pointer to the TCB.
- */
-#define context_set(c, _pc, stack, size, ptls) 			\
-	(c)->pc = (sysarg_t) (_pc);				\
-	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
-        (c)->tls = ((sysarg_t)(ptls)) + sizeof(tcb_t) + ARM_TP_OFFSET;
-
-
-/** Thread context. 
- *
- *  Only registers preserved accross function calls are included. r9 is used 
- *  to store a TLS address. -ffixed-r9 gcc forces gcc not to use this
- *  register. -mtp=soft forces gcc to use #__aeabi_read_tp to obtain
- *  TLS address.
- */
-typedef struct  {
-	uint32_t sp;
-	uint32_t pc;
-	uint32_t r4;
-	uint32_t r5;
-	uint32_t r6;
-	uint32_t r7;
-	uint32_t r8;
-	uint32_t tls;
-	uint32_t r10;
-	uint32_t r11;
-} context_t;
-
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/stackarg.h
===================================================================
--- uspace/libc/arch/arm32/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32
- * @{
- */
-/** @file
- *  @brief Empty.
- */
-
-#ifndef LIBC_arm32_STACKARG_H_
-#define LIBC_arm32_STACKARG_H_
-
-#endif
-
-/** @}
- */
-
Index: pace/libc/arch/arm32/include/syscall.h
===================================================================
--- uspace/libc/arch/arm32/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32
- * @{
- */
-/** @file
- *  @brief Empty.
- */
-
-#ifndef LIBC_arm32_SYSCALL_H_
-#define LIBC_arm32_SYSCALL_H_
-
-#include <syscall.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/thread.h
===================================================================
--- uspace/libc/arch/arm32/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,99 +1,0 @@
-/*
- * Copyright (c) 2007 Pavel Jancik, Michal Kebrt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32
- * @{
- */
-/** @file
- *  @brief Uspace threads and TLS.
- */
-
-#ifndef LIBC_arm32_THREAD_H_
-#define LIBC_arm32_THREAD_H_
-
-#include <unistd.h>
-
-/** Stack initial size. */
-#define THREAD_INITIAL_STACK_PAGES_NO 1
-
-/** Offsets for accessing __thread variables are shifted 8 bytes higher. */
-#define ARM_TP_OFFSET	(-8)
-
-/** TCB (Thread Control Block) struct. 
- *
- *  TLS starts just after this struct.
- */
-typedef struct {
-	/** psthread data. */
-	void *pst_data;
-} tcb_t;
-
-
-/** Sets TLS address to the r9 register.
- *
- *  @param tcb TCB (TLS starts behind)
- */
-static inline void __tcb_set(tcb_t *tcb)
-{
-	void *tls = (void *) tcb;
-	tls += sizeof(tcb_t) + ARM_TP_OFFSET;
-	asm volatile (
-		"mov r9, %0"
-		:
-		: "r"(tls)
-	);
-}
-
-
-/** Returns TCB address.
- *
- * @return TCB address (starts before TLS which address is stored in r9 register).
- */
-static inline tcb_t *__tcb_get(void)
-{
-	void *ret;
-	asm volatile (
-		"mov %0, r9"
-		: "=r"(ret)
-	);
-	return (tcb_t *) (ret - ARM_TP_OFFSET - sizeof(tcb_t));
-}
-
-
-/** Returns TLS address stored.
- *
- *  Implemented in assembly.
- *
- *  @return TLS address stored in r9 register
- */
-extern uintptr_t __aeabi_read_tp(void);
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/include/types.h
===================================================================
--- uspace/libc/arch/arm32/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32	
- * @{
- */
-/** @file 
- *  @brief Definitions of basic types like #uintptr_t.
- */
-
-#ifndef LIBC_arm32_TYPES_H_
-#define LIBC_arm32_TYPES_H_
-
-typedef unsigned int sysarg_t;
-typedef unsigned int size_t;
-typedef signed int ssize_t;
-typedef ssize_t off_t;
-
-typedef char int8_t;
-typedef short int int16_t;
-typedef long int int32_t;
-typedef long long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned long int uint32_t;
-typedef unsigned long long int uint64_t;
-
-typedef uint32_t uintptr_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/arm32/src/eabi.S
===================================================================
--- uspace/libc/arch/arm32/src/eabi.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#
-# Copyright (c) 2007 Pavel Jancik
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global __aeabi_read_tp
-
-__aeabi_read_tp:
-	mov r0, r9
-	mov pc, lr
Index: pace/libc/arch/arm32/src/entry.s
===================================================================
--- uspace/libc/arch/arm32/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-#
-# Copyright (c) 2007 Michal Kebrt, Pavel Jancik
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.section .init, "ax"
-
-.org 0
-
-.global __entry
-.global __entry_driver
-
-## User-space task entry point
-#
-#
-__entry:
-	bl __main
-	bl __io_init
-	bl main
-	bl __exit
-
-__entry_driver:
-	bl __main
-	bl main
-	bl __exit
-
Index: pace/libc/arch/arm32/src/psthread.S
===================================================================
--- uspace/libc/arch/arm32/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-#
-# Copyright (c) 2007 Michal Kebrt
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global context_save
-.global context_restore
-
-context_save:
-	stmia r0!, {sp, lr}
-	stmia r0!, {r4-r11}
-
-	# return 1
-	mov r0, #1
-	mov pc, lr
-
-context_restore:
-	ldmia r0!, {sp, lr}
-	ldmia r0!, {r4-r11}
-
-	#return 0
-	mov r0, #0
-	mov pc, lr
-
Index: pace/libc/arch/arm32/src/syscall.c
===================================================================
--- uspace/libc/arch/arm32/src/syscall.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Copyright (c) 2007 Pavel Jancik
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32
- * @{
- */
-/** @file
- *  @brief Syscall routine.
- */
-
-#include <libc.h>
-
-
-/** Syscall routine.
- *
- *  Stores p1-p4, id to r0-r4 registers and calls <code>swi</code>
- *  instruction. Returned value is read from r0 register.
- *
- *  @param p1 Parameter 1.
- *  @param p2 Parameter 2.
- *  @param p3 Parameter 3.
- *  @param p4 Parameter 4.
- *  @param id Number of syscall.
- *
- *  @return Syscall return value.
- */
-sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3,
-    const sysarg_t p4, const syscall_t id)
-{
-	register sysarg_t __arm_reg_r0 asm("r0") = p1;
-	register sysarg_t __arm_reg_r1 asm("r1") = p2;
-	register sysarg_t __arm_reg_r2 asm("r2") = p3;
-	register sysarg_t __arm_reg_r3 asm("r3") = p4;
-	register sysarg_t __arm_reg_r4 asm("r4") = id;
-
-	asm volatile ( "swi"
-		: "=r" (__arm_reg_r0)
-		: "r"  (__arm_reg_r0),
-		  "r"  (__arm_reg_r1),
-		  "r"  (__arm_reg_r2),
-		  "r"  (__arm_reg_r3),
-		  "r"  (__arm_reg_r4)
-	);
-
-	return __arm_reg_r0;
-}
-
-/** @}
- */
Index: pace/libc/arch/arm32/src/thread.c
===================================================================
--- uspace/libc/arch/arm32/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/*
- * Copyright (c) 2007 Pavel Jancik
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcarm32 arm32
-  * @brief arm32 architecture dependent parts of libc
-  * @ingroup lc
- * @{
- */
-/** @file
- *  @brief Uspace threads and TLS.
- */
-
-#include <thread.h>
-#include <malloc.h>
-
-/** Allocates TLS & TCB.
- *
- * @param data Start of data section (output parameter).
- * @param size Size of (tbss + tdata) sections.
- * @return     Pointer to the allocated #tcb_t structure.
- */
-tcb_t * __alloc_tls(void **data, size_t size)
-{
-	tcb_t *result;
-
-	result = malloc(sizeof(tcb_t) + size);
-	*data = ((void *)result) + sizeof(tcb_t);
-	return result;
-}
-
-/** Deallocates TLS & TCB.
- *
- * @param tcb TCB structure to be deallocated (along with corresponding TLS).
- * @param size Not used.
- */
-void __free_tls_arch(tcb_t *tcb, size_t size)
-{
-	free(tcb);
-}
-
-/** @}
- */
Index: pace/libc/arch/arm32/src/thread_entry.s
===================================================================
--- uspace/libc/arch/arm32/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-__thread_entry:
-        b __thread_main
Index: pace/libc/arch/ia32/Makefile.inc
===================================================================
--- uspace/libc/arch/ia32/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = i686-pc-linux-gnu
-TOOLCHAIN_DIR = /usr/local/i686/bin
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
-		arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c
-
-LFLAGS += -N
-
-BFD_NAME = elf32-i386
-BFD_ARCH = i386
Index: pace/libc/arch/ia32/_link.ld.in
===================================================================
--- uspace/libc/arch/ia32/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-        text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x1000;
-
-	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-                *(.rodata*);
-	} :text
-	
-	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.data);
-	} :data
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	.bss : {
-                *(COMMON);
-                *(.bss);
-	} :data
-	
-	. = ALIGN(0x1000);
-	_heap = .;
-	
-	/DISCARD/ : {
-		*(*);
-	}
-
-}
Index: pace/libc/arch/ia32/include/atomic.h
===================================================================
--- uspace/libc/arch/ia32/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,78 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_ATOMIC_H_
-#define LIBC_ia32_ATOMIC_H_
-
-static inline void atomic_inc(atomic_t *val) {
-	asm volatile ("lock incl %0\n" : "=m" (val->count));
-}
-
-static inline void atomic_dec(atomic_t *val) {
-	asm volatile ("lock decl %0\n" : "=m" (val->count));
-}
-
-static inline long atomic_postinc(atomic_t *val) 
-{
-	long r;
-
-	asm volatile (
-		"movl $1, %0\n"
-		"lock xaddl %0, %1\n"
-		: "=r" (r), "=m" (val->count)
-	);
-
-	return r;
-}
-
-static inline long atomic_postdec(atomic_t *val) 
-{
-	long r;
-	
-	asm volatile (
-		"movl $-1, %0\n"
-		"lock xaddl %0, %1\n"
-		: "=r" (r), "=m" (val->count)
-	);
-	
-	return r;
-}
-
-#define atomic_preinc(val) (atomic_postinc(val)+1)
-#define atomic_predec(val) (atomic_postdec(val)-1)
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/config.h
===================================================================
--- uspace/libc/arch/ia32/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_CONFIG_H_
-#define LIBC_ia32_CONFIG_H_
-
-#define PAGE_WIDTH	12
-#define PAGE_SIZE	(1<<PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/* dummy */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/ddi.h
===================================================================
--- uspace/libc/arch/ia32/include/ddi.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,75 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @file
- * @ingroup libcia32, libcamd64
- */
-
-#ifndef LIBC_ia32_DDI_H_
-#define LIBC_ia32_DDI_H_
-
-static inline void outb(int16_t port, uint8_t b)
-{
-	asm volatile ("outb %0, %1\n" :: "a" (b), "d" (port));
-}
-
-static inline void outw(int16_t port, int16_t w)
-{
-	asm volatile ("outw %0, %1\n" :: "a" (w), "d" (port));
-}
-
-static inline void outl(int16_t port, uint32_t l)
-{
-	asm volatile ("outl %0, %1\n" :: "a" (l), "d" (port));
-}
-
-static inline uint8_t inb(int16_t port)
-{
-	uint8_t val;
-
-	asm volatile ("inb %1, %0 \n" : "=a" (val) : "d"(port));
-	return val;
-}
-
-static inline int16_t inw(int16_t port)
-{
-	int16_t val;
-
-	asm volatile ("inw %1, %0 \n" : "=a" (val) : "d"(port));
-	return val;
-}
-
-static inline uint32_t inl(int16_t port)
-{
-	uint32_t val;
-
-	asm volatile ("inl %1, %0 \n" : "=a" (val) : "d"(port));
-	return val;
-}
-
-#endif
Index: pace/libc/arch/ia32/include/endian.h
===================================================================
--- uspace/libc/arch/ia32/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_ENDIAN_H_
-#define LIBC_ia32_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/faddr.h
===================================================================
--- uspace/libc/arch/ia32/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_FADDR_H_
-#define LIBC_ia32_FADDR_H_
-
-#include <libarch/types.h>
-
-#define FADDR(fptr)		((uintptr_t) (fptr))
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/limits.h
===================================================================
--- uspace/libc/arch/ia32/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32__LIMITS_H_
-#define LIBC_ia32__LIMITS_H_
-
-# define LONG_MIN MIN_INT32
-# define LONG_MAX MAX_INT32
-# define ULONG_MIN MIN_UINT32
-# define ULONG_MAX MAX_UINT32
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/psthread.h
===================================================================
--- uspace/libc/arch/ia32/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_PSTHREAD_H_
-#define LIBC_ia32_PSTHREAD_H_
-
-#include <types.h>
-
-/* According to ABI the stack MUST be aligned on 
- * 16-byte boundary. If it is not, the va_arg calling will
- * panic sooner or later
- */
-#define SP_DELTA     (12)
-
-/* We include only registers that must be preserved
- * during function call
- */
-typedef struct {
-	uint32_t sp;
-	uint32_t pc;
-	
-	uint32_t ebx;
-	uint32_t esi;
-	uint32_t edi;
-	uint32_t ebp;
-	
-	uint32_t tls;
-} context_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/stackarg.h
===================================================================
--- uspace/libc/arch/ia32/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,66 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-/*
- * Variable argument list manipulation macros
- * for architectures using stack to pass arguments.
- */
- 
-#ifndef LIBC_ia32_STACKARG_H_
-#define LIBC_ia32_STACKARG_H_
-
-#include <types.h>
-
-/* dont allow to define it second time in stdarg.h */
-#define __VARARGS_DEFINED
-
-typedef struct va_list {
-	int pos;
-	uint8_t *last;
-} va_list;
-
-#define va_start(ap, lst) \
-	(ap).pos = sizeof(lst); 			\
-	(ap).last = (uint8_t *) &(lst)
-
-#define va_arg(ap, type) 		\
-	(*((type *)((ap).last + ((ap).pos  += sizeof(type) ) - sizeof(type))))
-
-#define va_end(ap)
-
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/syscall.h
===================================================================
--- uspace/libc/arch/ia32/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- */
-
-#ifndef LIBC_ia32_SYSCALL_H_
-#define LIBC_ia32_SYSCALL_H_
-
-#include <syscall.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/thread.h
===================================================================
--- uspace/libc/arch/ia32/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,61 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_THREAD_H_
-#define LIBC_ia32_THREAD_H_
-
-#include <libc.h>
-
-typedef struct {
-	void *self;
-	void *pst_data;
-} tcb_t;
-
-static inline void __tcb_set(tcb_t *tcb)
-{
-	__SYSCALL1(SYS_TLS_SET, (sysarg_t) tcb);
-}
-
-static inline tcb_t * __tcb_get(void)
-{
-	void * retval;
-
-	asm ("movl %%gs:0, %0" : "=r"(retval));
-	return retval;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/include/types.h
===================================================================
--- uspace/libc/arch/ia32/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia32_TYPES_H_
-#define LIBC_ia32_TYPES_H_
-
-typedef unsigned int sysarg_t;
-typedef unsigned int size_t;
-typedef signed int ssize_t;
-typedef ssize_t off_t;
-
-typedef char int8_t;
-typedef short int int16_t;
-typedef int int32_t;
-typedef long long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long int uint64_t;
-
-typedef uint32_t uintptr_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia32/src/entry.s
===================================================================
--- uspace/libc/arch/ia32/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.section .init, "ax"
-
-.org 0
-
-.globl __entry
-.globl __entry_driver
-
-## User-space task entry point
-#
-#
-__entry:
-	mov %ss, %ax
-	mov %ax, %ds
-	mov %ax, %es
-	mov %ax, %fs
-	# Do not set %gs, it contains descriptor that can see TLS
-	
-	call __main
-	call __io_init
-	call main
-	call __exit
-	
-__entry_driver:
-	mov %ss, %ax
-	mov %ax, %ds
-	mov %ax, %es
-	mov %ax, %fs
-	# Do not set %gs, it contains descriptor that can see TLS
-	
-	call __main
-	call main
-	call __exit
Index: pace/libc/arch/ia32/src/psthread.S
===================================================================
--- uspace/libc/arch/ia32/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,84 +1,0 @@
-#
-# Copyright (c) 2001-2004 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global context_save
-.global context_restore
-
-
-## Save current CPU context
-#
-# Save CPU context to the context_t variable
-# pointed by the 1st argument. Returns 1 in EAX.
-#
-context_save:
-	movl 0(%esp),%eax	# the caller's return %eip
-	movl 4(%esp),%edx	# address of the kernel_context variable to save context to
-
-	movl %esp,0(%edx)	# %esp -> ctx->sp
-	movl %eax,4(%edx)	# %eip -> ctx->pc
-	movl %ebx,8(%edx)	# %ebx -> ctx->ebx
-	movl %esi,12(%edx)	# %esi -> ctx->esi
-	movl %edi,16(%edx)	# %edi -> ctx->edi
-	movl %ebp,20(%edx)	# %ebp -> ctx->ebp
-
-	# Save TLS
-	movl %gs:0, %eax
-	movl %eax, 24(%edx)     # tls -> ctx->tls
-	
-	xorl %eax,%eax		# context_save returns 1
-	incl %eax
-	ret
-
-
-## Restore saved CPU context
-#
-# Restore CPU context from context_t variable
-# pointed by the 1st argument. Returns 0 in EAX.
-#
-context_restore:
-	movl 4(%esp),%eax	# address of the kernel_context variable to restore context from
-	movl 0(%eax),%esp	# ctx->sp -> %esp
-	movl 4(%eax),%edx	# ctx->pc -> %edx
-	movl 8(%eax),%ebx	# ctx->ebx -> %ebx
-	movl 12(%eax),%esi	# ctx->esi -> %esi
-	movl 16(%eax),%edi	# ctx->edi -> %edi
-	movl 20(%eax),%ebp	# ctx->ebp -> %ebp
-
-	movl %edx,0(%esp)	# ctx->pc -> saver's return %eip
-
-	# Set thread local storage
-	pushl %edi
-	movl 24(%eax), %eax   # Set arg1 to TLS addr
-	movl $1, %edi         # Syscall 1
-	int $0x30
-	popl %edi
-	
-	xorl %eax,%eax		# context_restore returns 0
-	ret
Index: pace/libc/arch/ia32/src/syscall.c
===================================================================
--- uspace/libc/arch/ia32/src/syscall.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia32 ia32
- * @brief	ia32 architecture dependent parts of libc
- * @ingroup lc
- * @{
- */
-/** @file
- */
-
-#include <thread.h>
-#include <libc.h>
-
-sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, 
-		   const sysarg_t p4, const syscall_t id)
-{
-	sysarg_t ret;
-	
-	asm volatile (
-		"int $0x30\n"
-		: "=a" (ret)
-		: "a" (p1),
-		  "c" (p2),
-		  "d" (p3),
-		  "S" (p4),
-		  "D" (id)
-	);
-	
-	return ret;
-}
-
-/** @}
- */
Index: pace/libc/arch/ia32/src/thread.c
===================================================================
--- uspace/libc/arch/ia32/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../amd64/src/thread.c
Index: pace/libc/arch/ia32/src/thread_entry.s
===================================================================
--- uspace/libc/arch/ia32/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.globl __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-__thread_entry:
-	mov %ss, %dx
-	mov %dx, %ds
-	mov %dx, %es
-	mov %dx, %fs
-	# Do not set %gs, it contains descriptor that can see TLS
-
-	#
-	# EAX contains address of uarg.
-	#
-	pushl %eax
-	call __thread_main
-	
-	#
-	# Not reached.
-	#
-	
-.end __thread_entry
Index: pace/libc/arch/ia64/Makefile.inc
===================================================================
--- uspace/libc/arch/ia64/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = ia64-pc-linux-gnu
-TOOLCHAIN_DIR = /usr/local/ia64/bin
-CFLAGS += -fno-unwind-tables -DMALLOC_ALIGNMENT_16
-LFLAGS += -N ../softint/libsoftint.a
-AFLAGS += 
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \
-		arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c
-
-BFD_NAME = elf64-little
-BFD_ARCH = ia64-elf64
Index: pace/libc/arch/ia64/_link.ld.in
===================================================================
--- uspace/libc/arch/ia64/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,52 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x4000;
-
-	.init ALIGN(0x4000): SUBALIGN(0x4000) {
-		*(.init);
-	} : text
-	.text : {
-		*(.text);
-		*(.rodata*);
-	} :text
-
-	.got ALIGN(0x4000) : SUBALIGN(0x4000) {
-		_gp = .;
-		*(.got*);
-	} :data	
-	.data : {
-		*(.opd);
-		*(.data .data.*);
-		*(.sdata);
-	} :data
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	.bss : {
-		*(.sbss);
-		*(.scommon);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	. = ALIGN(0x4000);
-	_heap = .;
- 
-	/DISCARD/ : {
-		*(*);
-        }
-}
Index: pace/libc/arch/ia64/include/atomic.h
===================================================================
--- uspace/libc/arch/ia64/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,66 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_ATOMIC_H_
-#define LIBC_ia64_ATOMIC_H_
-
-/** Atomic addition.
- *
- * @param val Atomic value.
- * @param imm Value to add.
- *
- * @return Value before addition.
- */
-static inline long atomic_add(atomic_t *val, int imm)
-{
-	long v;
-
- 	asm volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), "+m" (val->count) : "i" (imm));
- 
-	return v;
-}
-
-static inline void atomic_inc(atomic_t *val) { atomic_add(val, 1); }
-static inline void atomic_dec(atomic_t *val) { atomic_add(val, -1); }
-
-static inline long atomic_preinc(atomic_t *val) { return atomic_add(val, 1) + 1; }
-static inline long atomic_predec(atomic_t *val) { return atomic_add(val, -1) - 1; }
-
-static inline long atomic_postinc(atomic_t *val) { return atomic_add(val, 1); }
-static inline long atomic_postdec(atomic_t *val) { return atomic_add(val, -1); }
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/config.h
===================================================================
--- uspace/libc/arch/ia64/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_CONFIG_H_
-#define LIBC_ia64_CONFIG_H_
-
-#define PAGE_WIDTH	14
-#define PAGE_SIZE	(1<<PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/* dummy */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/endian.h
===================================================================
--- uspace/libc/arch/ia64/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_ENDIAN_H_
-#define LIBC_ia64_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/faddr.h
===================================================================
--- uspace/libc/arch/ia64/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,53 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_FADDR_H_
-#define LIBC_ia64_FADDR_H_
-
-#include <libarch/types.h>
-
-/** 
- *
- * Calculate absolute address of function
- * referenced by fptr pointer.
- *
- * @param f Function pointer.
- *
- */
-#define FADDR(f)	 (*((uintptr_t *)(f)));
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/limits.h
===================================================================
--- uspace/libc/arch/ia64/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_LIMITS_H_
-#define LIBC_ia64_LIMITS_H_
-
-# define LONG_MIN MIN_INT64
-# define LONG_MAX MAX_INT64
-# define ULONG_MIN MIN_UINT64
-# define ULONG_MAX MAX_UINT64
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/psthread.h
===================================================================
--- uspace/libc/arch/ia64/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,139 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_PSTHREAD_H_
-#define LIBC_ia64_PSTHREAD_H_
-
-#include <types.h>
-#include <align.h>
-#include <libarch/stack.h>
-#include <libarch/types.h>
-
-/*
- * context_save() and context_restore() are both leaf procedures.
- * No need to allocate scratch area.
- */
-#define SP_DELTA	(0+ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT))
-
-#define PFM_MASK        (~0x3fffffffff)
-
-#define PSTHREAD_INITIAL_STACK_PAGES_NO 2
-/* Stack is divided into two equal parts (for memory stack and register stack). */
-#define PSTHREAD_INITIAL_STACK_DIVISION 2  
-
-#ifdef context_set
-#undef context_set
-#endif
-
-#define context_set(c, _pc, stack, size, tls) 								\
-	do {												\
-		(c)->pc = (uint64_t) _pc;								\
-		(c)->bsp = ((uint64_t) stack) + size / PSTHREAD_INITIAL_STACK_DIVISION;								\
-		(c)->ar_pfs &= PFM_MASK; 								\
-		(c)->sp = ((uint64_t) stack) + ALIGN_UP((size / PSTHREAD_INITIAL_STACK_DIVISION), STACK_ALIGNMENT) - SP_DELTA;		\
-		(c)->tp = (uint64_t) tls;								\
-	} while (0);
-	
-
-/*
- * Only save registers that must be preserved across
- * function calls.
- */
-typedef struct context {
-
-	/*
-	 * Application registers
-	 */
-	uint64_t ar_pfs;
-	uint64_t ar_unat_caller;
-	uint64_t ar_unat_callee;
-	uint64_t ar_rsc;
-	uint64_t bsp;		/* ar_bsp */
-	uint64_t ar_rnat;
-	uint64_t ar_lc;
-
-	/*
-	 * General registers
-	 */
-	uint64_t r1;
-	uint64_t r4;
-	uint64_t r5;
-	uint64_t r6;
-	uint64_t r7;
-	uint64_t sp;		/* r12 */
-	uint64_t tp;		/* r13 */
-	
-	/*
-	 * Branch registers
-	 */
-	uint64_t pc;		/* b0 */
-	uint64_t b1;
-	uint64_t b2;
-	uint64_t b3;
-	uint64_t b4;
-	uint64_t b5;
-
-	/*
-	 * Predicate registers
-	 */
-	uint64_t pr;
-
-	__r128 f2 __attribute__ ((aligned(16)));
-	__r128 f3;
-	__r128 f4;
-	__r128 f5;
-
-	__r128 f16;
-	__r128 f17;
-	__r128 f18;
-	__r128 f19;
-	__r128 f20;
-	__r128 f21;
-	__r128 f22;
-	__r128 f23;
-	__r128 f24;
-	__r128 f25;
-	__r128 f26;
-	__r128 f27;
-	__r128 f28;
-	__r128 f29;
-	__r128 f30;
-	__r128 f31;
-
-} context_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/stack.h
===================================================================
--- uspace/libc/arch/ia64/include/stack.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_STACK_H_
-#define LIBC_ia64_STACK_H_
-
-#define STACK_ITEM_SIZE			8
-#define STACK_ALIGNMENT			16
-#define STACK_SCRATCH_AREA_SIZE		16
-#define REGISTER_STACK_ALIGNMENT 	8
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/stackarg.h
===================================================================
--- uspace/libc/arch/ia64/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STACKARG_H_
-#define LIBC_STACKARG_H_
-
-#endif
-
-
- /** @}
- */
-
Index: pace/libc/arch/ia64/include/syscall.h
===================================================================
--- uspace/libc/arch/ia64/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- */
-
-#ifndef LIBC_ia64_SYSCALL_H_
-#define LIBC_ia64_SYSCALL_H_
-
-#include <syscall.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/thread.h
===================================================================
--- uspace/libc/arch/ia64/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,63 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64THREAD_H_
-#define LIBC_ia64THREAD_H_
-
-#define THREAD_INITIAL_STACK_PAGES_NO 2
-
-/* This structure must be exactly 16 bytes long */
-typedef struct {
-	void *dtv; /* unused in static linking*/
-	void *pst_data;
-} tcb_t;
-
-static inline void __tcb_set(tcb_t *tcb)
-{
-	asm volatile ("mov r13 = %0\n" : : "r" (tcb) : "r13");
-}
-
-static inline tcb_t *__tcb_get(void)
-{
-	void *retval;
-
-	asm volatile ("mov %0 = r13\n" : "=r" (retval));
-
-	return retval;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/include/types.h
===================================================================
--- uspace/libc/arch/ia64/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,68 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ia64_TYPES_H_
-#define LIBC_ia64_TYPES_H_
-
-typedef unsigned long long sysarg_t;
-typedef unsigned long size_t;
-typedef signed long ssize_t;
-typedef ssize_t off_t;
-
-typedef char int8_t;
-typedef short int int16_t;
-typedef int int32_t;
-typedef long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long int uint64_t;
-
-typedef uint64_t uintptr_t;
-
-typedef unsigned char __r8;                     /* Reserve byte */
-typedef unsigned short __r16;
-typedef unsigned int __r32;
-typedef unsigned long __r64;
-
-typedef struct __r128{
-	__r64 lo;
-	__r64 hi;
-} __r128;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ia64/src/entry.s
===================================================================
--- uspace/libc/arch/ia64/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,57 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.section .init, "ax"
-
-.org 0
-
-.globl __entry
-.globl __entry_driver
-
-## User-space task entry point
-#
-#
-__entry:
-	alloc loc0 = ar.pfs, 0, 1, 2, 0
-	mov r1 = _gp 
-	br.call.sptk.many b0 = __main
-0:
-	br.call.sptk.many b0 = __io_init
-1:
-	br.call.sptk.many b0 = main
-2:
-	br.call.sptk.many b0 = __exit
-
-__entry_driver:
-	alloc loc0 = ar.pfs, 0, 1, 2, 0
-	mov r1 = _gp 
-	br.call.sptk.many b0 = __main
-0:
-	br.call.sptk.many b0 = main
-1:
-	br.call.sptk.many b0 = __exit
Index: pace/libc/arch/ia64/src/psthread.S
===================================================================
--- uspace/libc/arch/ia64/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,246 +1,0 @@
-#
-# Copyright (c) 2005 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global context_save
-.global context_restore
-
-context_save:
-	alloc loc0 = ar.pfs, 1, 8, 0, 0
-	mov loc1 = ar.unat	;;
-	/* loc2 */
-	mov loc3 = ar.rsc
-
-	.auto
-
-	/*
-	 * Flush dirty registers to backing store.
-	 * After this ar.bsp and ar.bspstore are equal.
-	 */
-	flushrs
-	mov loc4 = ar.bsp	
-	
-	/*
-	 * Put RSE to enforced lazy mode.
-	 * So that ar.rnat can be read.
-	 */
-	and loc5 = ~3, loc3
-	mov ar.rsc = loc5
-	mov loc5 = ar.rnat
-
-	.explicit
-
-	mov loc6 = ar.lc
-	
-	/*
-	 * Save application registers
-	 */
-	st8 [in0] = loc0, 8	;;	/* save ar.pfs */
-	st8 [in0] = loc1, 8	;;	/* save ar.unat (caller) */
-	mov loc2 = in0		;;
-	add in0 = 8, in0	;;	/* skip ar.unat (callee) */
-	st8 [in0] = loc3, 8	;;	/* save ar.rsc */
-	st8 [in0] = loc4, 8	;;	/* save ar.bsp */
-	st8 [in0] = loc5, 8	;;	/* save ar.rnat */
-	st8 [in0] = loc6, 8	;;	/* save ar.lc */
-	
-	/*
-	 * Save general registers including NaT bits
-	 */
-	st8.spill [in0] = r1, 8		;;
-	st8.spill [in0] = r4, 8		;;
-	st8.spill [in0] = r5, 8		;;
-	st8.spill [in0] = r6, 8		;;
-	st8.spill [in0] = r7, 8		;;
-	st8.spill [in0] = r12, 8	;;	/* save sp */
-	st8.spill [in0] = r13, 8	;;	/* save tp */
-
-	mov loc3 = ar.unat		;;
-	st8 [loc2] = loc3		/* save ar.unat (callee) */
-
-	/*
-	 * Save branch registers
-	 */
-	mov loc2 = b0		;;
-	st8 [in0] = loc2, 8		/* save pc */
-	mov loc3 = b1		;;
-	st8 [in0] = loc3, 8
-	mov loc4 = b2		;;
-	st8 [in0] = loc4, 8
-	mov loc5 = b3		;;
-	st8 [in0] = loc5, 8
-	mov loc6 = b4		;;
-	st8 [in0] = loc6, 8
-	mov loc7 = b5		;;
-	st8 [in0] = loc7, 8
-
-	/*
-	 * Save predicate registers
-	 */
-	mov loc2 = pr		;;
-	st8 [in0] = loc2, 16;; 		/* Next fpu registers should be spilled to 16B aligned address */
-
-	/*
-	 * Save floating-point registers.
-	 */
-	stf.spill [in0] = f2, 16 ;;
-	stf.spill [in0] = f3, 16 ;;
-	stf.spill [in0] = f4, 16 ;;
-	stf.spill [in0] = f5, 16 ;;
-
-	stf.spill [in0] = f16, 16 ;;
-	stf.spill [in0] = f17, 16 ;;
-	stf.spill [in0] = f18, 16 ;;
-	stf.spill [in0] = f19, 16 ;;
-	stf.spill [in0] = f20, 16 ;;
-	stf.spill [in0] = f21, 16 ;;
-	stf.spill [in0] = f22, 16 ;;
-	stf.spill [in0] = f23, 16 ;;
-	stf.spill [in0] = f24, 16 ;;
-	stf.spill [in0] = f25, 16 ;;
-	stf.spill [in0] = f26, 16 ;;
-	stf.spill [in0] = f27, 16 ;;
-	stf.spill [in0] = f28, 16 ;;
-	stf.spill [in0] = f29, 16 ;;
-	stf.spill [in0] = f30, 16 ;;
-	stf.spill [in0] = f31, 16 ;;	
-
-	mov ar.unat = loc1
-	
-	add r8 = r0, r0, 1 		/* context_save returns 1 */
-	br.ret.sptk.many b0
-
-context_restore:
-	alloc loc0 = ar.pfs, 1, 9, 0, 0	;;
-
-	ld8 loc0 = [in0], 8	;;	/* load ar.pfs */
-	ld8 loc1 = [in0], 8	;;	/* load ar.unat (caller) */
-	ld8 loc2 = [in0], 8	;;	/* load ar.unat (callee) */
-	ld8 loc3 = [in0], 8	;;	/* load ar.rsc */
-	ld8 loc4 = [in0], 8	;;	/* load ar.bsp */
-	ld8 loc5 = [in0], 8	;;	/* load ar.rnat */
-	ld8 loc6 = [in0], 8	;;	/* load ar.lc */
-	
-	.auto	
-
-	/*
-	 * Invalidate the ALAT
-	 */
-	invala
-
-	/*
-	 * Put RSE to enforced lazy mode.
-	 * So that ar.bspstore and ar.rnat can be written.
-	 */
-	movl loc8 = ~3
-	and loc8 = loc3, loc8
-	mov ar.rsc = loc8
-
-	/*
-	 * Flush dirty registers to backing store.
-	 * We do this because we want the following move
-	 * to ar.bspstore to assign the same value to ar.bsp.
-	 */
-	flushrs
-
-	/*
-	 * Restore application registers
-	 */
-	mov ar.bspstore = loc4	/* rse.bspload = ar.bsp = ar.bspstore = loc4 */
-	mov ar.rnat = loc5
-	mov ar.pfs = loc0
-	mov ar.rsc = loc3
-
-	.explicit
-
-	mov ar.unat = loc2	;;
-	mov ar.lc = loc6
-	
-	/*
-	 * Restore general registers including NaT bits
-	 */
-	ld8.fill r1 = [in0], 8	;;
-	ld8.fill r4 = [in0], 8	;;
-	ld8.fill r5 = [in0], 8	;;
-	ld8.fill r6 = [in0], 8	;;
-	ld8.fill r7 = [in0], 8	;;
-	ld8.fill r12 = [in0], 8	;;	/* restore sp */
-	ld8.fill r13 = [in0], 8	;;
-
-	/* 
-	 * Restore branch registers
-	 */
-	ld8 loc2 = [in0], 8	;;	/* restore pc */
-	mov b0 = loc2
-	ld8 loc3 = [in0], 8	;;
-	mov b1 = loc3
-	ld8 loc4 = [in0], 8	;;
-	mov b2 = loc4
-	ld8 loc5 = [in0], 8	;;
-	mov b3 = loc5
-	ld8 loc6 = [in0], 8	;;
-	mov b4 = loc6
-	ld8 loc7 = [in0], 8	;;
-	mov b5 = loc7
-
-	/*
-	 * Restore predicate registers
-	 */
-	ld8 loc2 = [in0], 16	;;
-	mov pr = loc2, ~0
-
-	/*
-	 * Restore floating-point registers.
-	 */
-	ldf.fill f2 = [in0], 16 ;;
-	ldf.fill f3 = [in0], 16 ;;
-	ldf.fill f4 = [in0], 16 ;;
-	ldf.fill f5 = [in0], 16 ;;
-
-	ldf.fill f16 = [in0], 16 ;;
-	ldf.fill f17 = [in0], 16 ;;
-	ldf.fill f18 = [in0], 16 ;;
-	ldf.fill f19 = [in0], 16 ;;
-	ldf.fill f20 = [in0], 16 ;;
-	ldf.fill f21 = [in0], 16 ;;
-	ldf.fill f22 = [in0], 16 ;;
-	ldf.fill f23 = [in0], 16 ;;
-	ldf.fill f24 = [in0], 16 ;;
-	ldf.fill f25 = [in0], 16 ;;
-	ldf.fill f26 = [in0], 16 ;;
-	ldf.fill f27 = [in0], 16 ;;
-	ldf.fill f28 = [in0], 16 ;;
-	ldf.fill f29 = [in0], 16 ;;
-	ldf.fill f30 = [in0], 16 ;;
-	ldf.fill f31 = [in0], 16 ;;
-	
-	mov ar.unat = loc1
-	
-	mov r8 = r0			/* context_restore returns 0 */
-	br.ret.sptk.many b0
Index: pace/libc/arch/ia64/src/syscall.S
===================================================================
--- uspace/libc/arch/ia64/src/syscall.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-/**
- * Immediate operand for break instruction.
- * Be carefull about the value as Ski simulator
- * is somewhat sensitive to its value.
- *
- * 0 will be confused with Ski breakpoint.
- * And higher values will be confused with SSC's.
- */
-#define SYSCALL_IMM	1
-
-.global __syscall
-__syscall:
-	alloc r14 = ar.pfs, 5, 0, 0, 0 ;;
-	break SYSCALL_IMM
-	mov ar.pfs = r14 ;;
-	br.ret.sptk.many b0
Index: pace/libc/arch/ia64/src/thread.c
===================================================================
--- uspace/libc/arch/ia64/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,65 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcia64 ia64
-  * @brief ia64 architecture dependent parts of libc
-  * @ingroup lc
- * @{
- */
-/** @file
- */
-
-#include <thread.h>
-#include <malloc.h>
-
-/** Allocate TLS & TCB for initial module threads
- *
- * @param data Start of data section
- * @return pointer to tcb_t structure
- */
-extern char _tdata_start;
-extern char _tbss_end;
-tcb_t * __alloc_tls(void **data, size_t size)
-{
-	tcb_t *tcb;
-	
-/*	ASSERT(sizeof(tcb_t) == 16); */
-
-	tcb = malloc(sizeof(tcb_t) + size);
-	*data = ((void *) tcb) + 16;
-
-	return tcb;
-}
-
-void __free_tls_arch(tcb_t *tcb, size_t size)
-{
-	free(tcb);
-}
-
-/** @}
- */
Index: pace/libc/arch/ia64/src/thread_entry.s
===================================================================
--- uspace/libc/arch/ia64/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,52 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.globl __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-__thread_entry:
-	alloc loc0 = ar.pfs, 0, 1, 1, 0
-
-	mov r1 = _gp
-	
-	#
-	# r8 contains address of uarg structure.
-	#
-	
-	mov out0 = r8
-	br.call.sptk.many b0 = __thread_main
-	
-	#
-	# Not reached.
-	#
-	
-.end __thread_entry
Index: pace/libc/arch/mips32/Makefile.inc
===================================================================
--- uspace/libc/arch/mips32/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = mipsel-linux-gnu
-TOOLCHAIN_DIR = /usr/local/mipsel/bin
-CFLAGS += -mips3
-
--include ../Makefile.config
-ifeq ($(CONFIG_MIPS_FPU),y)
-	CFLAGS += -DCONFIG_MIPS_FPU
-endif
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
-	arch/$(ARCH)/src/psthread.S \
-	arch/$(ARCH)/src/thread.c
-
-
-BFD_ARCH = mips
-BFD_NAME = elf32-little
Index: pace/libc/arch/mips32/_link.ld.in
===================================================================
--- uspace/libc/arch/mips32/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,56 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x4000;
-	
-	.init ALIGN(0x4000) : SUBALIGN(0x4000) {
-		*(.init);
-	} :text
-	.text : {
-	        *(.text);
-		*(.rodata*);
-	} :text
-
-	.data : {
-		*(.data);
-		*(.data.rel*);
-	} :data
-
-	.got : {
-		_gp = .;
-		*(.got);
-	} :data
-
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-
-	.sbss : {
-		*(.scommon);
-		*(.sbss);
-	}	
-	.bss : {
-		*(.bss);
-		*(COMMON);
-	} :data
-
-	. = ALIGN(0x4000);
-	_heap = .;
-
-	/DISCARD/ : {
-		*(*);
-	}
-}
Index: pace/libc/arch/mips32/include/atomic.h
===================================================================
--- uspace/libc/arch/mips32/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32	
- * @{
- */
-/** @file
- * @ingroup libcmips32eb	
- */
-
-#ifndef LIBC_mips32_ATOMIC_H_
-#define LIBC_mips32_ATOMIC_H_
-
-#define atomic_inc(x)	((void) atomic_add(x, 1))
-#define atomic_dec(x)	((void) atomic_add(x, -1))
-
-#define atomic_postinc(x) (atomic_add(x, 1) - 1)
-#define atomic_postdec(x) (atomic_add(x, -1) + 1)
-
-#define atomic_preinc(x) atomic_add(x, 1)
-#define atomic_predec(x) atomic_add(x, -1)
-
-/* Atomic addition of immediate value.
- *
- * @param val Memory location to which will be the immediate value added.
- * @param i Signed immediate that will be added to *val.
- *
- * @return Value after addition.
- */
-static inline long atomic_add(atomic_t *val, int i)
-{
-	long tmp, v;
-
-	asm volatile (
-		"1:\n"
-		"	ll %0, %1\n"
-		"	addiu %0, %0, %3\n"	/* same as addi, but never traps on overflow */
-		"       move %2, %0\n"
-		"	sc %0, %1\n"
-		"	beq %0, %4, 1b\n"	/* if the atomic operation failed, try again */
-		/*	nop	*/		/* nop is inserted automatically by compiler */
-		: "=r" (tmp), "=m" (val->count), "=r" (v)
-		: "i" (i), "i" (0)
-		);
-
-	return v;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/config.h
===================================================================
--- uspace/libc/arch/mips32/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_mips32_CONFIG_H_
-#define LIBC_mips32_CONFIG_H_
-
-#define PAGE_WIDTH	14
-#define PAGE_SIZE	(1<<PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/* dummy */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/context_offset.h
===================================================================
--- uspace/libc/arch/mips32/include/context_offset.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,28 +1,0 @@
-/* This file is automatically generated by gencontext.c. */
-/* struct context */
-#define OFFSET_SP      0x0
-#define OFFSET_PC      0x4
-#define OFFSET_S0      0x8
-#define OFFSET_S1      0xc
-#define OFFSET_S2      0x10
-#define OFFSET_S3      0x14
-#define OFFSET_S4      0x18
-#define OFFSET_S5      0x1c
-#define OFFSET_S6      0x20
-#define OFFSET_S7      0x24
-#define OFFSET_S8      0x28
-#define OFFSET_GP      0x2c
-#define OFFSET_TLS     0x30
-
-#define OFFSET_F20     0x34
-#define OFFSET_F21     0x38
-#define OFFSET_F22     0x3c
-#define OFFSET_F23     0x40
-#define OFFSET_F24     0x44
-#define OFFSET_F25     0x48
-#define OFFSET_F26     0x4c
-#define OFFSET_F27     0x50
-#define OFFSET_F28     0x54
-#define OFFSET_F29     0x58
-#define OFFSET_F30     0x5c
-
Index: pace/libc/arch/mips32/include/endian.h
===================================================================
--- uspace/libc/arch/mips32/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32 mips32
-  * @brief mips32 architecture dependent parts of libc
-  * @ingroup lc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_mips32_ENDIAN_H_
-#define LIBC_mips32_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/faddr.h
===================================================================
--- uspace/libc/arch/mips32/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_mips32_FADDR_H_
-#define LIBC_mips32_FADDR_H_
-
-#include <libarch/types.h>
-
-#define FADDR(fptr)		((uintptr_t) (fptr))
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/limits.h
===================================================================
--- uspace/libc/arch/mips32/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32	
- * @{
- */
-/** @file
- * @ingroup libcmips32eb	
- */
-
-#ifndef LIBC_mips32__LIMITS_H_
-#define LIBC_mips32__LIMITS_H_
-
-# define LONG_MIN MIN_INT32
-# define LONG_MAX MAX_INT32
-# define ULONG_MIN MIN_UINT32
-# define ULONG_MAX MAX_UINT32
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/psthread.h
===================================================================
--- uspace/libc/arch/mips32/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,90 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32	
- * @{
- */
-/** @file
- * @ingroup libcmips32eb	
- */
-
-#ifndef LIBC_mips32_PSTHREAD_H_
-#define LIBC_mips32_PSTHREAD_H_
-
-#include <types.h>
-
-/* We define our own context_set, because we need to set
- * the TLS pointer to the tcb+0x7000
- *
- * See tls_set in thread.h
- */
-#define context_set(c, _pc, stack, size, ptls) 			\
-	(c)->pc = (sysarg_t) (_pc);				\
-	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
-        (c)->tls = ((sysarg_t)(ptls)) + 0x7000 + sizeof(tcb_t);
-
-
-/* +16 is just for sure that the called function
- * have space to store it's arguments
- */
-#define SP_DELTA	(8+16)
-
-typedef struct  {
-	uint32_t sp;
-	uint32_t pc;
-	
-	uint32_t s0;
-	uint32_t s1;
-	uint32_t s2;
-	uint32_t s3;
-	uint32_t s4;
-	uint32_t s5;
-	uint32_t s6;
-	uint32_t s7;
-	uint32_t s8;
-	uint32_t gp;
-	uint32_t tls; /* Thread local storage(=k1) */
-
-	uint32_t f20;
-	uint32_t f21;
-	uint32_t f22;
-	uint32_t f23;
-	uint32_t f24;
-	uint32_t f25;
-	uint32_t f26;
-	uint32_t f27;
-	uint32_t f28;
-	uint32_t f29;
-	uint32_t f30;
-	
-} context_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/stackarg.h
===================================================================
--- uspace/libc/arch/mips32/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32	
- * @{
- */
-/** @file
- * @ingroup libcmips32eb	
- */
-
-#ifndef LIBC_mips32_STACKARG_H_
-#define LIBC_mips32_STACKARG_H_
-
-/* dont allow to define it second time in stdarg.h */
-#define __VARARGS_DEFINED
-
-#include <types.h>
-
-/**
- * va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not)
- * To satisfy this, paddings must be sometimes inserted. 
- */
-
-typedef uint8_t* va_list;
-
-#define va_start(ap, lst) \
-	((ap) = (va_list)&(lst) + sizeof(lst))
-
-#define va_arg(ap, type)	\
-	(((type *)((ap) = (va_list)( (sizeof(type) <= 4) ? ((uint32_t)((ap) + 2*4 - 1) & (~3)) : ((uint32_t)((ap) + 2*8 -1) & (~7)) )))[-1])
-
-#define va_end(ap)
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/syscall.h
===================================================================
--- uspace/libc/arch/mips32/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- */
-
-#ifndef LIBC_mips32_SYSCALL_H_
-#define LIBC_mips32_SYSCALL_H_
-
-#include <syscall.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/thread.h
===================================================================
--- uspace/libc/arch/mips32/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,79 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32	
- * @{
- */
-/** @file
- * @ingroup libcmips32eb	
- */
-
-/* TLS for MIPS is described in http://www.linux-mips.org/wiki/NPTL */
-
-#ifndef LIBC_mips32THREAD_H_
-#define LIBC_mips32THREAD_H_
-
-/* I did not find any specification (neither MIPS nor PowerPC), but
- * as I found it
- * - it uses Variant II
- * - TCB is at Address(First TLS Block)+0x7000.
- * - DTV is at Address(First TLS Block)+0x8000
- * - What would happen if the TLS data was larger then 0x7000?
- * - The linker never accesses DTV directly, has the second definition any
- *   sense?
- * We will make it this way:
- * - TCB is at TP-0x7000-sizeof(tcb)
- * - No assumption about DTV etc., but it will not have a fixed address
- */
-#define MIPS_TP_OFFSET 0x7000
-
-typedef struct {
-	void *pst_data;
-} tcb_t;
-
-static inline void __tcb_set(tcb_t *tcb)
-{
-	void *tp = tcb;
-	tp += MIPS_TP_OFFSET + sizeof(tcb_t);
-
-	asm volatile ("add $27, %0, $0" : : "r"(tp)); /* Move tls to K1 */
-}
-
-static inline tcb_t * __tcb_get(void)
-{
-	void * retval;
-
-	asm volatile("add %0, $27, $0" : "=r"(retval));
-
-	return (tcb_t *)(retval - MIPS_TP_OFFSET - sizeof(tcb_t));
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/include/types.h
===================================================================
--- uspace/libc/arch/mips32/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32	
- * @{
- */
-/** @file
- * @ingroup libcmips32eb
- */
-
-#ifndef LIBC_mips32_TYPES_H_
-#define LIBC_mips32_TYPES_H_
-
-typedef unsigned int sysarg_t;
-typedef unsigned int size_t;
-typedef signed int ssize_t;
-typedef ssize_t off_t;
-
-typedef char int8_t;
-typedef short int int16_t;
-typedef long int int32_t;
-typedef long long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned long int uint32_t;
-typedef unsigned long long int uint64_t;
-
-typedef uint32_t uintptr_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32/src/entry.s
===================================================================
--- uspace/libc/arch/mips32/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,89 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-.section .init, "ax"
-.global __entry
-.global __entry_driver
-.set noreorder
-.option pic2
-
-## User-space task entry point
-#
-#
-.ent __entry
-__entry:
-	.frame $sp, 32, $31
-	.cpload $25
-	
-	
-	# Mips o32 may store its arguments on stack, make space (16 bytes),
-	# so that it could work with -O0
-	# Make space additional 16 bytes for the stack frame
-
-	addiu $sp, -32
-	.cprestore 16   # Allow PIC code
-	
-	jal __main
-	nop
-	
-	jal __io_init
-	nop
-	
-	jal main
-	nop
-	
-	jal __exit
-	nop
-.end
-
-.ent __entry_driver
-__entry_driver:
-	.frame $sp, 32, $31
-	.cpload $25
-	
-	
-	# Mips o32 may store its arguments on stack, make space (16 bytes),
-	# so that it could work with -O0
-	# Make space additional 16 bytes for the stack frame
-
-	addiu $sp, -32
-	.cprestore 16   # Allow PIC code
-	
-	jal __main
-	nop
-	
-	jal main
-	nop
-	
-	jal __exit
-	nop
-.end
-# Alignment of output section data to 0x4000
-.section .data
-.align 14
Index: pace/libc/arch/mips32/src/psthread.S
===================================================================
--- uspace/libc/arch/mips32/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,161 +1,0 @@
-#
-# Copyright (c) 2003-2004 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.set noat
-.set noreorder
-
-
-#include <arch/asm/regname.h>
-#include <libarch/context_offset.h>
-	
-.global context_save
-.global context_restore
-	
-.macro CONTEXT_STORE r
-	sw $s0,OFFSET_S0(\r)
-	sw $s1,OFFSET_S1(\r)
-	sw $s2,OFFSET_S2(\r)
-	sw $s3,OFFSET_S3(\r)
-	sw $s4,OFFSET_S4(\r)
-	sw $s5,OFFSET_S5(\r)
-	sw $s6,OFFSET_S6(\r)
-	sw $s7,OFFSET_S7(\r)
-	sw $s8,OFFSET_S8(\r)
-	sw $gp,OFFSET_GP(\r)
-	sw $k1,OFFSET_TLS(\r)
-
-#ifdef CONFIG_MIPS_FPU	
-	mfc1 $t0,$20
-	sw $t0, OFFSET_F20(\r)
-
-	mfc1 $t0,$21
-	sw $t0, OFFSET_F21(\r)
-
-	mfc1 $t0,$22
-	sw $t0, OFFSET_F22(\r)
-
-	mfc1 $t0,$23
-	sw $t0, OFFSET_F23(\r)
-
-	mfc1 $t0,$24
-	sw $t0, OFFSET_F24(\r)
-
-	mfc1 $t0,$25
-	sw $t0, OFFSET_F25(\r)
-
-	mfc1 $t0,$26
-	sw $t0, OFFSET_F26(\r)
-
-	mfc1 $t0,$27
-	sw $t0, OFFSET_F27(\r)
-
-	mfc1 $t0,$28
-	sw $t0, OFFSET_F28(\r)
-
-	mfc1 $t0,$29
-	sw $t0, OFFSET_F29(\r)
-	
-	mfc1 $t0,$30
-	sw $t0, OFFSET_F30(\r)
-#endif	
-		
-	sw $ra,OFFSET_PC(\r)
-	sw $sp,OFFSET_SP(\r)
-.endm
-
-.macro CONTEXT_LOAD r
-	lw $s0,OFFSET_S0(\r)
-	lw $s1,OFFSET_S1(\r)
-	lw $s2,OFFSET_S2(\r)
-	lw $s3,OFFSET_S3(\r)
-	lw $s4,OFFSET_S4(\r)
-	lw $s5,OFFSET_S5(\r)
-	lw $s6,OFFSET_S6(\r)
-	lw $s7,OFFSET_S7(\r)
-	lw $s8,OFFSET_S8(\r)
-	lw $gp,OFFSET_GP(\r)
-	lw $k1,OFFSET_TLS(\r)
-
-#ifdef CONFIG_MIPS_FPU	
-	lw $t0, OFFSET_F20(\r)
-	mtc1 $t0,$20
-
-	lw $t0, OFFSET_F21(\r)
-	mtc1 $t0,$21
-
-	lw $t0, OFFSET_F22(\r)
-	mtc1 $t0,$22
-
-	lw $t0, OFFSET_F23(\r)
-	mtc1 $t0,$23
-
-	lw $t0, OFFSET_F24(\r)
-	mtc1 $t0,$24
-
-	lw $t0, OFFSET_F25(\r)
-	mtc1 $t0,$25
-
-	lw $t0, OFFSET_F26(\r)
-	mtc1 $t0,$26
-
-	lw $t0, OFFSET_F27(\r)
-	mtc1 $t0,$27
-
-	lw $t0, OFFSET_F28(\r)
-	mtc1 $t0,$28
-
-	lw $t0, OFFSET_F29(\r)
-	mtc1 $t0,$29
-
-	lw $t0, OFFSET_F30(\r)
-	mtc1 $t0,$30
-#endif	
-		
-	lw $ra,OFFSET_PC(\r)
-	lw $sp,OFFSET_SP(\r)
-.endm
-	
-context_save:
-	CONTEXT_STORE $a0
-
-	# context_save returns 1
-	j $ra
-	li $v0, 1	
-	
-context_restore:
-	CONTEXT_LOAD $a0
-
-	# Just for the jump into first function, but one instruction
-	# should not bother us
-	move $t9, $ra	
-	# context_restore returns 0
-	j $ra
-	xor $v0, $v0	
-
Index: pace/libc/arch/mips32/src/syscall.c
===================================================================
--- uspace/libc/arch/mips32/src/syscall.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,65 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup libcmips32
- * @{
- */
-/** @file
-  * @ingroup libcmips32eb	
- */
-
-#include <libc.h>
-
-sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, 
-		   const sysarg_t p3, const sysarg_t p4,
-		   const syscall_t id)
-{
-	register sysarg_t __mips_reg_a0 asm("$4") = p1;
-	register sysarg_t __mips_reg_a1 asm("$5") = p2;
-	register sysarg_t __mips_reg_a2 asm("$6") = p3;
-	register sysarg_t __mips_reg_a3 asm("$7") = p4;
-	register sysarg_t __mips_reg_v0 asm("$2") = id;
-	
-	asm volatile (
-		"syscall\n"
-		: "=r" (__mips_reg_v0)
-		: "r" (__mips_reg_a0),
-		  "r" (__mips_reg_a1),
-		  "r" (__mips_reg_a2),
-		  "r" (__mips_reg_a3),
-		  "r" (__mips_reg_v0)
-		: "%ra" /* We are a function call, although C does not 
-			 * know it */
-	);
-	
-	return __mips_reg_v0;
-}
-
- /** @}
- */
-
Index: pace/libc/arch/mips32/src/thread.c
===================================================================
--- uspace/libc/arch/mips32/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcmips32	
- * @{
- */
-/** @file
- * @ingroup libcmips32eb	
- */
-
-#include <thread.h>
-#include <malloc.h>
-
-/** Allocate TLS & TCB for initial module threads
- *
- * @param data (out) Start of TLS section
- * @param size Size of tdata+tbss section
- * @return pointer to tcb_t structure
- */
-tcb_t * __alloc_tls(void **data, size_t size)
-{
-	tcb_t *result;
-
-	result = malloc(sizeof(tcb_t) + size);
-	*data = ((void *)result) + sizeof(tcb_t);
-	return result;
-}
-
-void __free_tls_arch(tcb_t *tcb, size_t size)
-{
-	free(tcb);
-}
-
-/** @}
- */
Index: pace/libc/arch/mips32/src/thread_entry.s
===================================================================
--- uspace/libc/arch/mips32/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-	
-.set noat
-.set noreorder
-.option pic2
-	
-.globl __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-.ent __thread_entry
-__thread_entry:
-	.frame $sp, 32, $31
-	.cpload $25
-
-	#
-	# v0 contains address of uarg.
-	#
-	add $4, $2, 0
-	# Mips o32 may store its arguments on stack, make space
-	addiu $sp, -32
-	.cprestore 16
-	
-	jal __thread_main
-	nop
-		
-	#
-	# Not reached.
-	#
-.end __thread_entry
Index: pace/libc/arch/mips32eb/Makefile.inc
===================================================================
--- uspace/libc/arch/mips32eb/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = mips-sgi-irix5
-TOOLCHAIN_DIR = /usr/local/mips/bin
-CFLAGS += -mips3 
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
-		arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c
-
-LFLAGS += -N
-
-BFD_ARCH = mips
-BFD_NAME = elf32-big
Index: pace/libc/arch/mips32eb/_link.ld.in
===================================================================
--- uspace/libc/arch/mips32eb/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../mips32/_link.ld.in
Index: pace/libc/arch/mips32eb/include/atomic.h
===================================================================
--- uspace/libc/arch/mips32eb/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/atomic.h
Index: pace/libc/arch/mips32eb/include/config.h
===================================================================
--- uspace/libc/arch/mips32eb/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/config.h
Index: pace/libc/arch/mips32eb/include/context_offset.h
===================================================================
--- uspace/libc/arch/mips32eb/include/context_offset.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/context_offset.h
Index: pace/libc/arch/mips32eb/include/endian.h
===================================================================
--- uspace/libc/arch/mips32eb/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- 
-/** @addtogroup libcmips32eb mipseb32
-  * @brief mipseb32 architecture dependent parts of libc
-  * @ingroup lc
- * @{
- */
-/** @file
- */
-
-
-#ifndef LIBC_mips32eb_ENDIAN_H_
-#define LIBC_mips32eb_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __BIG_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/mips32eb/include/faddr.h
===================================================================
--- uspace/libc/arch/mips32eb/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/faddr.h
Index: pace/libc/arch/mips32eb/include/limits.h
===================================================================
--- uspace/libc/arch/mips32eb/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/limits.h
Index: pace/libc/arch/mips32eb/include/psthread.h
===================================================================
--- uspace/libc/arch/mips32eb/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/psthread.h
Index: pace/libc/arch/mips32eb/include/stackarg.h
===================================================================
--- uspace/libc/arch/mips32eb/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/stackarg.h
Index: pace/libc/arch/mips32eb/include/syscall.h
===================================================================
--- uspace/libc/arch/mips32eb/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/syscall.h
Index: pace/libc/arch/mips32eb/include/thread.h
===================================================================
--- uspace/libc/arch/mips32eb/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/thread.h
Index: pace/libc/arch/mips32eb/include/types.h
===================================================================
--- uspace/libc/arch/mips32eb/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../mips32/include/types.h
Index: pace/libc/arch/mips32eb/src
===================================================================
--- uspace/libc/arch/mips32eb/src	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../mips32/src
Index: pace/libc/arch/ppc32/Makefile.inc
===================================================================
--- uspace/libc/arch/ppc32/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = ppc-linux-gnu
-TOOLCHAIN_DIR = /usr/local/ppc/bin
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
-		arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c
-
-CFLAGS += -mcpu=powerpc -msoft-float -m32
-AFLAGS += -a32
-LFLAGS += -N
-
-BFD_NAME = elf32-powerpc
-BFD_ARCH = powerpc:common
Index: pace/libc/arch/ppc32/_link.ld.in
===================================================================
--- uspace/libc/arch/ppc32/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x1000;
-
-	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.rodata*);
-	} :text
-	
-	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.data);
-		*(.sdata);
-	} :data
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	.bss : {
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	. = ALIGN(0x1000);
-	_heap = .;
-	
-	/DISCARD/ : {
-		*(*);
-	}
-
-}
Index: pace/libc/arch/ppc32/include/atomic.h
===================================================================
--- uspace/libc/arch/ppc32/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,95 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_ATOMIC_H_
-#define LIBC_ppc32_ATOMIC_H_
-
-static inline void atomic_inc(atomic_t *val)
-{
-	long tmp;
-
-	asm volatile (
-		"1:\n"
-		"lwarx %0, 0, %2\n"
-		"addic %0, %0, 1\n"
-		"stwcx. %0, 0, %2\n"
-		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
-}
-
-static inline void atomic_dec(atomic_t *val)
-{
-	long tmp;
-
-	asm volatile (
-		"1:\n"
-		"lwarx %0, 0, %2\n"
-		"addic %0, %0, -1\n"
-		"stwcx.	%0, 0, %2\n"
-		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
-}
-
-static inline long atomic_postinc(atomic_t *val)
-{
-	atomic_inc(val);
-	return val->count - 1;
-}
-
-static inline long atomic_postdec(atomic_t *val)
-{
-	atomic_dec(val);
-	return val->count + 1;
-}
-
-static inline long atomic_preinc(atomic_t *val)
-{
-	atomic_inc(val);
-	return val->count;
-}
-
-static inline long atomic_predec(atomic_t *val)
-{
-	atomic_dec(val);
-	return val->count;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/config.h
===================================================================
--- uspace/libc/arch/ppc32/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libppc32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_CONFIG_H_
-#define LIBC_ppc32_CONFIG_H_
-
-#define PAGE_WIDTH	12
-#define PAGE_SIZE	(1<<PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/* dummy */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/context_offset.h
===================================================================
--- uspace/libc/arch/ppc32/include/context_offset.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,25 +1,0 @@
-/* struct context */
-#define OFFSET_SP    0x0
-#define OFFSET_PC    0x4
-#define OFFSET_R2    0x8
-#define OFFSET_R13   0xc
-#define OFFSET_R14   0x10
-#define OFFSET_R15   0x14
-#define OFFSET_R16   0x18
-#define OFFSET_R17   0x1c
-#define OFFSET_R18   0x20
-#define OFFSET_R19   0x24
-#define OFFSET_R20   0x28
-#define OFFSET_R21   0x2c
-#define OFFSET_R22   0x30
-#define OFFSET_R23   0x34
-#define OFFSET_R24   0x38
-#define OFFSET_R25   0x3c
-#define OFFSET_R26   0x40
-#define OFFSET_R27   0x44
-#define OFFSET_R28   0x48
-#define OFFSET_R29   0x4c
-#define OFFSET_R30   0x50
-#define OFFSET_R31   0x54
-#define OFFSET_CR    0x58
-#define OFFSET_CR    0x58
Index: pace/libc/arch/ppc32/include/endian.h
===================================================================
--- uspace/libc/arch/ppc32/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_ENDIAN_H_
-#define LIBC_ppc32_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __BIG_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/faddr.h
===================================================================
--- uspace/libc/arch/ppc32/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_FADDR_H_
-#define LIBC_ppc32_FADDR_H_
-
-#include <libarch/types.h>
-
-#define FADDR(fptr)		((uintptr_t) (fptr))
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/limits.h
===================================================================
--- uspace/libc/arch/ppc32/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_LIMITS_H_
-#define LIBC_ppc32_LIMITS_H_
-
-#define LONG_MIN MIN_INT32
-#define LONG_MAX MAX_INT32
-#define ULONG_MIN MIN_UINT32
-#define ULONG_MAX MAX_UINT32
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/psthread.h
===================================================================
--- uspace/libc/arch/ppc32/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,83 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_PSTHREAD_H_
-#define LIBC_ppc32_PSTHREAD_H_
-
-#include <types.h>
-
-/* We define our own context_set, because we need to set
- * the TLS pointer to the tcb+0x7000
- *
- * See tls_set in thread.h
- */
-#define context_set(c, _pc, stack, size, ptls) 			\
-	(c)->pc = (sysarg_t) (_pc);				\
-	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
-	(c)->tls = ((sysarg_t) (ptls)) + 0x7000 + sizeof(tcb_t);
-
-#define SP_DELTA	16
-
-typedef struct {
-	uint32_t sp;
-	uint32_t pc;
-	
-	uint32_t tls;
-	uint32_t r13;
-	uint32_t r14;
-	uint32_t r15;
-	uint32_t r16;
-	uint32_t r17;
-	uint32_t r18;
-	uint32_t r19;
-	uint32_t r20;
-	uint32_t r21;
-	uint32_t r22;
-	uint32_t r23;
-	uint32_t r24;
-	uint32_t r25;
-	uint32_t r26;
-	uint32_t r27;
-	uint32_t r28;
-	uint32_t r29;
-	uint32_t r30;
-	uint32_t r31;
-	
-	uint32_t cr;
-} __attribute__ ((packed)) context_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/regname.h
===================================================================
--- uspace/libc/arch/ppc32/include/regname.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,188 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_REGNAME_H_
-#define LIBC_ppc32_REGNAME_H_
-
-/* Condition Register Bit Fields */
-#define	cr0	0
-#define	cr1	1
-#define	cr2	2
-#define	cr3	3
-#define	cr4	4
-#define	cr5	5
-#define	cr6	6
-#define	cr7	7
-
-/* General Purpose Registers (GPRs) */
-#define	r0	0
-#define	r1	1
-#define	r2	2
-#define	r3	3
-#define	r4	4
-#define	r5	5
-#define	r6	6
-#define	r7	7
-#define	r8	8
-#define	r9	9
-#define	r10	10
-#define	r11	11
-#define	r12	12
-#define	r13	13
-#define	r14	14
-#define	r15	15
-#define	r16	16
-#define	r17	17
-#define	r18	18
-#define	r19	19
-#define	r20	20
-#define	r21	21
-#define	r22	22
-#define	r23	23
-#define	r24	24
-#define	r25	25
-#define	r26	26
-#define	r27	27
-#define	r28	28
-#define	r29	29
-#define	r30	30
-#define	r31	31
-
-/* GPR Aliases */
-#define	sp	1
-
-/* Floating Point Registers (FPRs) */
-#define	fr0		0
-#define	fr1		1
-#define	fr2		2
-#define	fr3		3
-#define	fr4		4
-#define	fr5		5
-#define	fr6		6
-#define	fr7		7
-#define	fr8		8
-#define	fr9		9
-#define	fr10	10
-#define	fr11	11
-#define	fr12	12
-#define	fr13	13
-#define	fr14	14
-#define	fr15	15
-#define	fr16	16
-#define	fr17	17
-#define	fr18	18
-#define	fr19	19
-#define	fr20	20
-#define	fr21	21
-#define	fr22	22
-#define	fr23	23
-#define	fr24	24
-#define	fr25	25
-#define	fr26	26
-#define	fr27	27
-#define	fr28	28
-#define	fr29	29
-#define	fr30	30
-#define	fr31	31
-
-#define	vr0		0
-#define	vr1		1
-#define	vr2		2
-#define	vr3		3
-#define	vr4		4
-#define	vr5		5
-#define	vr6		6
-#define	vr7		7
-#define	vr8		8
-#define	vr9		9
-#define	vr10	10
-#define	vr11	11
-#define	vr12	12
-#define	vr13	13
-#define	vr14	14
-#define	vr15	15
-#define	vr16	16
-#define	vr17	17
-#define	vr18	18
-#define	vr19	19
-#define	vr20	20
-#define	vr21	21
-#define	vr22	22
-#define	vr23	23
-#define	vr24	24
-#define	vr25	25
-#define	vr26	26
-#define	vr27	27
-#define	vr28	28
-#define	vr29	29
-#define	vr30	30
-#define	vr31	31
-
-#define	evr0	0
-#define	evr1	1
-#define	evr2	2
-#define	evr3	3
-#define	evr4	4
-#define	evr5	5
-#define	evr6	6
-#define	evr7	7
-#define	evr8	8
-#define	evr9	9
-#define	evr10	10
-#define	evr11	11
-#define	evr12	12
-#define	evr13	13
-#define	evr14	14
-#define	evr15	15
-#define	evr16	16
-#define	evr17	17
-#define	evr18	18
-#define	evr19	19
-#define	evr20	20
-#define	evr21	21
-#define	evr22	22
-#define	evr23	23
-#define	evr24	24
-#define	evr25	25
-#define	evr26	26
-#define	evr27	27
-#define	evr28	28
-#define	evr29	29
-#define	evr30	30
-#define	evr31	31
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/stackarg.h
===================================================================
--- uspace/libc/arch/ppc32/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STACKARG_H_
-#define LIBC_STACKARG_H_
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/syscall.h
===================================================================
--- uspace/libc/arch/ppc32/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- */
-
-#ifndef LIBC_ppc32_SYSCALL_H_
-#define LIBC_ppc32_SYSCALL_H_
-
-#include <syscall.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/thread.h
===================================================================
--- uspace/libc/arch/ppc32/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,71 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_THREAD_H_
-#define LIBC_ppc32_THREAD_H_
-
-#define PPC_TP_OFFSET 0x7000
-
-typedef struct {
-	void *pst_data;
-} tcb_t;
-
-static inline void __tcb_set(tcb_t *tcb)
-{
-	void *tp = tcb;
-	tp += PPC_TP_OFFSET + sizeof(tcb_t);
-	
-	asm volatile (
-		"mr %%r2, %0\n"
-		:
-		: "r" (tp)
-	);
-}
-
-static inline tcb_t * __tcb_get(void)
-{
-	void * retval;
-	
-	asm volatile (
-		"mr %0, %%r2\n"
-		: "=r" (retval)
-	);
-
-	return (tcb_t *)(retval - PPC_TP_OFFSET - sizeof(tcb_t));
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc32/include/types.h
===================================================================
--- uspace/libc/arch/ppc32/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc32_TYPES_H_
-#define LIBC_ppc32_TYPES_H_
-
-typedef unsigned int sysarg_t;
-typedef unsigned int size_t;
-typedef signed int ssize_t;
-typedef ssize_t off_t;
-
-typedef char int8_t;
-typedef short int int16_t;
-typedef int int32_t;
-typedef long long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long int uint64_t;
-
-typedef uint32_t uintptr_t;
-
-#endif
-
-/** @}
- */
-
Index: pace/libc/arch/ppc32/src/entry.s
===================================================================
--- uspace/libc/arch/ppc32/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.section .init, "ax"
-
-.org 0
-
-.globl __entry
-.globl __entry_driver
-
-## User-space task entry point
-#
-#
-__entry:
-	bl __main
-	bl __io_init
-	bl main
-	bl __exit
-
-__entry_driver:
-	bl __main
-	bl main
-	bl __exit
Index: pace/libc/arch/ppc32/src/psthread.S
===================================================================
--- uspace/libc/arch/ppc32/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,110 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global context_save
-.global context_restore
-
-#include <libarch/regname.h>
-#include <libarch/context_offset.h>
-
-.macro CONTEXT_STORE r
-	stw sp, OFFSET_SP(\r)
-	stw r2, OFFSET_R2(\r)
-	stw r13, OFFSET_R13(\r)
-	stw r14, OFFSET_R14(\r)
-	stw r15, OFFSET_R15(\r)
-	stw r16, OFFSET_R16(\r)
-	stw r17, OFFSET_R17(\r)
-	stw r18, OFFSET_R18(\r)
-	stw r19, OFFSET_R19(\r)
-	stw r20, OFFSET_R20(\r)
-	stw r21, OFFSET_R21(\r)
-	stw r22, OFFSET_R22(\r)
-	stw r23, OFFSET_R23(\r)
-	stw r24, OFFSET_R24(\r)
-	stw r25, OFFSET_R25(\r)
-	stw r26, OFFSET_R26(\r)
-	stw r27, OFFSET_R27(\r)
-	stw r28, OFFSET_R28(\r)
-	stw r29, OFFSET_R29(\r)
-	stw r30, OFFSET_R30(\r)
-	stw r31, OFFSET_R31(\r)
-.endm
-
-.macro CONTEXT_LOAD r
-	lwz sp, OFFSET_SP(\r)
-	lwz r2, OFFSET_R2(\r)
-	lwz r13, OFFSET_R13(\r)
-	lwz r14, OFFSET_R14(\r)
-	lwz r15, OFFSET_R15(\r)
-	lwz r16, OFFSET_R16(\r)
-	lwz r17, OFFSET_R17(\r)
-	lwz r18, OFFSET_R18(\r)
-	lwz r19, OFFSET_R19(\r)
-	lwz r20, OFFSET_R20(\r)
-	lwz r21, OFFSET_R21(\r)
-	lwz r22, OFFSET_R22(\r)
-	lwz r23, OFFSET_R23(\r)
-	lwz r24, OFFSET_R24(\r)
-	lwz r25, OFFSET_R25(\r)
-	lwz r26, OFFSET_R26(\r)
-	lwz r27, OFFSET_R27(\r)
-	lwz r28, OFFSET_R28(\r)
-	lwz r29, OFFSET_R29(\r)
-	lwz r30, OFFSET_R30(\r)
-	lwz r31, OFFSET_R31(\r)
-.endm
-
-context_save:
-	CONTEXT_STORE r3
-	
-	mflr r4
-	stw r4, OFFSET_PC(r3)
-	
-	mfcr r4
-	stw r4, OFFSET_CR(r3)
-	
-	# context_save returns 1
-	li r3, 1
-	blr
-
-
-context_restore:
-	CONTEXT_LOAD r3
-	
-	lwz r4, OFFSET_CR(r3)
-	mtcr r4
-	
-	lwz r4, OFFSET_PC(r3)
-	mtlr r4
-	
-	# context_restore returns 0
-	li r3, 0
-	blr
Index: pace/libc/arch/ppc32/src/syscall.c
===================================================================
--- uspace/libc/arch/ppc32/src/syscall.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,61 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32 ppc32
-  * @brief ppc32 architecture dependent parts of libc
-  * @ingroup lc
- * @{
- */
-/** @file
- */
-
-#include <libc.h>
-
-sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id)
-{
-	register sysarg_t __ppc32_reg_r3 asm("3") = p1;
-	register sysarg_t __ppc32_reg_r4 asm("4") = p2;
-	register sysarg_t __ppc32_reg_r5 asm("5") = p3;
-	register sysarg_t __ppc32_reg_r6 asm("6") = p4;
-	register sysarg_t __ppc32_reg_r7 asm("7") = id;
-	
-	asm volatile (
-		"sc\n"
-		: "=r" (__ppc32_reg_r3)
-		: "r" (__ppc32_reg_r3),
-		  "r" (__ppc32_reg_r4),
-		  "r" (__ppc32_reg_r5),
-		  "r" (__ppc32_reg_r6),
-		  "r" (__ppc32_reg_r7)
-	);
-	
-	return __ppc32_reg_r3;
-}
-
-/** @}
- */
Index: pace/libc/arch/ppc32/src/thread.c
===================================================================
--- uspace/libc/arch/ppc32/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc32	
- * @{
- */
-/** @file
- */
-
-#include <thread.h>
-#include <malloc.h>
-
-/** Allocate TLS & TCB for initial module threads
- *
- * @param data Start of data section
- * @return pointer to tcb_t structure
- *
- */
-tcb_t * __alloc_tls(void **data, size_t size)
-{
-	tcb_t *result;
-
-	result = malloc(sizeof(tcb_t) + size);
-	*data = ((void *)result) + sizeof(tcb_t);
-	return result;
-}
-
-void __free_tls_arch(tcb_t *tcb, size_t size)
-{
-	free(tcb);
-}
-
-/** @}
- */
Index: pace/libc/arch/ppc32/src/thread_entry.s
===================================================================
--- uspace/libc/arch/ppc32/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-	
-.globl __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-__thread_entry:
-	b __thread_main
-
-.end __thread_entry
Index: pace/libc/arch/ppc64/Makefile.inc
===================================================================
--- uspace/libc/arch/ppc64/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = ppc64-linux-gnu
-TOOLCHAIN_DIR = /usr/local/ppc64/bin
-
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
-		arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c
-
-CFLAGS += -mcpu=powerpc64 -msoft-float -m64
-AFLAGS += -a64
-LFLAGS += -N
-
-BFD_NAME = elf64-powerpc
-BFD_ARCH = powerpc:common64
Index: pace/libc/arch/ppc64/_link.ld.in
===================================================================
--- uspace/libc/arch/ppc64/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x1000;
-
-	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.toc);
-		*(.rodata*);
-	} :text
-	
-	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
-		*(.opd);
-		*(.data*);
-		*(.sdata);
-	} :data
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	.bss : {
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	. = ALIGN(0x1000);
-	_heap = .;
-	
-	/DISCARD/ : {
-		*(*);
-	}
-
-}
Index: pace/libc/arch/ppc64/include/atomic.h
===================================================================
--- uspace/libc/arch/ppc64/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,95 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_ATOMIC_H_
-#define LIBC_ppc64_ATOMIC_H_
-
-static inline void atomic_inc(atomic_t *val)
-{
-	long tmp;
-
-	asm volatile (
-		"1:\n"
-		"lwarx %0, 0, %2\n"
-		"addic %0, %0, 1\n"
-		"stwcx. %0, 0, %2\n"
-		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
-}
-
-static inline void atomic_dec(atomic_t *val)
-{
-	long tmp;
-
-	asm volatile (
-		"1:\n"
-		"lwarx %0, 0, %2\n"
-		"addic %0, %0, -1\n"
-		"stwcx.	%0, 0, %2\n"
-		"bne- 1b"
-		: "=&r" (tmp), "=m" (val->count)
-		: "r" (&val->count), "m" (val->count)
-		: "cc");
-}
-
-static inline long atomic_postinc(atomic_t *val)
-{
-	atomic_inc(val);
-	return val->count - 1;
-}
-
-static inline long atomic_postdec(atomic_t *val)
-{
-	atomic_dec(val);
-	return val->count + 1;
-}
-
-static inline long atomic_preinc(atomic_t *val)
-{
-	atomic_inc(val);
-	return val->count;
-}
-
-static inline long atomic_predec(atomic_t *val)
-{
-	atomic_dec(val);
-	return val->count;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/config.h
===================================================================
--- uspace/libc/arch/ppc64/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libppc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_CONFIG_H_
-#define LIBC_ppc64_CONFIG_H_
-
-#define PAGE_WIDTH	12
-#define PAGE_SIZE	(1<<PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/* dummy */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/context_offset.h
===================================================================
--- uspace/libc/arch/ppc64/include/context_offset.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,24 +1,0 @@
-/* struct context */
-#define OFFSET_SP    0x0
-#define OFFSET_PC    0x4
-#define OFFSET_R2    0x8
-#define OFFSET_R13   0xc
-#define OFFSET_R14   0x10
-#define OFFSET_R15   0x14
-#define OFFSET_R16   0x18
-#define OFFSET_R17   0x1c
-#define OFFSET_R18   0x20
-#define OFFSET_R19   0x24
-#define OFFSET_R20   0x28
-#define OFFSET_R21   0x2c
-#define OFFSET_R22   0x30
-#define OFFSET_R23   0x34
-#define OFFSET_R24   0x38
-#define OFFSET_R25   0x3c
-#define OFFSET_R26   0x40
-#define OFFSET_R27   0x44
-#define OFFSET_R28   0x48
-#define OFFSET_R29   0x4c
-#define OFFSET_R30   0x50
-#define OFFSET_R31   0x54
-#define OFFSET_CR    0x58
Index: pace/libc/arch/ppc64/include/endian.h
===================================================================
--- uspace/libc/arch/ppc64/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_ENDIAN_H_
-#define LIBC_ppc64_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __BIG_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/faddr.h
===================================================================
--- uspace/libc/arch/ppc64/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_FADDR_H_
-#define LIBC_ppc64_FADDR_H_
-
-#include <libarch/types.h>
-
-#define FADDR(fptr)		((uintptr_t) (fptr))
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/limits.h
===================================================================
--- uspace/libc/arch/ppc64/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_LIMITS_H_
-#define LIBC_ppc64_LIMITS_H_
-
-#define LONG_MIN MIN_INT64
-#define LONG_MAX MAX_INT64
-#define ULONG_MIN MIN_UINT64
-#define ULONG_MAX MAX_UINT64
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/psthread.h
===================================================================
--- uspace/libc/arch/ppc64/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,83 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_PSTHREAD_H_
-#define LIBC_ppc64_PSTHREAD_H_
-
-#include <types.h>
-
-/* We define our own context_set, because we need to set
- * the TLS pointer to the tcb+0x7000
- *
- * See tls_set in thread.h
- */
-#define context_set(c, _pc, stack, size, ptls) 			\
-	(c)->pc = (sysarg_t) (_pc);				\
-	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
-	(c)->tls = ((sysarg_t) (ptls)) + 0x7000 + sizeof(tcb_t);
-
-#define SP_DELTA	16
-
-typedef struct {
-	uint64_t sp;
-	uint64_t pc;
-	
-	uint64_t tls;
-	uint64_t r13;
-	uint64_t r14;
-	uint64_t r15;
-	uint64_t r16;
-	uint64_t r17;
-	uint64_t r18;
-	uint64_t r19;
-	uint64_t r20;
-	uint64_t r21;
-	uint64_t r22;
-	uint64_t r23;
-	uint64_t r24;
-	uint64_t r25;
-	uint64_t r26;
-	uint64_t r27;
-	uint64_t r28;
-	uint64_t r29;
-	uint64_t r30;
-	uint64_t r31;
-	
-	uint64_t cr;
-} __attribute__ ((packed)) context_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/regname.h
===================================================================
--- uspace/libc/arch/ppc64/include/regname.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,188 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_REGNAME_H_
-#define LIBC_ppc64_REGNAME_H_
-
-/* Condition Register Bit Fields */
-#define	cr0	0
-#define	cr1	1
-#define	cr2	2
-#define	cr3	3
-#define	cr4	4
-#define	cr5	5
-#define	cr6	6
-#define	cr7	7
-
-/* General Purpose Registers (GPRs) */
-#define	r0	0
-#define	r1	1
-#define	r2	2
-#define	r3	3
-#define	r4	4
-#define	r5	5
-#define	r6	6
-#define	r7	7
-#define	r8	8
-#define	r9	9
-#define	r10	10
-#define	r11	11
-#define	r12	12
-#define	r13	13
-#define	r14	14
-#define	r15	15
-#define	r16	16
-#define	r17	17
-#define	r18	18
-#define	r19	19
-#define	r20	20
-#define	r21	21
-#define	r22	22
-#define	r23	23
-#define	r24	24
-#define	r25	25
-#define	r26	26
-#define	r27	27
-#define	r28	28
-#define	r29	29
-#define	r30	30
-#define	r31	31
-
-/* GPR Aliases */
-#define	sp	1
-
-/* Floating Point Registers (FPRs) */
-#define	fr0		0
-#define	fr1		1
-#define	fr2		2
-#define	fr3		3
-#define	fr4		4
-#define	fr5		5
-#define	fr6		6
-#define	fr7		7
-#define	fr8		8
-#define	fr9		9
-#define	fr10	10
-#define	fr11	11
-#define	fr12	12
-#define	fr13	13
-#define	fr14	14
-#define	fr15	15
-#define	fr16	16
-#define	fr17	17
-#define	fr18	18
-#define	fr19	19
-#define	fr20	20
-#define	fr21	21
-#define	fr22	22
-#define	fr23	23
-#define	fr24	24
-#define	fr25	25
-#define	fr26	26
-#define	fr27	27
-#define	fr28	28
-#define	fr29	29
-#define	fr30	30
-#define	fr31	31
-
-#define	vr0		0
-#define	vr1		1
-#define	vr2		2
-#define	vr3		3
-#define	vr4		4
-#define	vr5		5
-#define	vr6		6
-#define	vr7		7
-#define	vr8		8
-#define	vr9		9
-#define	vr10	10
-#define	vr11	11
-#define	vr12	12
-#define	vr13	13
-#define	vr14	14
-#define	vr15	15
-#define	vr16	16
-#define	vr17	17
-#define	vr18	18
-#define	vr19	19
-#define	vr20	20
-#define	vr21	21
-#define	vr22	22
-#define	vr23	23
-#define	vr24	24
-#define	vr25	25
-#define	vr26	26
-#define	vr27	27
-#define	vr28	28
-#define	vr29	29
-#define	vr30	30
-#define	vr31	31
-
-#define	evr0	0
-#define	evr1	1
-#define	evr2	2
-#define	evr3	3
-#define	evr4	4
-#define	evr5	5
-#define	evr6	6
-#define	evr7	7
-#define	evr8	8
-#define	evr9	9
-#define	evr10	10
-#define	evr11	11
-#define	evr12	12
-#define	evr13	13
-#define	evr14	14
-#define	evr15	15
-#define	evr16	16
-#define	evr17	17
-#define	evr18	18
-#define	evr19	19
-#define	evr20	20
-#define	evr21	21
-#define	evr22	22
-#define	evr23	23
-#define	evr24	24
-#define	evr25	25
-#define	evr26	26
-#define	evr27	27
-#define	evr28	28
-#define	evr29	29
-#define	evr30	30
-#define	evr31	31
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/stackarg.h
===================================================================
--- uspace/libc/arch/ppc64/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STACKARG_H_
-#define LIBC_STACKARG_H_
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/syscall.h
===================================================================
--- uspace/libc/arch/ppc64/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- */
-
-#ifndef LIBC_ppc64_SYSCALL_H_
-#define LIBC_ppc64_SYSCALL_H_
-
-#include <syscall.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/thread.h
===================================================================
--- uspace/libc/arch/ppc64/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,71 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_THREAD_H_
-#define LIBC_ppc64_THREAD_H_
-
-#define PPC_TP_OFFSET 0x7000
-
-typedef struct {
-	void *pst_data;
-} tcb_t;
-
-static inline void __tcb_set(tcb_t *tcb)
-{
-	void *tp = tcb;
-	tp += PPC_TP_OFFSET + sizeof(tcb_t);
-	
-	asm volatile (
-		"mr %%r2, %0\n"
-		:
-		: "r" (tp)
-	);
-}
-
-static inline tcb_t * __tcb_get(void)
-{
-	void * retval;
-	
-	asm volatile (
-		"mr %0, %%r2\n"
-		: "=r" (retval)
-	);
-
-	return (tcb_t *)(retval - PPC_TP_OFFSET - sizeof(tcb_t));
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/include/types.h
===================================================================
--- uspace/libc/arch/ppc64/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ppc64_TYPES_H_
-#define LIBC_ppc64_TYPES_H_
-
-typedef unsigned long sysarg_t;
-typedef unsigned long size_t;
-typedef signed long ssize_t;
-typedef ssize_t off_t;
-
-typedef char int8_t;
-typedef short int int16_t;
-typedef int int32_t;
-typedef long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long int uint64_t;
-
-typedef uint64_t uintptr_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/ppc64/src/entry.s
===================================================================
--- uspace/libc/arch/ppc64/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.section .init, "ax"
-
-.org 0
-
-.globl __entry
-.globl __entry_driver
-
-## User-space task entry point
-#
-#
-__entry:
-	bl __main
-	bl __io_init
-	bl main
-	bl __exit
-
-__entry_driver:
-	bl __main
-	bl main
-	bl __exit
Index: pace/libc/arch/ppc64/src/psthread.S
===================================================================
--- uspace/libc/arch/ppc64/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,110 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-
-.global context_save
-.global context_restore
-
-#include <libarch/regname.h>
-#include <libarch/context_offset.h>
-
-.macro CONTEXT_STORE r
-	stw sp, OFFSET_SP(\r)
-	stw r2, OFFSET_R2(\r)
-	stw r13, OFFSET_R13(\r)
-	stw r14, OFFSET_R14(\r)
-	stw r15, OFFSET_R15(\r)
-	stw r16, OFFSET_R16(\r)
-	stw r17, OFFSET_R17(\r)
-	stw r18, OFFSET_R18(\r)
-	stw r19, OFFSET_R19(\r)
-	stw r20, OFFSET_R20(\r)
-	stw r21, OFFSET_R21(\r)
-	stw r22, OFFSET_R22(\r)
-	stw r23, OFFSET_R23(\r)
-	stw r24, OFFSET_R24(\r)
-	stw r25, OFFSET_R25(\r)
-	stw r26, OFFSET_R26(\r)
-	stw r27, OFFSET_R27(\r)
-	stw r28, OFFSET_R28(\r)
-	stw r29, OFFSET_R29(\r)
-	stw r30, OFFSET_R30(\r)
-	stw r31, OFFSET_R31(\r)
-.endm
-
-.macro CONTEXT_LOAD r
-	lwz sp, OFFSET_SP(\r)
-	lwz r2, OFFSET_R2(\r)
-	lwz r13, OFFSET_R13(\r)
-	lwz r14, OFFSET_R14(\r)
-	lwz r15, OFFSET_R15(\r)
-	lwz r16, OFFSET_R16(\r)
-	lwz r17, OFFSET_R17(\r)
-	lwz r18, OFFSET_R18(\r)
-	lwz r19, OFFSET_R19(\r)
-	lwz r20, OFFSET_R20(\r)
-	lwz r21, OFFSET_R21(\r)
-	lwz r22, OFFSET_R22(\r)
-	lwz r23, OFFSET_R23(\r)
-	lwz r24, OFFSET_R24(\r)
-	lwz r25, OFFSET_R25(\r)
-	lwz r26, OFFSET_R26(\r)
-	lwz r27, OFFSET_R27(\r)
-	lwz r28, OFFSET_R28(\r)
-	lwz r29, OFFSET_R29(\r)
-	lwz r30, OFFSET_R30(\r)
-	lwz r31, OFFSET_R31(\r)
-.endm
-
-context_save:
-	CONTEXT_STORE r3
-	
-	mflr r4
-	stw r4, OFFSET_PC(r3)
-	
-	mfcr r4
-	stw r4, OFFSET_CR(r3)
-	
-	# context_save returns 1
-	li r3, 1
-	blr
-
-
-context_restore:
-	CONTEXT_LOAD r3
-	
-	lwz r4, OFFSET_CR(r3)
-	mtcr r4
-	
-	lwz r4, OFFSET_PC(r3)
-	mtlr r4
-	
-	# context_restore returns 0
-	li r3, 0
-	blr
Index: pace/libc/arch/ppc64/src/syscall.c
===================================================================
--- uspace/libc/arch/ppc64/src/syscall.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,61 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64 ppc64
- * @brief ppc64 architecture dependent parts of libc
- * @ingroup lc
- * @{
- */
-/** @file
- */
-
-#include <libc.h>
-
-sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id)
-{
-	register sysarg_t __ppc32_reg_r3 asm("3") = p1;
-	register sysarg_t __ppc32_reg_r4 asm("4") = p2;
-	register sysarg_t __ppc32_reg_r5 asm("5") = p3;
-	register sysarg_t __ppc32_reg_r6 asm("6") = p4;
-	register sysarg_t __ppc32_reg_r7 asm("7") = id;
-	
-	asm volatile (
-		"sc\n"
-		: "=r" (__ppc32_reg_r3)
-		: "r" (__ppc32_reg_r3),
-		  "r" (__ppc32_reg_r4),
-		  "r" (__ppc32_reg_r5),
-		  "r" (__ppc32_reg_r6),
-		  "r" (__ppc32_reg_r7)
-	);
-	
-	return __ppc32_reg_r3;
-}
-
-/** @}
- */
Index: pace/libc/arch/ppc64/src/thread.c
===================================================================
--- uspace/libc/arch/ppc64/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcppc64	
- * @{
- */
-/** @file
- */
-
-#include <thread.h>
-#include <malloc.h>
-
-/** Allocate TLS & TCB for initial module threads
- *
- * @param data Start of data section
- * @return pointer to tcb_t structure
- *
- */
-tcb_t * __alloc_tls(void **data, size_t size)
-{
-	tcb_t *tcb;
-	
-	*data = malloc(sizeof(tcb_t) + size);
-	tcb = (tcb_t *) (*data + size);
-	return tcb;
-}
-
-void __free_tls_arch(tcb_t *tcb, size_t size)
-{
-	void *start = ((void *) tcb) - size;
-	free(start);
-}
-
-/** @}
- */
Index: pace/libc/arch/ppc64/src/thread_entry.s
===================================================================
--- uspace/libc/arch/ppc64/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,39 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-	
-.globl __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-__thread_entry:
-	b __thread_main
-
-.end __thread_entry
Index: pace/libc/arch/sparc64/Makefile.inc
===================================================================
--- uspace/libc/arch/sparc64/Makefile.inc	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Toolchain configuration
-#
-
-TARGET = sparc64-linux-gnu
-TOOLCHAIN_DIR = /usr/local/sparc64/bin
-
-ARCH_SOURCES += arch/$(ARCH)/src/psthread.S \
-		arch/$(ARCH)/src/thread.c
-
-CFLAGS += -mcpu=ultrasparc -m64
-LFLAGS += -no-check-sections -N
-
-BFD_NAME = elf64-sparc
-BFD_ARCH = sparc
Index: pace/libc/arch/sparc64/_link.ld.in
===================================================================
--- uspace/libc/arch/sparc64/_link.ld.in	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,51 +1,0 @@
-STARTUP(../libc/arch/ARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-}
-
-SECTIONS {
-	. = 0x4000;
-
-	.init ALIGN(0x4000) : SUBALIGN(0x4000) {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.rodata*);
-	} :text
-	
-	.got ALIGN(0x4000) : SUBALIGN(0x4000) {
-		 _gp = .;
-		 *(.got*);
-	} :data
-	.data ALIGN(0x4000) : SUBALIGN(0x4000) {
-		*(.data);
-		*(.sdata);
-	} :data
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	.bss : {
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	. = ALIGN(0x4000);
-	_heap = .;
-	
-	/DISCARD/ : {
-		*(*);
-	}
-
-}
Index: pace/libc/arch/sparc64/include/atomic.h
===================================================================
--- uspace/libc/arch/sparc64/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,97 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_ATOMIC_H_
-#define LIBC_sparc64_ATOMIC_H_
-
-#include <types.h>
-
-/** Atomic add operation.
- *
- * Use atomic compare and swap operation to atomically add signed value.
- *
- * @param val Atomic variable.
- * @param i Signed value to be added.
- *
- * @return Value of the atomic variable as it existed before addition.
- */
-static inline long atomic_add(atomic_t *val, int i)
-{
-	uint64_t a, b;
-
-	do {
-		volatile uintptr_t x = (uint64_t) &val->count;
-
-		a = *((uint64_t *) x);
-		b = a + i;
-		asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *)x)), "+r" (b) : "r" (a));
-	} while (a != b);
-
-	return a;
-}
-
-static inline long atomic_preinc(atomic_t *val)
-{
-	return atomic_add(val, 1) + 1;
-}
-
-static inline long atomic_postinc(atomic_t *val)
-{
-	return atomic_add(val, 1);
-}
-
-static inline long atomic_predec(atomic_t *val)
-{
-	return atomic_add(val, -1) - 1;
-}
-
-static inline long atomic_postdec(atomic_t *val)
-{
-	return atomic_add(val, -1);
-}
-
-static inline void atomic_inc(atomic_t *val)
-{
-	(void) atomic_add(val, 1);
-}
-
-static inline void atomic_dec(atomic_t *val)
-{
-	(void) atomic_add(val, -1);
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/config.h
===================================================================
--- uspace/libc/arch/sparc64/include/config.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_CONFIG_H_
-#define LIBC_sparc64_CONFIG_H_
-
-#define PAGE_WIDTH	14
-#define PAGE_SIZE	(1 << PAGE_WIDTH)
-#define PAGE_COLOR_BITS	0		/**< Only one page color. */
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/context_offset.h
===================================================================
--- uspace/libc/arch/sparc64/include/context_offset.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,21 +1,0 @@
-/* This file is automatically generated by gencontext.c. */
-/* struct context */
-#define OFFSET_SP       0x0
-#define OFFSET_PC       0x8
-#define OFFSET_I0       0x10
-#define OFFSET_I1       0x18
-#define OFFSET_I2       0x20
-#define OFFSET_I3       0x28
-#define OFFSET_I4       0x30
-#define OFFSET_I5       0x38
-#define OFFSET_FP       0x40
-#define OFFSET_I7       0x48
-#define OFFSET_L0       0x50
-#define OFFSET_L1       0x58
-#define OFFSET_L2       0x60
-#define OFFSET_L3       0x68
-#define OFFSET_L4       0x70
-#define OFFSET_L5       0x78
-#define OFFSET_L6       0x80
-#define OFFSET_L7       0x88
-#define OFFSET_TP	0x90
Index: pace/libc/arch/sparc64/include/endian.h
===================================================================
--- uspace/libc/arch/sparc64/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_ENDIAN_H_
-#define LIBC_sparc64_ENDIAN_H_
-
-#ifndef LIBC_ENDIAN_H_
-# error "Never use <libarch/endian.h> directly - use <endian.h> instead."
-#endif
-
-#define __BYTE_ORDER __BIG_ENDIAN
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/faddr.h
===================================================================
--- uspace/libc/arch/sparc64/include/faddr.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2005 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_FADDR_H_
-#define LIBC_sparc64_FADDR_H_
-
-#include <libarch/types.h>
-
-#define FADDR(fptr)		((uintptr_t) (fptr))
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/limits.h
===================================================================
--- uspace/libc/arch/sparc64/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_LIMITS_H_
-#define LIBC_sparc64_LIMITS_H_
-
-#define LONG_MIN MIN_INT64
-#define LONG_MAX MAX_INT64
-#define ULONG_MIN MIN_UINT64
-#define ULONG_MAX MAX_UINT64
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/psthread.h
===================================================================
--- uspace/libc/arch/sparc64/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,84 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_PSTHREAD_H_
-#define LIBC_sparc64_PSTHREAD_H_
-
-#include <libarch/stack.h>
-#include <types.h>
-#include <align.h>
-
-#define SP_DELTA	STACK_WINDOW_SAVE_AREA_SIZE
-
-#ifdef context_set
-#undef context_set
-#endif
-
-#define context_set(c, _pc, stack, size, ptls)			\
-	(c)->pc = ((uintptr_t) _pc) - 8;			\
-	(c)->sp = ((uintptr_t) stack) + ALIGN_UP((size),	\
-		STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA);	\
-	(c)->fp = -STACK_BIAS;					\
-	(c)->tp = ptls
-	
-/*
- * Save only registers that must be preserved across
- * function calls.
- */
-typedef struct {
-	uintptr_t sp;		/* %o6 */
-	uintptr_t pc;		/* %o7 */
-	uint64_t i0;
-	uint64_t i1;
-	uint64_t i2;
-	uint64_t i3;
-	uint64_t i4;
-	uint64_t i5;
-	uintptr_t fp;		/* %i6 */
-	uintptr_t i7;
-	uint64_t l0;
-	uint64_t l1;
-	uint64_t l2;
-	uint64_t l3;
-	uint64_t l4;
-	uint64_t l5;
-	uint64_t l6;
-	uint64_t l7;
-	uint64_t tp;		/* %g7 */
-} context_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/stack.h
===================================================================
--- uspace/libc/arch/sparc64/include/stack.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_STACK_H_
-#define LIBC_sparc64_STACK_H_
-
-#define STACK_ITEM_SIZE			8
-
-/** According to SPARC Compliance Definition, every stack frame is 16-byte aligned. */
-#define STACK_ALIGNMENT			16
-
-/**
- * 16-extended-word save area for %i[0-7] and %l[0-7] registers.
- */
-#define STACK_WINDOW_SAVE_AREA_SIZE	(16 * STACK_ITEM_SIZE)
-
-/**
- * By convention, the actual top of the stack is %sp + STACK_BIAS.
- */
-#define STACK_BIAS            2047
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/stackarg.h
===================================================================
--- uspace/libc/arch/sparc64/include/stackarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_STACKARG_H_
-#define LIBC_sparc64_STACKARG_H_
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/syscall.h
===================================================================
--- uspace/libc/arch/sparc64/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_SYSCALL_H_
-#define LIBC_sparc64_SYSCALL_H_
-
-#include <types.h>
-#include <kernel/syscall/syscall.h>
-
-static inline sysarg_t
-__syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id)
-{
-	register uint64_t a1 asm("o0") = p1;
-	register uint64_t a2 asm("o1") = p2;
-	register uint64_t a3 asm("o2") = p3;
-	register uint64_t a4 asm("o3") = p4;
-
-	asm volatile (
-		"ta %5\n"
-		: "=r" (a1)
-		: "r" (a1), "r" (a2), "r" (a3), "r" (a4), "i" (id)
-		: "memory"
-	);
-	
-	return a1;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/thread.h
===================================================================
--- uspace/libc/arch/sparc64/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,63 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64
- * @{
- */
-/**
- * @file
- * @brief	sparc64 TLS functions.
- */
-
-#ifndef LIBC_sparc64_THREAD_H_
-#define LIBC_sparc64_THREAD_H_
-
-typedef struct {
-	void *self;
-	void *pst_data;
-} tcb_t;
-
-static inline void __tcb_set(tcb_t *tcb)
-{
-	asm volatile ("mov %0, %%g7\n" : : "r" (tcb) : "g7");
-}
-
-static inline tcb_t * __tcb_get(void)
-{
-	void *retval;
-
-	asm volatile ("mov %%g7, %0\n" : "=r" (retval));
-
-	return retval;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/include/types.h
===================================================================
--- uspace/libc/arch/sparc64/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_sparc64_TYPES_H_
-#define LIBC_sparc64_TYPES_H_
-
-typedef unsigned long sysarg_t;
-typedef unsigned long size_t;
-typedef signed long ssize_t;
-typedef ssize_t off_t;
-
-typedef signed char int8_t;
-typedef short int int16_t;
-typedef int int32_t;
-typedef long int int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short int uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long int uint64_t;
-
-typedef uint64_t uintptr_t;
-
-#endif
-
-/** @}
- */
Index: pace/libc/arch/sparc64/src/entry.s
===================================================================
--- uspace/libc/arch/sparc64/src/entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,57 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.section .init, "ax"
-
-.org 0
-
-.globl __entry
-.globl __entry_driver
-
-## User-space task entry point
-#
-#
-__entry:
-	sethi %hi(_gp), %l7
-	call __main
-	or %l7, %lo(_gp), %l7
-	call __io_init
-	nop
-	call main
-	nop
-	call __exit
-	nop
-
-__entry_driver:
-	sethi %hi(_gp), %l7
-	call __main
-	or %l7, %lo(_gp), %l7
-	call main
-	nop
-	call __exit
-	nop
Index: pace/libc/arch/sparc64/src/psthread.S
===================================================================
--- uspace/libc/arch/sparc64/src/psthread.S	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,97 +1,0 @@
-#
-# Copyright (c) 2005 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-#include <libarch/context_offset.h>
-
-.text   
-
-.global context_save
-.global context_restore
-
-.macro CONTEXT_STORE r
-	stx %sp, [\r + OFFSET_SP]
-	stx %o7, [\r + OFFSET_PC]
-	stx %i0, [\r + OFFSET_I0]
-	stx %i1, [\r + OFFSET_I1]
-	stx %i2, [\r + OFFSET_I2]
-	stx %i3, [\r + OFFSET_I3]
-	stx %i4, [\r + OFFSET_I4]
-	stx %i5, [\r + OFFSET_I5]
-	stx %fp, [\r + OFFSET_FP]
-	stx %i7, [\r + OFFSET_I7]
-	stx %l0, [\r + OFFSET_L0]
-	stx %l1, [\r + OFFSET_L1]
-	stx %l2, [\r + OFFSET_L2]
-	stx %l3, [\r + OFFSET_L3]
-	stx %l4, [\r + OFFSET_L4]
-	stx %l5, [\r + OFFSET_L5]
-	stx %l6, [\r + OFFSET_L6]
-	stx %l7, [\r + OFFSET_L7]
-	stx %g7, [\r + OFFSET_TP]
-.endm
-
-.macro CONTEXT_LOAD r
-	ldx [\r + OFFSET_SP], %sp
-	ldx [\r + OFFSET_PC], %o7
-	ldx [\r + OFFSET_I0], %i0
-	ldx [\r + OFFSET_I1], %i1
-	ldx [\r + OFFSET_I2], %i2
-	ldx [\r + OFFSET_I3], %i3
-	ldx [\r + OFFSET_I4], %i4
-	ldx [\r + OFFSET_I5], %i5
-	ldx [\r + OFFSET_FP], %fp
-	ldx [\r + OFFSET_I7], %i7
-	ldx [\r + OFFSET_L0], %l0
-	ldx [\r + OFFSET_L1], %l1
-	ldx [\r + OFFSET_L2], %l2
-	ldx [\r + OFFSET_L3], %l3
-	ldx [\r + OFFSET_L4], %l4
-	ldx [\r + OFFSET_L5], %l5
-	ldx [\r + OFFSET_L6], %l6
-	ldx [\r + OFFSET_L7], %l7
-	ldx [\r + OFFSET_TP], %g7
-.endm
-
-context_save:
-	CONTEXT_STORE %o0
-	retl
-	mov 1, %o0		! context_save_arch returns 1
-
-context_restore:
-	#
-	# Flush all active windows.
-	# This is essential, because CONTEXT_LOAD overwrites
-	# %sp of CWP - 1 with the value written to %fp of CWP.
-	# Flushing all active windows mitigates this problem
-	# as CWP - 1 becomes the overlap window.
-	#		
-	flushw
-	
-	CONTEXT_LOAD %o0
-	retl
-	xor %o0, %o0, %o0	! context_restore_arch returns 0
Index: pace/libc/arch/sparc64/src/thread.c
===================================================================
--- uspace/libc/arch/sparc64/src/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,81 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcsparc64 sparc64
- * @ingroup lc
- * @{
- */
-/** @file
- *
- */
-
-#include <thread.h>
-#include <malloc.h>
-
-/*
- * sparc64 uses thread-local storage data structures, variant II, as described
- * in:
- * 	Drepper U.: ELF Handling For Thread-Local Storage, 2005
- */
-
-/** Allocate TLS variant II data structures for a thread.
- *
- * Only static model is supported.
- *
- * @param data Pointer to pointer to thread local data. This is actually an
- * 	output argument.
- * @param size Size of thread local data.
- * @return Pointer to TCB structure.
- */
-tcb_t * __alloc_tls(void **data, size_t size)
-{
-	tcb_t *tcb;
-	
-	*data = malloc(sizeof(tcb_t) + size);
-
-	tcb = (tcb_t *) (*data + size);
-	tcb->self = tcb;
-
-	return tcb;
-}
-
-/** Free TLS variant II data structures of a thread.
- *
- * Only static model is supported.
- *
- * @param tcb Pointer to TCB structure.
- * @param size Size of thread local data.
- */
-void __free_tls_arch(tcb_t *tcb, size_t size)
-{
-	void *start = ((void *) tcb) - size;
-	free(start);
-}
-
-/** @}
- */
Index: pace/libc/arch/sparc64/src/thread_entry.s
===================================================================
--- uspace/libc/arch/sparc64/src/thread_entry.s	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#
-# Copyright (c) 2006 Jakub Jermar
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-.text
-	
-.globl __thread_entry
-
-## User-space thread entry point for all but the first threads.
-#
-#
-__thread_entry:
-	sethi %hi(_gp), %l7
-	call __thread_main		! %o0 contains address of uarg
-	or %l7, %lo(_gp), %l7
-	
-	! not reached
-	
-.end __thread_entry
Index: pace/libc/generic/as.c
===================================================================
--- uspace/libc/generic/as.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,186 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <as.h>
-#include <libc.h>
-#include <unistd.h>
-#include <align.h>
-#include <types.h>
-#include <bitops.h>
-
-/**
- * Either 4*256M on 32-bit architecures or 16*256M on 64-bit architectures.
- */
-#define MAX_HEAP_SIZE	(sizeof(uintptr_t)<<28)
-
-/** Create address space area.
- *
- * @param address Virtual address where to place new address space area.
- * @param size Size of the area.
- * @param flags Flags describing type of the area.
- *
- * @return address on success, (void *) -1 otherwise.
- */
-void *as_area_create(void *address, size_t size, int flags)
-{
-	return (void *) __SYSCALL3(SYS_AS_AREA_CREATE, (sysarg_t ) address,
-	    (sysarg_t) size, (sysarg_t) flags);
-}
-
-/** Resize address space area.
- *
- * @param address Virtual address pointing into already existing address space
- * 	area.
- * @param size New requested size of the area.
- * @param flags Currently unused.
- *
- * @return Zero on success or a code from @ref errno.h on failure.
- */
-int as_area_resize(void *address, size_t size, int flags)
-{
-	return __SYSCALL3(SYS_AS_AREA_RESIZE, (sysarg_t ) address,
-	    (sysarg_t) size, (sysarg_t) flags);
-}
-
-/** Destroy address space area.
- *
- * @param address Virtual address pointing into the address space area being
- * 	destroyed.
- *
- * @return Zero on success or a code from @ref errno.h on failure.
- */
-int as_area_destroy(void *address)
-{
-	return __SYSCALL1(SYS_AS_AREA_DESTROY, (sysarg_t ) address);
-}
-
-static size_t heapsize = 0;
-static size_t maxheapsize = (size_t) (-1);
-
-static void * last_allocated = 0;
-
-/* Start of heap linker symbol */
-extern char _heap;
-
-/** Sbrk emulation 
- *
- * @param incr New area that should be allocated or negative, 
-               if it should be shrinked
- * @return Pointer to newly allocated area
- */
-void *sbrk(ssize_t incr)
-{
-	int rc;
-	void *res;
-	
-	/* Check for invalid values */
-	if (incr < 0 && -incr > heapsize)
-		return NULL;
-	
-	/* Check for too large value */
-	if (incr > 0 && incr+heapsize < heapsize)
-		return NULL;
-	
-	/* Check for too small values */
-	if (incr < 0 && incr+heapsize > heapsize)
-		return NULL;
-	
-	/* Check for user limit */
-	if ((maxheapsize != (size_t) (-1)) && (heapsize + incr) > maxheapsize)
-		return NULL;
-	
-	rc = as_area_resize(&_heap, heapsize + incr, 0);
-	if (rc != 0)
-		return NULL;
-	
-	/* Compute start of new area */
-	res = (void *) &_heap + heapsize;
-
-	heapsize += incr;
-
-	return res;
-}
-
-/** Set maximum heap size and return pointer just after the heap */
-void *set_maxheapsize(size_t mhs)
-{
-	maxheapsize = mhs;
-	/* Return pointer to area not managed by sbrk */
-	return ((void *) &_heap + maxheapsize);
-}
-
-/** Return pointer to some unmapped area, where fits new as_area
- *
- * @param sz Requested size of the allocation.
- *
- * @return Pointer to the beginning 
- *
- * TODO: make some first_fit/... algorithm, we are now just incrementing
- *       the pointer to last area
- */
-void *as_get_mappable_page(size_t sz)
-{
-	void *res;
-	uint64_t asz;
-	int i;
-	
-	if (!sz)
-		return NULL;	
-
-	asz = 1 << (fnzb64(sz - 1) + 1);
-
-	/* Set heapsize to some meaningful value */
-	if (maxheapsize == -1)
-		set_maxheapsize(MAX_HEAP_SIZE);
-	
-	/*
-	 * Make sure we allocate from naturally aligned address.
-	 */
-	i = 0;
-	if (!last_allocated) {
-		last_allocated = (void *) ALIGN_UP((void *) &_heap +
-		    maxheapsize, asz);
-	} else {
-		last_allocated = (void *) ALIGN_UP(((uintptr_t)
-		    last_allocated) + (int) (i > 0), asz);
-	}
-
-	res = last_allocated;
-	last_allocated += ALIGN_UP(sz, PAGE_SIZE);
-
-	return res;
-}
-
-/** @}
- */
Index: pace/libc/generic/async.c
===================================================================
--- uspace/libc/generic/async.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,811 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-/**
- * Asynchronous library
- *
- * The aim of this library is facilitating writing programs utilizing 
- * the asynchronous nature of HelenOS IPC, yet using a normal way
- * of programming. 
- *
- * You should be able to write very simple multithreaded programs, 
- * the async framework will automatically take care of most synchronization
- * problems.
- *
- * Default semantics:
- * - send() - send asynchronously. If the kernel refuses to send more
- *            messages, [ try to get responses from kernel, if nothing
- *            found, might try synchronous ]
- *
- * Example of use:
- * 
- * 1) Multithreaded client application
- *  create_thread(thread1);
- *  create_thread(thread2);
- *  ...
- *  
- *  thread1() {
- *        conn = ipc_connect_me_to();
- *        c1 = send(conn);
- *        c2 = send(conn);
- *        wait_for(c1);
- *        wait_for(c2);
- *  }
- *
- *
- * 2) Multithreaded server application
- * main() {
- *      async_manager();
- * }
- * 
- *
- * client_connection(icallid, *icall) {
- *       if (want_refuse) {
- *           ipc_answer_fast(icallid, ELIMIT, 0, 0);
- *           return;
- *       }
- *       ipc_answer_fast(icallid, 0, 0, 0);
- *
- *       callid = async_get_call(&call);
- *       handle(callid, call);
- *       ipc_answer_fast(callid, 1, 2, 3);
- *
- *       callid = async_get_call(&call);
- *       ....
- * }
- *
- * TODO: Detaching/joining dead psthreads?
- */
-#include <futex.h>
-#include <async.h>
-#include <psthread.h>
-#include <stdio.h>
-#include <libadt/hash_table.h>
-#include <libadt/list.h>
-#include <ipc/ipc.h>
-#include <assert.h>
-#include <errno.h>
-#include <time.h>
-#include <arch/barrier.h>
-
-atomic_t async_futex = FUTEX_INITIALIZER;
-static hash_table_t conn_hash_table;
-static LIST_INITIALIZE(timeout_list);
-
-typedef struct {
-	struct timeval expires;		/**< Expiration time for waiting thread */
-	int inlist;             	/**< If true, this struct is in timeout list */
-	link_t link;
-
-	pstid_t ptid;           	/**< Thread waiting for this message */
-	int active;             	/**< If this thread is currently active */
-	int timedout;           	/**< If true, we timed out */
-} awaiter_t;
-
-typedef struct {
-	awaiter_t wdata;
-
-	int done;               	/**< If reply was received */
-	ipc_call_t *dataptr;		/**< Pointer where the answer data
-					  *   is stored */
-	ipcarg_t retval;
-} amsg_t;
-
-typedef struct {
-	link_t link;
-	ipc_callid_t callid;
-	ipc_call_t call;
-} msg_t;
-
-typedef struct {
-	awaiter_t wdata;
-
-	link_t link;			/**< Hash table link */
-	ipcarg_t in_phone_hash;		/**< Incoming phone hash. */
-	link_t msg_queue;		/**< Messages that should be delivered to this thread */
-	/* Structures for connection opening packet */
-	ipc_callid_t callid;
-	ipc_call_t call;
-	ipc_callid_t close_callid;	/* Identification of closing packet */
-	void (*cthread)(ipc_callid_t,ipc_call_t *);
-} connection_t;
-
-/** Identifier of incoming connection handled by current thread */
-__thread connection_t *PS_connection;
-/** If true, it is forbidden to use async_req functions and
- *  all preemption is disabled */
-__thread int in_interrupt_handler;
-
-static void default_client_connection(ipc_callid_t callid, ipc_call_t *call);
-static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call);
-static async_client_conn_t client_connection = default_client_connection;
-static async_client_conn_t interrupt_received = default_interrupt_received;
-
-/** Add microseconds to give timeval */
-static void tv_add(struct timeval *tv, suseconds_t usecs)
-{
-	tv->tv_sec += usecs / 1000000;
-	tv->tv_usec += usecs % 1000000;
-	if (tv->tv_usec > 1000000) {
-		tv->tv_sec++;
-		tv->tv_usec -= 1000000;
-	}
-}
-
-/** Subtract 2 timevals, return microseconds difference */
-static suseconds_t tv_sub(struct timeval *tv1, struct timeval *tv2)
-{
-	suseconds_t result;
-
-	result = tv1->tv_usec - tv2->tv_usec;
-	result += (tv1->tv_sec - tv2->tv_sec) * 1000000;
-
-	return result;
-}
-
-/** Compare timeval
- *
- * @return 1 if tv1 > tv2, otherwise 0
- */
-static int tv_gt(struct timeval *tv1, struct timeval *tv2)
-{
-	if (tv1->tv_sec > tv2->tv_sec)
-		return 1;
-	if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec > tv2->tv_usec)
-		return 1;
-	return 0;
-}
-static int tv_gteq(struct timeval *tv1, struct timeval *tv2)
-{
-	if (tv1->tv_sec > tv2->tv_sec)
-		return 1;
-	if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec >= tv2->tv_usec)
-		return 1;
-	return 0;
-}
-
-/* Hash table functions */
-#define CONN_HASH_TABLE_CHAINS	32
-
-static hash_index_t conn_hash(unsigned long *key)
-{
-	assert(key);
-	return ((*key) >> 4) % CONN_HASH_TABLE_CHAINS;
-}
-
-static int conn_compare(unsigned long key[], hash_count_t keys, link_t *item)
-{
-	connection_t *hs;
-
-	hs = hash_table_get_instance(item, connection_t, link);
-	
-	return key[0] == hs->in_phone_hash;
-}
-
-static void conn_remove(link_t *item)
-{
-	free(hash_table_get_instance(item, connection_t, link));
-}
-
-
-/** Operations for NS hash table. */
-static hash_table_operations_t conn_hash_table_ops = {
-	.hash = conn_hash,
-	.compare = conn_compare,
-	.remove_callback = conn_remove
-};
-
-/** Insert sort timeout msg into timeouts list
- *
- */
-static void insert_timeout(awaiter_t *wd)
-{
-	link_t *tmp;
-	awaiter_t *cur;
-
-	wd->timedout = 0;
-	wd->inlist = 1;
-
-	tmp = timeout_list.next;
-	while (tmp != &timeout_list) {
-		cur = list_get_instance(tmp, awaiter_t, link);
-		if (tv_gteq(&cur->expires, &wd->expires))
-			break;
-		tmp = tmp->next;
-	}
-	list_append(&wd->link, tmp);
-}
-
-/*************************************************/
-
-/** Try to route a call to an appropriate connection thread
- *
- */
-static int route_call(ipc_callid_t callid, ipc_call_t *call)
-{
-	connection_t *conn;
-	msg_t *msg;
-	link_t *hlp;
-	unsigned long key;
-
-	futex_down(&async_futex);
-
-	key = call->in_phone_hash;
-	hlp = hash_table_find(&conn_hash_table, &key);
-	if (!hlp) {
-		futex_up(&async_futex);
-		return 0;
-	}
-	conn = hash_table_get_instance(hlp, connection_t, link);
-
-	msg = malloc(sizeof(*msg));
-	msg->callid = callid;
-	msg->call = *call;
-	list_append(&msg->link, &conn->msg_queue);
-
-	if (IPC_GET_METHOD(*call) == IPC_M_PHONE_HUNGUP)
-		conn->close_callid = callid;
-	
-	/* If the call is waiting for event, run it */
-	if (!conn->wdata.active) {
-		/* If in timeout list, remove it */
-		if (conn->wdata.inlist) {
-			conn->wdata.inlist = 0;
-			list_remove(&conn->wdata.link);
-		}
-		conn->wdata.active = 1;
-		psthread_add_ready(conn->wdata.ptid);
-	}
-
-	futex_up(&async_futex);
-
-	return 1;
-}
-
-/** Return new incoming message for current(thread-local) connection */
-ipc_callid_t async_get_call_timeout(ipc_call_t *call, suseconds_t usecs)
-{
-	msg_t *msg;
-	ipc_callid_t callid;
-	connection_t *conn;
-	
-	assert(PS_connection);
-	/* GCC 4.1.0 coughs on PS_connection-> dereference,
-	 * GCC 4.1.1 happilly puts the rdhwr instruction in delay slot.
-	 *           I would never expect to find so many errors in 
-	 *           compiler *($&$(*&$
-	 */
-	conn = PS_connection; 
-
-	futex_down(&async_futex);
-
-	if (usecs) {
-		gettimeofday(&conn->wdata.expires, NULL);
-		tv_add(&conn->wdata.expires, usecs);
-	} else {
-		conn->wdata.inlist = 0;
-	}
-	/* If nothing in queue, wait until something appears */
-	while (list_empty(&conn->msg_queue)) {
-		if (usecs)
-			insert_timeout(&conn->wdata);
-
-		conn->wdata.active = 0;
-		psthread_schedule_next_adv(PS_TO_MANAGER);
-		/* Futex is up after getting back from async_manager 
-		 * get it again */
-		futex_down(&async_futex);
-		if (usecs && conn->wdata.timedout && \
-		    list_empty(&conn->msg_queue)) {
-			/* If we timed out-> exit */
-			futex_up(&async_futex);
-			return 0;
-		}
-	}
-	
-	msg = list_get_instance(conn->msg_queue.next, msg_t, link);
-	list_remove(&msg->link);
-	callid = msg->callid;
-	*call = msg->call;
-	free(msg);
-	
-	futex_up(&async_futex);
-	return callid;
-}
-
-/** Thread function that gets created on new connection
- *
- * This function is defined as a weak symbol - to be redefined in
- * user code.
- */
-static void default_client_connection(ipc_callid_t callid, ipc_call_t *call)
-{
-	ipc_answer_fast(callid, ENOENT, 0, 0);
-}
-static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call)
-{
-}
-
-/** Wrapper for client connection thread
- *
- * When new connection arrives, thread with this function is created.
- * It calls client_connection and does final cleanup.
- *
- * @param arg Connection structure pointer
- */
-static int connection_thread(void  *arg)
-{
-	unsigned long key;
-	msg_t *msg;
-	int close_answered = 0;
-
-	/* Setup thread local connection pointer */
-	PS_connection = (connection_t *)arg;
-	PS_connection->cthread(PS_connection->callid, &PS_connection->call);
-	
-	/* Remove myself from connection hash table */
-	futex_down(&async_futex);
-	key = PS_connection->in_phone_hash;
-	hash_table_remove(&conn_hash_table, &key, 1);
-	futex_up(&async_futex);
-	
-	/* Answer all remaining messages with ehangup */
-	while (!list_empty(&PS_connection->msg_queue)) {
-		msg = list_get_instance(PS_connection->msg_queue.next, msg_t, link);
-		list_remove(&msg->link);
-		if (msg->callid == PS_connection->close_callid)
-			close_answered = 1;
-		ipc_answer_fast(msg->callid, EHANGUP, 0, 0);
-		free(msg);
-	}
-	if (PS_connection->close_callid)
-		ipc_answer_fast(PS_connection->close_callid, 0, 0, 0);
-	
-	return 0;
-}
-
-/** Create new thread for a new connection 
- *
- * Creates new thread for connection, fills in connection
- * structures and inserts it into the hash table, so that
- * later we can easily do routing of messages to particular
- * threads.
- *
- * @param in_phone_hash Identification of the incoming connection
- * @param callid Callid of the IPC_M_CONNECT_ME_TO packet
- * @param call Call data of the opening packet
- * @param cthread Thread function that should be called upon
- *                opening the connection
- * @return New thread id
- */
-pstid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid, ipc_call_t *call, void (*cthread)(ipc_callid_t, ipc_call_t *))
-{
-	connection_t *conn;
-	unsigned long key;
-
-	conn = malloc(sizeof(*conn));
-	if (!conn) {
-		ipc_answer_fast(callid, ENOMEM, 0, 0);
-		return NULL;
-	}
-	conn->in_phone_hash = in_phone_hash;
-	list_initialize(&conn->msg_queue);
-	conn->callid = callid;
-	conn->close_callid = 0;
-	if (call)
-		conn->call = *call;
-	conn->wdata.active = 1; /* We will activate it asap */
-	conn->cthread = cthread;
-
-	conn->wdata.ptid = psthread_create(connection_thread, conn);
-	if (!conn->wdata.ptid) {
-		free(conn);
-		ipc_answer_fast(callid, ENOMEM, 0, 0);
-		return NULL;
-	}
-	/* Add connection to hash table */
-	key = conn->in_phone_hash;
-	futex_down(&async_futex);
-	hash_table_insert(&conn_hash_table, &key, &conn->link);
-	futex_up(&async_futex);
-
-	psthread_add_ready(conn->wdata.ptid);
-
-	return conn->wdata.ptid;
-}
-
-/** Handle call that was received */
-static void handle_call(ipc_callid_t callid, ipc_call_t *call)
-{
-	/* Unrouted call - do some default behaviour */
-	if ((callid & IPC_CALLID_NOTIFICATION)) {
-		in_interrupt_handler = 1;
-		(*interrupt_received)(callid,call);
-		in_interrupt_handler = 0;
-		return;
-	}		
-
-	switch (IPC_GET_METHOD(*call)) {
-	case IPC_M_CONNECT_ME_TO:
-		/* Open new connection with thread etc. */
-		async_new_connection(IPC_GET_ARG3(*call), callid, call, client_connection);
-		return;
-	}
-
-	/* Try to route call through connection tables */
-	if (route_call(callid, call))
-		return;
-
-	/* Unknown call from unknown phone - hang it up */
-	ipc_answer_fast(callid, EHANGUP, 0, 0);
-}
-
-/** Fire all timeouts that expired 
- *
- */
-static void handle_expired_timeouts(void)
-{
-	struct timeval tv;
-	awaiter_t *waiter;
-	link_t *cur;
-
-	gettimeofday(&tv,NULL);
-	futex_down(&async_futex);
-
-	cur = timeout_list.next;
-	while (cur != &timeout_list) {
-		waiter = list_get_instance(cur,awaiter_t,link);
-		if (tv_gt(&waiter->expires, &tv))
-			break;
-		cur = cur->next;
-		list_remove(&waiter->link);
-		waiter->inlist = 0;
-		waiter->timedout = 1;
-		/* Redundant condition? The thread should not
-		 * be active when it gets here.
-		 */
-		if (!waiter->active) {
-			waiter->active = 1;
-			psthread_add_ready(waiter->ptid);
-		}
-	}
-
-	futex_up(&async_futex);
-}
-
-/** Endless loop dispatching incoming calls and answers */
-static int async_manager_worker(void)
-{
-	ipc_call_t call;
-	ipc_callid_t callid;
-	int timeout;
-	awaiter_t *waiter;
-	struct timeval tv;
-
-	while (1) {
-		if (psthread_schedule_next_adv(PS_FROM_MANAGER)) {
-			futex_up(&async_futex); 
-			/* async_futex is always held
-			 * when entering manager thread
-			 */
-			continue;
-		}
-		futex_down(&async_futex);
-		if (!list_empty(&timeout_list)) {
-			waiter = list_get_instance(timeout_list.next,awaiter_t,link);
-			gettimeofday(&tv,NULL);
-			if (tv_gteq(&tv, &waiter->expires)) {
-				futex_up(&async_futex);
-				handle_expired_timeouts();
-				continue;
-			} else
-				timeout = tv_sub(&waiter->expires, &tv);
-		} else
-			timeout = SYNCH_NO_TIMEOUT;
-		futex_up(&async_futex);
-
-		callid = ipc_wait_cycle(&call, timeout, SYNCH_FLAGS_NONE);
-
-		if (!callid) {
-			handle_expired_timeouts();
-			continue;
-		}
-
-		if (callid & IPC_CALLID_ANSWERED) {
-			continue;
-		}
-
-		handle_call(callid, &call);
-	}
-	
-	return 0;
-}
-
-/** Function to start async_manager as a standalone thread 
- * 
- * When more kernel threads are used, one async manager should
- * exist per thread. The particular implementation may change,
- * currently one async_manager is started automatically per kernel
- * thread except main thread. 
- */
-static int async_manager_thread(void *arg)
-{
-	futex_up(&async_futex);
-	/* async_futex is always locked when entering
-	 * manager */
-	async_manager_worker();
-	
-	return 0;
-}
-
-/** Add one manager to manager list */
-void async_create_manager(void)
-{
-	pstid_t ptid;
-
-	ptid = psthread_create(async_manager_thread, NULL);
-	psthread_add_manager(ptid);
-}
-
-/** Remove one manager from manager list */
-void async_destroy_manager(void)
-{
-	psthread_remove_manager();
-}
-
-/** Initialize internal structures needed for async manager */
-int _async_init(void)
-{
-	if (!hash_table_create(&conn_hash_table, CONN_HASH_TABLE_CHAINS, 1, &conn_hash_table_ops)) {
-		printf("%s: cannot create hash table\n", "async");
-		return ENOMEM;
-	}
-	
-	return 0;
-}
-
-/** IPC handler for messages in async framework
- *
- * Notify thread that is waiting for this message, that it arrived
- */
-static void reply_received(void *private, int retval,
-			   ipc_call_t *data)
-{
-	amsg_t *msg = (amsg_t *) private;
-
-	msg->retval = retval;
-
-	futex_down(&async_futex);
-	/* Copy data after futex_down, just in case the
-	 * call was detached 
-	 */
-	if (msg->dataptr)
-		*msg->dataptr = *data; 
-
-	write_barrier();
-	/* Remove message from timeout list */
-	if (msg->wdata.inlist)
-		list_remove(&msg->wdata.link);
-	msg->done = 1;
-	if (! msg->wdata.active) {
-		msg->wdata.active = 1;
-		psthread_add_ready(msg->wdata.ptid);
-	}
-	futex_up(&async_futex);
-}
-
-/** Send message and return id of the sent message
- *
- * The return value can be used as input for async_wait() to wait
- * for completion.
- */
-aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
-		   ipc_call_t *dataptr)
-{
-	amsg_t *msg;
-
-	if (in_interrupt_handler) {
-		printf("Cannot send asynchronous request in interrupt handler.\n");
-		_exit(1);
-	}
-
-	msg = malloc(sizeof(*msg));
-	msg->done = 0;
-	msg->dataptr = dataptr;
-
-	msg->wdata.active = 1; /* We may sleep in next method, but it
-				* will use it's own mechanism */
-	ipc_call_async_2(phoneid,method,arg1,arg2,msg,reply_received,1);
-
-	return (aid_t) msg;
-}
-
-/** Send message and return id of the sent message
- *
- * The return value can be used as input for async_wait() to wait
- * for completion.
- */
-aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
-		   ipcarg_t arg3, ipc_call_t *dataptr)
-{
-	amsg_t *msg;
-
-	if (in_interrupt_handler) {
-		printf("Cannot send asynchronous request in interrupt handler.\n");
-		_exit(1);
-	}
-
-	msg = malloc(sizeof(*msg));
-	msg->done = 0;
-	msg->dataptr = dataptr;
-
-	msg->wdata.active = 1; /* We may sleep in next method, but it
-				* will use it's own mechanism */
-	ipc_call_async_3(phoneid,method,arg1,arg2,arg3, msg,reply_received,1);
-
-	return (aid_t) msg;
-}
-
-/** Wait for a message sent by async framework
- *
- * @param amsgid Message ID to wait for
- * @param retval Pointer to variable where will be stored retval
- *               of the answered message. If NULL, it is ignored.
- *
- */
-void async_wait_for(aid_t amsgid, ipcarg_t *retval)
-{
-	amsg_t *msg = (amsg_t *) amsgid;
-
-	futex_down(&async_futex);
-	if (msg->done) {
-		futex_up(&async_futex);
-		goto done;
-	}
-
-	msg->wdata.ptid = psthread_get_id();
-	msg->wdata.active = 0;
-	msg->wdata.inlist = 0;
-	/* Leave locked async_futex when entering this function */
-	psthread_schedule_next_adv(PS_TO_MANAGER);
-	/* futex is up automatically after psthread_schedule_next...*/
-done:
-	if (retval)
-		*retval = msg->retval;
-	free(msg);
-}
-
-/** Wait for a message sent by async framework with timeout
- *
- * @param amsgid Message ID to wait for
- * @param retval Pointer to variable where will be stored retval
- *               of the answered message. If NULL, it is ignored.
- * @param timeout Timeout in usecs
- * @return 0 on success, ETIMEOUT if timeout expired
- *
- */
-int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout)
-{
-	amsg_t *msg = (amsg_t *) amsgid;
-
-	/* TODO: Let it go through the event read at least once */
-	if (timeout < 0)
-		return ETIMEOUT;
-
-	futex_down(&async_futex);
-	if (msg->done) {
-		futex_up(&async_futex);
-		goto done;
-	}
-
-	gettimeofday(&msg->wdata.expires, NULL);
-	tv_add(&msg->wdata.expires, timeout);
-
-	msg->wdata.ptid = psthread_get_id();
-	msg->wdata.active = 0;
-	insert_timeout(&msg->wdata);
-
-	/* Leave locked async_futex when entering this function */
-	psthread_schedule_next_adv(PS_TO_MANAGER);
-	/* futex is up automatically after psthread_schedule_next...*/
-
-	if (!msg->done)
-		return ETIMEOUT;
-
-done:
-	if (retval)
-		*retval = msg->retval;
-	free(msg);
-
-	return 0;
-}
-
-/** Wait specified time, but in the meantime handle incoming events
- *
- * @param timeout Time in microseconds to wait
- */
-void async_usleep(suseconds_t timeout)
-{
-	amsg_t *msg;
-	
-	if (in_interrupt_handler) {
-		printf("Cannot call async_usleep in interrupt handler.\n");
-		_exit(1);
-	}
-
-	msg = malloc(sizeof(*msg));
-	if (!msg)
-		return;
-
-	msg->wdata.ptid = psthread_get_id();
-	msg->wdata.active = 0;
-
-	gettimeofday(&msg->wdata.expires, NULL);
-	tv_add(&msg->wdata.expires, timeout);
-
-	futex_down(&async_futex);
-	insert_timeout(&msg->wdata);
-	/* Leave locked async_futex when entering this function */
-	psthread_schedule_next_adv(PS_TO_MANAGER);
-	/* futex is up automatically after psthread_schedule_next...*/
-	free(msg);
-}
-
-/** Set function that is called, IPC_M_CONNECT_ME_TO is received
- *
- * @param conn Function that will form new psthread.
- */
-void async_set_client_connection(async_client_conn_t conn)
-{
-	client_connection = conn;
-}
-void async_set_interrupt_received(async_client_conn_t conn)
-{
-	interrupt_received = conn;
-}
-
-/* Primitive functions for simple communication */
-void async_msg_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
-		 ipcarg_t arg2, ipcarg_t arg3)
-{
-	ipc_call_async_3(phoneid, method, arg1, arg2, arg3, NULL, NULL, !in_interrupt_handler);
-}
-
-void async_msg_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2)
-{
-	ipc_call_async_2(phoneid, method, arg1, arg2, NULL, NULL, !in_interrupt_handler);
-}
-
-/** @}
- */
Index: pace/libc/generic/cap.c
===================================================================
--- uspace/libc/generic/cap.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,75 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file	cap.c
- * @brief	Functions to grant/revoke capabilities to/from a task.
- */
-
-#include <cap.h>
-#include <task.h>
-#include <libc.h>
-#include <kernel/syscall/sysarg64.h>
-
-/** Grant capabilities to a task.
- *
- * @param id Destination task ID.
- * @param caps Capabilities to grant.
- *
- * @return Zero on success or a value from @ref errno.h on failure.
- */
-int cap_grant(task_id_t id, unsigned int caps)
-{
-	sysarg64_t arg;
-	
-	arg.value = (unsigned long long) id;
-
-	return __SYSCALL2(SYS_CAP_GRANT, (sysarg_t) &arg, (sysarg_t) caps);
-}
-
-/** Revoke capabilities from a task.
- *
- * @param id Destination task ID.
- * @param caps Capabilities to revoke.
- *
- * @return Zero on success or a value from @ref errno.h on failure.
- */
-int cap_revoke(task_id_t id, unsigned int caps)
-{
-	sysarg64_t arg;
-	
-	arg.value = (unsigned long long) id;
-
-	return __SYSCALL2(SYS_CAP_REVOKE, (sysarg_t) &arg, (sysarg_t) caps);
-}
-
-/** @}
- */
Index: pace/libc/generic/ddi.c
===================================================================
--- uspace/libc/generic/ddi.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,91 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <ddi.h>
-#include <libc.h>
-#include <task.h>
-#include <kernel/ddi/ddi_arg.h>
-
-/** Map piece of physical memory to task.
- *
- * Caller of this function must have the CAP_MEM_MANAGER capability.
- *
- * @param pf Physical address of the starting frame.
- * @param vp Virtual address of the sterting page.
- * @param pages Number of pages to map.
- * @param flags Flags for the new address space area.
- *
- * @return 0 on success, EPERM if the caller lacks the CAP_MEM_MANAGER capability,
- *	   ENOENT if there is no task with specified ID and ENOMEM if there
- *	   was some problem in creating address space area.
- */
-int physmem_map(void *pf, void *vp, unsigned long pages, int flags)
-{
-	return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp, pages, flags);
-}
-
-/** Enable I/O space range to task.
- *
- * Caller of this function must have the IO_MEM_MANAGER capability.
- *
- * @param id Task ID.
- * @param ioaddr Starting address of the I/O range.
- * @param size Size of the range.
- *
- * @return 0 on success, EPERM if the caller lacks the CAP_IO_MANAGER capability,
- *	   ENOENT if there is no task with specified ID and ENOMEM if there
- *	   was some problem in allocating memory.
- */
-int iospace_enable(task_id_t id, void *ioaddr, unsigned long size)
-{
-	ddi_ioarg_t arg;
-
-	arg.task_id = id;
-	arg.ioaddr = ioaddr;
-	arg.size = size;
-
-	return __SYSCALL1(SYS_IOSPACE_ENABLE, (sysarg_t) &arg);
-}
-
-/** Interrupt control
- *
- * @param enable 1 - enable interrupts, 0 - disable interrupts
- */
-int preemption_control(int enable)
-{
-	return __SYSCALL1(SYS_PREEMPT_CONTROL, (sysarg_t) enable);
-}
-
-/** @}
- */
Index: pace/libc/generic/err.c
===================================================================
--- uspace/libc/generic/err.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/* TODO
-void errx(int __status, __const char *__format, ...)
-{
-	_exit(0);
-}
-*/
-
-/** @}
- */
Index: pace/libc/generic/futex.c
===================================================================
--- uspace/libc/generic/futex.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,177 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <futex.h>
-#include <atomic.h>
-#include <libc.h>
-#include <stdio.h>
-#include <types.h>
-#include <kernel/synch/synch.h>
-
-/*
- * Note about race conditions.
- * Because of non-atomic nature of operations performed sequentially on the futex
- * counter and the futex wait queue, there is a race condition:
- *
- * (wq->missed_wakeups == 1) && (futex->count = 1)
- *
- * Scenario 1 (wait queue timeout vs. futex_up()):
- * 1. assume wq->missed_wakeups == 0 && futex->count == -1
- *    (ie. thread A sleeping, thread B in the critical section)
- * 2. A receives timeout and gets removed from the wait queue
- * 3. B wants to leave the critical section and calls futex_up()
- * 4. B thus changes futex->count from -1 to 0
- * 5. B has to call SYS_FUTEX_WAKEUP syscall to wake up the sleeping thread
- * 6. B finds the wait queue empty and changes wq->missed_wakeups from 0 to 1
- * 7. A fixes futex->count (i.e. the number of waiting threads) by changing it from 0 to 1
- *
- * Scenario 2 (conditional down operation vs. futex_up)
- * 1. assume wq->missed_wakeups == 0 && futex->count == 0
- *    (i.e. thread A is in the critical section)
- * 2. thread B performs futex_trydown() operation and changes futex->count from 0 to -1
- *    B is now obliged to call SYS_FUTEX_SLEEP syscall
- * 3. A wants to leave the critical section and does futex_up()
- * 4. A thus changes futex->count from -1 to 0 and must call SYS_FUTEX_WAKEUP syscall
- * 5. B finds the wait queue empty and immediatelly aborts the conditional sleep
- * 6. No thread is queueing in the wait queue so wq->missed_wakeups changes from 0 to 1
- * 6. B fixes futex->count (i.e. the number of waiting threads) by changing it from 0 to 1
- *
- * Both scenarios allow two threads to be in the critical section simultaneously.
- * One without kernel intervention and the other through wq->missed_wakeups being 1.
- *
- * To mitigate this problem, futex_down_timeout() detects that the syscall didn't sleep
- * in the wait queue, fixes the futex counter and RETRIES the whole operation again.
- *
- */
-
-/** Initialize futex counter.
- *
- * @param futex Futex.
- * @param val Initialization value.
- */
-void futex_initialize(atomic_t *futex, int val)
-{
-	atomic_set(futex, val);
-}
-
-int futex_down(atomic_t *futex)
-{
-	return futex_down_timeout(futex, SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE);
-}
-
-int futex_trydown(atomic_t *futex)
-{
-	return futex_down_timeout(futex, SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NON_BLOCKING);
-}
-
-/** Try to down the futex.
- *
- * @param futex Futex.
- * @param usec Microseconds to wait. Zero value means sleep without timeout.
- * @param flags Select mode of operation. See comment for waitq_sleep_timeout(). 
- *
- * @return ENOENT if there is no such virtual address. One of ESYNCH_OK_ATOMIC
- *	   and ESYNCH_OK_BLOCKED on success or ESYNCH_TIMEOUT if the lock was
- *	   not acquired because of a timeout or ESYNCH_WOULD_BLOCK if the
- *	   operation could not be carried out atomically (if requested so).
- */
-int futex_down_timeout(atomic_t *futex, uint32_t usec, int flags)
-{
-	int rc;
-	
-	while (atomic_predec(futex) < 0) {
-		rc = __SYSCALL3(SYS_FUTEX_SLEEP, (sysarg_t) &futex->count, (sysarg_t) usec, (sysarg_t) flags);
-		
-		switch (rc) {
-		case ESYNCH_OK_ATOMIC:
-			/*
-			 * Because of a race condition between timeout and futex_up()
-			 * and between conditional futex_down_timeout() and futex_up(),
-			 * we have to give up and try again in this special case.
-			 */
-			atomic_inc(futex);
-			break;
-
-		case ESYNCH_TIMEOUT:
-			atomic_inc(futex);
-			return ESYNCH_TIMEOUT;
-			break;
-
-		case ESYNCH_WOULD_BLOCK:
-			/*
-			 * The conditional down operation should be implemented this way.
-			 * The userspace-only variant tends to accumulate missed wakeups
-			 * in the kernel futex wait queue.
-			 */
-			atomic_inc(futex);
-			return ESYNCH_WOULD_BLOCK;
-			break;
-
-		case ESYNCH_OK_BLOCKED:
-			/*
-			 * Enter the critical section.
-			 * The futex counter has already been incremented for us.
-			 */
-			return ESYNCH_OK_BLOCKED;
-			break;
-		default:
-			return rc;
-		}
-	}
-
-	/*
-	 * Enter the critical section.
-	 */
-	return ESYNCH_OK_ATOMIC;
-}
-
-/** Up the futex.
- *
- * @param futex Futex.
- *
- * @return ENOENT if there is no such virtual address. Otherwise zero.
- */
-int futex_up(atomic_t *futex)
-{
-	long val;
-	
-	val = atomic_postinc(futex);
-	if (val < 0)
-		return __SYSCALL1(SYS_FUTEX_WAKEUP, (sysarg_t) &futex->count);
-		
-	return 0;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/file.c
===================================================================
--- uspace/libc/generic/io/file.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,288 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Konopa
- * Copyright (c) 2007 Martin Jelen
- * Copyright (c) 2007 Peter Majer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */ 
-
-/**
- * @file	file.c
- * @brief	The user library for working with the file system
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <async.h>
-#include <ipc/services.h>
-#include <ipc/ipc.h>
-#include <sys/mman.h>
-#include <io/file.h>
-#include <bool.h>
-#include <err.h>
-#include <align.h>
-#include "../../../fs/dir.h"
-#include "../../../share/message.h"
-#include "../../../share/shared_proto.h"
-
-#define CONNECT_SLEEP_INTERVAL 10000
-#define CONNECT_SLEEP_TIMEOUT 100000
-
-/**
-*
-*/
-static int fs_phone;
-
-static file_t *file_connect();
-static int file_disconnect(file_t *file);
-
-/**
- * Connect to the FS task and share memory with it for further data and 
- * extended memory transfers
- */
-file_t *file_connect() {
-	file_t *result;
-	
-	size_t size;
-	void *share = NULL;
-	int retval;
-
-	size = ALIGN_UP(BLOCK_SIZE * sizeof(char), PAGE_SIZE);
-	share = mmap(share, size, AS_AREA_READ | AS_AREA_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0);
-	if ((int) share < 0) {
-		f_err = F_MMAP_FAILURE;
-		return NULL;
-	}
-
-	retval = async_req_2(fs_phone, FS_NEW_CONSUMER, task_get_id(), 0, NULL, NULL);
-	if (retval < 0) {
-		f_err = F_COMM_FAILURE;
-		return NULL;
-	}
-
-	int flags = 0;
-	flags = AS_AREA_READ | AS_AREA_WRITE;
-	retval = async_req_3(fs_phone, IPC_M_AS_AREA_SEND, (uintptr_t)share, size, flags, NULL, NULL, NULL);
-	if (retval < 0) {
-		f_err = F_COMM_FAILURE;
-		return NULL;
-	}
-	
-	/* Allocating structure for extended message. */
-	message_params_t *params = malloc(sizeof(message_params_t));
-	memset((void*) params, 0, sizeof(message_params_t));
-	
-	result = malloc(sizeof(file_t));
-	result->share = share;
-	result->size = size;
-	result->params = params;
-	
-	f_err = F_OK;
-	return result;
-}
-
-/**
- * Disconnect from the FS task, unsharing memory and freeing the file data structure
- */
-int file_disconnect(file_t *file) {
-	int retval = send_request(fs_phone, FS_DROP_CONSUMER, file->params, file->share);
-	if (retval < 0)
-		return -1;
-	
-	/* Unmapping share area. */ 
-	retval = munmap(file->share, file->size);
-	if (retval < 0)
-		return -1;
-	
-	file->size = ALIGN_UP(BLOCK_SIZE * sizeof(char), PAGE_SIZE);
-	file->share = mmap(file->share, file->size, AS_AREA_READ | AS_AREA_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0);
-	if ((int) (file->share) < 0)
-		return -1;
-	
-	free(file);
-	f_err = F_OK;
-	return F_OK;
-}
-
-/**
- * List contents of the current directory
- */
-dir_item_t *ls(unsigned int *length) {
-	dir_item_t *result;
-	unsigned short entries_num;
-
-	file_t *shared_file = file_connect();
-	if (shared_file == NULL)
-		return NULL;
-	
-	/* We want lookup our work directory. */
-	retval = send_request(fs_phone, FS_DSUM, shared_file->params, shared_file->share);
-	if (retval < 0) {
-		f_err = F_READ_ERROR;
-		return NULL;
-	}
-	
-	entries_num = retval;
-	*length = entries_num;
-	
-	result = malloc(entries_num * sizeof (dir_item_t));
-	
-	int entry;
-	for (entry = 0; entry < entries_num; entry++) {
-		shared_file->params->entry_number = entry;
-		retval = send_request(fs_phone, FS_READENTRY, shared_file->params, shared_file->share);
-		if (retval < 0) {
-			f_err = F_READ_ERROR;
-			return NULL;
-		}
-		
-		memcpy(&(result[entry].inode_num), shared_file->share, sizeof(unsigned short));
-		memcpy(result[entry].name, (void *)(shared_file->share+sizeof(unsigned short)), retval-sizeof(unsigned short));
-
-		/* Do not show empty entries. */
-		if (!result[entry].inode_num)
-			continue;
-		 
-	}
-	return result;
-}
-
-/**
- * Change the current working directory for the task
- */
-int chdir(char * new_dir)
-{
-	file_t *shared_file = file_connect();
-	
-	if (shared_file == NULL) {
-		f_err = F_READ_ERROR;
-		return F_READ_ERROR;
-	}
-	memcpy(shared_file->params->fname, new_dir, 30);
-	
-	int retval = send_request(fs_phone, FS_CHDIR, shared_file->params, shared_file->share);
-	if (retval < 0) {
-		f_err = F_READ_ERROR;
-		return F_READ_ERROR;
-	}
-
-	retval = file_disconnect(shared_file);
-	f_err = F_OK;
-	return F_OK;
-}
-
-/**
- * Open a file for reading and/or writing
- */
-file_t *fopen(char *name, int mode)
-{
-	file_t *file = file_connect();
-	
-	/* We want to work with the specified file. */	
-	memcpy(file->params->fname, name, 30);
-
-	int retval = send_request(fs_phone, FS_OPEN, file->params, file->share);
-	if (retval < 0)
-		return NULL;
-	
-	file->handle = retval;
-	
-	return file;
-}
-
-/**
- * Read status information about a file
- */
-int fstat(file_t *file)
-{
-	memcpy(file->params->fname, file->base_info.name, 30);
-	file->params->fd = file->handle;
-
-	int retval = send_request(fs_phone, FS_FSTAT, file->params, file->share);
-	if (retval < 0)
-		return -1;
-	
-	memcpy((void *)(&file->stat), file->share, sizeof(stat_t));
-	
-	f_err = F_OK;
-	return F_OK;
-}
-
-/**
- * Read data from a file
- */
-int fread(file_t *file, void* buffer, unsigned int size)
-{
-	file->params->nbytes = size;
-	
-	int retval = send_request(fs_phone, FS_READ, file->params, file->share);
-	if (retval < 0)
-		return -1;
-
-	f_err = F_OK;
-	return F_OK;
-}
-
-/**
- * Seek to a position within a file
- */
-int fseek(file_t *file, int offset, int whence)
-{
-	file->params->offset = 0;
-	file->params->whence = 0;	/* from beginning of the file */
-
-	int retval = send_request(fs_phone, FS_SEEK, file->params, file->share);
-	if (retval < 0)
-		return -1;
-
-	f_err = F_OK;
-	return F_OK;
-}
-
-/**
- * Close a file
- */
-int fclose(file_t *file)
-{
-	int retval = send_request(fs_phone, FS_CLOSE, file->params, file->share);
-	if (retval < 0)
-		return -1;
-
-	if (file != NULL)
-		file_disconnect(file);
-	
-	f_err = F_OK;
-	return F_OK;
-}
-
-/**
- *@}
- */
Index: pace/libc/generic/io/io.c
===================================================================
--- uspace/libc/generic/io/io.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,107 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <libc.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <io/io.h>
-
-const static char nl = '\n';
-
-int puts(const char *str)
-{
-	size_t count;
-	
-	if (str == NULL)
-		return putnchars("(NULL)", 6);
-	
-	for (count = 0; str[count] != 0; count++);
-	if (write(1, (void *) str, count) == count) {
-		if (write(1, &nl, 1) == 1)
-			return 0;
-	}
-	
-	return EOF;
-}
-
-/** Put count chars from buffer to stdout without adding newline
- * @param buf Buffer with size at least count bytes - NULL pointer NOT allowed!
- * @param count 
- * @return 0 on succes, EOF on fail
- */
-int putnchars(const char *buf, size_t count)
-{
-	if (write(1, (void *) buf, count) == count)
-			return 0;
-	
-	return EOF;
-}
-
-/** Same as puts, but does not print newline at end
- *
- */
-int putstr(const char *str)
-{
-	size_t count;
-	
-	if (str == NULL)
-		return putnchars("(NULL)", 6);
-
-	for (count = 0; str[count] != 0; count++);
-	if (write(1, (void *) str, count) == count)
-			return 0;
-	
-	return EOF;
-}
-
-int putchar(int c)
-{
-	unsigned char ch = c;
-	if (write(1, (void *) &ch, 1) == 1)
-			return c;
-	
-	return EOF;
-}
-
-int getchar(void)
-{
-	unsigned char c;
-	if (read(0, (void *) &c, 1) == 1)
-			return c;
-	
-	return EOF;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/printf.c
===================================================================
--- uspace/libc/generic/io/printf.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <io/printf_core.h>
-#include <stdio.h>
-#include <stdio.h>
-
-/** Print formatted text.
- * @param fmt	format string
- * \see For more details about format string see printf_core.
- */
-int printf(const char *fmt, ...)
-{
-	int ret;
-	va_list args;
-
-	va_start(args, fmt);
-
-	ret = vprintf(fmt, args);
-	
-	va_end(args);
-
-	return ret;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/printf_core.c
===================================================================
--- uspace/libc/generic/io/printf_core.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,683 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- * @brief	Printing functions.
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include <io/printf_core.h>
-#include <ctype.h>
-#include <string.h>
-
-#define __PRINTF_FLAG_PREFIX		0x00000001	/**< show prefixes 0x or 0*/
-#define __PRINTF_FLAG_SIGNED		0x00000002	/**< signed / unsigned number */
-#define __PRINTF_FLAG_ZEROPADDED	0x00000004	/**< print leading zeroes */
-#define __PRINTF_FLAG_LEFTALIGNED	0x00000010	/**< align to left */
-#define __PRINTF_FLAG_SHOWPLUS		0x00000020	/**< always show + sign */
-#define __PRINTF_FLAG_SPACESIGN		0x00000040	/**< print space instead of plus */
-#define __PRINTF_FLAG_BIGCHARS		0x00000080	/**< show big characters */
-#define __PRINTF_FLAG_NEGATIVE		0x00000100	/**< number has - sign */
-
-#define PRINT_NUMBER_BUFFER_SIZE	(64+5)		/**< Buffer big enought for 64 bit number
-							 * printed in base 2, sign, prefix and
-							 * 0 to terminate string.. (last one is only for better testing 
-							 * end of buffer by zero-filling subroutine)
-							 */
-/** Enumeration of possible arguments types.
- */
-typedef enum {
-	PrintfQualifierByte = 0,
-	PrintfQualifierShort,
-	PrintfQualifierInt,
-	PrintfQualifierLong,
-	PrintfQualifierLongLong,
-	PrintfQualifierSizeT,
-	PrintfQualifierPointer
-} qualifier_t;
-
-static char digits_small[] = "0123456789abcdef";	/**< Small hexadecimal characters */
-static char digits_big[] = "0123456789ABCDEF";		/**< Big hexadecimal characters */
-
-/** Print count chars from buffer without adding newline
- * @param buf Buffer with size at least count bytes - NULL pointer NOT allowed!
- * @param count 
- * @param ps output method and its data
- * @return number of printed characters
- */
-static int printf_putnchars(const char * buf, size_t count, struct printf_spec *ps)
-{
-	return ps->write((void *)buf, count, ps->data);
-}
-
-/** Print string without added newline
- * @param str string to print
- * @param ps write function specification and support data
- * @return number of printed characters
- */
-static int printf_putstr(const char * str, struct printf_spec *ps)
-{
-	size_t count;
-	
-	if (str == NULL)
-		return printf_putnchars("(NULL)", 6, ps);
-
-	for (count = 0; str[count] != 0; count++);
-
-	if (ps->write((void *) str, count, ps->data) == count)
-		return 0;
-	
-	return EOF;
-}
-
-/** Print one character to output
- * @param c one character
- * @param ps output method
- * @return number of printed characters
- */
-static int printf_putchar(int c, struct printf_spec *ps)
-{
-	unsigned char ch = c;
-	
-	return ps->write((void *) &ch, 1, ps->data);
-}
-
-/** Print one formatted character
- * @param c character to print
- * @param width 
- * @param flags
- * @return number of printed characters
- */
-static int print_char(char c, int width, uint64_t flags, struct printf_spec *ps)
-{
-	int counter = 0;
-	
-	if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) {
-		while (--width > 0) { 	/* one space is consumed by character itself hence predecrement */
-			if (printf_putchar(' ', ps) > 0)	
-				++counter;
-		}
-	}
- 	
-	if (printf_putchar(c, ps) > 0)
-		counter++;
-	
-	while (--width > 0) { /* one space is consumed by character itself hence predecrement */
-		if (printf_putchar(' ', ps) > 0)
-			++counter;
-	}
-	
-	return ++counter;
-}
-
-/** Print one string
- * @param s string
- * @param width 
- * @param precision
- * @param flags
- * @return number of printed characters
- */
-						
-static int print_string(char *s, int width, int precision, uint64_t flags, struct printf_spec *ps)
-{
-	int counter = 0;
-	size_t size;
-	int retval;
-
-	if (s == NULL) {
-		return printf_putstr("(NULL)", ps);
-	}
-	
-	size = strlen(s);
-
-	/* print leading spaces */
-
-	if (precision == 0) 
-		precision = size;
-
-	width -= precision;
-	
-	if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) {
-		while (width-- > 0) { 	
-			if (printf_putchar(' ', ps) == 1)	
-				counter++;
-		}
-	}
-
-	while (precision > size) {
-		precision--;
-		if (printf_putchar(' ', ps) == 1)	
-			++counter;
-	}
-	
- 	if ((retval = printf_putnchars(s, precision, ps)) < 0) {
-		return -counter;
-	}
-
-	counter += retval;	
-
-	while (width-- > 0) {
-		if (printf_putchar(' ', ps) == 1)	
-			++counter;
-	}
-	
-	return counter;
-}
-
-
-/** Print number in given base
- *
- * Print significant digits of a number in given
- * base.
- *
- * @param num  Number to print.
- * @param width
- * @param precision
- * @param base Base to print the number in (should
- *             be in range 2 .. 16).
- * @param flags output modifiers
- * @return number of printed characters
- *
- */
-static int print_number(uint64_t num, int width, int precision, int base , uint64_t flags, struct printf_spec *ps)
-{
-	char *digits = digits_small;
-	char d[PRINT_NUMBER_BUFFER_SIZE];	/* this is good enough even for base == 2, prefix and sign */
-	char *ptr = &d[PRINT_NUMBER_BUFFER_SIZE - 1];
-	int size = 0; /* size of number with all prefixes and signs */
-	int number_size; /* size of plain number */
-	char sgn;
-	int retval;
-	int counter = 0;
-	
-	if (flags & __PRINTF_FLAG_BIGCHARS) 
-		digits = digits_big;	
-	
-	*ptr-- = 0; /* Put zero at end of string */
-
-	if (num == 0) {
-		*ptr-- = '0';
-		size++;
-	} else {
-		do {
-			*ptr-- = digits[num % base];
-			size++;
-		} while (num /= base);
-	}
-	
-	number_size = size;
-
-	/* Collect sum of all prefixes/signs/... to calculate padding and leading zeroes */
-	if (flags & __PRINTF_FLAG_PREFIX) {
-		switch(base) {
-		case 2:	/* Binary formating is not standard, but usefull */
-			size += 2;
-			break;
-		case 8:
-			size++;
-			break;
-		case 16:
-			size += 2;
-			break;
-		}
-	}
-
-	sgn = 0;
-	if (flags & __PRINTF_FLAG_SIGNED) {
-		if (flags & __PRINTF_FLAG_NEGATIVE) {
-			sgn = '-';
-			size++;
-		} else if (flags & __PRINTF_FLAG_SHOWPLUS) {
-				sgn = '+';
-				size++;
-			} else if (flags & __PRINTF_FLAG_SPACESIGN) {
-					sgn = ' ';
-					size++;
-				}
-	}
-
-	if (flags & __PRINTF_FLAG_LEFTALIGNED) {
-		flags &= ~__PRINTF_FLAG_ZEROPADDED;
-	}
-
-	/* if number is leftaligned or precision is specified then zeropadding is ignored */
-	if (flags & __PRINTF_FLAG_ZEROPADDED) {
-		if ((precision == 0) && (width > size)) {
-			precision = width - size + number_size;
-		}
-	}
-
-	/* print leading spaces */
-	if (number_size > precision) /* We must print whole number not only a part */
-		precision = number_size;
-
-	width -= precision + size - number_size;
-	
-	if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) {
-		while (width-- > 0) { 	
-			if (printf_putchar(' ', ps) == 1)	
-				counter++;
-		}
-	}
-	
-	/* print sign */
-	if (sgn) {
-		if (printf_putchar(sgn, ps) == 1)
-			counter++;
-	}
-	
-	/* print prefix */
-	
-	if (flags & __PRINTF_FLAG_PREFIX) {
-		switch(base) {
-		case 2:	/* Binary formating is not standard, but usefull */
-			if (printf_putchar('0', ps) == 1)
-				counter++;
-			if (flags & __PRINTF_FLAG_BIGCHARS) {
-				if (printf_putchar('B', ps) == 1)
-					counter++;
-			} else {
-				if (printf_putchar('b', ps) == 1)
-					counter++;
-			}
-			break;
-		case 8:
-			if (printf_putchar('o', ps) == 1)
-				counter++;
-			break;
-		case 16:
-			if (printf_putchar('0', ps) == 1)
-				counter++;
-			if (flags & __PRINTF_FLAG_BIGCHARS) {
-				if (printf_putchar('X', ps) == 1)
-					counter++;
-			} else {
-				if (printf_putchar('x', ps) == 1)
-					counter++;
-			}
-			break;
-		}
-	}
-
-	/* print leading zeroes */
-	precision -= number_size;
-	while (precision-- > 0) { 	
-		if (printf_putchar('0', ps) == 1)
-			counter++;
-	}
-
-	
-	/* print number itself */
-
-	if ((retval = printf_putstr(++ptr, ps)) > 0) {
-		counter += retval;
-	}
-	
-	/* print ending spaces */
-	
-	while (width-- > 0) { 	
-		if (printf_putchar(' ', ps) == 1)	
-			counter++;
-	}
-
-	return counter;
-}
-
-
-/** Print formatted string.
- *
- * Print string formatted according to the fmt parameter
- * and variadic arguments. Each formatting directive
- * must have the following form:
- * 
- * 	\% [ FLAGS ] [ WIDTH ] [ .PRECISION ] [ TYPE ] CONVERSION
- *
- * FLAGS:@n
- * 	- "#" Force to print prefix.
- * 	For conversion \%o the prefix is 0, for %x and \%X prefixes are 0x and 0X
- *	and for conversion \%b the prefix is 0b.
- *
- * 	- "-"	Align to left.
- *
- * 	- "+"	Print positive sign just as negative.
- *
- * 	- " "	If the printed number is positive and "+" flag is not set, print space in
- *	place of sign.
- *
- * 	- "0"	Print 0 as padding instead of spaces. Zeroes are placed between sign and the
- *	rest of the number. This flag is ignored if "-" flag is specified.
- * 
- * WIDTH:@n
- * 	- Specify minimal width of printed argument. If it is bigger, width is ignored.
- * If width is specified with a "*" character instead of number, width is taken from
- * parameter list. And integer parameter is expected before parameter for processed
- * conversion specification. If this value is negative its absolute value is taken
- * and the "-" flag is set.
- *
- * PRECISION:@n
- * 	- Value precision. For numbers it specifies minimum valid numbers.
- * Smaller numbers are printed with leading zeroes. Bigger numbers are not affected.
- * Strings with more than precision characters are cut off.
- * Just as with width, an "*" can be used used instead of a number.
- * An integer value is then expected in parameters. When both width and precision
- * are specified using "*", the first parameter is used for width and the second one
- * for precision.
- * 
- * TYPE:@n
- * 	- "hh"	Signed or unsigned char.@n
- * 	- "h"	Signed or usigned short.@n
- * 	- ""	Signed or usigned int (default value).@n
- * 	- "l"	Signed or usigned long int.@n
- * 	- "ll"	Signed or usigned long long int.@n
- * 	- "z"	Type size_t.@n
- * 
- * 
- * CONVERSION:@n
- * 	- %	Print percentile character itself.
- *
- * 	- c	Print single character.
- *
- * 	- s	Print zero terminated string. If a NULL value is passed as value, "(NULL)" is printed instead.
- * 
- * 	- P, p	Print value of a pointer. Void * value is expected and it is printed in hexadecimal notation with prefix
- * 	(as with '\%#X' or '\%#x' for 32bit or '\%#X' or '\%#x' for 64bit long pointers).
- *
- * 	- b	Print value as unsigned binary number. Prefix is not printed by default. (Nonstandard extension.)
- * 
- * 	- o	Print value as unsigned octal number. Prefix is not printed by default. 
- *
- * 	- d,i	Print signed decimal number. There is no difference between d and i conversion.
- *
- * 	- u	Print unsigned decimal number.
- *
- * 	- X, x	Print hexadecimal number with upper- or lower-case. Prefix is not printed by default.
- * 
- * All other characters from fmt except the formatting directives
- * are printed in verbatim.
- *
- * @param fmt Formatting NULL terminated string.
- * @return Number of printed characters or negative value on failure.
- */
-int printf_core(const char *fmt, struct printf_spec *ps, va_list ap)
-{
-	int i = 0, j = 0; /* i is index of currently processed char from fmt, j is index to the first not printed nonformating character */
-	int end;
-	int counter; /* counter of printed characters */
-	int retval; /* used to store return values from called functions */
-	char c;
-	qualifier_t qualifier;	/* type of argument */
-	int base;	/* base in which will be parameter (numbers only) printed */
-	uint64_t number; /* argument value */
-	size_t	size; /* byte size of integer parameter */
-	int width, precision;
-	uint64_t flags;
-	
-	counter = 0;
-	
-	while ((c = fmt[i])) {
-		/* control character */
-		if (c == '%' ) { 
-			/* print common characters if any processed */	
-			if (i > j) {
-				if ((retval = printf_putnchars(&fmt[j], (size_t)(i - j), ps)) < 0) { /* error */
-					goto minus_out;
-				}
-				counter += retval;
-			}
-		
-			j = i;
-			/* parse modifiers */
-			flags = 0;
-			end = 0;
-			
-			do {
-				++i;
-				switch (c = fmt[i]) {
-				case '#': flags |= __PRINTF_FLAG_PREFIX; break;
-				case '-': flags |= __PRINTF_FLAG_LEFTALIGNED; break;
-				case '+': flags |= __PRINTF_FLAG_SHOWPLUS; break;
-				case ' ': flags |= __PRINTF_FLAG_SPACESIGN; break;
-				case '0': flags |= __PRINTF_FLAG_ZEROPADDED; break;
-				default: end = 1;
-				};	
-				
-			} while (end == 0);	
-			
-			/* width & '*' operator */
-			width = 0;
-			if (isdigit(fmt[i])) {
-				while (isdigit(fmt[i])) {
-					width *= 10;
-					width += fmt[i++] - '0';
-				}
-			} else if (fmt[i] == '*') {
-				/* get width value from argument list*/
-				i++;
-				width = (int)va_arg(ap, int);
-				if (width < 0) {
-					/* negative width means to set '-' flag */
-					width *= -1;
-					flags |= __PRINTF_FLAG_LEFTALIGNED;
-				}
-			}
-			
-			/* precision and '*' operator */	
-			precision = 0;
-			if (fmt[i] == '.') {
-				++i;
-				if (isdigit(fmt[i])) {
-					while (isdigit(fmt[i])) {
-						precision *= 10;
-						precision += fmt[i++] - '0';
-					}
-				} else if (fmt[i] == '*') {
-					/* get precision value from argument list*/
-					i++;
-					precision = (int)va_arg(ap, int);
-					if (precision < 0) {
-						/* negative precision means to ignore it */
-						precision = 0;
-					}
-				}
-			}
-
-			switch (fmt[i++]) {
-			/** TODO: unimplemented qualifiers:
-			 * t ptrdiff_t - ISO C 99
-			 */
-			case 'h':	/* char or short */
-				qualifier = PrintfQualifierShort;
-				if (fmt[i] == 'h') {
-					i++;
-					qualifier = PrintfQualifierByte;
-				}
-				break;
-			case 'l':	/* long or long long*/
-				qualifier = PrintfQualifierLong;
-				if (fmt[i] == 'l') {
-					i++;
-					qualifier = PrintfQualifierLongLong;
-				}
-				break;
-			case 'z':	/* size_t */
-				qualifier = PrintfQualifierSizeT;
-				break;
-			default:
-				qualifier = PrintfQualifierInt; /* default type */
-				--i;
-			}	
-			
-			base = 10;
-
-			switch (c = fmt[i]) {
-
-				/*
-				* String and character conversions.
-				*/
-			case 's':
-				if ((retval = print_string(va_arg(ap, char*), width, precision, flags, ps)) < 0) {
-					goto minus_out;
-				}
-					
-				counter += retval;
-				j = i + 1; 
-				goto next_char;
-			case 'c':
-				c = va_arg(ap, unsigned int);
-				if ((retval = print_char(c, width, flags, ps)) < 0) {
-					goto minus_out;
-				}
-
-				counter += retval;
-				j = i + 1;
-				goto next_char;
-
-			/* 
-			 * Integer values
-			*/
-			case 'P': /* pointer */
-			       	flags |= __PRINTF_FLAG_BIGCHARS;
-			case 'p':
-				flags |= __PRINTF_FLAG_PREFIX;
-				base = 16;
-				qualifier = PrintfQualifierPointer;
-				break;	
-			case 'b': 
-				base = 2;
-				break;
-			case 'o':
-				base = 8;
-				break;
-			case 'd':
-			case 'i':
-				flags |= __PRINTF_FLAG_SIGNED;  
-			case 'u':
-				break;
-			case 'X':
-				flags |= __PRINTF_FLAG_BIGCHARS;
-			case 'x':
-				base = 16;
-				break;
-			/* percentile itself */
-			case '%': 
-				j = i;
-				goto next_char;
-			/*
-			* Bad formatting.
-			*/
-			default:
-				/* Unknown format
-				 *  now, the j is index of '%' so we will
-				 * print whole bad format sequence
-				 */
-				goto next_char;		
-			}
-		
-		
-		/* Print integers */
-			/* print number */
-			switch (qualifier) {
-			case PrintfQualifierByte:
-				size = sizeof(unsigned char);
-				number = (uint64_t)va_arg(ap, unsigned int);
-				break;
-			case PrintfQualifierShort:
-				size = sizeof(unsigned short);
-				number = (uint64_t)va_arg(ap, unsigned int);
-				break;
-			case PrintfQualifierInt:
-				size = sizeof(unsigned int);
-				number = (uint64_t)va_arg(ap, unsigned int);
-				break;
-			case PrintfQualifierLong:
-				size = sizeof(unsigned long);
-				number = (uint64_t)va_arg(ap, unsigned long);
-				break;
-			case PrintfQualifierLongLong:
-				size = sizeof(unsigned long long);
-				number = (uint64_t)va_arg(ap, unsigned long long);
-				break;
-			case PrintfQualifierPointer:
-				size = sizeof(void *);
-				number = (uint64_t)(unsigned long)va_arg(ap, void *);
-				break;
-			case PrintfQualifierSizeT:
-				size = sizeof(size_t);
-				number = (uint64_t)va_arg(ap, size_t);
-				break;
-			default: /* Unknown qualifier */
-				goto minus_out;
-					
-			}
-			
-			if (flags & __PRINTF_FLAG_SIGNED) {
-				if (number & (0x1 << (size*8 - 1))) {
-					flags |= __PRINTF_FLAG_NEGATIVE;
-				
-					if (size == sizeof(uint64_t)) {
-						number = -((int64_t)number);
-					} else {
-						number = ~number;
-						number &= (~((0xFFFFFFFFFFFFFFFFll) <<  (size * 8)));
-						number++;
-					}
-				}
-			}
-
-			if ((retval = print_number(number, width, precision, base, flags, ps)) < 0 ) {
-				goto minus_out;
-			};
-
-			counter += retval;
-			j = i + 1;
-		}	
-next_char:
-			
-		++i;
-	}
-	
-	if (i > j) {
-		if ((retval = printf_putnchars(&fmt[j], (size_t)(i - j), ps)) < 0) { /* error */
-			goto minus_out;
-		}
-		counter += retval;
-	}
-	
-	return counter;
-minus_out:
-	return -counter;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/snprintf.c
===================================================================
--- uspace/libc/generic/io/snprintf.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <io/printf_core.h>
-
-/** Print formatted to the given buffer with limited size.
- * @param str	buffer
- * @param size	buffer size
- * @param fmt	format string
- * \see For more details about format string see printf_core.
- */
-int snprintf(char *str, size_t size, const char *fmt, ...)
-{
-	int ret;
-	va_list args;
-	
-	va_start(args, fmt);
-	ret = vsnprintf(str, size, fmt, args);
-
-	va_end(args);
-
-	return ret;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/sprintf.c
===================================================================
--- uspace/libc/generic/io/sprintf.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <io/printf_core.h>
-
-/** Print formatted to the given buffer.
- * @param str	buffer
- * @param fmt	format string
- * \see For more details about format string see printf_core.
- */
-int sprintf(char *str, const char *fmt, ...)
-{
-	int ret;
-	va_list args;
-	
-	va_start(args, fmt);
-	ret = vsprintf(str, fmt, args);
-
-	va_end(args);
-
-	return ret;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/stream.c
===================================================================
--- uspace/libc/generic/io/stream.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,189 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * Copyright (c) 2006 Jakub Vana
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <io/io.h>
-#include <io/stream.h>
-#include <string.h>
-#include <malloc.h>
-#include <libc.h>
-#include <ipc/ipc.h>
-#include <ipc/ns.h>
-#include <ipc/fb.h>
-#include <ipc/services.h>
-#include <console.h>
-#include <unistd.h>
-#include <async.h>
-
-#define FDS 32
-
-typedef struct stream_t {
-	pwritefn_t w;
-	preadfn_t r;
-	void * param;
-	int phone;
-} stream_t;
-
-static int console_phone = -1;
-static stream_t streams[FDS];
-
-static ssize_t write_stderr(void *param, const void *buf, size_t count)
-{
-	return count;
-}
-
-static ssize_t read_stdin(void *param, void *buf, size_t count)
-{
-	ipcarg_t r0,r1;
-	size_t i = 0;
-
-	while (i < count) {
-		if (async_req_2(streams[0].phone, CONSOLE_GETCHAR, 0, 0, &r0, &r1) < 0) {
-			return -1;
-		}
-		((char *) buf)[i++] = r0;
-	}
-	return i;
-}
-
-static ssize_t write_stdout(void *param, const void *buf, size_t count)
-{
-	int i;
-
-	for (i = 0; i < count; i++)
-		async_msg(streams[1].phone, CONSOLE_PUTCHAR, ((const char *) buf)[i]);
-	
-	return count;
-}
-
-static stream_t open_stdin(void)
-{
-	stream_t stream;
-	
-	if (console_phone < 0) {
-		while ((console_phone = ipc_connect_me_to(PHONE_NS, SERVICE_CONSOLE, 0)) < 0) {
-			usleep(10000);
-		}
-	}
-	
-	stream.r = read_stdin;
-	stream.w = NULL;
-	stream.param = 0;
-	stream.phone = console_phone;
-	
-	return stream;
-}
-
-static stream_t open_stdout(void)
-{
-	stream_t stream;
-
-	if (console_phone < 0) {
-		while ((console_phone = ipc_connect_me_to(PHONE_NS, SERVICE_CONSOLE, 0)) < 0) {
-			usleep(10000);
-		}
-	}
-	
-	stream.r = NULL;
-	stream.w = write_stdout;
-	stream.phone = console_phone;
-	stream.param = 0;
-	
-	return stream;
-}
-
-static ssize_t write_null(void *param, const void *buf, size_t count)
-{
-	return count;
-}
-
-fd_t open(const char *fname, int flags)
-{
-	int c = 0;
-
-	while (((streams[c].w) || (streams[c].r)) && (c < FDS))
-		c++;
-	
-	if (c == FDS)
-		return EMFILE;
-	
-	if (!strcmp(fname, "stdin")) {
-		streams[c] = open_stdin();
-		return c;
-	}
-	
-	if (!strcmp(fname, "stdout")) {
-		streams[c] = open_stdout();
-		return c;
-	}
-	
-	if (!strcmp(fname, "stderr")) {
-		streams[c].w = write_stderr;
-		return c;
-	}
-	
-	if (!strcmp(fname, "null")) {
-		streams[c].w = write_null;
-		return c;
-	}
-	
-	return -1;
-}
-
-
-ssize_t write(int fd, const void *buf, size_t count)
-{
-	if (fd < FDS && streams[fd].w)
-		return streams[fd].w(streams[fd].param, buf, count);
-	
-	return 0;
-}
-
-ssize_t read(int fd, void *buf, size_t count)
-{
-	if (fd < FDS && streams[fd].r)
-		return streams[fd].r(streams[fd].param, buf, count);
-	
-	return 0;
-}
-
-int get_fd_phone(int fd)
-{
-	if (fd >= FDS || fd < 0)
-		return -1;
-	return streams[fd].phone;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/vprintf.c
===================================================================
--- uspace/libc/generic/io/vprintf.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <io/printf_core.h>
-#include <futex.h>
-#include <async.h>
-
-static atomic_t printf_futex = FUTEX_INITIALIZER;
-
-static int vprintf_write(const char *str, size_t count, void *unused)
-{
-	return write(1, str, count);
-}
-
-/** Print formatted text.
- * @param fmt	format string
- * @param ap	format parameters
- * \see For more details about format string see printf_core.
- */
-int vprintf(const char *fmt, va_list ap)
-{
-	struct printf_spec ps = {
-		(int (*)(void *, size_t, void *)) vprintf_write,
-		 NULL
-	};
-	/*
-	 * Prevent other threads to execute printf_core()
-	 */
-	futex_down(&printf_futex);
-	/*
-	 * Prevent other pseudo threads of the same thread
-	 * to execute printf_core()
-	 */
-	async_serialize_start();
-	int ret = printf_core(fmt, &ps, ap);
-	async_serialize_end();
-	futex_up(&printf_futex);
-	return ret;
-}
-
-/** @}
- */
Index: pace/libc/generic/io/vsnprintf.c
===================================================================
--- uspace/libc/generic/io/vsnprintf.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,109 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <io/printf_core.h>
-
-struct vsnprintf_data {
-	size_t size; /* total space for string */
-	size_t len; /* count of currently used characters */
-	char *string; /* destination string */
-};
-
-/** Write string to given buffer.
- * Write at most data->size characters including trailing zero. According to C99 has snprintf to return number
- * of characters that would have been written if enough space had been available. Hence the return value is not
- * number of really printed characters but size of input string. Number of really used characters 
- * is stored in data->len.
- * @param str source string to print
- * @param count size of source string
- * @param data structure with destination string, counter of used space and total string size.
- * @return number of characters to print (not characters really printed!)
- */
-static int vsnprintf_write(const char *str, size_t count, struct vsnprintf_data *data)
-{
-	size_t i;
-	i = data->size - data->len;
-
-	if (i == 0) {
-		return count;
-	}
-	
-	if (i == 1) {
-		/* We have only one free byte left in buffer => write there trailing zero */
-		data->string[data->size - 1] = 0;
-		data->len = data->size;
-		return count;
-	}
-	
-	if (i <= count) {
-		/* We have not enought space for whole string with the trailing zero => print only a part of string */
-			memcpy((void *)(data->string + data->len), (void *)str, i - 1);
-			data->string[data->size - 1] = 0;
-			data->len = data->size;
-			return count;
-	}
-	
-	/* Buffer is big enought to print whole string */
-	memcpy((void *)(data->string + data->len), (void *)str, count);
-	data->len += count;
-	/* Put trailing zero at end, but not count it into data->len so it could be rewritten next time */
-	data->string[data->len] = 0;
-
-	return count;	
-}
-
-/** Print formatted to the given buffer with limited size.
- * @param str	buffer
- * @param size	buffer size
- * @param fmt	format string
- * \see For more details about format string see printf_core.
- */
-int vsnprintf(char *str, size_t size, const char *fmt, va_list ap)
-{
-	struct vsnprintf_data data = {size, 0, str};
-	struct printf_spec ps = {(int(*)(void *, size_t, void *)) vsnprintf_write, &data};
-
-	/* Print 0 at end of string - fix the case that nothing will be printed */
-	if (size > 0)
-		str[0] = 0;
-	
-	/* vsnprintf_write ensures that str will be terminated by zero. */
-	return printf_core(fmt, &ps, ap);
-}
-
-/** @}
- */
Index: pace/libc/generic/io/vsprintf.c
===================================================================
--- uspace/libc/generic/io/vsprintf.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,51 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <io/printf_core.h>
-
-/** Print formatted to the given buffer.
- * @param str	buffer
- * @param fmt	format string
- * @param ap	argument list
- * \see For more details about format string see printf_core.
- */
-int vsprintf(char *str, const char *fmt, va_list ap)
-{
-	return vsnprintf(str, (size_t) - 1, fmt, ap);
-}
-
-/** @}
- */
Index: pace/libc/generic/ipc.c
===================================================================
--- uspace/libc/generic/ipc.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,597 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- * @}
- */
-
-/** @addtogroup libcipc IPC
- * @brief HelenOS uspace IPC
- * @{
- * @ingroup libc
- */
-/** @file
- */ 
-
-#include <ipc/ipc.h>
-#include <libc.h>
-#include <malloc.h>
-#include <errno.h>
-#include <libadt/list.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <futex.h>
-#include <kernel/synch/synch.h>
-#include <async.h>
-#include <psthread.h>
-
-/** Structure used for keeping track of sent asynchronous calls and queing
- * unsent calls.
- */
-typedef struct {
-	link_t list;
-
-	ipc_async_callback_t callback;
-	void *private;
-	union {
-		ipc_callid_t callid;
-		struct {
-			ipc_call_t data;
-			int phoneid;
-		} msg;
-	} u;
-	pstid_t ptid;	/**< Pseudothread waiting for sending this call. */
-} async_call_t;
-
-LIST_INITIALIZE(dispatched_calls);
-
-/** List of asynchronous calls that were not accepted by kernel.
- *
- * It is protected by async_futex, because if the call cannot be sent into the
- * kernel, the async framework is used automatically.
- */
-LIST_INITIALIZE(queued_calls);
-
-static atomic_t ipc_futex = FUTEX_INITIALIZER;
-
-/** Make a fast synchronous call.
- *
- * Only one payload argument can be passed using this function. However, this
- * function is faster than the generic ipc_call_sync_3().
- *
- * @param phoneid	Phone handle for the call.
- * @param method	Requested method.
- * @param arg1		Service-defined payload argument.
- * @param result	If non-NULL, the return ARG1 will be stored there.
- *
- * @return		Negative values represent errors returned by IPC.
- *			Otherwise the RETVAL of the answer is returned.
- */
-int ipc_call_sync(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t *result)
-{
-	ipc_call_t resdata;
-	int callres;
-	
-	callres = __SYSCALL4(SYS_IPC_CALL_SYNC_FAST, phoneid, method, arg1,
-	    (sysarg_t) &resdata);
-	if (callres)
-		return callres;
-	if (result)
-		*result = IPC_GET_ARG1(resdata);
-	return IPC_GET_RETVAL(resdata);
-}
-
-/** Make a synchronous call transmitting 3 arguments of payload.
- *
- * @param phoneid	Phone handle for the call.
- * @param method	Requested method.
- * @param arg1		Service-defined payload argument.
- * @param arg2		Service-defined payload argument.
- * @param arg3		Service-defined payload argument.
- * @param result1	If non-NULL, storage for the first return argument.
- * @param result2	If non-NULL, storage for the second return argument.
- * @param result3	If non-NULL, storage for the third return argument.
- *
- * @return		Negative value means IPC error.
- *			Otherwise the RETVAL of the answer.
- */
-int ipc_call_sync_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
-    ipcarg_t arg3, ipcarg_t *result1, ipcarg_t *result2, ipcarg_t *result3)
-{
-	ipc_call_t data;
-	int callres;
-
-	IPC_SET_METHOD(data, method);
-	IPC_SET_ARG1(data, arg1);
-	IPC_SET_ARG2(data, arg2);
-	IPC_SET_ARG3(data, arg3);
-
-	callres = __SYSCALL3(SYS_IPC_CALL_SYNC, phoneid, (sysarg_t) &data,
-	    (sysarg_t) &data);
-	if (callres)
-		return callres;
-
-	if (result1)
-		*result1 = IPC_GET_ARG1(data);
-	if (result2)
-		*result2 = IPC_GET_ARG2(data);
-	if (result3)
-		*result3 = IPC_GET_ARG3(data);
-	return IPC_GET_RETVAL(data);
-}
-
-/** Syscall to send asynchronous message.
- *
- * @param phoneid	Phone handle for the call.
- * @param data		Call data with the request.
- *
- * @return		Hash of the call or an error code.
- */
-static ipc_callid_t _ipc_call_async(int phoneid, ipc_call_t *data)
-{
-	return __SYSCALL2(SYS_IPC_CALL_ASYNC, phoneid, (sysarg_t) data);
-}
-
-/** Prolog to ipc_call_async_*() functions.
- *
- * @param private	Argument for the answer/error callback.
- * @param callback	Answer/error callback.
- *
- * @return		New, partially initialized async_call structure or NULL.
- */
-static inline async_call_t *ipc_prepare_async(void *private,
-    ipc_async_callback_t callback)
-{
-	async_call_t *call;
-
-	call = malloc(sizeof(*call));
-	if (!call) {
-		if (callback)
-			callback(private, ENOMEM, NULL);
-		return NULL;
-	}
-	call->callback = callback;
-	call->private = private;
-
-	return call;
-}
-
-/** Epilogue of ipc_call_async_*() functions.
- *
- * @param callid	Value returned by the SYS_IPC_CALL_ASYNC_* syscall.
- * @param phoneid	Phone handle through which the call was made.
- * @param call		async_call structure returned by ipc_prepare_async().
- * @param can_preempt	If non-zero, the current pseudo thread can be preempted
- *			in this call.
- */
-static inline void ipc_finish_async(ipc_callid_t callid, int phoneid,
-    async_call_t *call, int can_preempt)
-{
-	if (!call) { /* Nothing to do regardless if failed or not */
-		futex_up(&ipc_futex);
-		return;
-	}
-
-	if (callid == IPC_CALLRET_FATAL) {
-		futex_up(&ipc_futex);
-		/* Call asynchronous handler with error code */
-		if (call->callback)
-			call->callback(call->private, ENOENT, NULL);
-		free(call);
-		return;
-	}
-
-	if (callid == IPC_CALLRET_TEMPORARY) {
-		futex_up(&ipc_futex);
-
-		call->u.msg.phoneid = phoneid;
-		
-		futex_down(&async_futex);
-		list_append(&call->list, &queued_calls);
-
-		if (can_preempt) {
-			call->ptid = psthread_get_id();
-			psthread_schedule_next_adv(PS_TO_MANAGER);
-			/* Async futex unlocked by previous call */
-		} else {
-			call->ptid = 0;
-			futex_up(&async_futex);
-		}
-		return;
-	}
-	call->u.callid = callid;
-	/* Add call to the list of dispatched calls */
-	list_append(&call->list, &dispatched_calls);
-	futex_up(&ipc_futex);
-	
-}
-
-/** Make a fast asynchronous call.
- *
- * This function can only handle two arguments of payload. It is, however,
- * faster than the more generic ipc_call_async_3().
- *
- * Note that this function is a void function.
- * During normal opertation, answering this call will trigger the callback.
- * In case of fatal error, call the callback handler with the proper error code.
- * If the call cannot be temporarily made, queue it.
- *
- * @param phoneid	Phone handle for the call.
- * @param method	Requested method.
- * @param arg1		Service-defined payload argument.
- * @param arg2		Service-defined payload argument.
- * @param private	Argument to be passed to the answer/error callback.
- * @param callback	Answer or error callback.
- * @param can_preempt	If non-zero, the current pseudo thread will be preempted
- *			in case the kernel temporarily refuses to accept more
- *			asynchronous calls.
- */
-void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, void *private, ipc_async_callback_t callback,
-    int can_preempt)
-{
-	async_call_t *call = NULL;
-	ipc_callid_t callid;
-
-	if (callback) {
-		call = ipc_prepare_async(private, callback);
-		if (!call)
-			return;
-	}
-
-	/*
-	 * We need to make sure that we get callid before another thread
-	 * accesses the queue again.
-	 */
-	futex_down(&ipc_futex);
-	callid = __SYSCALL4(SYS_IPC_CALL_ASYNC_FAST, phoneid, method, arg1,
-	    arg2);
-
-	if (callid == IPC_CALLRET_TEMPORARY) {
-		if (!call) {
-			call = ipc_prepare_async(private, callback);
-			if (!call)
-				return;
-		}
-		IPC_SET_METHOD(call->u.msg.data, method);
-		IPC_SET_ARG1(call->u.msg.data, arg1);
-		IPC_SET_ARG2(call->u.msg.data, arg2);
-	}
-	ipc_finish_async(callid, phoneid, call, can_preempt);
-}
-
-/** Make an asynchronous call transmitting the entire payload.
- *
- * Note that this function is a void function.
- * During normal opertation, answering this call will trigger the callback.
- * In case of fatal error, call the callback handler with the proper error code.
- * If the call cannot be temporarily made, queue it.
- *
- * @param phoneid	Phone handle for the call.
- * @param method	Requested method.
- * @param arg1		Service-defined payload argument.
- * @param arg2		Service-defined payload argument.
- * @param arg3		Service-defined payload argument.
- * @param private	Argument to be passed to the answer/error callback.
- * @param callback	Answer or error callback.
- * @param can_preempt	If non-zero, the current pseudo thread will be preempted
- *			in case the kernel temporarily refuses to accept more
- *			asynchronous calls.
- *
- */
-void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, ipcarg_t arg3, void *private, ipc_async_callback_t callback,
-    int can_preempt)
-{
-	async_call_t *call;
-	ipc_callid_t callid;
-
-	call = ipc_prepare_async(private, callback);
-	if (!call)
-		return;
-
-	IPC_SET_METHOD(call->u.msg.data, method);
-	IPC_SET_ARG1(call->u.msg.data, arg1);
-	IPC_SET_ARG2(call->u.msg.data, arg2);
-	IPC_SET_ARG3(call->u.msg.data, arg3);
-	/*
-	 * We need to make sure that we get callid before another thread accesses
-	 * the queue again.
-	 */
-	futex_down(&ipc_futex);
-	callid = _ipc_call_async(phoneid, &call->u.msg.data);
-
-	ipc_finish_async(callid, phoneid, call, can_preempt);
-}
-
-
-/** Answer a received call - fast version.
- *
- * The fast answer makes use of passing retval and first two arguments in
- * registers. If you need to return more, use the ipc_answer() instead.
- *
- * @param callid	Hash of the call being answered.
- * @param retval	Return value.
- * @param arg1		First return argument.
- * @param arg2		Second return argument.
- *
- * @return		Zero on success or a value from @ref errno.h on failure.
- */
-ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1,
-    ipcarg_t arg2)
-{
-	return __SYSCALL4(SYS_IPC_ANSWER_FAST, callid, retval, arg1, arg2);
-}
-
-/** Answer a received call - full version.
- *
- * @param callid	Hash of the call being answered.
- * @param call 		Call structure with the answer.
- *			Must be already initialized by the responder.
- *
- * @return		Zero on success or a value from @ref errno.h on failure.
- */
-ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call)
-{
-	return __SYSCALL2(SYS_IPC_ANSWER, callid, (sysarg_t) call);
-}
-
-
-/** Try to dispatch queued calls from the async queue. */
-static void try_dispatch_queued_calls(void)
-{
-	async_call_t *call;
-	ipc_callid_t callid;
-
-	/** @todo
-	 * Integrate intelligently ipc_futex, so that it is locked during
-	 * ipc_call_async_*(), until it is added to dispatched_calls.
-	 */
-	futex_down(&async_futex);
-	while (!list_empty(&queued_calls)) {
-		call = list_get_instance(queued_calls.next, async_call_t, list);
-		callid = _ipc_call_async(call->u.msg.phoneid, &call->u.msg.data);
-		if (callid == IPC_CALLRET_TEMPORARY) {
-			break;
-		}
-		list_remove(&call->list);
-
-		futex_up(&async_futex);
-		if (call->ptid)
-			psthread_add_ready(call->ptid);
-		
-		if (callid == IPC_CALLRET_FATAL) {
-			if (call->callback)
-				call->callback(call->private, ENOENT, NULL);
-			free(call);
-		} else {
-			call->u.callid = callid;
-			futex_down(&ipc_futex);
-			list_append(&call->list, &dispatched_calls);
-			futex_up(&ipc_futex);
-		}
-		futex_down(&async_futex);
-	}
-	futex_up(&async_futex);
-}
-
-/** Handle a received answer.
- *
- * Find the hash of the answer and call the answer callback.
- *
- * @todo Make it use hash table.
- *
- * @param callid	Hash of the received answer.
- *			The answer has the same hash as the request OR'ed with
- *			the IPC_CALLID_ANSWERED bit.
- * @param data		Call data of the answer.
- */
-static void handle_answer(ipc_callid_t callid, ipc_call_t *data)
-{
-	link_t *item;
-	async_call_t *call;
-
-	callid &= ~IPC_CALLID_ANSWERED;
-	
-	futex_down(&ipc_futex);
-	for (item = dispatched_calls.next; item != &dispatched_calls;
-	    item = item->next) {
-		call = list_get_instance(item, async_call_t, list);
-		if (call->u.callid == callid) {
-			list_remove(&call->list);
-			futex_up(&ipc_futex);
-			if (call->callback)
-				call->callback(call->private, 
-				    IPC_GET_RETVAL(*data), data);
-			free(call);
-			return;
-		}
-	}
-	futex_up(&ipc_futex);
-}
-
-
-/** Wait for a first call to come.
- *
- * @param call		Storage where the incoming call data will be stored.
- * @param usec		Timeout in microseconds
- * @param flags		Flags passed to SYS_IPC_WAIT (blocking, nonblocking).
- *
- * @return		Hash of the call. Note that certain bits have special
- *			meaning. IPC_CALLID_ANSWERED will be set in an answer
- *			and IPC_CALLID_NOTIFICATION is used for notifications.
- *			
- */
-ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags)
-{
-	ipc_callid_t callid;
-
-	callid = __SYSCALL3(SYS_IPC_WAIT, (sysarg_t) call, usec, flags);
-	/* Handle received answers */
-	if (callid & IPC_CALLID_ANSWERED) {
-		handle_answer(callid, call);
-		try_dispatch_queued_calls();
-	}
-
-	return callid;
-}
-
-/** Wait some time for an IPC call.
- *
- * The call will return after an answer is received.
- *
- * @param call		Storage where the incoming call data will be stored.
- * @param usec		Timeout in microseconds.
- *
- * @return		Hash of the answer.
- */
-ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *call, uint32_t usec)
-{
-	ipc_callid_t callid;
-
-	do {
-		callid = ipc_wait_cycle(call, usec, SYNCH_FLAGS_NONE);
-	} while (callid & IPC_CALLID_ANSWERED);
-
-	return callid;
-}
-
-/** Check if there is an IPC call waiting to be picked up.
- *
- * @param call		Storage where the incoming call will be stored.
- * @return		Hash of the answer.
- */
-ipc_callid_t ipc_trywait_for_call(ipc_call_t *call)
-{
-	ipc_callid_t callid;
-
-	do {
-		callid = ipc_wait_cycle(call, SYNCH_NO_TIMEOUT,
-		    SYNCH_FLAGS_NON_BLOCKING);
-	} while (callid & IPC_CALLID_ANSWERED);
-
-	return callid;
-}
-
-/** Ask destination to do a callback connection.
- *
- * @param phoneid	Phone handle used for contacting the other side.
- * @param arg1		Service-defined argument.
- * @param arg2		Service-defined argument.
- * @param phonehash	Storage where the library will store an opaque
- *			identifier of the phone that will be used for incoming
- *			calls. This identifier can be used for connection
- *			tracking.
- *
- * @return		Zero on success or a negative error code.
- */
-int ipc_connect_to_me(int phoneid, int arg1, int arg2, ipcarg_t *phonehash)
-{
-	return ipc_call_sync_3(phoneid, IPC_M_CONNECT_TO_ME, arg1, arg2, 0, 0, 0,
-	    phonehash);
-}
-
-/** Ask through phone for a new connection to some service.
- *
- * @param phoneid	Phone handle used for contacting the other side.
- * @param arg1		User defined argument.
- * @param arg2		User defined argument.
- *
- * @return		New phone handle on success or a negative error code.
- */
-int ipc_connect_me_to(int phoneid, int arg1, int arg2)
-{
-	ipcarg_t newphid;
-	int res;
-
-	res =  ipc_call_sync_3(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, 0, 0, 0,
-	    &newphid);
-	if (res)
-		return res;
-	return newphid;
-}
-
-/** Hang up a phone.
- *
- * @param phoneid	Handle of the phone to be hung up.
- *
- * @return		Zero on success or a negative error code.
- */
-int ipc_hangup(int phoneid)
-{
-	return __SYSCALL1(SYS_IPC_HANGUP, phoneid);
-}
-
-/** Register IRQ notification.
- *
- * @param inr		IRQ number.
- * @param devno		Device number of the device generating inr.
- * @param method	Use this method for notifying me.
- * @param ucode		Top-half pseudocode handler.
- *
- * @return		Value returned by the kernel.
- */
-int ipc_register_irq(int inr, int devno, int method, irq_code_t *ucode)
-{
-	return __SYSCALL4(SYS_IPC_REGISTER_IRQ, inr, devno, method,
-	    (sysarg_t) ucode);
-}
-
-/** Unregister IRQ notification.
- *
- * @param inr		IRQ number.
- * @param devno		Device number of the device generating inr.
- *
- * @return		Value returned by the kernel.
- */
-int ipc_unregister_irq(int inr, int devno)
-{
-	return __SYSCALL2(SYS_IPC_UNREGISTER_IRQ, inr, devno);
-}
-
-/** Forward a received call to another destination.
- *
- * @param callid	Hash of the call to forward.
- * @param phoneid	Phone handle to use for forwarding.
- * @param method	New method for the forwarded call.
- * @param arg1		New value of the first argument for the forwarded call.
- *
- * @return		Zero on success or an error code.
- *
- * For non-system methods, the old method and arg1 are rewritten by the new
- * values. For system methods, the new method and arg1 are written to the old
- * arg1 and arg2, respectivelly.
- */
-int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1)
-{
-	return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1);
-}
-
-/** @}
- */
Index: pace/libc/generic/libadt/hash_table.c
===================================================================
--- uspace/libc/generic/libadt/hash_table.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,179 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-/*
- * This is an implementation of generic chained hash table.
- */
-
-#include <libadt/hash_table.h>
-#include <libadt/list.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-
-/** Create chained hash table.
- *
- * @param h Hash table structure. Will be initialized by this call.
- * @param m Number of slots in the hash table.
- * @param max_keys Maximal number of keys needed to identify an item.
- * @param op Hash table operations structure.
- * @return true on success
- */
-int hash_table_create(hash_table_t *h, hash_count_t m, hash_count_t max_keys, hash_table_operations_t *op)
-{
-	hash_count_t i;
-
-	assert(h);
-	assert(op && op->hash && op->compare);
-	assert(max_keys > 0);
-	
-	h->entry = malloc(m * sizeof(link_t));
-	if (!h->entry) {
-		printf("cannot allocate memory for hash table\n");
-		return false;
-	}
-	memset((void *) h->entry, 0,  m * sizeof(link_t));
-	
-	for (i = 0; i < m; i++)
-		list_initialize(&h->entry[i]);
-	
-	h->entries = m;
-	h->max_keys = max_keys;
-	h->op = op;
-	return true;
-}
-
-/** Insert item into hash table.
- *
- * @param h Hash table.
- * @param key Array of all keys necessary to compute hash index.
- * @param item Item to be inserted into the hash table.
- */
-void hash_table_insert(hash_table_t *h, unsigned long key[], link_t *item)
-{
-	hash_index_t chain;
-
-	assert(item);
-	assert(h && h->op && h->op->hash && h->op->compare);
-
-	chain = h->op->hash(key);
-	assert(chain < h->entries);
-	
-	list_append(item, &h->entry[chain]);
-}
-
-/** Search hash table for an item matching keys.
- *
- * @param h Hash table.
- * @param key Array of all keys needed to compute hash index.
- *
- * @return Matching item on success, NULL if there is no such item.
- */
-link_t *hash_table_find(hash_table_t *h, unsigned long key[])
-{
-	link_t *cur;
-	hash_index_t chain;
-
-	assert(h && h->op && h->op->hash && h->op->compare);
-
-	chain = h->op->hash(key);
-	assert(chain < h->entries);
-	
-	for (cur = h->entry[chain].next; cur != &h->entry[chain]; cur = cur->next) {
-		if (h->op->compare(key, h->max_keys, cur)) {
-			/*
-			 * The entry is there.
-			 */
-			return cur;
-		}
-	}
-	
-	return NULL;
-}
-
-/** Remove all matching items from hash table.
- *
- * For each removed item, h->remove_callback() is called.
- *
- * @param h Hash table.
- * @param key Array of keys that will be compared against items of the hash table.
- * @param keys Number of keys in the 'key' array.
- */
-void hash_table_remove(hash_table_t *h, unsigned long key[], hash_count_t keys)
-{
-	hash_index_t chain;
-	link_t *cur;
-
-	assert(h && h->op && h->op->hash && h->op->compare && h->op->remove_callback);
-	assert(keys <= h->max_keys);
-	
-	if (keys == h->max_keys) {
-
-		/*
-		 * All keys are known, hash_table_find() can be used to find the entry.
-		 */
-	
-		cur = hash_table_find(h, key);
-		if (cur) {
-			list_remove(cur);
-			h->op->remove_callback(cur);
-		}
-		return;
-	}
-	
-	/*
-	 * Fewer keys were passed.
-	 * Any partially matching entries are to be removed.
-	 */
-	for (chain = 0; chain < h->entries; chain++) {
-		for (cur = h->entry[chain].next; cur != &h->entry[chain]; cur = cur->next) {
-			if (h->op->compare(key, keys, cur)) {
-				link_t *hlp;
-				
-				hlp = cur;
-				cur = cur->prev;
-				
-				list_remove(hlp);
-				h->op->remove_callback(hlp);
-				
-				continue;
-			}
-		}
-	}
-}
-
-/** @}
- */
Index: pace/libc/generic/libadt/list.c
===================================================================
--- uspace/libc/generic/libadt/list.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,89 +1,0 @@
-/*
- * Copyright (c) 2004 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <libadt/list.h>
-
-
-/** Check for membership
- *
- * Check whether link is contained in the list head.
- * The membership is defined as pointer equivalence.
- *
- * @param link Item to look for.
- * @param head List to look in.
- *
- * @return true if link is contained in head, false otherwise.
- *
- */
-int list_member(const link_t *link, const link_t *head)
-{
-	int found = false;
-	link_t *hlp = head->next;
-	
-	while (hlp != head) {
-		if (hlp == link) {
-			found = true;
-			break;
-		}
-		hlp = hlp->next;
-	}
-	
-	return found;
-}
-
-
-/** Concatenate two lists
- *
- * Concatenate lists head1 and head2, producing a single
- * list head1 containing items from both (in head1, head2
- * order) and empty list head2.
- *
- * @param head1 First list and concatenated output
- * @param head2 Second list and empty output.
- *
- */
-void list_concat(link_t *head1, link_t *head2)
-{
-	if (list_empty(head2))
-		return;
-
-	head2->next->prev = head1->prev;
-	head2->prev->next = head1;	
-	head1->prev->next = head2->next;
-	head1->prev = head2->prev;
-	list_initialize(head2);
-}
-
-/** @}
- */
Index: pace/libc/generic/libc.c
===================================================================
--- uspace/libc/generic/libc.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup lc Libc
- * @brief	HelenOS C library
- * @{
- * @}
- */
-/** @addtogroup libc generic
- * @ingroup lc
- * @{
- */
-/** @file
- */ 
-
-#include <libc.h>
-#include <unistd.h>
-#include <thread.h>
-#include <malloc.h>
-#include <psthread.h>
-#include <io/stream.h>
-#include <ipc/ipc.h>
-#include <async.h>
-#include <as.h>
-
-extern char _heap;
-
-void _exit(int status)
-{
-	thread_exit(status);
-}
-
-void __main(void)
-{
-	psthread_data_t *pt;
-
-	(void) as_area_create(&_heap, 1, AS_AREA_WRITE | AS_AREA_READ);
-	_async_init();
-	pt = psthread_setup();
-	__tcb_set(pt->tcb);
-}
-
-void __io_init(void)
-{
-	open("stdin", 0);
-	open("stdout", 0);
-	open("stderr", 0);
-}
-
-void __exit(void)
-{
-	psthread_teardown(__tcb_get()->pst_data);
-	_exit(0);
-}
-
-/** @}
- */
Index: pace/libc/generic/mman.c
===================================================================
--- uspace/libc/generic/mman.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <sys/mman.h>
-#include <as.h>
-#include <unistd.h>
-
-void *mmap(void  *start, size_t length, int prot, int flags, int fd,
-    off_t offset)
-{
-	if (!start)
-		start = as_get_mappable_page(length);
-	
-//	if (! ((flags & MAP_SHARED) ^ (flags & MAP_PRIVATE)))
-//		return MAP_FAILED;
-	if (! (flags & MAP_ANONYMOUS))
-		return MAP_FAILED;
-
-	return as_area_create(start, length, prot);
-}
-
-int munmap(void *start, size_t length)
-{
-	return as_area_destroy(start);
-}
-
-/** @}
- */
Index: pace/libc/generic/psthread.c
===================================================================
--- uspace/libc/generic/psthread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,308 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <libadt/list.h>
-#include <psthread.h>
-#include <malloc.h>
-#include <unistd.h>
-#include <thread.h>
-#include <stdio.h>
-#include <libarch/faddr.h>
-#include <futex.h>
-#include <assert.h>
-#include <async.h>
-
-#ifndef PSTHREAD_INITIAL_STACK_PAGES_NO
-#define PSTHREAD_INITIAL_STACK_PAGES_NO 1
-#endif
-
-static LIST_INITIALIZE(ready_list);
-static LIST_INITIALIZE(serialized_list);
-static LIST_INITIALIZE(manager_list);
-
-static void psthread_main(void);
-
-static atomic_t psthread_futex = FUTEX_INITIALIZER;
-/** Count of real threads that are in async_serialized mode */
-static int serialized_threads; /* Protected by async_futex */
-/** Thread-local count of serialization. If >0, we must not preempt */
-static __thread int serialization_count;
-/** Counter of threads residing in async_manager */
-static int threads_in_manager;
-
-/** Setup psthread information into TCB structure */
-psthread_data_t * psthread_setup()
-{
-	psthread_data_t *pt;
-	tcb_t *tcb;
-
-	tcb = __make_tls();
-	if (!tcb)
-		return NULL;
-
-	pt = malloc(sizeof(*pt));
-	if (!pt) {
-		__free_tls(tcb);
-		return NULL;
-	}
-
-	tcb->pst_data = pt;
-	pt->tcb = tcb;
-
-	return pt;
-}
-
-void psthread_teardown(psthread_data_t *pt)
-{
-	__free_tls(pt->tcb);
-	free(pt);
-}
-
-/** Function that is called on entry to new pseudo thread */
-void psthread_main(void)
-{
-	psthread_data_t *pt = __tcb_get()->pst_data;
-
-	pt->retval = pt->func(pt->arg);
-
-	pt->finished = 1;
-	if (pt->waiter)
-		list_append(&pt->waiter->link, &ready_list);
-
-	psthread_schedule_next_adv(PS_FROM_DEAD);
-}
-
-/** Schedule next userspace pseudo thread.
- *
- * If calling with PS_TO_MANAGER parameter, the async_futex should be
- * held.
- *
- * @param ctype Type of switch.
- * @return 0 if there is no ready pseudo thread, 1 otherwise.
- */
-int psthread_schedule_next_adv(pschange_type ctype)
-{
-	psthread_data_t *srcpt, *dstpt;
-	int retval = 0;
-	
-	futex_down(&psthread_futex);
-
-	if (ctype == PS_PREEMPT && list_empty(&ready_list))
-		goto ret_0;
-
-	if (ctype == PS_FROM_MANAGER) {
-		if (list_empty(&ready_list) && list_empty(&serialized_list))
-			goto ret_0;
-		/* Do not preempt if there is not sufficient count of thread managers */
-		if (list_empty(&serialized_list) && threads_in_manager <= serialized_threads) {
-			goto ret_0;
-		}
-	}
-	/* If we are going to manager and none exists, create it */
-	if (ctype == PS_TO_MANAGER || ctype == PS_FROM_DEAD) {
-		while (list_empty(&manager_list)) {
-			futex_up(&psthread_futex);
-			async_create_manager();
-			futex_down(&psthread_futex);
-		}
-	}
-	
-	if (ctype != PS_FROM_DEAD) {
-		/* Save current state */
-		srcpt = __tcb_get()->pst_data;
-		if (!context_save(&srcpt->ctx)) {
-			if (serialization_count)
-				srcpt->flags &= ~PSTHREAD_SERIALIZED;
-			return 1; // futex_up already done here
-		}
-
-		/* Save myself to correct run list */
-		if (ctype == PS_PREEMPT)
-			list_append(&srcpt->link, &ready_list);
-		else if (ctype == PS_FROM_MANAGER) {
-			list_append(&srcpt->link, &manager_list);
-			threads_in_manager--;
-		} /* If ctype == PS_TO_MANAGER, don't save ourselves to any list, we should
-		   * already be somewhere, or we will be lost */
-	} else
-		srcpt = NULL; /* Avoid GCC warning, if ctype == PS_FROM_DEAD, srcpt is not used */
-
-	/* Choose new thread to run */
-	if (ctype == PS_TO_MANAGER || ctype == PS_FROM_DEAD) {
-		dstpt = list_get_instance(manager_list.next,psthread_data_t, link);
-		if (serialization_count && ctype == PS_TO_MANAGER) {
-			serialized_threads++;
-			srcpt->flags |= PSTHREAD_SERIALIZED;
-		}
-		threads_in_manager++;
-	} else {
-		if (!list_empty(&serialized_list)) {
-			dstpt = list_get_instance(serialized_list.next, psthread_data_t, link);
-			serialized_threads--;
-		} else
-			dstpt = list_get_instance(ready_list.next, psthread_data_t, link);
-	}
-	list_remove(&dstpt->link);
-
-	futex_up(&psthread_futex);
-	context_restore(&dstpt->ctx);
-
-ret_0:
-	futex_up(&psthread_futex);
-	return retval;
-}
-
-/** Wait for uspace pseudo thread to finish.
- *
- * @param psthrid Pseudo thread to wait for.
- *
- * @return Value returned by the finished thread.
- */
-int psthread_join(pstid_t psthrid)
-{
-	volatile psthread_data_t *pt;
-	volatile int retval;
-
-	/* Handle psthrid = Kernel address -> it is wait for call */
-	pt = (psthread_data_t *) psthrid;
-
-	/* TODO */
-	printf("join unsupported\n");
-	_exit(1);
-
-	retval = pt->retval;
-
-	free(pt->stack);
-	psthread_teardown((void *)pt);
-
-	return retval;
-}
-
-/** Create a userspace pseudo thread.
- *
- * @param func Pseudo thread function.
- * @param arg Argument to pass to func.
- *
- * @return 0 on failure, TLS of the new pseudo thread.
- */
-pstid_t psthread_create(int (*func)(void *), void *arg)
-{
-	psthread_data_t *pt;
-
-	pt = psthread_setup();
-	if (!pt) 
-		return 0;
-	pt->stack = (char *) malloc(PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize());
-
-	if (!pt->stack) {
-		psthread_teardown(pt);
-		return 0;
-	}
-
-	pt->arg= arg;
-	pt->func = func;
-	pt->finished = 0;
-	pt->waiter = NULL;
-	pt->flags = 0;
-
-	context_save(&pt->ctx);
-	context_set(&pt->ctx, FADDR(psthread_main), pt->stack, PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize(), pt->tcb);
-
-	return (pstid_t )pt;
-}
-
-/** Add a thread to ready list */
-void psthread_add_ready(pstid_t psthrid)
-{
-	psthread_data_t *pt;
-
-	pt = (psthread_data_t *) psthrid;
-	futex_down(&psthread_futex);
-	if ((pt->flags & PSTHREAD_SERIALIZED))
-		list_append(&pt->link, &serialized_list);
-	else
-		list_append(&pt->link, &ready_list);
-	futex_up(&psthread_futex);
-}
-
-/** Add a thread to manager list */
-void psthread_add_manager(pstid_t psthrid)
-{
-	psthread_data_t *pt;
-
-	pt = (psthread_data_t *) psthrid;
-
-	futex_down(&psthread_futex);
-	list_append(&pt->link, &manager_list);
-	futex_up(&psthread_futex);
-}
-
-/** Remove one manager from manager list */
-void psthread_remove_manager()
-{
-	futex_down(&psthread_futex);
-	if (list_empty(&manager_list)) {
-		futex_up(&psthread_futex);
-		return;
-	}
-	list_remove(manager_list.next);
-	futex_up(&psthread_futex);
-}
-
-/** Return thread id of current running thread */
-pstid_t psthread_get_id(void)
-{
-	return (pstid_t)__tcb_get()->pst_data;
-}
-
-/** Disable preemption 
- *
- * If the thread wants to send several message in row and does not want
- * to be preempted, it should start async_serialize_start() in the beginning
- * of communication and async_serialize_end() in the end. If it is a
- * true multithreaded application, it should protect the communication channel
- * by a futex as well. Interrupt messages will can still be preempted.
- */
-void psthread_inc_sercount(void)
-{
-	serialization_count++;
-}
-
-void psthread_dec_sercount(void)
-{
-	serialization_count--;
-}
-
-/** @}
- */
Index: pace/libc/generic/stdlib.c
===================================================================
--- uspace/libc/generic/stdlib.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <stdlib.h>
-
-static long glbl_seed = 1;
-
-long int random(void)
-{
-	return glbl_seed = ((1366*glbl_seed + 150889) % RAND_MAX);
-}
-
-void srandom(unsigned int seed)
-{
-	glbl_seed = seed;
-}
-
-/** @}
- */
Index: pace/libc/generic/string.c
===================================================================
--- uspace/libc/generic/string.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,333 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#include <string.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <limits.h>
-#include <align.h>
-
-
-/* Dummy implementation of mem/ functions */
-
-void *memset(void *s, int c, size_t n)
-{
-	char *os = s;
-	
-	while (n--)
-		*(os++) = c;
-	
-	return s;
-}
-
-struct along {
-	unsigned long n;
-} __attribute__ ((packed));
-
-static void *unaligned_memcpy(void *dst, const void *src, size_t n)
-{
-	int i, j;
-	struct along *adst = dst;
-	const struct along *asrc = src;
-
-	for (i = 0; i < n / sizeof(unsigned long); i++)
-		adst[i].n = asrc[i].n;
-		
-	for (j = 0; j < n % sizeof(unsigned long); j++)
-		((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *) (((unsigned long *) src) + i))[j];
-		
-	return (char *) src;
-}
-
-void *memcpy(void *dst, const void *src, size_t n)
-{
-	int i, j;
-
-	if (((long) dst & (sizeof(long) - 1)) || ((long) src & (sizeof(long) - 1)))
- 		return unaligned_memcpy(dst, src, n);
-
-	for (i = 0; i < n / sizeof(unsigned long); i++)
-		((unsigned long *) dst)[i] = ((unsigned long *) src)[i];
-		
-	for (j = 0; j < n % sizeof(unsigned long); j++)
-		((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *) (((unsigned long *) src) + i))[j];
-		
-	return (char *) src;
-}
-
-void *memmove(void *dst, const void *src, size_t n)
-{
-	int i, j;
-	
-	if (src > dst)
-		return memcpy(dst, src, n);
-
-	for (j = (n % sizeof(unsigned long)) - 1; j >= 0; j--)
-		((unsigned char *) ((unsigned long *) dst))[j] = ((unsigned char *) ((unsigned long *) src))[j];
-
-	for (i = n / sizeof(unsigned long) - 1; i >=0 ; i--)
-		((unsigned long *) dst)[i] = ((unsigned long *) src)[i];
-		
-	return (char *) src;
-}
-
-/** Compare two memory areas.
- *
- * @param s1	Pointer to the first area to compare.
- * @param s2	Pointer to the second area to compare.
- * @param len	Size of the first area in bytes. Both areas must have the same
- *		length.
- * @return	If len is 0, return zero. If the areas match, return zero.
- *		Otherwise return non-zero.
- */
-int bcmp(const char *s1, const char *s2, size_t len)
-{
-	for (; len && *s1++ == *s2++; len--)
-		;
-	return len;
-}
-
-/** Count the number of characters in the string, not including terminating 0.
- * @param str string
- * @return number of characters in string.
- */
-size_t strlen(const char *str) 
-{
-	size_t counter = 0;
-
-	while (str[counter] != 0)
-		counter++;
-
-	return counter;
-}
-
-int strcmp(const char *a, const char *b)
-{
-	int c = 0;
-	
-	while (a[c] && b[c] && (!(a[c] - b[c])))
-		c++;
-	
-	return (a[c] - b[c]);
-	
-}
-
-
-/** Return pointer to the first occurence of character c in string
- * @param str scanned string 
- * @param c searched character (taken as one byte)
- * @return pointer to the matched character or NULL if it is not found in given string.
- */
-char *strchr(const char *str, int c)
-{
-	while (*str != '\0') {
-		if (*str == (char) c)
-			return (char *) str;
-		str++;
-	}
-
-	return NULL;
-}
-
-/** Return pointer to the last occurence of character c in string
- * @param str scanned string 
- * @param c searched character (taken as one byte)
- * @return pointer to the matched character or NULL if it is not found in given string.
- */
-char *strrchr(const char *str, int c)
-{
-	char *retval = NULL;
-
-	while (*str != '\0') {
-		if (*str == (char) c)
-			retval = (char *) str;
-		str++;
-	}
-
-	return (char *) retval;
-}
-
-/** Convert string to a number. 
- * Core of strtol and strtoul functions.
- * @param nptr pointer to string
- * @param endptr if not NULL, function stores here pointer to the first invalid character
- * @param base zero or number between 2 and 36 inclusive
- * @param sgn its set to 1 if minus found
- * @return result of conversion.
- */
-static unsigned long _strtoul(const char *nptr, char **endptr, int base, char *sgn)
-{
-	unsigned char c;
-	unsigned long result = 0;
-	unsigned long a, b;
-	const char *str = nptr;
-	const char *tmpptr;
-	
-	while (isspace(*str))
-		str++;
-	
-	if (*str == '-') {
-		*sgn = 1;
-		++str;
-	} else if (*str == '+')
-		++str;
-	
-	if (base) {
-		if ((base == 1) || (base > 36)) {
-			/* FIXME: set errno to EINVAL */
-			return 0;
-		}
-		if ((base == 16) && (*str == '0') && ((str[1] == 'x') || (str[1] == 'X'))) {
-			str += 2;
-		}
-	} else {
-		base = 10;
-		
-		if (*str == '0') {
-			base = 8;
-			if ((str[1] == 'X') || (str[1] == 'x'))  {
-				base = 16;
-				str += 2;
-			}
-		} 
-	}
-	
-	tmpptr = str;
-
-	while (*str) {
-		c = *str;
-		c = (c >= 'a' ? c - 'a' + 10 : (c >= 'A' ? c - 'A' + 10 : (c <= '9' ? c - '0' : 0xff)));
-		if (c > base) {
-			break;
-		}
-		
-		a = (result & 0xff) * base + c;
-		b = (result >> 8) * base + (a >> 8);
-		
-		if (b > (ULONG_MAX >> 8)) {
-			/* overflow */
-			/* FIXME: errno = ERANGE*/
-			return ULONG_MAX;
-		}
-	
-		result = (b << 8) + (a & 0xff);
-		++str;
-	}
-	
-	if (str == tmpptr) {
-		/* no number was found => first invalid character is the first character of the string */
-		/* FIXME: set errno to EINVAL */
-		str = nptr;
-		result = 0;
-	}
-	
-	if (endptr)
-		*endptr = (char *) str;
-
-	if (nptr == str) { 
-		/*FIXME: errno = EINVAL*/
-		return 0;
-	}
-
-	return result;
-}
-
-/** Convert initial part of string to long int according to given base.
- * The number may begin with an arbitrary number of whitespaces followed by optional sign (`+' or `-').
- * If the base is 0 or 16, the prefix `0x' may be inserted and the number will be taken as hexadecimal one.
- * If the base is 0 and the number begin with a zero, number will be taken as octal one (as with base 8).
- * Otherwise the base 0 is taken as decimal.
- * @param nptr pointer to string
- * @param endptr if not NULL, function stores here pointer to the first invalid character
- * @param base zero or number between 2 and 36 inclusive
- * @return result of conversion.
- */
-long int strtol(const char *nptr, char **endptr, int base)
-{
-	char sgn = 0;
-	unsigned long number = 0;
-	
-	number = _strtoul(nptr, endptr, base, &sgn);
-
-	if (number > LONG_MAX) {
-		if ((sgn) && (number == (unsigned long) (LONG_MAX) + 1)) {
-			/* FIXME: set 0 to errno */
-			return number;		
-		}
-		/* FIXME: set ERANGE to errno */
-		return (sgn ? LONG_MIN : LONG_MAX);	
-	}
-	
-	return (sgn ? -number : number);
-}
-
-
-/** Convert initial part of string to unsigned long according to given base.
- * The number may begin with an arbitrary number of whitespaces followed by optional sign (`+' or `-').
- * If the base is 0 or 16, the prefix `0x' may be inserted and the number will be taken as hexadecimal one.
- * If the base is 0 and the number begin with a zero, number will be taken as octal one (as with base 8).
- * Otherwise the base 0 is taken as decimal.
- * @param nptr pointer to string
- * @param endptr if not NULL, function stores here pointer to the first invalid character
- * @param base zero or number between 2 and 36 inclusive
- * @return result of conversion.
- */
-unsigned long strtoul(const char *nptr, char **endptr, int base)
-{
-	char sgn = 0;
-	unsigned long number = 0;
-	
-	number = _strtoul(nptr, endptr, base, &sgn);
-
-	return (sgn ? -number : number);
-}
-
-char *strcpy(char *dest, const char *src)
-{
-	char *orig = dest;
-	
-	while ((*(dest++) = *(src++)));
-	return orig;
-}
-
-char *strncpy(char *dest, const char *src, size_t n)
-{
-	char *orig = dest;
-	
-	while ((*(dest++) = *(src++)) && --n);
-	return orig;
-}
-
-/** @}
- */
Index: pace/libc/generic/sysinfo.c
===================================================================
--- uspace/libc/generic/sysinfo.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <libc.h>
-#include <sysinfo.h>
-#include <string.h>
-
-sysarg_t sysinfo_value(char *name)
-{
-	return __SYSCALL2(SYS_SYSINFO_VALUE, (sysarg_t ) name, (sysarg_t) strlen(name));
-}
-
-/** @}
- */
Index: pace/libc/generic/task.c
===================================================================
--- uspace/libc/generic/task.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <task.h>
-#include <libc.h>
-
-task_id_t task_get_id(void)
-{
-	task_id_t task_id;
-
-	(void) __SYSCALL1(SYS_TASK_GET_ID, (sysarg_t) &task_id);
-
-	return task_id;
-}
-
-/** @}
- */
Index: pace/libc/generic/thread.c
===================================================================
--- uspace/libc/generic/thread.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,215 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <thread.h>
-#include <libc.h>
-#include <stdlib.h>
-#include <libarch/faddr.h>
-#include <kernel/proc/uarg.h>
-#include <psthread.h>
-#include <string.h>
-#include <async.h>
-
-#include <stdio.h>
-
-
-#ifndef THREAD_INITIAL_STACK_PAGES_NO
-#define THREAD_INITIAL_STACK_PAGES_NO 1
-#endif
-
-static LIST_INITIALIZE(thread_garbage);
-
-extern char _tdata_start;
-extern char _tdata_end;
-extern char _tbss_start;
-extern char _tbss_end;
-
-/** Create TLS (Thread Local Storage) data structures.
- *
- * The code requires, that sections .tdata and .tbss are adjacent. It may be
- * changed in the future.
- *
- * @return Pointer to TCB.
- */
-tcb_t *__make_tls(void)
-{
-	void *data;
-	tcb_t *tcb;
-	size_t tls_size = &_tbss_end - &_tdata_start;
-	
-	tcb = __alloc_tls(&data, tls_size);
-	
-	/*
-	 * Copy thread local data from the initialization image.
-	 */
-	memcpy(data, &_tdata_start, &_tdata_end - &_tdata_start);
-	/*
-	 * Zero out the thread local uninitialized data.
-	 */
-	memset(data + (&_tbss_start - &_tdata_start), 0,
-	    &_tbss_end - &_tbss_start);
-
-	return tcb;
-}
-
-void __free_tls(tcb_t *tcb)
-{
-	size_t tls_size = &_tbss_end - &_tdata_start;
-	__free_tls_arch(tcb, tls_size);
-}
-
-/** Main thread function.
- *
- * This function is called from __thread_entry() and is used
- * to call the thread's implementing function and perform cleanup
- * and exit when thread returns back. Do not call this function
- * directly.
- *
- * @param uarg Pointer to userspace argument structure.
- */
-void __thread_main(uspace_arg_t *uarg)
-{
-	psthread_data_t *pt;
-
-	pt = psthread_setup();
-	__tcb_set(pt->tcb);
-	
-	uarg->uspace_thread_function(uarg->uspace_thread_arg);
-	/* XXX: we cannot free the userspace stack while running on it */
-//	free(uarg->uspace_stack);
-//	free(uarg);
-
-	/* If there is a manager, destroy it */
-	async_destroy_manager();
-	psthread_teardown(pt);
-
-	thread_exit(0);
-}
-
-/** Create userspace thread.
- *
- * This function creates new userspace thread and allocates userspace
- * stack and userspace argument structure for it.
- *
- * @param function Function implementing the thread.
- * @param arg Argument to be passed to thread.
- * @param name Symbolic name of the thread.
- * @param tid Thread ID of the newly created thread.
- *
- * @return Zero on success or a code from @ref errno.h on failure.
- */
-int thread_create(void (* function)(void *), void *arg, char *name,
-    thread_id_t *tid)
-{
-	char *stack;
-	uspace_arg_t *uarg;
-	int rc;
-
-	stack = (char *) malloc(getpagesize() * THREAD_INITIAL_STACK_PAGES_NO);
-	if (!stack)
-		return -1;
-		
-	uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t));
-	if (!uarg) {
-		free(stack);
-		return -1;
-	}
-	
-	uarg->uspace_entry = (void *) FADDR(__thread_entry);
-	uarg->uspace_stack = (void *) stack;
-	uarg->uspace_thread_function = function;
-	uarg->uspace_thread_arg = arg;
-	uarg->uspace_uarg = uarg;
-	
-	rc = __SYSCALL3(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name,
-	    (sysarg_t) tid);
-	
-	if (rc) {
-		/*
-		 * Failed to create a new thread.
-		 * Free up the allocated structures.
-		 */
-		free(uarg);
-		free(stack);
-	}
-
-	return rc;
-}
-
-/** Terminate current thread.
- *
- * @param status Exit status. Currently not used.
- */
-void thread_exit(int status)
-{
-	__SYSCALL1(SYS_THREAD_EXIT, (sysarg_t) status);
-}
-
-/** Detach thread.
- *
- * Currently not implemented.
- *
- * @param thread TID.
- */
-void thread_detach(thread_id_t thread)
-{
-}
-
-/** Join thread.
- *
- * Currently not implemented.
- *
- * @param thread TID.
- *
- * @return Thread exit status.
- */
-int thread_join(thread_id_t thread)
-{
-}
-
-/** Get current thread ID.
- *
- * @return Current thread ID.
- */
-thread_id_t thread_get_id(void)
-{
-	thread_id_t thread_id;
-
-	(void) __SYSCALL1(SYS_THREAD_GET_ID, (sysarg_t) &thread_id);
-
-	return thread_id;
-}
-
-/** @}
- */
Index: pace/libc/generic/time.c
===================================================================
--- uspace/libc/generic/time.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,138 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#include <sys/time.h>
-#include <unistd.h>
-#include <ipc/ipc.h>
-#include <stdio.h>
-#include <arch/barrier.h>
-#include <unistd.h>
-#include <atomic.h>
-#include <futex.h>
-#include <sysinfo.h>
-#include <ipc/services.h>
-
-#include <sysinfo.h>
-#include <as.h>
-#include <ddi.h>
-
-/* Pointers to public variables with time */
-struct {
-	volatile sysarg_t seconds1;
-	volatile sysarg_t useconds;
-	volatile sysarg_t seconds2;
-} *ktime = NULL;
-
-
-/** POSIX gettimeofday
- *
- * The time variables are memory mapped(RO) from kernel, which updates
- * them periodically. As it is impossible to read 2 values atomically, we
- * use a trick: First read a seconds, then read microseconds, then
- * read seconds again. If a second elapsed in the meantime, set it to zero. 
- * This provides assurance, that at least the
- * sequence of subsequent gettimeofday calls is ordered.
- */
-int gettimeofday(struct timeval *tv, struct timezone *tz)
-{
-	void *mapping;
-	sysarg_t s1, s2;
-	sysarg_t rights;
-	int res;
-
-	if (!ktime) {
-		mapping = as_get_mappable_page(PAGE_SIZE);
-		/* Get the mapping of kernel clock */
-		res = ipc_call_sync_3(PHONE_NS, IPC_M_AS_AREA_RECV,
-		    (sysarg_t) mapping, PAGE_SIZE, SERVICE_MEM_REALTIME, NULL,
-		    &rights, NULL);
-		if (res) {
-			printf("Failed to initialize timeofday memarea\n");
-			_exit(1);
-		}
-		if (! (rights & AS_AREA_READ)) {
-			printf("Received bad rights on time area: %X\n",
-			       rights);
-			as_area_destroy(mapping);
-			_exit(1);
-		}
-		ktime = mapping;
-	}
-	if (tz) {
-		tz->tz_minuteswest = 0;
-		tz->tz_dsttime = DST_NONE;
-	}
-
-	s2 = ktime->seconds2;
-	read_barrier();
-	tv->tv_usec = ktime->useconds;
-	read_barrier();
-	s1 = ktime->seconds1;
-	if (s1 != s2) {
-		tv->tv_usec = 0;
-		tv->tv_sec = s1 > s2 ? s1 : s2;
-	} else
-		tv->tv_sec = s1;
-
-	return 0;
-}
-
-/** Wait unconditionally for specified number of microseconds */
-void usleep(unsigned long usec)
-{
-	atomic_t futex = FUTEX_INITIALIZER;
-
-	futex_initialize(&futex, 0);
-	futex_down_timeout(&futex, usec, 0);
-}
-
-/** Wait unconditionally for specified number of seconds */
-unsigned int sleep(unsigned int seconds)
-{
-	atomic_t futex = FUTEX_INITIALIZER;
-
-	futex_initialize(&futex, 0);
-	
-	/* Sleep in 1000 second steps to support
-	   full argument range */
-	while (seconds > 0) {
-		unsigned int period = (seconds > 1000) ? 1000 : seconds;
-	
-		futex_down_timeout(&futex, period * 1000000, 0);
-		seconds -= period;
-	}
-}
-
-/** @}
- */
Index: pace/libc/include/align.h
===================================================================
--- uspace/libc/include/align.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ALIGN_H_
-#define LIBC_ALIGN_H_
-
-/** Align to the nearest lower address.
- *
- * @param s Address or size to be aligned.
- * @param a Size of alignment, must be power of 2.
- */
-#define ALIGN_DOWN(s, a)	((s) & ~((a) - 1))
-
-
-/** Align to the nearest higher address.
- *
- * @param s Address or size to be aligned.
- * @param a Size of alignment, must be power of 2.
- */
-#define ALIGN_UP(s, a)		((long)((s) + ((a) - 1)) & ~((long) (a) - 1))
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/as.h
===================================================================
--- uspace/libc/include/as.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_AS_H_
-#define LIBC_AS_H_
-
-#include <types.h>
-#include <task.h>
-#include <kernel/mm/as.h>
-#include <libarch/config.h>
-
-extern void *as_area_create(void *address, size_t size, int flags);
-extern int as_area_resize(void *address, size_t size, int flags);
-extern int as_area_destroy(void *address);
-extern void *set_maxheapsize(size_t mhs);
-extern void * as_get_mappable_page(size_t sz);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/assert.h
===================================================================
--- uspace/libc/include/assert.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ASSERT_H_
-#define LIBC_ASSERT_H_
-
-/** Debugging assert macro
- *
- * If NDEBUG is not set, the assert() macro
- * evaluates expr and if it is false prints 
- * error message and terminate program.
- *
- * @param expr Expression which is expected to be true.
- *
- */
-
-#include <stdlib.h>
-#ifndef NDEBUG
-#	define assert(expr) if (!(expr)) { printf("Assertion failed (%s) at file '%s', line %d.\n", #expr, __FILE__, __LINE__); abort();}
-#else
-#	define assert(expr)
-#endif
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/async.h
===================================================================
--- uspace/libc/include/async.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,135 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ASYNC_H_
-#define LIBC_ASYNC_H_
-
-#include <ipc/ipc.h>
-#include <psthread.h>
-#include <sys/time.h>
-#include <atomic.h>
-
-typedef ipc_callid_t aid_t;
-typedef void (*async_client_conn_t)(ipc_callid_t callid, ipc_call_t *call);
-
-static inline void async_manager(void)
-{
-	psthread_schedule_next_adv(PS_TO_MANAGER);
-}
-
-ipc_callid_t async_get_call_timeout(ipc_call_t *call, suseconds_t usecs);
-static inline ipc_callid_t async_get_call(ipc_call_t *data)
-{
-	return async_get_call_timeout(data, 0);
-}
-
-aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
-		   ipc_call_t *dataptr);
-aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
-		   ipcarg_t arg3, ipc_call_t *dataptr);
-void async_wait_for(aid_t amsgid, ipcarg_t *result);
-int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout);
-
-/** Pseudo-synchronous message sending
- *
- * Send message through IPC, wait in the event loop, until it is received
- *
- * @return Return code of message
- */
-static inline ipcarg_t async_req_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t *r1, ipcarg_t *r2)
-{
-	ipc_call_t result;
-	ipcarg_t rc;
-
-	aid_t eid = async_send_2(phoneid, method, arg1, arg2, &result);
-	async_wait_for(eid, &rc);
-	if (r1) 
-		*r1 = IPC_GET_ARG1(result);
-	if (r2)
-		*r2 = IPC_GET_ARG2(result);
-	return rc;
-}
-#define async_req(phoneid, method, arg1, r1) async_req_2(phoneid, method, arg1, 0, r1, 0)
-
-static inline ipcarg_t async_req_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
-				   ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *r1, 
-				   ipcarg_t *r2, ipcarg_t *r3)
-{
-	ipc_call_t result;
-	ipcarg_t rc;
-
-	aid_t eid = async_send_3(phoneid, method, arg1, arg2, arg3, &result);
-	async_wait_for(eid, &rc);
-	if (r1) 
-		*r1 = IPC_GET_ARG1(result);
-	if (r2)
-		*r2 = IPC_GET_ARG2(result);
-	if (r3)
-		*r3 = IPC_GET_ARG3(result);
-	return rc;
-}
-
-
-pstid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid, 
-			     ipc_call_t *call,
-			     void (*cthread)(ipc_callid_t,ipc_call_t *));
-void async_usleep(suseconds_t timeout);
-void async_create_manager(void);
-void async_destroy_manager(void);
-void async_set_client_connection(async_client_conn_t conn);
-void async_set_interrupt_received(async_client_conn_t conn);
-int _async_init(void);
-
-
-/* Primitve functions for IPC communication */
-void async_msg_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, 
-		 ipcarg_t arg3);
-void async_msg_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2);
-#define async_msg(ph, m, a1) async_msg_2(ph, m, a1, 0)
-
-static inline void async_serialize_start(void)
-{
-	psthread_inc_sercount();
-}
-
-static inline void async_serialize_end(void)
-{
-	psthread_dec_sercount();
-}
-
-extern atomic_t async_futex;
-#endif
-
-/** @}
- */
Index: pace/libc/include/atomic.h
===================================================================
--- uspace/libc/include/atomic.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ATOMIC_H_
-#define LIBC_ATOMIC_H_
-
-typedef struct atomic {
-	volatile long count;
-} atomic_t;
-
-#include <libarch/atomic.h>
-
-static inline void atomic_set(atomic_t *val, long i)
-{
-        val->count = i;
-}
-
-static inline long atomic_get(atomic_t *val)
-{
-        return val->count;
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/bitops.h
===================================================================
--- uspace/libc/include/bitops.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,94 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup generic	
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_BITOPS_H_
-#define LIBC_BITOPS_H_
-
-#include <types.h>
-
-
-/** Return position of first non-zero bit from left (i.e. [log_2(arg)]).
- *
- * If number is zero, it returns 0
- */
-static inline int fnzb32(uint32_t arg)
-{
-	int n = 0;
-
-	if (arg >> 16) {
-		arg >>= 16;
-		n += 16;
-	}
-	
-	if (arg >> 8) {
-		arg >>= 8;
-		n += 8;
-	}
-	
-	if (arg >> 4) {
-		arg >>= 4;
-		n += 4;
-	}
-	
-	if (arg >> 2) {
-		arg >>= 2;
-		n += 2;
-	}
-	
-	if (arg >> 1) {
-		arg >>= 1;
-		n += 1;
-	}
-	
-	return n;
-}
-
-static inline int fnzb64(uint64_t arg)
-{
-	int n = 0;
-
-	if (arg >> 32) {
-		arg >>= 32;
-		n += 32;
-	}
-	
-	return n + fnzb32((uint32_t) arg);
-}
-
-#define fnzb(x) fnzb32(x)
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/bool.h
===================================================================
--- uspace/libc/include/bool.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_BOOL_H_
-#define LIBC_BOOL_H_
-
-#define false 0
-#define true 1
-
-typedef short bool;
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/cap.h
===================================================================
--- uspace/libc/include/cap.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIB_CAP_H_
-#define LIB_CAP_H_
-
-#include <task.h>
-
-extern int cap_grant(task_id_t id, unsigned int caps);
-extern int cap_revoke(task_id_t id, unsigned int caps);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/ctype.h
===================================================================
--- uspace/libc/include/ctype.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_CTYPE_H_
-#define LIBC_CTYPE_H_
-
-static inline int isdigit(int c)
-{
-	return ((c >= '0' )&&( c <= '9'));
-}
-
-static inline int isspace(int c)
-{
-	switch(c) {
-	case ' ':
-	case '\n':
-	case '\t':
-	case '\f':
-	case '\r':
-	case '\v':
-		return 1;
-		break;
-	default:
-		return 0;
-	}
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/ddi.h
===================================================================
--- uspace/libc/include/ddi.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_DDI_H_
-#define LIBC_DDI_H_
-
-#include <task.h>
-
-extern int physmem_map(void *pf, void *vp, unsigned long pages, int flags);
-extern int iospace_enable(task_id_t id, void *ioaddr, unsigned long size);
-extern int preemption_control(int enable);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/endian.h
===================================================================
--- uspace/libc/include/endian.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ENDIAN_H_
-#define LIBC_ENDIAN_H_
-
-#define __LITTLE_ENDIAN 1234
-#define __BIG_ENDIAN	4321
-#define __PDP_ENDIAN	3412
-
-#include <libarch/endian.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/err.h
===================================================================
--- uspace/libc/include/err.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ERR_H_
-#define LIBC_ERR_H_
-
-#define errx(status, fmt, ...) { \
-	printf((fmt), ##__VA_ARGS__); \
-	_exit(status); \
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/errno.h
===================================================================
--- uspace/libc/include/errno.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_ERRNO_H_
-#define LIBC_ERRNO_H_
-
-#include <kernel/errno.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/futex.h
===================================================================
--- uspace/libc/include/futex.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_FUTEX_H_
-#define LIBC_FUTEX_H_
-
-#include <atomic.h>
-#include <types.h>
-
-#define FUTEX_INITIALIZER     {1}
-
-extern void futex_initialize(atomic_t *futex, int value);
-extern int futex_down(atomic_t *futex);
-extern int futex_trydown(atomic_t *futex);
-extern int futex_down_timeout(atomic_t *futex, uint32_t usec, int flags);
-extern int futex_up(atomic_t *futex);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/io/file.h
===================================================================
--- uspace/libc/include/io/file.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,101 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Konopa
- * Copyright (c) 2007 Martin Jelen
- * Copyright (c) 2007 Peter Majer
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */ 
-
-/**
- * @file	file.h
- * @brief	The main header for the user library for working with the file system
- */
-
-#ifndef _FILE_H
-#define _FILE_H
-
-#include "../../../fs/const.h"
-#include "../../../fs/type.h"
-#include "../../../fs/stat.h"
-#include "../../../fs/dir.h"
-#include "../../../share/message.h"
-
-#define F_OK			0x00
-#define F_FILE_NOT_FOUND	0x01
-#define F_FILE_NOT_OPEN		0x02
-#define F_READ_ERROR		0x10
-#define F_READ_OVERFLOW		0x11
-#define F_SYSTEM_ERROR		0xf0
-#define F_IPC_FAILURE		0xf1
-#define F_MMAP_FAILURE		0xf2
-#define F_COMM_FAILURE		0xf3
-
-#define F_ERRTYPE_MASK		0xf0
-
-#define F_MODE_READ		0x01
-#define F_MODE_WRITE		0x02
-#define F_MODE_READ_WRITE	F_MODE_READ | F_MODE_WRITE
-#define F_MODE_APPEND		0x04
-
-/**
- *
- */
-typedef struct {
-	char name[30];
-	unsigned short inode_num;
-} dir_item_t;
-
-/**
- *
- */
-typedef struct {
-	size_t size;
-	dir_item_t base_info;
-	void *share;
-	message_params_t *params;
-	unsigned int handle;
-	stat_t stat;
-} file_t;
-
-static int f_err;
-
-dir_item_t *ls(unsigned int *length);
-int chdir(char *new_dir);
-
-file_t *fopen(char *name, int mode);
-int fstat(file_t *file);
-int fread(file_t *file, void *buffer, unsigned int size);
-int fseek(file_t * file, int offset, int whence);
-int fclose(file_t *file);
-
-#endif
-
-/**
- *@}
- /
Index: pace/libc/include/io/io.h
===================================================================
--- uspace/libc/include/io/io.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_IO_H_
-#define LIBC_IO_H_
-
-#include <libarch/types.h>
-
-int putnchars(const char * buf, size_t count);
-int putstr(const char * str);
-int putchar(int c);
-int getchar(void);
-
-#endif
-
-/** @}
- */
- 
- 
Index: pace/libc/include/io/printf_core.h
===================================================================
--- uspace/libc/include/io/printf_core.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_PRINTF_CORE_H_
-#define LIBC_PRINTF_CORE_H_
-
-#include <libarch/types.h>
-#include <stdarg.h>
-
-/** Structure for specifying output methods for different printf clones. */
-struct printf_spec {
-	/* Output function, returns count of printed characters or EOF */
-	int (*write)(void *, size_t, void *);
-	/* Support data - output stream specification, its state, locks,... */
-	void *data;
-
-};
-
-int printf_core(const char *fmt, struct printf_spec *ps ,va_list ap);
-
-#endif
-
-/** @}
- */
- 
- 
Index: pace/libc/include/io/stream.h
===================================================================
--- uspace/libc/include/io/stream.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,53 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Vana
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STREAM_H_
-#define LIBC_STREAM_H_
-
-#include <libarch/types.h>
-
-#define EMFILE -17
-
-typedef int fd_t;
-
-typedef ssize_t (*pwritefn_t)(void *, const void *, size_t);
-typedef ssize_t (*preadfn_t)(void *, void *, size_t);
-
-fd_t open(const char *fname, int flags);
-int get_fd_phone(int fd);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/ipc/fb.h
===================================================================
--- uspace/libc/include/ipc/fb.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,75 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcipc
- * @{
- */
-/** @file
- */ 
-
-#ifndef LIBC_FB_H_
-#define LIBC_FB_H_
-
-#define FB_PUTCHAR           1025
-#define FB_CLEAR             1026
-#define FB_GET_CSIZE         1027
-#define FB_CURSOR_VISIBILITY 1028
-#define FB_CURSOR_GOTO       1029
-#define FB_SCROLL            1030
-#define FB_VIEWPORT_SWITCH   1031
-#define FB_VIEWPORT_CREATE   1032
-#define FB_VIEWPORT_DELETE   1033
-#define FB_SET_STYLE         1034
-#define FB_GET_RESOLUTION    1035
-#define FB_DRAW_TEXT_DATA    1036
-#define FB_FLUSH             1037
-#define FB_VIEWPORT_DB       1038
-
-#define FB_DRAW_PPM          1100
-#define FB_PREPARE_SHM       1101
-#define FB_DROP_SHM          1102
-#define FB_SHM2PIXMAP        1103
-
-#define FB_VP_DRAW_PIXMAP    1104
-#define FB_VP2PIXMAP         1105
-#define FB_DROP_PIXMAP       1106
-#define FB_TRANS_PUTCHAR     1107
-
-#define FB_ANIM_CREATE       1200
-#define FB_ANIM_DROP         1201
-#define FB_ANIM_ADDPIXMAP    1202
-#define FB_ANIM_CHGVP        1203
-#define FB_ANIM_START        1204
-#define FB_ANIM_STOP         1205
-
-#define FB_POINTER_MOVE      1300
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/ipc/ipc.h
===================================================================
--- uspace/libc/include/ipc/ipc.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,97 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcipc
- * @{
- */
-/** @file
- */ 
-
-#ifndef LIBIPC_IPC_H_
-#define LIBIPC_IPC_H_
-
-#include <kernel/ipc/ipc.h>
-#include <kernel/ddi/irq.h>
-#include <libc.h>
-#include <types.h>
-#include <kernel/synch/synch.h>
-
-typedef sysarg_t ipcarg_t;
-typedef struct {
-	ipcarg_t args[IPC_CALL_LEN];
-	ipcarg_t in_phone_hash;
-} ipc_call_t;
-typedef sysarg_t ipc_callid_t;
-
-typedef void (* ipc_async_callback_t)(void *private, int retval,
-    ipc_call_t *data);
-
-#define ipc_call_sync_2(phoneid, method, arg1, arg2, res1, res2) \
-	ipc_call_sync_3((phoneid), (method), (arg1), (arg2), 0, (res1), (res2), \
-	    0)
-extern int ipc_call_sync_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *result1, ipcarg_t *result2,
-    ipcarg_t *result3);
-
-extern int ipc_call_sync(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t *result);
-
-extern ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags);
-extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *data, uint32_t usec);
-static inline ipc_callid_t ipc_wait_for_call(ipc_call_t *data)
-{
-	return ipc_wait_for_call_timeout(data, SYNCH_NO_TIMEOUT);
-}
-extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *data);
-
-extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval,
-    ipcarg_t arg1, ipcarg_t arg2);
-extern ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call);
-
-#define ipc_call_async(phoneid, method, arg1, private, callback, can_preempt) \
-	(ipc_call_async_2(phoneid, method, arg1, 0, private, callback, \
-	    can_preempt))
-extern void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, void *private, ipc_async_callback_t callback,
-    int can_preempt);
-extern void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
-    ipcarg_t arg2, ipcarg_t arg3, void *private, ipc_async_callback_t callback,
-    int can_preempt);
-
-extern int ipc_connect_to_me(int phoneid, int arg1, int arg2, ipcarg_t *phone);
-extern int ipc_connect_me_to(int phoneid, int arg1, int arg2);
-extern int ipc_hangup(int phoneid);
-extern int ipc_register_irq(int inr, int devno, int method, irq_code_t *code);
-extern int ipc_unregister_irq(int inr, int devno);
-extern int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method,
-    ipcarg_t arg1);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/ipc/ns.h
===================================================================
--- uspace/libc/include/ipc/ns.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcipc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBIPC_NS_H_
-#define LIBIPC_NS_H_
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/ipc/services.h
===================================================================
--- uspace/libc/include/ipc/services.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,54 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libcipc
- * @{
- */
-/**
- * @file	services.h
- * @brief	List of all known services and their codes.
- */
-
-#ifndef LIBIPC_SERVICES_H_
-#define LIBIPC_SERVICES_H_
-
-#define SERVICE_PCI		1
-#define SERVICE_KEYBOARD	2
-#define SERVICE_VIDEO		3
-#define SERVICE_CONSOLE		4
-#define SERVICE_RD		5
-#define SERVICE_FS		6
-
-/* Memory area to be received from NS */
-#define SERVICE_MEM_REALTIME    1
-#define SERVICE_MEM_KLOG        2
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/libadt/fifo.h
===================================================================
--- uspace/libc/include/libadt/fifo.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,127 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-/*
- * This implementation of FIFO stores values in an array
- * (static or dynamic). As such, these FIFOs have upper bound
- * on number of values they can store. Push and pop operations
- * are done via accessing the array through head and tail indices.
- * Because of better operation ordering in fifo_pop(), the access
- * policy for these two indices is to 'increment (mod size of FIFO)
- * and use'.
- */
-
-#ifndef LIBC_FIFO_H_
-#define LIBC_FIFO_H_
-
-#include <malloc.h>
-
-typedef unsigned long fifo_count_t;
-typedef unsigned long fifo_index_t;
-
-#define FIFO_CREATE_STATIC(name, t, itms)		\
-	struct {					\
-		t fifo[(itms)];				\
-		fifo_count_t items;			\
-		fifo_index_t head;			\
-		fifo_index_t tail;			\
-	} name
-
-/** Create and initialize static FIFO.
- *
- * FIFO is allocated statically.
- * This macro is suitable for creating smaller FIFOs.
- *
- * @param name Name of FIFO.
- * @param t Type of values stored in FIFO.
- * @param itms Number of items that can be stored in FIFO.
- */
-#define FIFO_INITIALIZE_STATIC(name, t, itms)		\
-	FIFO_CREATE_STATIC(name, t, itms) = {		\
-		.items = (itms),			\
-		.head = 0,				\
-		.tail = 0				\
-	}
-
-/** Create and prepare dynamic FIFO.
- *
- * FIFO is allocated dynamically.
- * This macro is suitable for creating larger FIFOs. 
- *
- * @param name Name of FIFO.
- * @param t Type of values stored in FIFO.
- * @param itms Number of items that can be stored in FIFO.
- */
-#define FIFO_INITIALIZE_DYNAMIC(name, t, itms)		\
-	struct {					\
-		t *fifo;				\
-		fifo_count_t items;			\
-		fifo_index_t head;			\
-		fifo_index_t tail;			\
-	} name = {					\
-		.fifo = NULL,				\
-		.items = (itms),			\
-		.head = 0,				\
-		.tail = 0				\
-	}
-
-/** Pop value from head of FIFO.
- *
- * @param name FIFO name.
- *
- * @return Leading value in FIFO.
- */
-#define fifo_pop(name) \
-	name.fifo[name.head = (name.head + 1) < name.items ? (name.head + 1) : 0]
-
-/** Push value to tail of FIFO.
- *
- * @param name FIFO name.
- * @param value Value to be appended to FIFO.
- *
- */
-#define fifo_push(name, value) \
-	name.fifo[name.tail = (name.tail + 1) < name.items ? (name.tail + 1) : 0] = (value) 
-
-/** Allocate memory for dynamic FIFO.
- *
- * @param name FIFO name.
- */
-#define fifo_create(name) \
-	name.fifo = malloc(sizeof(*name.fifo) * name.items)
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/libadt/hash_table.h
===================================================================
--- uspace/libc/include/libadt/hash_table.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,89 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_HASH_TABLE_H_
-#define LIBC_HASH_TABLE_H_
-
-#include <libadt/list.h>
-#include <unistd.h>
-
-typedef unsigned long hash_count_t;
-typedef unsigned long hash_index_t;
-typedef struct hash_table hash_table_t;
-typedef struct hash_table_operations hash_table_operations_t;
-
-/** Hash table structure. */
-struct hash_table {
-	link_t *entry;
-	hash_count_t entries;
-	hash_count_t max_keys;
-	hash_table_operations_t *op;
-};
-
-/** Set of operations for hash table. */
-struct hash_table_operations {
-	/** Hash function.
-	 *
-	 * @param key Array of keys needed to compute hash index. All keys must be passed.
-	 *
-	 * @return Index into hash table.
-	 */
-	hash_index_t (* hash)(unsigned long key[]);
-	
-	/** Hash table item comparison function.
-	 *
-	 * @param key Array of keys that will be compared with item. It is not necessary to pass all keys.
-	 *
-	 * @return true if the keys match, false otherwise.
-	 */
-	int (*compare)(unsigned long key[], hash_count_t keys, link_t *item);
-
-	/** Hash table item removal callback.
-	 *
-	 * @param item Item that was removed from the hash table.
-	 */
-	void (*remove_callback)(link_t *item);
-};
-
-#define hash_table_get_instance(item, type, member)	list_get_instance((item), type, member)
-
-extern int hash_table_create(hash_table_t *h, hash_count_t m, hash_count_t max_keys, hash_table_operations_t *op);
-extern void hash_table_insert(hash_table_t *h, unsigned long key[], link_t *item);
-extern link_t *hash_table_find(hash_table_t *h, unsigned long key[]);
-extern void hash_table_remove(hash_table_t *h, unsigned long key[], hash_count_t keys);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/libadt/list.h
===================================================================
--- uspace/libc/include/libadt/list.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,194 +1,0 @@
-/*
- * Copyright (c) 2001-2004 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_LIST_H_
-#define LIBC_LIST_H_
-
-#include <unistd.h>
-
-#ifndef true
-# define true 1
-#endif
-#ifndef false
-# define false 0
-#endif
-
-typedef struct link link_t;
-
-/** Doubly linked list head and link type. */
-struct link {
-	link_t *prev;	/**< Pointer to the previous item in the list. */
-	link_t *next;	/**< Pointer to the next item in the list. */
-};
-
-/** Declare and initialize statically allocated list.
- *
- * @param name Name of the new statically allocated list.
- */
-#define LIST_INITIALIZE(name)		link_t name = { .prev = &name, .next = &name }
-
-/** Initialize doubly-linked circular list link
- *
- * Initialize doubly-linked list link.
- *
- * @param link Pointer to link_t structure to be initialized.
- */
-static inline void link_initialize(link_t *link)
-{
-	link->prev = NULL;
-	link->next = NULL;
-}
-
-/** Initialize doubly-linked circular list
- *
- * Initialize doubly-linked circular list.
- *
- * @param head Pointer to link_t structure representing head of the list.
- */
-static inline void list_initialize(link_t *head)
-{
-	head->prev = head;
-	head->next = head;
-}
-
-/** Add item to the beginning of doubly-linked circular list
- *
- * Add item to the beginning of doubly-linked circular list.
- *
- * @param link Pointer to link_t structure to be added.
- * @param head Pointer to link_t structure representing head of the list.
- */
-static inline void list_prepend(link_t *link, link_t *head)
-{
-	link->next = head->next;
-	link->prev = head;
-	head->next->prev = link;
-	head->next = link;
-}
-
-/** Add item to the end of doubly-linked circular list
- *
- * Add item to the end of doubly-linked circular list.
- *
- * @param link Pointer to link_t structure to be added.
- * @param head Pointer to link_t structure representing head of the list.
- */
-static inline void list_append(link_t *link, link_t *head)
-{
-	link->prev = head->prev;
-	link->next = head;
-	head->prev->next = link;
-	head->prev = link;
-}
-
-/** Remove item from doubly-linked circular list
- *
- * Remove item from doubly-linked circular list.
- *
- * @param link Pointer to link_t structure to be removed from the list it is contained in.
- */
-static inline void list_remove(link_t *link)
-{
-	link->next->prev = link->prev;
-	link->prev->next = link->next;
-	link_initialize(link);
-}
-
-/** Query emptiness of doubly-linked circular list
- *
- * Query emptiness of doubly-linked circular list.
- *
- * @param head Pointer to link_t structure representing head of the list.
- */
-static inline int list_empty(link_t *head)
-{
-	return head->next == head ? true : false;
-}
-
-
-/** Split or concatenate headless doubly-linked circular list
- *
- * Split or concatenate headless doubly-linked circular list.
- *
- * Note that the algorithm works both directions:
- * concatenates splitted lists and splits concatenated lists.
- *
- * @param part1 Pointer to link_t structure leading the first (half of the headless) list.
- * @param part2 Pointer to link_t structure leading the second (half of the headless) list. 
- */
-static inline void headless_list_split_or_concat(link_t *part1, link_t *part2)
-{
-	link_t *hlp;
-
-	part1->prev->next = part2;
-	part2->prev->next = part1;	
-	hlp = part1->prev;
-	part1->prev = part2->prev;
-	part2->prev = hlp;
-}
-
-
-/** Split headless doubly-linked circular list
- *
- * Split headless doubly-linked circular list.
- *
- * @param part1 Pointer to link_t structure leading the first half of the headless list.
- * @param part2 Pointer to link_t structure leading the second half of the headless list. 
- */
-static inline void headless_list_split(link_t *part1, link_t *part2)
-{
-	headless_list_split_or_concat(part1, part2);
-}
-
-/** Concatenate two headless doubly-linked circular lists
- *
- * Concatenate two headless doubly-linked circular lists.
- *
- * @param part1 Pointer to link_t structure leading the first headless list.
- * @param part2 Pointer to link_t structure leading the second headless list. 
- */
-static inline void headless_list_concat(link_t *part1, link_t *part2)
-{
-	headless_list_split_or_concat(part1, part2);
-}
-
-#define list_get_instance(link,type,member) (type *)(((char *)(link))-((char *)&(((type *)NULL)->member)))
-
-extern int list_member(const link_t *link, const link_t *head);
-extern void list_concat(link_t *head1, link_t *head2);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/libc.h
===================================================================
--- uspace/libc/include/libc.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_LIBC_H_
-#define LIBC_LIBC_H_
-
-#include <types.h>
-#include <kernel/syscall/syscall.h>
-#include <libarch/syscall.h>
-
-#define __SYSCALL0(id) __syscall(0, 0, 0, 0, id)
-#define __SYSCALL1(id, p1) __syscall(p1, 0, 0, 0, id)
-#define __SYSCALL2(id, p1, p2) __syscall(p1, p2, 0, 0, id)
-#define __SYSCALL3(id, p1, p2, p3) __syscall(p1, p2, p3, 0, id)
-#define __SYSCALL4(id, p1, p2, p3, p4) __syscall(p1, p2, p3, p4, id)
-
-extern void __main(void);
-extern void __io_init(void);
-extern void __exit(void);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/limits.h
===================================================================
--- uspace/libc/include/limits.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_LIMITS_H_
-#define LIBC_LIMITS_H_
-
-#include <stdint.h>
-#include <libarch/limits.h>
-
-/* char */
-#define SCHAR_MIN MIN_INT8
-#define SCHAR_MAX MAX_INT8
-#define UCHAR_MIN MIN_UINT8
-#define UCHAR_MAX MAX_UINT8
-
-#ifdef __CHAR_UNSIGNED__
-# define CHAR_MIN UCHAR_MIN
-# define CHAR_MAX UCHAR_MAX
-#else
-# define CHAR_MIN SCHAR_MIN
-# define CHAR_MAX SCHAR_MAX
-#endif
-
-/* short int */
-#define SHRT_MIN MIN_INT16
-#define SHRT_MAX MAX_INT16
-#define USHRT_MIN MIN_UINT16
-#define USHRT_MAX MAX_UINT16
-
-#define INT_MIN MIN_INT32
-#define INT_MAX MAX_INT32
-#define UINT_MIN MIN_UINT32
-#define UINT_MAX MAX_UINT32
-
-#define LLONG_MIN MIN_INT64
-#define LLONG_MAX MAX_INT64
-#define ULLONG_MIN MIN_UINT64
-#define ULLONG_MAX MAX_UINT64
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/malloc.h
===================================================================
--- uspace/libc/include/malloc.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,537 +1,0 @@
-/*
-  Default header file for malloc-2.8.x, written by Doug Lea
-  and released to the public domain, as explained at
-  http://creativecommons.org/licenses/publicdomain. 
- 
-  last update: Mon Aug 15 08:55:52 2005  Doug Lea  (dl at gee)
-
-  This header is for ANSI C/C++ only.  You can set any of
-  the following #defines before including:
-
-  * If USE_DL_PREFIX is defined, it is assumed that malloc.c 
-    was also compiled with this option, so all routines
-    have names starting with "dl".
-
-  * If HAVE_USR_INCLUDE_MALLOC_H is defined, it is assumed that this
-    file will be #included AFTER <malloc.h>. This is needed only if
-    your system defines a struct mallinfo that is incompatible with the
-    standard one declared here.  Otherwise, you can include this file
-    INSTEAD of your system system <malloc.h>.  At least on ANSI, all
-    declarations should be compatible with system versions
-
-  * If MSPACES is defined, declarations for mspace versions are included.
-*/
-
-#ifndef MALLOC_280_H
-#define MALLOC_280_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>   /* for size_t */
-
-#if !ONLY_MSPACES
-
-#ifndef USE_DL_PREFIX
-#define dlcalloc               calloc
-#define dlfree                 free
-#define dlmalloc               malloc
-#define dlmemalign             memalign
-#define dlrealloc              realloc
-#define dlvalloc               valloc
-#define dlpvalloc              pvalloc
-#define dlmallinfo             mallinfo
-#define dlmallopt              mallopt
-#define dlmalloc_trim          malloc_trim
-#define dlmalloc_stats         malloc_stats
-#define dlmalloc_usable_size   malloc_usable_size
-#define dlmalloc_footprint     malloc_footprint
-#define dlmalloc_max_footprint malloc_max_footprint
-#define dlindependent_calloc   independent_calloc
-#define dlindependent_comalloc independent_comalloc
-#endif /* USE_DL_PREFIX */
-
-
-/*
-  malloc(size_t n)
-  Returns a pointer to a newly allocated chunk of at least n bytes, or
-  null if no space is available, in which case errno is set to ENOMEM
-  on ANSI C systems.
-
-  If n is zero, malloc returns a minimum-sized chunk. (The minimum
-  size is 16 bytes on most 32bit systems, and 32 bytes on 64bit
-  systems.)  Note that size_t is an unsigned type, so calls with
-  arguments that would be negative if signed are interpreted as
-  requests for huge amounts of space, which will often fail. The
-  maximum supported value of n differs across systems, but is in all
-  cases less than the maximum representable value of a size_t.
-*/
-void* dlmalloc(size_t);
-
-/*
-  free(void* p)
-  Releases the chunk of memory pointed to by p, that had been previously
-  allocated using malloc or a related routine such as realloc.
-  It has no effect if p is null. If p was not malloced or already
-  freed, free(p) will by default cuase the current program to abort.
-*/
-void  dlfree(void*);
-
-/*
-  calloc(size_t n_elements, size_t element_size);
-  Returns a pointer to n_elements * element_size bytes, with all locations
-  set to zero.
-*/
-void* dlcalloc(size_t, size_t);
-
-/*
-  realloc(void* p, size_t n)
-  Returns a pointer to a chunk of size n that contains the same data
-  as does chunk p up to the minimum of (n, p's size) bytes, or null
-  if no space is available.
-
-  The returned pointer may or may not be the same as p. The algorithm
-  prefers extending p in most cases when possible, otherwise it
-  employs the equivalent of a malloc-copy-free sequence.
-
-  If p is null, realloc is equivalent to malloc.
-
-  If space is not available, realloc returns null, errno is set (if on
-  ANSI) and p is NOT freed.
-
-  if n is for fewer bytes than already held by p, the newly unused
-  space is lopped off and freed if possible.  realloc with a size
-  argument of zero (re)allocates a minimum-sized chunk.
-
-  The old unix realloc convention of allowing the last-free'd chunk
-  to be used as an argument to realloc is not supported.
-*/
-
-void* dlrealloc(void*, size_t);
-
-/*
-  memalign(size_t alignment, size_t n);
-  Returns a pointer to a newly allocated chunk of n bytes, aligned
-  in accord with the alignment argument.
-
-  The alignment argument should be a power of two. If the argument is
-  not a power of two, the nearest greater power is used.
-  8-byte alignment is guaranteed by normal malloc calls, so don't
-  bother calling memalign with an argument of 8 or less.
-
-  Overreliance on memalign is a sure way to fragment space.
-*/
-void* dlmemalign(size_t, size_t);
-
-/*
-  valloc(size_t n);
-  Equivalent to memalign(pagesize, n), where pagesize is the page
-  size of the system. If the pagesize is unknown, 4096 is used.
-*/
-void* dlvalloc(size_t);
-
-/*
-  mallopt(int parameter_number, int parameter_value)
-  Sets tunable parameters The format is to provide a
-  (parameter-number, parameter-value) pair.  mallopt then sets the
-  corresponding parameter to the argument value if it can (i.e., so
-  long as the value is meaningful), and returns 1 if successful else
-  0.  SVID/XPG/ANSI defines four standard param numbers for mallopt,
-  normally defined in malloc.h.  None of these are use in this malloc,
-  so setting them has no effect. But this malloc also supports other
-  options in mallopt:
-
-  Symbol            param #  default    allowed param values
-  M_TRIM_THRESHOLD     -1   2*1024*1024   any   (-1U disables trimming)
-  M_GRANULARITY        -2     page size   any power of 2 >= page size
-  M_MMAP_THRESHOLD     -3      256*1024   any   (or 0 if no MMAP support)
-*/
-int dlmallopt(int, int);
-
-#define M_TRIM_THRESHOLD     (-1)
-#define M_GRANULARITY        (-2)
-#define M_MMAP_THRESHOLD     (-3)
-
-
-/*
-  malloc_footprint();
-  Returns the number of bytes obtained from the system.  The total
-  number of bytes allocated by malloc, realloc etc., is less than this
-  value. Unlike mallinfo, this function returns only a precomputed
-  result, so can be called frequently to monitor memory consumption.
-  Even if locks are otherwise defined, this function does not use them,
-  so results might not be up to date.
-*/
-size_t dlmalloc_footprint(void);
-size_t dlmalloc_max_footprint(void);
-
-#if !NO_MALLINFO
-/*
-  mallinfo()
-  Returns (by copy) a struct containing various summary statistics:
-
-  arena:     current total non-mmapped bytes allocated from system
-  ordblks:   the number of free chunks
-  smblks:    always zero.
-  hblks:     current number of mmapped regions
-  hblkhd:    total bytes held in mmapped regions
-  usmblks:   the maximum total allocated space. This will be greater
-                than current total if trimming has occurred.
-  fsmblks:   always zero
-  uordblks:  current total allocated space (normal or mmapped)
-  fordblks:  total free space
-  keepcost:  the maximum number of bytes that could ideally be released
-               back to system via malloc_trim. ("ideally" means that
-               it ignores page restrictions etc.)
-
-  Because these fields are ints, but internal bookkeeping may
-  be kept as longs, the reported values may wrap around zero and
-  thus be inaccurate.
-*/
-#ifndef HAVE_USR_INCLUDE_MALLOC_H
-#ifndef _MALLOC_H
-#ifndef MALLINFO_FIELD_TYPE
-#define MALLINFO_FIELD_TYPE size_t
-#endif /* MALLINFO_FIELD_TYPE */
-struct mallinfo {
-  MALLINFO_FIELD_TYPE arena;    /* non-mmapped space allocated from system */
-  MALLINFO_FIELD_TYPE ordblks;  /* number of free chunks */
-  MALLINFO_FIELD_TYPE smblks;   /* always 0 */
-  MALLINFO_FIELD_TYPE hblks;    /* always 0 */
-  MALLINFO_FIELD_TYPE hblkhd;   /* space in mmapped regions */
-  MALLINFO_FIELD_TYPE usmblks;  /* maximum total allocated space */
-  MALLINFO_FIELD_TYPE fsmblks;  /* always 0 */
-  MALLINFO_FIELD_TYPE uordblks; /* total allocated space */
-  MALLINFO_FIELD_TYPE fordblks; /* total free space */
-  MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */
-};
-#endif  /* _MALLOC_H */
-#endif  /* HAVE_USR_INCLUDE_MALLOC_H */
-
-struct mallinfo dlmallinfo(void);
-#endif  /* NO_MALLINFO */
-
-/*
-  independent_calloc(size_t n_elements, size_t element_size, void* chunks[]);
-
-  independent_calloc is similar to calloc, but instead of returning a
-  single cleared space, it returns an array of pointers to n_elements
-  independent elements that can hold contents of size elem_size, each
-  of which starts out cleared, and can be independently freed,
-  realloc'ed etc. The elements are guaranteed to be adjacently
-  allocated (this is not guaranteed to occur with multiple callocs or
-  mallocs), which may also improve cache locality in some
-  applications.
-
-  The "chunks" argument is optional (i.e., may be null, which is
-  probably the most typical usage). If it is null, the returned array
-  is itself dynamically allocated and should also be freed when it is
-  no longer needed. Otherwise, the chunks array must be of at least
-  n_elements in length. It is filled in with the pointers to the
-  chunks.
-
-  In either case, independent_calloc returns this pointer array, or
-  null if the allocation failed.  If n_elements is zero and "chunks"
-  is null, it returns a chunk representing an array with zero elements
-  (which should be freed if not wanted).
-
-  Each element must be individually freed when it is no longer
-  needed. If you'd like to instead be able to free all at once, you
-  should instead use regular calloc and assign pointers into this
-  space to represent elements.  (In this case though, you cannot
-  independently free elements.)
-
-  independent_calloc simplifies and speeds up implementations of many
-  kinds of pools.  It may also be useful when constructing large data
-  structures that initially have a fixed number of fixed-sized nodes,
-  but the number is not known at compile time, and some of the nodes
-  may later need to be freed. For example:
-
-  struct Node { int item; struct Node* next; };
-
-  struct Node* build_list() {
-    struct Node** pool;
-    int n = read_number_of_nodes_needed();
-    if (n <= 0) return 0;
-    pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0);
-    if (pool == 0) die();
-    // organize into a linked list...
-    struct Node* first = pool[0];
-    for (i = 0; i < n-1; ++i)
-      pool[i]->next = pool[i+1];
-    free(pool);     // Can now free the array (or not, if it is needed later)
-    return first;
-  }
-*/
-void** dlindependent_calloc(size_t, size_t, void**);
-
-/*
-  independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]);
-
-  independent_comalloc allocates, all at once, a set of n_elements
-  chunks with sizes indicated in the "sizes" array.    It returns
-  an array of pointers to these elements, each of which can be
-  independently freed, realloc'ed etc. The elements are guaranteed to
-  be adjacently allocated (this is not guaranteed to occur with
-  multiple callocs or mallocs), which may also improve cache locality
-  in some applications.
-
-  The "chunks" argument is optional (i.e., may be null). If it is null
-  the returned array is itself dynamically allocated and should also
-  be freed when it is no longer needed. Otherwise, the chunks array
-  must be of at least n_elements in length. It is filled in with the
-  pointers to the chunks.
-
-  In either case, independent_comalloc returns this pointer array, or
-  null if the allocation failed.  If n_elements is zero and chunks is
-  null, it returns a chunk representing an array with zero elements
-  (which should be freed if not wanted).
-
-  Each element must be individually freed when it is no longer
-  needed. If you'd like to instead be able to free all at once, you
-  should instead use a single regular malloc, and assign pointers at
-  particular offsets in the aggregate space. (In this case though, you
-  cannot independently free elements.)
-
-  independent_comallac differs from independent_calloc in that each
-  element may have a different size, and also that it does not
-  automatically clear elements.
-
-  independent_comalloc can be used to speed up allocation in cases
-  where several structs or objects must always be allocated at the
-  same time.  For example:
-
-  struct Head { ... }
-  struct Foot { ... }
-
-  void send_message(char* msg) {
-    int msglen = strlen(msg);
-    size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) };
-    void* chunks[3];
-    if (independent_comalloc(3, sizes, chunks) == 0)
-      die();
-    struct Head* head = (struct Head*)(chunks[0]);
-    char*        body = (char*)(chunks[1]);
-    struct Foot* foot = (struct Foot*)(chunks[2]);
-    // ...
-  }
-
-  In general though, independent_comalloc is worth using only for
-  larger values of n_elements. For small values, you probably won't
-  detect enough difference from series of malloc calls to bother.
-
-  Overuse of independent_comalloc can increase overall memory usage,
-  since it cannot reuse existing noncontiguous small chunks that
-  might be available for some of the elements.
-*/
-void** dlindependent_comalloc(size_t, size_t*, void**);
-
-
-/*
-  pvalloc(size_t n);
-  Equivalent to valloc(minimum-page-that-holds(n)), that is,
-  round up n to nearest pagesize.
- */
-void*  dlpvalloc(size_t);
-
-/*
-  malloc_trim(size_t pad);
-
-  If possible, gives memory back to the system (via negative arguments
-  to sbrk) if there is unused memory at the `high' end of the malloc
-  pool or in unused MMAP segments. You can call this after freeing
-  large blocks of memory to potentially reduce the system-level memory
-  requirements of a program. However, it cannot guarantee to reduce
-  memory. Under some allocation patterns, some large free blocks of
-  memory will be locked between two used chunks, so they cannot be
-  given back to the system.
-
-  The `pad' argument to malloc_trim represents the amount of free
-  trailing space to leave untrimmed. If this argument is zero, only
-  the minimum amount of memory to maintain internal data structures
-  will be left. Non-zero arguments can be supplied to maintain enough
-  trailing space to service future expected allocations without having
-  to re-obtain memory from the system.
-
-  Malloc_trim returns 1 if it actually released any memory, else 0.
-*/
-int  dlmalloc_trim(size_t);
-
-/*
-  malloc_usable_size(void* p);
-
-  Returns the number of bytes you can actually use in
-  an allocated chunk, which may be more than you requested (although
-  often not) due to alignment and minimum size constraints.
-  You can use this many bytes without worrying about
-  overwriting other allocated objects. This is not a particularly great
-  programming practice. malloc_usable_size can be more useful in
-  debugging and assertions, for example:
-
-  p = malloc(n);
-  assert(malloc_usable_size(p) >= 256);
-*/
-size_t dlmalloc_usable_size(void*);
-
-/*
-  malloc_stats();
-  Prints on stderr the amount of space obtained from the system (both
-  via sbrk and mmap), the maximum amount (which may be more than
-  current if malloc_trim and/or munmap got called), and the current
-  number of bytes allocated via malloc (or realloc, etc) but not yet
-  freed. Note that this is the number of bytes allocated, not the
-  number requested. It will be larger than the number requested
-  because of alignment and bookkeeping overhead. Because it includes
-  alignment wastage as being in use, this figure may be greater than
-  zero even when no user-level chunks are allocated.
-
-  The reported current and maximum system memory can be inaccurate if
-  a program makes other calls to system memory allocation functions
-  (normally sbrk) outside of malloc.
-
-  malloc_stats prints only the most commonly interesting statistics.
-  More information can be obtained by calling mallinfo.
-*/
-void  dlmalloc_stats(void);
-
-#endif /* !ONLY_MSPACES */
-
-#if MSPACES
-
-/*
-  mspace is an opaque type representing an independent
-  region of space that supports mspace_malloc, etc.
-*/
-typedef void* mspace;
-
-/*
-  create_mspace creates and returns a new independent space with the
-  given initial capacity, or, if 0, the default granularity size.  It
-  returns null if there is no system memory available to create the
-  space.  If argument locked is non-zero, the space uses a separate
-  lock to control access. The capacity of the space will grow
-  dynamically as needed to service mspace_malloc requests.  You can
-  control the sizes of incremental increases of this space by
-  compiling with a different DEFAULT_GRANULARITY or dynamically
-  setting with mallopt(M_GRANULARITY, value).
-*/
-mspace create_mspace(size_t capacity, int locked);
-
-/*
-  destroy_mspace destroys the given space, and attempts to return all
-  of its memory back to the system, returning the total number of
-  bytes freed. After destruction, the results of access to all memory
-  used by the space become undefined.
-*/
-size_t destroy_mspace(mspace msp);
-
-/*
-  create_mspace_with_base uses the memory supplied as the initial base
-  of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this
-  space is used for bookkeeping, so the capacity must be at least this
-  large. (Otherwise 0 is returned.) When this initial space is
-  exhausted, additional memory will be obtained from the system.
-  Destroying this space will deallocate all additionally allocated
-  space (if possible) but not the initial base.
-*/
-mspace create_mspace_with_base(void* base, size_t capacity, int locked);
-
-/*
-  mspace_malloc behaves as malloc, but operates within
-  the given space.
-*/
-void* mspace_malloc(mspace msp, size_t bytes);
-
-/*
-  mspace_free behaves as free, but operates within
-  the given space.
-
-  If compiled with FOOTERS==1, mspace_free is not actually needed.
-  free may be called instead of mspace_free because freed chunks from
-  any space are handled by their originating spaces.
-*/
-void mspace_free(mspace msp, void* mem);
-
-/*
-  mspace_realloc behaves as realloc, but operates within
-  the given space.
-
-  If compiled with FOOTERS==1, mspace_realloc is not actually
-  needed.  realloc may be called instead of mspace_realloc because
-  realloced chunks from any space are handled by their originating
-  spaces.
-*/
-void* mspace_realloc(mspace msp, void* mem, size_t newsize);
-
-/*
-  mspace_calloc behaves as calloc, but operates within
-  the given space.
-*/
-void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size);
-
-/*
-  mspace_memalign behaves as memalign, but operates within
-  the given space.
-*/
-void* mspace_memalign(mspace msp, size_t alignment, size_t bytes);
-
-/*
-  mspace_independent_calloc behaves as independent_calloc, but
-  operates within the given space.
-*/
-void** mspace_independent_calloc(mspace msp, size_t n_elements,
-                                 size_t elem_size, void* chunks[]);
-
-/*
-  mspace_independent_comalloc behaves as independent_comalloc, but
-  operates within the given space.
-*/
-void** mspace_independent_comalloc(mspace msp, size_t n_elements,
-                                   size_t sizes[], void* chunks[]);
-
-/*
-  mspace_footprint() returns the number of bytes obtained from the
-  system for this space.
-*/
-size_t mspace_footprint(mspace msp);
-
-
-#if !NO_MALLINFO
-/*
-  mspace_mallinfo behaves as mallinfo, but reports properties of
-  the given space.
-*/
-struct mallinfo mspace_mallinfo(mspace msp);
-#endif /* NO_MALLINFO */
-
-/*
-  mspace_malloc_stats behaves as malloc_stats, but reports
-  properties of the given space.
-*/
-void mspace_malloc_stats(mspace msp);
-
-/*
-  mspace_trim behaves as malloc_trim, but
-  operates within the given space.
-*/
-int mspace_trim(mspace msp, size_t pad);
-
-/*
-  An alias for mallopt.
-*/
-int mspace_mallopt(int, int);
-
-#endif  /* MSPACES */
-
-#ifdef __cplusplus
-};  /* end of extern "C" */
-#endif
-
-#endif /* MALLOC_280_H */
-
-
- /** @}
- */
- 
- 
Index: pace/libc/include/psthread.h
===================================================================
--- uspace/libc/include/psthread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,98 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_PSTHREAD_H_
-#define LIBC_PSTHREAD_H_
-
-#include <libarch/psthread.h>
-#include <libadt/list.h>
-#include <libarch/thread.h>
-
-#ifndef context_set
-#define context_set(c, _pc, stack, size, ptls) 			\
-	(c)->pc = (sysarg_t) (_pc);				\
-	(c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; 	\
-        (c)->tls = (sysarg_t) (ptls);
-#endif /* context_set */
-
-#define PSTHREAD_SERIALIZED   1
-
-typedef enum {
-	PS_TO_MANAGER,
-	PS_FROM_MANAGER,
-	PS_PREEMPT,
-	PS_FROM_DEAD
-} pschange_type;
-
-typedef sysarg_t pstid_t;
-
-struct psthread_data {
-	link_t link;
-	context_t ctx;
-	void *stack;
-	void *arg;
-	int (*func)(void *);
-	tcb_t *tcb;
-
-	struct psthread_data *waiter;
-	int finished;
-	int retval;
-	int flags;
-};
-typedef struct psthread_data psthread_data_t;
-
-extern int context_save(context_t *c);
-extern void context_restore(context_t *c) __attribute__ ((noreturn));
-
-pstid_t psthread_create(int (*func)(void *), void *arg);
-int psthread_join(pstid_t psthrid);
-psthread_data_t * psthread_setup(void);
-void psthread_teardown(psthread_data_t *pt);
-int psthread_schedule_next_adv(pschange_type ctype);
-void psthread_add_ready(pstid_t ptid);
-void psthread_add_manager(pstid_t psthrid);
-void psthread_remove_manager(void);
-pstid_t psthread_get_id(void);
-void psthread_inc_sercount(void);
-void psthread_dec_sercount(void);
-
-static inline int psthread_schedule_next() {
-	return psthread_schedule_next_adv(PS_PREEMPT);
-}
-
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/stdarg.h
===================================================================
--- uspace/libc/include/stdarg.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STDARG_H_
-#define LIBC_STDARG_H_
-
-#include <types.h>
-#include <libarch/stackarg.h>
-
-#ifndef __VARARGS_DEFINED
-# define __VARARGS_DEFINED
-
-typedef __builtin_va_list va_list;
-
-# define va_start(ap, last) 		__builtin_va_start(ap, last)
-# define va_arg(ap, type) 		__builtin_va_arg(ap, type)
-# define va_end(ap)			__builtin_va_end(ap)
-
-# endif
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/stddef.h
===================================================================
--- uspace/libc/include/stddef.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STDDEF_H_
-#define LIBC_STDDEF_H_
-
-#include <types.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/stdint.h
===================================================================
--- uspace/libc/include/stdint.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STDINT_H_
-#define LIBC_STDINT_H_
-
-/* Definitions of types with fixed size*/
-#include <types.h>
-
-#define MAX_INT8 (0x7F)
-#define MIN_INT8 (0x80)
-#define MAX_UINT8 (0xFFu)
-#define MIN_UINT8 (0u)
-
-#define MAX_INT16 (0x7FFF)
-#define MIN_INT16 (0x8000)
-#define MAX_UINT16 (0xFFFFu)
-#define MIN_UINT16 (0u)
-
-#define MAX_INT32 (0x7FFFFFFF)
-#define MIN_INT32 (0x80000000)
-#define MAX_UINT32 (0xFFFFFFFFu)
-#define MIN_UINT32 (0u)
-
-#define MAX_INT64 (0x7FFFFFFFFFFFFFFFll)
-#define MIN_INT64 (0x8000000000000000ll)
-#define MAX_UINT64 (0xFFFFFFFFFFFFFFFFull)
-#define MIN_UINT64 (0ull)
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/stdio.h
===================================================================
--- uspace/libc/include/stdio.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,73 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STDIO_H_
-#define LIBC_STDIO_H_
-
-#include <types.h>
-#include <stdarg.h>
-
-#define EOF (-1)
-
-#include <string.h>
-#include <io/stream.h>
-
-#define DEBUG(fmt, ...) \
-{ \
-	char buf[256]; \
-	int n; \
-	n = snprintf(buf, sizeof(buf), fmt, ##__VA_ARGS__); \
-	if (n > 0) \
-		(void) __SYSCALL3(SYS_IO, 1, (sysarg_t) buf, strlen(buf)); \
-}
-
-extern int getchar(void);
-
-extern int puts(const char * str);
-extern int putchar(int c);
-
-extern int printf(const char *fmt, ...);
-extern int sprintf(char *str, const char *fmt, ...);
-extern int snprintf(char *str, size_t size, const char *fmt, ...);
-
-extern int vprintf(const char *fmt, va_list ap);
-extern int vsprintf(char *str, const char *fmt, va_list ap);
-extern int vsnprintf(char *str, size_t size, const char *fmt, va_list ap);
-
-#define fprintf(f, fmt, ...) printf(fmt, ##__VA_ARGS__)
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/stdlib.h
===================================================================
--- uspace/libc/include/stdlib.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,61 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STDLIB_H_
-#define LIBC_STDLIB_H_
-
-#include <unistd.h>
-#include <malloc.h>
-
-#define abort() _exit(1)
-#define exit(status)	_exit((status))
-
-#define RAND_MAX 714025
-
-extern long int random(void);
-extern void srandom(unsigned int seed);
-
-static inline int rand(void)
-{
-	return random();
-}
-static inline void srand(unsigned int seed)
-{
-	srandom(seed);
-}
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/string.h
===================================================================
--- uspace/libc/include/string.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,64 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_STRING_H_
-#define LIBC_STRING_H_
-
-#include <types.h>
-
-#define bzero(ptr, len)	memset((ptr), 0, (len))
-
-void * memset(void *s, int c, size_t n);
-void * memcpy(void *dest, const void *src, size_t n);
-void * memmove(void *dest, const void *src, size_t n);
-
-int bcmp(const char *s1, const char *s2, size_t n);
-
-int strcmp(const char *, const char *);
-
-char *strcpy(char *dest, const char *src);
-char *strncpy(char *dest, const char *src, size_t n);
-
-size_t strlen(const char *str);
-
-char *strchr(const char *str, int c);
-char *strrchr(const char *str, int c);
-
-long int strtol(const char *nptr, char **endptr, int base);
-unsigned long strtoul(const char *nptr, char **endptr, int base);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/sys/mman.h
===================================================================
--- uspace/libc/include/sys/mman.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_MMAN_H_
-#define LIBC_MMAN_H_
-
-#include <as.h>
-
-#define MAP_FAILED  ((void *) -1)
-
-#define MAP_SHARED       (1 << 0)
-#define MAP_PRIVATE      (1 << 1)
-#define MAP_FIXED        (1 << 2)
-#define MAP_ANONYMOUS    (1 << 3)
-
-#define PROTO_READ   AS_AREA_READ
-#define PROTO_WRITE  AS_AREA_WRITE
-#define PROTO_EXEC   AS_AREA_EXEC
-
-extern void  *mmap(void  *start, size_t length, int prot, int flags, int fd,
-		   off_t offset);
-extern int munmap(void *start, size_t length);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/sys/time.h
===================================================================
--- uspace/libc/include/sys/time.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#ifndef LIBC_TIME_H_
-#define LIBC_TIME_H_
-
-#include <types.h>
-
-#define DST_NONE 0
-
-typedef long time_t;
-typedef long suseconds_t;
-
-struct timeval {
-	time_t         tv_sec;        /* seconds */
-	suseconds_t    tv_usec;  /* microseconds */
-};
-
-struct timezone {
-	int  tz_minuteswest; /* minutes W of Greenwich */
-	int  tz_dsttime;     /* type of dst correction */
-};
-
-int gettimeofday(struct timeval *tv, struct timezone *tz);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/sys/types.h
===================================================================
--- uspace/libc/include/sys/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_SYS_TYPES_H_
-#define LIBC_SYS_TYPES_H_
-
-#include <types.h>
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/syscall.h
===================================================================
--- uspace/libc/include/syscall.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/**
- * @file
- * @brief	Syscall function declaration for architectures that don't inline syscalls.
- */
-
-#ifndef LIBC_SYSCALL_H_
-#define LIBC_SYSCALL_H_
-
-#include <types.h>
-#include <kernel/syscall/syscall.h>
-
-extern sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/sysinfo.h
===================================================================
--- uspace/libc/include/sysinfo.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#ifndef LIBC_SYSINFO_H_
-#define LIBC_SYSINFO_H_
-
-#include <libc.h>
-#include <sysinfo.h>
-#include <string.h>
-
-sysarg_t sysinfo_value(char *name);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/task.h
===================================================================
--- uspace/libc/include/task.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_TASK_H_
-#define LIBC_TASK_H_
-
-#include <types.h>
-
-typedef uint64_t task_id_t;
-
-extern task_id_t task_get_id(void);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/thread.h
===================================================================
--- uspace/libc/include/thread.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/*
- * Copyright (c) 2006 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_THREAD_H_
-#define LIBC_THREAD_H_
-
-#include <kernel/proc/uarg.h>
-#include <libarch/thread.h>
-#include <types.h>
-
-typedef uint64_t thread_id_t;
-
-extern void __thread_entry(void);
-extern void __thread_main(uspace_arg_t *uarg);
-
-extern int thread_create(void (* function)(void *), void *arg, char *name, thread_id_t *tid);
-extern void thread_exit(int status);
-extern void thread_detach(thread_id_t thread);
-extern int thread_join(thread_id_t thread);
-extern thread_id_t thread_get_id(void);
-extern tcb_t * __make_tls(void);
-extern tcb_t * __alloc_tls(void **data, size_t size);
-extern void __free_tls(tcb_t *);
-extern void __free_tls_arch(tcb_t *, size_t size);
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/time.h
===================================================================
--- uspace/libc/include/time.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */ 
-
-#ifndef LIBC_TIME_H_
-#define LIBC_TIME_H_
-
-#endif
-
-/** @}
- */
Index: pace/libc/include/types.h
===================================================================
--- uspace/libc/include/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,1 +1,0 @@
-#include <libarch/types.h>
Index: pace/libc/include/unistd.h
===================================================================
--- uspace/libc/include/unistd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,54 +1,0 @@
-/*
- * Copyright (c) 2005 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libc
- * @{
- */
-/** @file
- */
-
-#ifndef LIBC_UNISTD_H_
-#define LIBC_UNISTD_H_
-
-#include <types.h>
-#include <libarch/config.h>
-
-#define NULL 0
-#define getpagesize()     (PAGE_SIZE)
-
-extern ssize_t write(int fd, const void * buf, size_t count);
-extern ssize_t read(int fd, void * buf, size_t count);
-extern void _exit(int status);
-extern void *sbrk(ssize_t incr);
-extern void usleep(unsigned long usec);
-extern unsigned int sleep(unsigned int seconds);
-
-#endif
-
-/** @}
- */
Index: pace/libc/malloc/malloc.c
===================================================================
--- uspace/libc/malloc/malloc.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,4425 +1,0 @@
-/*
-  This is a version (aka dlmalloc) of malloc/free/realloc written by
-  Doug Lea and released to the public domain, as explained at
-  http://creativecommons.org/licenses/publicdomain.  Send questions,
-  comments, complaints, performance data, etc to dl@cs.oswego.edu
-
-* Version 2.8.3 Thu Sep 22 11:16:15 2005  Doug Lea  (dl at gee)
-
-   Note: There may be an updated version of this malloc obtainable at
-           ftp://gee.cs.oswego.edu/pub/misc/malloc.c
-         Check before installing!
-
-* Quickstart
-
-  This library is all in one file to simplify the most common usage:
-  ftp it, compile it (-O3), and link it into another program. All of
-  the compile-time options default to reasonable values for use on
-  most platforms.  You might later want to step through various
-  compile-time and dynamic tuning options.
-
-  For convenience, an include file for code using this malloc is at:
-     ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h
-  You don't really need this .h file unless you call functions not
-  defined in your system include files.  The .h file contains only the
-  excerpts from this file needed for using this malloc on ANSI C/C++
-  systems, so long as you haven't changed compile-time options about
-  naming and tuning parameters.  If you do, then you can create your
-  own malloc.h that does include all settings by cutting at the point
-  indicated below. Note that you may already by default be using a C
-  library containing a malloc that is based on some version of this
-  malloc (for example in linux). You might still want to use the one
-  in this file to customize settings or to avoid overheads associated
-  with library versions.
-
-* Vital statistics:
-
-  Supported pointer/size_t representation:       4 or 8 bytes
-       size_t MUST be an unsigned type of the same width as
-       pointers. (If you are using an ancient system that declares
-       size_t as a signed type, or need it to be a different width
-       than pointers, you can use a previous release of this malloc
-       (e.g. 2.7.2) supporting these.)
-
-  Alignment:                                     8 bytes (default)
-       This suffices for nearly all current machines and C compilers.
-       However, you can define MALLOC_ALIGNMENT to be wider than this
-       if necessary (up to 128bytes), at the expense of using more space.
-
-  Minimum overhead per allocated chunk:   4 or  8 bytes (if 4byte sizes)
-                                          8 or 16 bytes (if 8byte sizes)
-       Each malloced chunk has a hidden word of overhead holding size
-       and status information, and additional cross-check word
-       if FOOTERS is defined.
-
-  Minimum allocated size: 4-byte ptrs:  16 bytes    (including overhead)
-                          8-byte ptrs:  32 bytes    (including overhead)
-
-       Even a request for zero bytes (i.e., malloc(0)) returns a
-       pointer to something of the minimum allocatable size.
-       The maximum overhead wastage (i.e., number of extra bytes
-       allocated than were requested in malloc) is less than or equal
-       to the minimum size, except for requests >= mmap_threshold that
-       are serviced via mmap(), where the worst case wastage is about
-       32 bytes plus the remainder from a system page (the minimal
-       mmap unit); typically 4096 or 8192 bytes.
-
-  Security: static-safe; optionally more or less
-       The "security" of malloc refers to the ability of malicious
-       code to accentuate the effects of errors (for example, freeing
-       space that is not currently malloc'ed or overwriting past the
-       ends of chunks) in code that calls malloc.  This malloc
-       guarantees not to modify any memory locations below the base of
-       heap, i.e., static variables, even in the presence of usage
-       errors.  The routines additionally detect most improper frees
-       and reallocs.  All this holds as long as the static bookkeeping
-       for malloc itself is not corrupted by some other means.  This
-       is only one aspect of security -- these checks do not, and
-       cannot, detect all possible programming errors.
-
-       If FOOTERS is defined nonzero, then each allocated chunk
-       carries an additional check word to verify that it was malloced
-       from its space.  These check words are the same within each
-       execution of a program using malloc, but differ across
-       executions, so externally crafted fake chunks cannot be
-       freed. This improves security by rejecting frees/reallocs that
-       could corrupt heap memory, in addition to the checks preventing
-       writes to statics that are always on.  This may further improve
-       security at the expense of time and space overhead.  (Note that
-       FOOTERS may also be worth using with MSPACES.)
-
-       By default detected errors cause the program to abort (calling
-       "abort()"). You can override this to instead proceed past
-       errors by defining PROCEED_ON_ERROR.  In this case, a bad free
-       has no effect, and a malloc that encounters a bad address
-       caused by user overwrites will ignore the bad address by
-       dropping pointers and indices to all known memory. This may
-       be appropriate for programs that should continue if at all
-       possible in the face of programming errors, although they may
-       run out of memory because dropped memory is never reclaimed.
-
-       If you don't like either of these options, you can define
-       CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything
-       else. And if if you are sure that your program using malloc has
-       no errors or vulnerabilities, you can define INSECURE to 1,
-       which might (or might not) provide a small performance improvement.
-
-  Thread-safety: NOT thread-safe unless USE_LOCKS defined
-       When USE_LOCKS is defined, each public call to malloc, free,
-       etc is surrounded with either a pthread mutex or a win32
-       spinlock (depending on WIN32). This is not especially fast, and
-       can be a major bottleneck.  It is designed only to provide
-       minimal protection in concurrent environments, and to provide a
-       basis for extensions.  If you are using malloc in a concurrent
-       program, consider instead using ptmalloc, which is derived from
-       a version of this malloc. (See http://www.malloc.de).
-
-  System requirements: Any combination of MORECORE and/or MMAP/MUNMAP
-       This malloc can use unix sbrk or any emulation (invoked using
-       the CALL_MORECORE macro) and/or mmap/munmap or any emulation
-       (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system
-       memory.  On most unix systems, it tends to work best if both
-       MORECORE and MMAP are enabled.  On Win32, it uses emulations
-       based on VirtualAlloc. It also uses common C library functions
-       like memset.
-
-  Compliance: I believe it is compliant with the Single Unix Specification
-       (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably
-       others as well.
-
-* Overview of algorithms
-
-  This is not the fastest, most space-conserving, most portable, or
-  most tunable malloc ever written. However it is among the fastest
-  while also being among the most space-conserving, portable and
-  tunable.  Consistent balance across these factors results in a good
-  general-purpose allocator for malloc-intensive programs.
-
-  In most ways, this malloc is a best-fit allocator. Generally, it
-  chooses the best-fitting existing chunk for a request, with ties
-  broken in approximately least-recently-used order. (This strategy
-  normally maintains low fragmentation.) However, for requests less
-  than 256bytes, it deviates from best-fit when there is not an
-  exactly fitting available chunk by preferring to use space adjacent
-  to that used for the previous small request, as well as by breaking
-  ties in approximately most-recently-used order. (These enhance
-  locality of series of small allocations.)  And for very large requests
-  (>= 256Kb by default), it relies on system memory mapping
-  facilities, if supported.  (This helps avoid carrying around and
-  possibly fragmenting memory used only for large chunks.)
-
-  All operations (except malloc_stats and mallinfo) have execution
-  times that are bounded by a constant factor of the number of bits in
-  a size_t, not counting any clearing in calloc or copying in realloc,
-  or actions surrounding MORECORE and MMAP that have times
-  proportional to the number of non-contiguous regions returned by
-  system allocation routines, which is often just 1.
-
-  The implementation is not very modular and seriously overuses
-  macros. Perhaps someday all C compilers will do as good a job
-  inlining modular code as can now be done by brute-force expansion,
-  but now, enough of them seem not to.
-
-  Some compilers issue a lot of warnings about code that is
-  dead/unreachable only on some platforms, and also about intentional
-  uses of negation on unsigned types. All known cases of each can be
-  ignored.
-
-  For a longer but out of date high-level description, see
-     http://gee.cs.oswego.edu/dl/html/malloc.html
-
-* MSPACES
-  If MSPACES is defined, then in addition to malloc, free, etc.,
-  this file also defines mspace_malloc, mspace_free, etc. These
-  are versions of malloc routines that take an "mspace" argument
-  obtained using create_mspace, to control all internal bookkeeping.
-  If ONLY_MSPACES is defined, only these versions are compiled.
-  So if you would like to use this allocator for only some allocations,
-  and your system malloc for others, you can compile with
-  ONLY_MSPACES and then do something like...
-    static mspace mymspace = create_mspace(0,0); // for example
-    #define mymalloc(bytes)  mspace_malloc(mymspace, bytes)
-
-  (Note: If you only need one instance of an mspace, you can instead
-  use "USE_DL_PREFIX" to relabel the global malloc.)
-
-  You can similarly create thread-local allocators by storing
-  mspaces as thread-locals. For example:
-    static __thread mspace tlms = 0;
-    void*  tlmalloc(size_t bytes) {
-      if (tlms == 0) tlms = create_mspace(0, 0);
-      return mspace_malloc(tlms, bytes);
-    }
-    void  tlfree(void* mem) { mspace_free(tlms, mem); }
-
-  Unless FOOTERS is defined, each mspace is completely independent.
-  You cannot allocate from one and free to another (although
-  conformance is only weakly checked, so usage errors are not always
-  caught). If FOOTERS is defined, then each chunk carries around a tag
-  indicating its originating mspace, and frees are directed to their
-  originating spaces.
-
- -------------------------  Compile-time options ---------------------------
-
-Be careful in setting #define values for numerical constants of type
-size_t. On some systems, literal values are not automatically extended
-to size_t precision unless they are explicitly casted.
-
-WIN32                    default: defined if _WIN32 defined
-  Defining WIN32 sets up defaults for MS environment and compilers.
-  Otherwise defaults are for unix.
-
-MALLOC_ALIGNMENT         default: (size_t)8
-  Controls the minimum alignment for malloc'ed chunks.  It must be a
-  power of two and at least 8, even on machines for which smaller
-  alignments would suffice. It may be defined as larger than this
-  though. Note however that code and data structures are optimized for
-  the case of 8-byte alignment.
-
-MSPACES                  default: 0 (false)
-  If true, compile in support for independent allocation spaces.
-  This is only supported if HAVE_MMAP is true.
-
-ONLY_MSPACES             default: 0 (false)
-  If true, only compile in mspace versions, not regular versions.
-
-USE_LOCKS                default: 0 (false)
-  Causes each call to each public routine to be surrounded with
-  pthread or WIN32 mutex lock/unlock. (If set true, this can be
-  overridden on a per-mspace basis for mspace versions.)
-
-FOOTERS                  default: 0
-  If true, provide extra checking and dispatching by placing
-  information in the footers of allocated chunks. This adds
-  space and time overhead.
-
-INSECURE                 default: 0
-  If true, omit checks for usage errors and heap space overwrites.
-
-USE_DL_PREFIX            default: NOT defined
-  Causes compiler to prefix all public routines with the string 'dl'.
-  This can be useful when you only want to use this malloc in one part
-  of a program, using your regular system malloc elsewhere.
-
-ABORT                    default: defined as abort()
-  Defines how to abort on failed checks.  On most systems, a failed
-  check cannot die with an "assert" or even print an informative
-  message, because the underlying print routines in turn call malloc,
-  which will fail again.  Generally, the best policy is to simply call
-  abort(). It's not very useful to do more than this because many
-  errors due to overwriting will show up as address faults (null, odd
-  addresses etc) rather than malloc-triggered checks, so will also
-  abort.  Also, most compilers know that abort() does not return, so
-  can better optimize code conditionally calling it.
-
-PROCEED_ON_ERROR           default: defined as 0 (false)
-  Controls whether detected bad addresses cause them to bypassed
-  rather than aborting. If set, detected bad arguments to free and
-  realloc are ignored. And all bookkeeping information is zeroed out
-  upon a detected overwrite of freed heap space, thus losing the
-  ability to ever return it from malloc again, but enabling the
-  application to proceed. If PROCEED_ON_ERROR is defined, the
-  static variable malloc_corruption_error_count is compiled in
-  and can be examined to see if errors have occurred. This option
-  generates slower code than the default abort policy.
-
-DEBUG                    default: NOT defined
-  The DEBUG setting is mainly intended for people trying to modify
-  this code or diagnose problems when porting to new platforms.
-  However, it may also be able to better isolate user errors than just
-  using runtime checks.  The assertions in the check routines spell
-  out in more detail the assumptions and invariants underlying the
-  algorithms.  The checking is fairly extensive, and will slow down
-  execution noticeably. Calling malloc_stats or mallinfo with DEBUG
-  set will attempt to check every non-mmapped allocated and free chunk
-  in the course of computing the summaries.
-
-ABORT_ON_ASSERT_FAILURE   default: defined as 1 (true)
-  Debugging assertion failures can be nearly impossible if your
-  version of the assert macro causes malloc to be called, which will
-  lead to a cascade of further failures, blowing the runtime stack.
-  ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(),
-  which will usually make debugging easier.
-
-MALLOC_FAILURE_ACTION     default: sets errno to ENOMEM, or no-op on win32
-  The action to take before "return 0" when malloc fails to be able to
-  return memory because there is none available.
-
-HAVE_MORECORE             default: 1 (true) unless win32 or ONLY_MSPACES
-  True if this system supports sbrk or an emulation of it.
-
-MORECORE                  default: sbrk
-  The name of the sbrk-style system routine to call to obtain more
-  memory.  See below for guidance on writing custom MORECORE
-  functions. The type of the argument to sbrk/MORECORE varies across
-  systems.  It cannot be size_t, because it supports negative
-  arguments, so it is normally the signed type of the same width as
-  size_t (sometimes declared as "intptr_t").  It doesn't much matter
-  though. Internally, we only call it with arguments less than half
-  the max value of a size_t, which should work across all reasonable
-  possibilities, although sometimes generating compiler warnings.  See
-  near the end of this file for guidelines for creating a custom
-  version of MORECORE.
-
-MORECORE_CONTIGUOUS       default: 1 (true)
-  If true, take advantage of fact that consecutive calls to MORECORE
-  with positive arguments always return contiguous increasing
-  addresses.  This is true of unix sbrk. It does not hurt too much to
-  set it true anyway, since malloc copes with non-contiguities.
-  Setting it false when definitely non-contiguous saves time
-  and possibly wasted space it would take to discover this though.
-
-MORECORE_CANNOT_TRIM      default: NOT defined
-  True if MORECORE cannot release space back to the system when given
-  negative arguments. This is generally necessary only if you are
-  using a hand-crafted MORECORE function that cannot handle negative
-  arguments.
-
-HAVE_MMAP                 default: 1 (true)
-  True if this system supports mmap or an emulation of it.  If so, and
-  HAVE_MORECORE is not true, MMAP is used for all system
-  allocation. If set and HAVE_MORECORE is true as well, MMAP is
-  primarily used to directly allocate very large blocks. It is also
-  used as a backup strategy in cases where MORECORE fails to provide
-  space from system. Note: A single call to MUNMAP is assumed to be
-  able to unmap memory that may have be allocated using multiple calls
-  to MMAP, so long as they are adjacent.
-
-HAVE_MREMAP               default: 1 on linux, else 0
-  If true realloc() uses mremap() to re-allocate large blocks and
-  extend or shrink allocation spaces.
-
-MMAP_CLEARS               default: 1 on unix
-  True if mmap clears memory so calloc doesn't need to. This is true
-  for standard unix mmap using /dev/zero.
-
-USE_BUILTIN_FFS            default: 0 (i.e., not used)
-  Causes malloc to use the builtin ffs() function to compute indices.
-  Some compilers may recognize and intrinsify ffs to be faster than the
-  supplied C version. Also, the case of x86 using gcc is special-cased
-  to an asm instruction, so is already as fast as it can be, and so
-  this setting has no effect. (On most x86s, the asm version is only
-  slightly faster than the C version.)
-
-malloc_getpagesize         default: derive from system includes, or 4096.
-  The system page size. To the extent possible, this malloc manages
-  memory from the system in page-size units.  This may be (and
-  usually is) a function rather than a constant. This is ignored
-  if WIN32, where page size is determined using getSystemInfo during
-  initialization.
-
-USE_DEV_RANDOM             default: 0 (i.e., not used)
-  Causes malloc to use /dev/random to initialize secure magic seed for
-  stamping footers. Otherwise, the current time is used.
-
-NO_MALLINFO                default: 0
-  If defined, don't compile "mallinfo". This can be a simple way
-  of dealing with mismatches between system declarations and
-  those in this file.
-
-MALLINFO_FIELD_TYPE        default: size_t
-  The type of the fields in the mallinfo struct. This was originally
-  defined as "int" in SVID etc, but is more usefully defined as
-  size_t. The value is used only if  HAVE_USR_INCLUDE_MALLOC_H is not set
-
-REALLOC_ZERO_BYTES_FREES    default: not defined
-  This should be set if a call to realloc with zero bytes should 
-  be the same as a call to free. Some people think it should. Otherwise, 
-  since this malloc returns a unique pointer for malloc(0), so does 
-  realloc(p, 0).
-
-LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H
-LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H,  LACKS_ERRNO_H
-LACKS_STDLIB_H                default: NOT defined unless on WIN32
-  Define these if your system does not have these header files.
-  You might need to manually insert some of the declarations they provide.
-
-DEFAULT_GRANULARITY        default: page size if MORECORE_CONTIGUOUS,
-                                system_info.dwAllocationGranularity in WIN32,
-                                otherwise 64K.
-      Also settable using mallopt(M_GRANULARITY, x)
-  The unit for allocating and deallocating memory from the system.  On
-  most systems with contiguous MORECORE, there is no reason to
-  make this more than a page. However, systems with MMAP tend to
-  either require or encourage larger granularities.  You can increase
-  this value to prevent system allocation functions to be called so
-  often, especially if they are slow.  The value must be at least one
-  page and must be a power of two.  Setting to 0 causes initialization
-  to either page size or win32 region size.  (Note: In previous
-  versions of malloc, the equivalent of this option was called
-  "TOP_PAD")
-
-DEFAULT_TRIM_THRESHOLD    default: 2MB
-      Also settable using mallopt(M_TRIM_THRESHOLD, x)
-  The maximum amount of unused top-most memory to keep before
-  releasing via malloc_trim in free().  Automatic trimming is mainly
-  useful in long-lived programs using contiguous MORECORE.  Because
-  trimming via sbrk can be slow on some systems, and can sometimes be
-  wasteful (in cases where programs immediately afterward allocate
-  more large chunks) the value should be high enough so that your
-  overall system performance would improve by releasing this much
-  memory.  As a rough guide, you might set to a value close to the
-  average size of a process (program) running on your system.
-  Releasing this much memory would allow such a process to run in
-  memory.  Generally, it is worth tuning trim thresholds when a
-  program undergoes phases where several large chunks are allocated
-  and released in ways that can reuse each other's storage, perhaps
-  mixed with phases where there are no such chunks at all. The trim
-  value must be greater than page size to have any useful effect.  To
-  disable trimming completely, you can set to MAX_SIZE_T. Note that the trick
-  some people use of mallocing a huge space and then freeing it at
-  program startup, in an attempt to reserve system memory, doesn't
-  have the intended effect under automatic trimming, since that memory
-  will immediately be returned to the system.
-
-DEFAULT_MMAP_THRESHOLD       default: 256K
-      Also settable using mallopt(M_MMAP_THRESHOLD, x)
-  The request size threshold for using MMAP to directly service a
-  request. Requests of at least this size that cannot be allocated
-  using already-existing space will be serviced via mmap.  (If enough
-  normal freed space already exists it is used instead.)  Using mmap
-  segregates relatively large chunks of memory so that they can be
-  individually obtained and released from the host system. A request
-  serviced through mmap is never reused by any other request (at least
-  not directly; the system may just so happen to remap successive
-  requests to the same locations).  Segregating space in this way has
-  the benefits that: Mmapped space can always be individually released
-  back to the system, which helps keep the system level memory demands
-  of a long-lived program low.  Also, mapped memory doesn't become
-  `locked' between other chunks, as can happen with normally allocated
-  chunks, which means that even trimming via malloc_trim would not
-  release them.  However, it has the disadvantage that the space
-  cannot be reclaimed, consolidated, and then used to service later
-  requests, as happens with normal chunks.  The advantages of mmap
-  nearly always outweigh disadvantages for "large" chunks, but the
-  value of "large" may vary across systems.  The default is an
-  empirically derived value that works well in most systems. You can
-  disable mmap by setting to MAX_SIZE_T.
-
-*/
-
-/** @addtogroup libcmalloc malloc
-  * @brief Malloc originally written by Doug Lea and ported to HelenOS.
-  * @ingroup libc
- * @{
- */
-/** @file
- */
-
-
-#include <sys/types.h>  /* For size_t */
-
-/** Non-default helenos customizations */
-#define LACKS_FCNTL_H
-#define LACKS_SYS_MMAN_H
-#define LACKS_SYS_PARAM_H
-#undef HAVE_MMAP
-#define HAVE_MMAP 0
-#define LACKS_ERRNO_H
-/* Set errno? */
-#undef MALLOC_FAILURE_ACTION
-#define MALLOC_FAILURE_ACTION
-
-/* The maximum possible size_t value has all bits set */
-#define MAX_SIZE_T           (~(size_t)0)
-
-#define ONLY_MSPACES 0
-#define MSPACES 0
-
-#ifdef MALLOC_ALIGNMENT_16
-#define MALLOC_ALIGNMENT ((size_t)16U)
-#else
-#define MALLOC_ALIGNMENT ((size_t)8U)
-#endif
-
-#define FOOTERS 0
-#define ABORT  abort()
-#define ABORT_ON_ASSERT_FAILURE 1
-#define PROCEED_ON_ERROR 0
-#define USE_LOCKS 1
-#define INSECURE 0
-#define HAVE_MMAP 0
-
-#define MMAP_CLEARS 1
-
-#define HAVE_MORECORE 1
-#define MORECORE_CONTIGUOUS 1
-#define MORECORE sbrk
-#define DEFAULT_GRANULARITY (0)  /* 0 means to compute in init_mparams */
-
-#ifndef DEFAULT_TRIM_THRESHOLD
-#ifndef MORECORE_CANNOT_TRIM
-#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U)
-#else   /* MORECORE_CANNOT_TRIM */
-#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T
-#endif  /* MORECORE_CANNOT_TRIM */
-#endif  /* DEFAULT_TRIM_THRESHOLD */
-#ifndef DEFAULT_MMAP_THRESHOLD
-#if HAVE_MMAP
-#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U)
-#else   /* HAVE_MMAP */
-#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T
-#endif  /* HAVE_MMAP */
-#endif  /* DEFAULT_MMAP_THRESHOLD */
-#ifndef USE_BUILTIN_FFS
-#define USE_BUILTIN_FFS 0
-#endif  /* USE_BUILTIN_FFS */
-#ifndef USE_DEV_RANDOM
-#define USE_DEV_RANDOM 0
-#endif  /* USE_DEV_RANDOM */
-#ifndef NO_MALLINFO
-#define NO_MALLINFO 0
-#endif  /* NO_MALLINFO */
-#ifndef MALLINFO_FIELD_TYPE
-#define MALLINFO_FIELD_TYPE size_t
-#endif  /* MALLINFO_FIELD_TYPE */
-
-/*
-  mallopt tuning options.  SVID/XPG defines four standard parameter
-  numbers for mallopt, normally defined in malloc.h.  None of these
-  are used in this malloc, so setting them has no effect. But this
-  malloc does support the following options.
-*/
-
-#define M_TRIM_THRESHOLD     (-1)
-#define M_GRANULARITY        (-2)
-#define M_MMAP_THRESHOLD     (-3)
-
-/*
-  ========================================================================
-  To make a fully customizable malloc.h header file, cut everything
-  above this line, put into file malloc.h, edit to suit, and #include it
-  on the next line, as well as in programs that use this malloc.
-  ========================================================================
-*/
-
-#include "malloc.h"
-
-/*------------------------------ internal #includes ---------------------- */
-
-#include <stdio.h>       /* for printing in malloc_stats */
-#include <string.h>
-
-#ifndef LACKS_ERRNO_H
-#include <errno.h>       /* for MALLOC_FAILURE_ACTION */
-#endif /* LACKS_ERRNO_H */
-#if FOOTERS
-#include <time.h>        /* for magic initialization */
-#endif /* FOOTERS */
-#ifndef LACKS_STDLIB_H
-#include <stdlib.h>      /* for abort() */
-#endif /* LACKS_STDLIB_H */
-#ifdef DEBUG
-#if ABORT_ON_ASSERT_FAILURE
-#define assert(x) {if(!(x)) {printf(#x);ABORT;}}
-#else /* ABORT_ON_ASSERT_FAILURE */
-#include <assert.h>
-#endif /* ABORT_ON_ASSERT_FAILURE */
-#else  /* DEBUG */
-#define assert(x)
-#endif /* DEBUG */
-#if USE_BUILTIN_FFS
-#ifndef LACKS_STRINGS_H
-#include <strings.h>     /* for ffs */
-#endif /* LACKS_STRINGS_H */
-#endif /* USE_BUILTIN_FFS */
-#if HAVE_MMAP
-#ifndef LACKS_SYS_MMAN_H
-#include <sys/mman.h>    /* for mmap */
-#endif /* LACKS_SYS_MMAN_H */
-#ifndef LACKS_FCNTL_H
-#include <fcntl.h>
-#endif /* LACKS_FCNTL_H */
-#endif /* HAVE_MMAP */
-#if HAVE_MORECORE
-#ifndef LACKS_UNISTD_H
-#include <unistd.h>     /* for sbrk */
-#else /* LACKS_UNISTD_H */
-#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__)
-extern void*     sbrk(ptrdiff_t);
-#endif /* FreeBSD etc */
-#endif /* LACKS_UNISTD_H */
-#endif /* HAVE_MMAP */
-
-#ifndef WIN32
-#ifndef malloc_getpagesize
-#  ifdef _SC_PAGESIZE         /* some SVR4 systems omit an underscore */
-#    ifndef _SC_PAGE_SIZE
-#      define _SC_PAGE_SIZE _SC_PAGESIZE
-#    endif
-#  endif
-#  ifdef _SC_PAGE_SIZE
-#    define malloc_getpagesize sysconf(_SC_PAGE_SIZE)
-#  else
-#    if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE)
-       extern size_t getpagesize();
-#      define malloc_getpagesize getpagesize()
-#    else
-#      ifdef WIN32 /* use supplied emulation of getpagesize */
-#        define malloc_getpagesize getpagesize()
-#      else
-#        ifndef LACKS_SYS_PARAM_H
-#          include <sys/param.h>
-#        endif
-#        ifdef EXEC_PAGESIZE
-#          define malloc_getpagesize EXEC_PAGESIZE
-#        else
-#          ifdef NBPG
-#            ifndef CLSIZE
-#              define malloc_getpagesize NBPG
-#            else
-#              define malloc_getpagesize (NBPG * CLSIZE)
-#            endif
-#          else
-#            ifdef NBPC
-#              define malloc_getpagesize NBPC
-#            else
-#              ifdef PAGESIZE
-#                define malloc_getpagesize PAGESIZE
-#              else /* just guess */
-#                define malloc_getpagesize ((size_t)4096U)
-#              endif
-#            endif
-#          endif
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-#endif
-
-/* ------------------- size_t and alignment properties -------------------- */
-
-/* The byte and bit size of a size_t */
-#define SIZE_T_SIZE         (sizeof(size_t))
-#define SIZE_T_BITSIZE      (sizeof(size_t) << 3)
-
-/* Some constants coerced to size_t */
-/* Annoying but necessary to avoid errors on some plaftorms */
-#define SIZE_T_ZERO         ((size_t)0)
-#define SIZE_T_ONE          ((size_t)1)
-#define SIZE_T_TWO          ((size_t)2)
-#define TWO_SIZE_T_SIZES    (SIZE_T_SIZE<<1)
-#define FOUR_SIZE_T_SIZES   (SIZE_T_SIZE<<2)
-#define SIX_SIZE_T_SIZES    (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)
-#define HALF_MAX_SIZE_T     (MAX_SIZE_T / 2U)
-
-/* The bit mask value corresponding to MALLOC_ALIGNMENT */
-#define CHUNK_ALIGN_MASK    (MALLOC_ALIGNMENT - SIZE_T_ONE)
-
-/* True if address a has acceptable alignment */
-#define is_aligned(A)       (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0)
-
-/* the number of bytes to offset an address to align it */
-#define align_offset(A)\
- ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
-  ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK))
-
-/* -------------------------- MMAP preliminaries ------------------------- */
-
-/*
-   If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and
-   checks to fail so compiler optimizer can delete code rather than
-   using so many "#if"s.
-*/
-
-
-/* MORECORE and MMAP must return MFAIL on failure */
-#define MFAIL                ((void*)(MAX_SIZE_T))
-#define CMFAIL               ((char*)(MFAIL)) /* defined for convenience */
-
-#if !HAVE_MMAP
-#define IS_MMAPPED_BIT       (SIZE_T_ZERO)
-#define USE_MMAP_BIT         (SIZE_T_ZERO)
-#define CALL_MMAP(s)         MFAIL
-#define CALL_MUNMAP(a, s)    (-1)
-#define DIRECT_MMAP(s)       MFAIL
-
-#else /* HAVE_MMAP */
-#define IS_MMAPPED_BIT       (SIZE_T_ONE)
-#define USE_MMAP_BIT         (SIZE_T_ONE)
-
-#ifndef WIN32
-#define CALL_MUNMAP(a, s)    munmap((a), (s))
-#define MMAP_PROT            (PROT_READ|PROT_WRITE)
-#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
-#define MAP_ANONYMOUS        MAP_ANON
-#endif /* MAP_ANON */
-#ifdef MAP_ANONYMOUS
-#define MMAP_FLAGS           (MAP_PRIVATE|MAP_ANONYMOUS)
-#define CALL_MMAP(s)         mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0)
-#else /* MAP_ANONYMOUS */
-/*
-   Nearly all versions of mmap support MAP_ANONYMOUS, so the following
-   is unlikely to be needed, but is supplied just in case.
-*/
-#define MMAP_FLAGS           (MAP_PRIVATE)
-static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */
-#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \
-           (dev_zero_fd = open("/dev/zero", O_RDWR), \
-            mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \
-            mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0))
-#endif /* MAP_ANONYMOUS */
-
-#define DIRECT_MMAP(s)       CALL_MMAP(s)
-#else /* WIN32 */
-
-/* Win32 MMAP via VirtualAlloc */
-static void* win32mmap(size_t size) {
-  void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
-  return (ptr != 0)? ptr: MFAIL;
-}
-
-/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */
-static void* win32direct_mmap(size_t size) {
-  void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
-                           PAGE_READWRITE);
-  return (ptr != 0)? ptr: MFAIL;
-}
-
-/* This function supports releasing coalesed segments */
-static int win32munmap(void* ptr, size_t size) {
-  MEMORY_BASIC_INFORMATION minfo;
-  char* cptr = ptr;
-  while (size) {
-    if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0)
-      return -1;
-    if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr ||
-        minfo.State != MEM_COMMIT || minfo.RegionSize > size)
-      return -1;
-    if (VirtualFree(cptr, 0, MEM_RELEASE) == 0)
-      return -1;
-    cptr += minfo.RegionSize;
-    size -= minfo.RegionSize;
-  }
-  return 0;
-}
-
-#define CALL_MMAP(s)         win32mmap(s)
-#define CALL_MUNMAP(a, s)    win32munmap((a), (s))
-#define DIRECT_MMAP(s)       win32direct_mmap(s)
-#endif /* WIN32 */
-#endif /* HAVE_MMAP */
-
-#if HAVE_MMAP && HAVE_MREMAP
-#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv))
-#else  /* HAVE_MMAP && HAVE_MREMAP */
-#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL
-#endif /* HAVE_MMAP && HAVE_MREMAP */
-
-#if HAVE_MORECORE
-#define CALL_MORECORE(S)     MORECORE(S)
-#else  /* HAVE_MORECORE */
-#define CALL_MORECORE(S)     MFAIL
-#endif /* HAVE_MORECORE */
-
-/* mstate bit set if continguous morecore disabled or failed */
-#define USE_NONCONTIGUOUS_BIT (4U)
-
-/* segment bit set in create_mspace_with_base */
-#define EXTERN_BIT            (8U)
-
-
-/* --------------------------- Lock preliminaries ------------------------ */
-
-#if USE_LOCKS
-
-/*
-  When locks are defined, there are up to two global locks:
-
-  * If HAVE_MORECORE, morecore_mutex protects sequences of calls to
-    MORECORE.  In many cases sys_alloc requires two calls, that should
-    not be interleaved with calls by other threads.  This does not
-    protect against direct calls to MORECORE by other threads not
-    using this lock, so there is still code to cope the best we can on
-    interference.
-
-  * magic_init_mutex ensures that mparams.magic and other
-    unique mparams values are initialized only once.
-*/
-
-/* By default use posix locks */
-#include <futex.h>
-#define MLOCK_T atomic_t
-#define INITIAL_LOCK(l)      futex_initialize(l, 1)
-/* futex_down cannot fail, but can return different
- * retvals for OK
- */
-#define ACQUIRE_LOCK(l)      ({futex_down(l);0;})
-#define RELEASE_LOCK(l)      futex_up(l)
-
-#if HAVE_MORECORE
-static MLOCK_T morecore_mutex = FUTEX_INITIALIZER;
-#endif /* HAVE_MORECORE */
-
-static MLOCK_T magic_init_mutex = FUTEX_INITIALIZER;
-
-
-#define USE_LOCK_BIT               (2U)
-#else  /* USE_LOCKS */
-#define USE_LOCK_BIT               (0U)
-#define INITIAL_LOCK(l)
-#endif /* USE_LOCKS */
-
-#if USE_LOCKS && HAVE_MORECORE
-#define ACQUIRE_MORECORE_LOCK()    ACQUIRE_LOCK(&morecore_mutex);
-#define RELEASE_MORECORE_LOCK()    RELEASE_LOCK(&morecore_mutex);
-#else /* USE_LOCKS && HAVE_MORECORE */
-#define ACQUIRE_MORECORE_LOCK()
-#define RELEASE_MORECORE_LOCK()
-#endif /* USE_LOCKS && HAVE_MORECORE */
-
-#if USE_LOCKS
-#define ACQUIRE_MAGIC_INIT_LOCK()  ACQUIRE_LOCK(&magic_init_mutex);
-#define RELEASE_MAGIC_INIT_LOCK()  RELEASE_LOCK(&magic_init_mutex);
-#else  /* USE_LOCKS */
-#define ACQUIRE_MAGIC_INIT_LOCK()
-#define RELEASE_MAGIC_INIT_LOCK()
-#endif /* USE_LOCKS */
-
-
-/* -----------------------  Chunk representations ------------------------ */
-
-/*
-  (The following includes lightly edited explanations by Colin Plumb.)
-
-  The malloc_chunk declaration below is misleading (but accurate and
-  necessary).  It declares a "view" into memory allowing access to
-  necessary fields at known offsets from a given base.
-
-  Chunks of memory are maintained using a `boundary tag' method as
-  originally described by Knuth.  (See the paper by Paul Wilson
-  ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such
-  techniques.)  Sizes of free chunks are stored both in the front of
-  each chunk and at the end.  This makes consolidating fragmented
-  chunks into bigger chunks fast.  The head fields also hold bits
-  representing whether chunks are free or in use.
-
-  Here are some pictures to make it clearer.  They are "exploded" to
-  show that the state of a chunk can be thought of as extending from
-  the high 31 bits of the head field of its header through the
-  prev_foot and PINUSE_BIT bit of the following chunk header.
-
-  A chunk that's in use looks like:
-
-   chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           | Size of previous chunk (if P = 1)                             |
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
-         | Size of this chunk                                         1| +-+
-   mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         |                                                               |
-         +-                                                             -+
-         |                                                               |
-         +-                                                             -+
-         |                                                               :
-         +-      size - sizeof(size_t) available payload bytes          -+
-         :                                                               |
- chunk-> +-                                                             -+
-         |                                                               |
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1|
-       | Size of next chunk (may or may not be in use)               | +-+
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-    And if it's free, it looks like this:
-
-   chunk-> +-                                                             -+
-           | User payload (must be in use, or we would have merged!)       |
-           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P|
-         | Size of this chunk                                         0| +-+
-   mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         | Next pointer                                                  |
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         | Prev pointer                                                  |
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         |                                                               :
-         +-      size - sizeof(struct chunk) unused bytes               -+
-         :                                                               |
- chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-         | Size of this chunk                                            |
-         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0|
-       | Size of next chunk (must be in use, or we would have merged)| +-+
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-       |                                                               :
-       +- User payload                                                -+
-       :                                                               |
-       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-                                                                     |0|
-                                                                     +-+
-  Note that since we always merge adjacent free chunks, the chunks
-  adjacent to a free chunk must be in use.
-
-  Given a pointer to a chunk (which can be derived trivially from the
-  payload pointer) we can, in O(1) time, find out whether the adjacent
-  chunks are free, and if so, unlink them from the lists that they
-  are on and merge them with the current chunk.
-
-  Chunks always begin on even word boundaries, so the mem portion
-  (which is returned to the user) is also on an even word boundary, and
-  thus at least double-word aligned.
-
-  The P (PINUSE_BIT) bit, stored in the unused low-order bit of the
-  chunk size (which is always a multiple of two words), is an in-use
-  bit for the *previous* chunk.  If that bit is *clear*, then the
-  word before the current chunk size contains the previous chunk
-  size, and can be used to find the front of the previous chunk.
-  The very first chunk allocated always has this bit set, preventing
-  access to non-existent (or non-owned) memory. If pinuse is set for
-  any given chunk, then you CANNOT determine the size of the
-  previous chunk, and might even get a memory addressing fault when
-  trying to do so.
-
-  The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of
-  the chunk size redundantly records whether the current chunk is
-  inuse. This redundancy enables usage checks within free and realloc,
-  and reduces indirection when freeing and consolidating chunks.
-
-  Each freshly allocated chunk must have both cinuse and pinuse set.
-  That is, each allocated chunk borders either a previously allocated
-  and still in-use chunk, or the base of its memory arena. This is
-  ensured by making all allocations from the the `lowest' part of any
-  found chunk.  Further, no free chunk physically borders another one,
-  so each free chunk is known to be preceded and followed by either
-  inuse chunks or the ends of memory.
-
-  Note that the `foot' of the current chunk is actually represented
-  as the prev_foot of the NEXT chunk. This makes it easier to
-  deal with alignments etc but can be very confusing when trying
-  to extend or adapt this code.
-
-  The exceptions to all this are
-
-     1. The special chunk `top' is the top-most available chunk (i.e.,
-        the one bordering the end of available memory). It is treated
-        specially.  Top is never included in any bin, is used only if
-        no other chunk is available, and is released back to the
-        system if it is very large (see M_TRIM_THRESHOLD).  In effect,
-        the top chunk is treated as larger (and thus less well
-        fitting) than any other available chunk.  The top chunk
-        doesn't update its trailing size field since there is no next
-        contiguous chunk that would have to index off it. However,
-        space is still allocated for it (TOP_FOOT_SIZE) to enable
-        separation or merging when space is extended.
-
-     3. Chunks allocated via mmap, which have the lowest-order bit
-        (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set
-        PINUSE_BIT in their head fields.  Because they are allocated
-        one-by-one, each must carry its own prev_foot field, which is
-        also used to hold the offset this chunk has within its mmapped
-        region, which is needed to preserve alignment. Each mmapped
-        chunk is trailed by the first two fields of a fake next-chunk
-        for sake of usage checks.
-
-*/
-
-struct malloc_chunk {
-  size_t               prev_foot;  /* Size of previous chunk (if free).  */
-  size_t               head;       /* Size and inuse bits. */
-  struct malloc_chunk* fd;         /* double links -- used only if free. */
-  struct malloc_chunk* bk;
-};
-
-typedef struct malloc_chunk  mchunk;
-typedef struct malloc_chunk* mchunkptr;
-typedef struct malloc_chunk* sbinptr;  /* The type of bins of chunks */
-typedef unsigned int bindex_t;         /* Described below */
-typedef unsigned int binmap_t;         /* Described below */
-typedef unsigned int flag_t;           /* The type of various bit flag sets */
-
-/* ------------------- Chunks sizes and alignments ----------------------- */
-
-#define MCHUNK_SIZE         (sizeof(mchunk))
-
-#if FOOTERS
-#define CHUNK_OVERHEAD      (TWO_SIZE_T_SIZES)
-#else /* FOOTERS */
-#define CHUNK_OVERHEAD      (SIZE_T_SIZE)
-#endif /* FOOTERS */
-
-/* MMapped chunks need a second word of overhead ... */
-#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES)
-/* ... and additional padding for fake next-chunk at foot */
-#define MMAP_FOOT_PAD       (FOUR_SIZE_T_SIZES)
-
-/* The smallest size we can malloc is an aligned minimal chunk */
-#define MIN_CHUNK_SIZE\
-  ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
-
-/* conversion from malloc headers to user pointers, and back */
-#define chunk2mem(p)        ((void*)((char*)(p)       + TWO_SIZE_T_SIZES))
-#define mem2chunk(mem)      ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES))
-/* chunk associated with aligned address A */
-#define align_as_chunk(A)   (mchunkptr)((A) + align_offset(chunk2mem(A)))
-
-/* Bounds on request (not chunk) sizes. */
-#define MAX_REQUEST         ((-MIN_CHUNK_SIZE) << 2)
-#define MIN_REQUEST         (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE)
-
-/* pad request bytes into a usable size */
-#define pad_request(req) \
-   (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK)
-
-/* pad request, checking for minimum (but not maximum) */
-#define request2size(req) \
-  (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req))
-
-
-/* ------------------ Operations on head and foot fields ----------------- */
-
-/*
-  The head field of a chunk is or'ed with PINUSE_BIT when previous
-  adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in
-  use. If the chunk was obtained with mmap, the prev_foot field has
-  IS_MMAPPED_BIT set, otherwise holding the offset of the base of the
-  mmapped region to the base of the chunk.
-*/
-
-#define PINUSE_BIT          (SIZE_T_ONE)
-#define CINUSE_BIT          (SIZE_T_TWO)
-#define INUSE_BITS          (PINUSE_BIT|CINUSE_BIT)
-
-/* Head value for fenceposts */
-#define FENCEPOST_HEAD      (INUSE_BITS|SIZE_T_SIZE)
-
-/* extraction of fields from head words */
-#define cinuse(p)           ((p)->head & CINUSE_BIT)
-#define pinuse(p)           ((p)->head & PINUSE_BIT)
-#define chunksize(p)        ((p)->head & ~(INUSE_BITS))
-
-#define clear_pinuse(p)     ((p)->head &= ~PINUSE_BIT)
-#define clear_cinuse(p)     ((p)->head &= ~CINUSE_BIT)
-
-/* Treat space at ptr +/- offset as a chunk */
-#define chunk_plus_offset(p, s)  ((mchunkptr)(((char*)(p)) + (s)))
-#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s)))
-
-/* Ptr to next or previous physical malloc_chunk. */
-#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS)))
-#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) ))
-
-/* extract next chunk's pinuse bit */
-#define next_pinuse(p)  ((next_chunk(p)->head) & PINUSE_BIT)
-
-/* Get/set size at footer */
-#define get_foot(p, s)  (((mchunkptr)((char*)(p) + (s)))->prev_foot)
-#define set_foot(p, s)  (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s))
-
-/* Set size, pinuse bit, and foot */
-#define set_size_and_pinuse_of_free_chunk(p, s)\
-  ((p)->head = (s|PINUSE_BIT), set_foot(p, s))
-
-/* Set size, pinuse bit, foot, and clear next pinuse */
-#define set_free_with_pinuse(p, s, n)\
-  (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s))
-
-#define is_mmapped(p)\
-  (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT))
-
-/* Get the internal overhead associated with chunk p */
-#define overhead_for(p)\
- (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD)
-
-/* Return true if malloced space is not necessarily cleared */
-#if MMAP_CLEARS
-#define calloc_must_clear(p) (!is_mmapped(p))
-#else /* MMAP_CLEARS */
-#define calloc_must_clear(p) (1)
-#endif /* MMAP_CLEARS */
-
-/* ---------------------- Overlaid data structures ----------------------- */
-
-/*
-  When chunks are not in use, they are treated as nodes of either
-  lists or trees.
-
-  "Small"  chunks are stored in circular doubly-linked lists, and look
-  like this:
-
-    chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Size of previous chunk                            |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    `head:' |             Size of chunk, in bytes                         |P|
-      mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Forward pointer to next chunk in list             |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Back pointer to previous chunk in list            |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Unused space (may be 0 bytes long)                .
-            .                                                               .
-            .                                                               |
-nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    `foot:' |             Size of chunk, in bytes                           |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-  Larger chunks are kept in a form of bitwise digital trees (aka
-  tries) keyed on chunksizes.  Because malloc_tree_chunks are only for
-  free chunks greater than 256 bytes, their size doesn't impose any
-  constraints on user chunk sizes.  Each node looks like:
-
-    chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Size of previous chunk                            |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    `head:' |             Size of chunk, in bytes                         |P|
-      mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Forward pointer to next chunk of same size        |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Back pointer to previous chunk of same size       |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Pointer to left child (child[0])                  |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Pointer to right child (child[1])                 |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Pointer to parent                                 |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             bin index of this chunk                           |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-            |             Unused space                                      .
-            .                                                               |
-nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    `foot:' |             Size of chunk, in bytes                           |
-            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-  Each tree holding treenodes is a tree of unique chunk sizes.  Chunks
-  of the same size are arranged in a circularly-linked list, with only
-  the oldest chunk (the next to be used, in our FIFO ordering)
-  actually in the tree.  (Tree members are distinguished by a non-null
-  parent pointer.)  If a chunk with the same size an an existing node
-  is inserted, it is linked off the existing node using pointers that
-  work in the same way as fd/bk pointers of small chunks.
-
-  Each tree contains a power of 2 sized range of chunk sizes (the
-  smallest is 0x100 <= x < 0x180), which is is divided in half at each
-  tree level, with the chunks in the smaller half of the range (0x100
-  <= x < 0x140 for the top nose) in the left subtree and the larger
-  half (0x140 <= x < 0x180) in the right subtree.  This is, of course,
-  done by inspecting individual bits.
-
-  Using these rules, each node's left subtree contains all smaller
-  sizes than its right subtree.  However, the node at the root of each
-  subtree has no particular ordering relationship to either.  (The
-  dividing line between the subtree sizes is based on trie relation.)
-  If we remove the last chunk of a given size from the interior of the
-  tree, we need to replace it with a leaf node.  The tree ordering
-  rules permit a node to be replaced by any leaf below it.
-
-  The smallest chunk in a tree (a common operation in a best-fit
-  allocator) can be found by walking a path to the leftmost leaf in
-  the tree.  Unlike a usual binary tree, where we follow left child
-  pointers until we reach a null, here we follow the right child
-  pointer any time the left one is null, until we reach a leaf with
-  both child pointers null. The smallest chunk in the tree will be
-  somewhere along that path.
-
-  The worst case number of steps to add, find, or remove a node is
-  bounded by the number of bits differentiating chunks within
-  bins. Under current bin calculations, this ranges from 6 up to 21
-  (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case
-  is of course much better.
-*/
-
-struct malloc_tree_chunk {
-  /* The first four fields must be compatible with malloc_chunk */
-  size_t                    prev_foot;
-  size_t                    head;
-  struct malloc_tree_chunk* fd;
-  struct malloc_tree_chunk* bk;
-
-  struct malloc_tree_chunk* child[2];
-  struct malloc_tree_chunk* parent;
-  bindex_t                  index;
-};
-
-typedef struct malloc_tree_chunk  tchunk;
-typedef struct malloc_tree_chunk* tchunkptr;
-typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */
-
-/* A little helper macro for trees */
-#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1])
-
-/* ----------------------------- Segments -------------------------------- */
-
-/*
-  Each malloc space may include non-contiguous segments, held in a
-  list headed by an embedded malloc_segment record representing the
-  top-most space. Segments also include flags holding properties of
-  the space. Large chunks that are directly allocated by mmap are not
-  included in this list. They are instead independently created and
-  destroyed without otherwise keeping track of them.
-
-  Segment management mainly comes into play for spaces allocated by
-  MMAP.  Any call to MMAP might or might not return memory that is
-  adjacent to an existing segment.  MORECORE normally contiguously
-  extends the current space, so this space is almost always adjacent,
-  which is simpler and faster to deal with. (This is why MORECORE is
-  used preferentially to MMAP when both are available -- see
-  sys_alloc.)  When allocating using MMAP, we don't use any of the
-  hinting mechanisms (inconsistently) supported in various
-  implementations of unix mmap, or distinguish reserving from
-  committing memory. Instead, we just ask for space, and exploit
-  contiguity when we get it.  It is probably possible to do
-  better than this on some systems, but no general scheme seems
-  to be significantly better.
-
-  Management entails a simpler variant of the consolidation scheme
-  used for chunks to reduce fragmentation -- new adjacent memory is
-  normally prepended or appended to an existing segment. However,
-  there are limitations compared to chunk consolidation that mostly
-  reflect the fact that segment processing is relatively infrequent
-  (occurring only when getting memory from system) and that we
-  don't expect to have huge numbers of segments:
-
-  * Segments are not indexed, so traversal requires linear scans.  (It
-    would be possible to index these, but is not worth the extra
-    overhead and complexity for most programs on most platforms.)
-  * New segments are only appended to old ones when holding top-most
-    memory; if they cannot be prepended to others, they are held in
-    different segments.
-
-  Except for the top-most segment of an mstate, each segment record
-  is kept at the tail of its segment. Segments are added by pushing
-  segment records onto the list headed by &mstate.seg for the
-  containing mstate.
-
-  Segment flags control allocation/merge/deallocation policies:
-  * If EXTERN_BIT set, then we did not allocate this segment,
-    and so should not try to deallocate or merge with others.
-    (This currently holds only for the initial segment passed
-    into create_mspace_with_base.)
-  * If IS_MMAPPED_BIT set, the segment may be merged with
-    other surrounding mmapped segments and trimmed/de-allocated
-    using munmap.
-  * If neither bit is set, then the segment was obtained using
-    MORECORE so can be merged with surrounding MORECORE'd segments
-    and deallocated/trimmed using MORECORE with negative arguments.
-*/
-
-struct malloc_segment {
-  char*        base;             /* base address */
-  size_t       size;             /* allocated size */
-  struct malloc_segment* next;   /* ptr to next segment */
-  flag_t       sflags;           /* mmap and extern flag */
-};
-
-#define is_mmapped_segment(S)  ((S)->sflags & IS_MMAPPED_BIT)
-#define is_extern_segment(S)   ((S)->sflags & EXTERN_BIT)
-
-typedef struct malloc_segment  msegment;
-typedef struct malloc_segment* msegmentptr;
-
-/* ---------------------------- malloc_state ----------------------------- */
-
-/*
-   A malloc_state holds all of the bookkeeping for a space.
-   The main fields are:
-
-  Top
-    The topmost chunk of the currently active segment. Its size is
-    cached in topsize.  The actual size of topmost space is
-    topsize+TOP_FOOT_SIZE, which includes space reserved for adding
-    fenceposts and segment records if necessary when getting more
-    space from the system.  The size at which to autotrim top is
-    cached from mparams in trim_check, except that it is disabled if
-    an autotrim fails.
-
-  Designated victim (dv)
-    This is the preferred chunk for servicing small requests that
-    don't have exact fits.  It is normally the chunk split off most
-    recently to service another small request.  Its size is cached in
-    dvsize. The link fields of this chunk are not maintained since it
-    is not kept in a bin.
-
-  SmallBins
-    An array of bin headers for free chunks.  These bins hold chunks
-    with sizes less than MIN_LARGE_SIZE bytes. Each bin contains
-    chunks of all the same size, spaced 8 bytes apart.  To simplify
-    use in double-linked lists, each bin header acts as a malloc_chunk
-    pointing to the real first node, if it exists (else pointing to
-    itself).  This avoids special-casing for headers.  But to avoid
-    waste, we allocate only the fd/bk pointers of bins, and then use
-    repositioning tricks to treat these as the fields of a chunk.
-
-  TreeBins
-    Treebins are pointers to the roots of trees holding a range of
-    sizes. There are 2 equally spaced treebins for each power of two
-    from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything
-    larger.
-
-  Bin maps
-    There is one bit map for small bins ("smallmap") and one for
-    treebins ("treemap).  Each bin sets its bit when non-empty, and
-    clears the bit when empty.  Bit operations are then used to avoid
-    bin-by-bin searching -- nearly all "search" is done without ever
-    looking at bins that won't be selected.  The bit maps
-    conservatively use 32 bits per map word, even if on 64bit system.
-    For a good description of some of the bit-based techniques used
-    here, see Henry S. Warren Jr's book "Hacker's Delight" (and
-    supplement at http://hackersdelight.org/). Many of these are
-    intended to reduce the branchiness of paths through malloc etc, as
-    well as to reduce the number of memory locations read or written.
-
-  Segments
-    A list of segments headed by an embedded malloc_segment record
-    representing the initial space.
-
-  Address check support
-    The least_addr field is the least address ever obtained from
-    MORECORE or MMAP. Attempted frees and reallocs of any address less
-    than this are trapped (unless INSECURE is defined).
-
-  Magic tag
-    A cross-check field that should always hold same value as mparams.magic.
-
-  Flags
-    Bits recording whether to use MMAP, locks, or contiguous MORECORE
-
-  Statistics
-    Each space keeps track of current and maximum system memory
-    obtained via MORECORE or MMAP.
-
-  Locking
-    If USE_LOCKS is defined, the "mutex" lock is acquired and released
-    around every public call using this mspace.
-*/
-
-/* Bin types, widths and sizes */
-#define NSMALLBINS        (32U)
-#define NTREEBINS         (32U)
-#define SMALLBIN_SHIFT    (3U)
-#define SMALLBIN_WIDTH    (SIZE_T_ONE << SMALLBIN_SHIFT)
-#define TREEBIN_SHIFT     (8U)
-#define MIN_LARGE_SIZE    (SIZE_T_ONE << TREEBIN_SHIFT)
-#define MAX_SMALL_SIZE    (MIN_LARGE_SIZE - SIZE_T_ONE)
-#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD)
-
-struct malloc_state {
-  binmap_t   smallmap;
-  binmap_t   treemap;
-  size_t     dvsize;
-  size_t     topsize;
-  char*      least_addr;
-  mchunkptr  dv;
-  mchunkptr  top;
-  size_t     trim_check;
-  size_t     magic;
-  mchunkptr  smallbins[(NSMALLBINS+1)*2];
-  tbinptr    treebins[NTREEBINS];
-  size_t     footprint;
-  size_t     max_footprint;
-  flag_t     mflags;
-#if USE_LOCKS
-  MLOCK_T    mutex;     /* locate lock among fields that rarely change */
-#endif /* USE_LOCKS */
-  msegment   seg;
-};
-
-typedef struct malloc_state*    mstate;
-
-/* ------------- Global malloc_state and malloc_params ------------------- */
-
-/*
-  malloc_params holds global properties, including those that can be
-  dynamically set using mallopt. There is a single instance, mparams,
-  initialized in init_mparams.
-*/
-
-struct malloc_params {
-  size_t magic;
-  size_t page_size;
-  size_t granularity;
-  size_t mmap_threshold;
-  size_t trim_threshold;
-  flag_t default_mflags;
-};
-
-static struct malloc_params mparams;
-
-/* The global malloc_state used for all non-"mspace" calls */
-static struct malloc_state _gm_;
-#define gm                 (&_gm_)
-#define is_global(M)       ((M) == &_gm_)
-#define is_initialized(M)  ((M)->top != 0)
-
-/* -------------------------- system alloc setup ------------------------- */
-
-/* Operations on mflags */
-
-#define use_lock(M)           ((M)->mflags &   USE_LOCK_BIT)
-#define enable_lock(M)        ((M)->mflags |=  USE_LOCK_BIT)
-#define disable_lock(M)       ((M)->mflags &= ~USE_LOCK_BIT)
-
-#define use_mmap(M)           ((M)->mflags &   USE_MMAP_BIT)
-#define enable_mmap(M)        ((M)->mflags |=  USE_MMAP_BIT)
-#define disable_mmap(M)       ((M)->mflags &= ~USE_MMAP_BIT)
-
-#define use_noncontiguous(M)  ((M)->mflags &   USE_NONCONTIGUOUS_BIT)
-#define disable_contiguous(M) ((M)->mflags |=  USE_NONCONTIGUOUS_BIT)
-
-#define set_lock(M,L)\
- ((M)->mflags = (L)?\
-  ((M)->mflags | USE_LOCK_BIT) :\
-  ((M)->mflags & ~USE_LOCK_BIT))
-
-/* page-align a size */
-#define page_align(S)\
- (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE))
-
-/* granularity-align a size */
-#define granularity_align(S)\
-  (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE))
-
-#define is_page_aligned(S)\
-   (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0)
-#define is_granularity_aligned(S)\
-   (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0)
-
-/*  True if segment S holds address A */
-#define segment_holds(S, A)\
-  ((char*)(A) >= S->base && (char*)(A) < S->base + S->size)
-
-/* Return segment holding given address */
-static msegmentptr segment_holding(mstate m, char* addr) {
-  msegmentptr sp = &m->seg;
-  for (;;) {
-    if (addr >= sp->base && addr < sp->base + sp->size)
-      return sp;
-    if ((sp = sp->next) == 0)
-      return 0;
-  }
-}
-
-/* Return true if segment contains a segment link */
-static int has_segment_link(mstate m, msegmentptr ss) {
-  msegmentptr sp = &m->seg;
-  for (;;) {
-    if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size)
-      return 1;
-    if ((sp = sp->next) == 0)
-      return 0;
-  }
-}
-
-#ifndef MORECORE_CANNOT_TRIM
-#define should_trim(M,s)  ((s) > (M)->trim_check)
-#else  /* MORECORE_CANNOT_TRIM */
-#define should_trim(M,s)  (0)
-#endif /* MORECORE_CANNOT_TRIM */
-
-/*
-  TOP_FOOT_SIZE is padding at the end of a segment, including space
-  that may be needed to place segment records and fenceposts when new
-  noncontiguous segments are added.
-*/
-#define TOP_FOOT_SIZE\
-  (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE)
-
-
-/* -------------------------------  Hooks -------------------------------- */
-
-/*
-  PREACTION should be defined to return 0 on success, and nonzero on
-  failure. If you are not using locking, you can redefine these to do
-  anything you like.
-*/
-
-#if USE_LOCKS
-
-/* Ensure locks are initialized */
-#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams())
-
-#define PREACTION(M)  ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0)
-#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); }
-#else /* USE_LOCKS */
-
-#ifndef PREACTION
-#define PREACTION(M) (0)
-#endif  /* PREACTION */
-
-#ifndef POSTACTION
-#define POSTACTION(M)
-#endif  /* POSTACTION */
-
-#endif /* USE_LOCKS */
-
-/*
-  CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses.
-  USAGE_ERROR_ACTION is triggered on detected bad frees and
-  reallocs. The argument p is an address that might have triggered the
-  fault. It is ignored by the two predefined actions, but might be
-  useful in custom actions that try to help diagnose errors.
-*/
-
-#if PROCEED_ON_ERROR
-
-/* A count of the number of corruption errors causing resets */
-int malloc_corruption_error_count;
-
-/* default corruption action */
-static void reset_on_error(mstate m);
-
-#define CORRUPTION_ERROR_ACTION(m)  reset_on_error(m)
-#define USAGE_ERROR_ACTION(m, p)
-
-#else /* PROCEED_ON_ERROR */
-
-#ifndef CORRUPTION_ERROR_ACTION
-#define CORRUPTION_ERROR_ACTION(m) ABORT
-#endif /* CORRUPTION_ERROR_ACTION */
-
-#ifndef USAGE_ERROR_ACTION
-#define USAGE_ERROR_ACTION(m,p) ABORT
-#endif /* USAGE_ERROR_ACTION */
-
-#endif /* PROCEED_ON_ERROR */
-
-/* -------------------------- Debugging setup ---------------------------- */
-
-#if ! DEBUG
-
-#define check_free_chunk(M,P)
-#define check_inuse_chunk(M,P)
-#define check_malloced_chunk(M,P,N)
-#define check_mmapped_chunk(M,P)
-#define check_malloc_state(M)
-#define check_top_chunk(M,P)
-
-#else /* DEBUG */
-#define check_free_chunk(M,P)       do_check_free_chunk(M,P)
-#define check_inuse_chunk(M,P)      do_check_inuse_chunk(M,P)
-#define check_top_chunk(M,P)        do_check_top_chunk(M,P)
-#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N)
-#define check_mmapped_chunk(M,P)    do_check_mmapped_chunk(M,P)
-#define check_malloc_state(M)       do_check_malloc_state(M)
-
-static void   do_check_any_chunk(mstate m, mchunkptr p);
-static void   do_check_top_chunk(mstate m, mchunkptr p);
-static void   do_check_mmapped_chunk(mstate m, mchunkptr p);
-static void   do_check_inuse_chunk(mstate m, mchunkptr p);
-static void   do_check_free_chunk(mstate m, mchunkptr p);
-static void   do_check_malloced_chunk(mstate m, void* mem, size_t s);
-static void   do_check_tree(mstate m, tchunkptr t);
-static void   do_check_treebin(mstate m, bindex_t i);
-static void   do_check_smallbin(mstate m, bindex_t i);
-static void   do_check_malloc_state(mstate m);
-static int    bin_find(mstate m, mchunkptr x);
-static size_t traverse_and_check(mstate m);
-#endif /* DEBUG */
-
-/* ---------------------------- Indexing Bins ---------------------------- */
-
-#define is_small(s)         (((s) >> SMALLBIN_SHIFT) < NSMALLBINS)
-#define small_index(s)      ((s)  >> SMALLBIN_SHIFT)
-#define small_index2size(i) ((i)  << SMALLBIN_SHIFT)
-#define MIN_SMALL_INDEX     (small_index(MIN_CHUNK_SIZE))
-
-/* addressing by index. See above about smallbin repositioning */
-#define smallbin_at(M, i)   ((sbinptr)((char*)&((M)->smallbins[(i)<<1])))
-#define treebin_at(M,i)     (&((M)->treebins[i]))
-
-/* assign tree index for size S to variable I */
-#if defined(__GNUC__) && defined(i386)
-#define compute_tree_index(S, I)\
-{\
-  size_t X = S >> TREEBIN_SHIFT;\
-  if (X == 0)\
-    I = 0;\
-  else if (X > 0xFFFF)\
-    I = NTREEBINS-1;\
-  else {\
-    unsigned int K;\
-    asm("bsrl %1,%0\n\t" : "=r" (K) : "rm"  (X));\
-    I =  (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\
-  }\
-}
-#else /* GNUC */
-#define compute_tree_index(S, I)\
-{\
-  size_t X = S >> TREEBIN_SHIFT;\
-  if (X == 0)\
-    I = 0;\
-  else if (X > 0xFFFF)\
-    I = NTREEBINS-1;\
-  else {\
-    unsigned int Y = (unsigned int)X;\
-    unsigned int N = ((Y - 0x100) >> 16) & 8;\
-    unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\
-    N += K;\
-    N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\
-    K = 14 - N + ((Y <<= K) >> 15);\
-    I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\
-  }\
-}
-#endif /* GNUC */
-
-/* Bit representing maximum resolved size in a treebin at i */
-#define bit_for_tree_index(i) \
-   (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2)
-
-/* Shift placing maximum resolved bit in a treebin at i as sign bit */
-#define leftshift_for_tree_index(i) \
-   ((i == NTREEBINS-1)? 0 : \
-    ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2)))
-
-/* The size of the smallest chunk held in bin with index i */
-#define minsize_for_tree_index(i) \
-   ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) |  \
-   (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1)))
-
-
-/* ------------------------ Operations on bin maps ----------------------- */
-
-/* bit corresponding to given index */
-#define idx2bit(i)              ((binmap_t)(1) << (i))
-
-/* Mark/Clear bits with given index */
-#define mark_smallmap(M,i)      ((M)->smallmap |=  idx2bit(i))
-#define clear_smallmap(M,i)     ((M)->smallmap &= ~idx2bit(i))
-#define smallmap_is_marked(M,i) ((M)->smallmap &   idx2bit(i))
-
-#define mark_treemap(M,i)       ((M)->treemap  |=  idx2bit(i))
-#define clear_treemap(M,i)      ((M)->treemap  &= ~idx2bit(i))
-#define treemap_is_marked(M,i)  ((M)->treemap  &   idx2bit(i))
-
-/* index corresponding to given bit */
-
-#if defined(__GNUC__) && defined(i386)
-#define compute_bit2idx(X, I)\
-{\
-  unsigned int J;\
-  asm("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\
-  I = (bindex_t)J;\
-}
-
-#else /* GNUC */
-#if  USE_BUILTIN_FFS
-#define compute_bit2idx(X, I) I = ffs(X)-1
-
-#else /* USE_BUILTIN_FFS */
-#define compute_bit2idx(X, I)\
-{\
-  unsigned int Y = X - 1;\
-  unsigned int K = Y >> (16-4) & 16;\
-  unsigned int N = K;        Y >>= K;\
-  N += K = Y >> (8-3) &  8;  Y >>= K;\
-  N += K = Y >> (4-2) &  4;  Y >>= K;\
-  N += K = Y >> (2-1) &  2;  Y >>= K;\
-  N += K = Y >> (1-0) &  1;  Y >>= K;\
-  I = (bindex_t)(N + Y);\
-}
-#endif /* USE_BUILTIN_FFS */
-#endif /* GNUC */
-
-/* isolate the least set bit of a bitmap */
-#define least_bit(x)         ((x) & -(x))
-
-/* mask with all bits to left of least bit of x on */
-#define left_bits(x)         ((x<<1) | -(x<<1))
-
-/* mask with all bits to left of or equal to least bit of x on */
-#define same_or_left_bits(x) ((x) | -(x))
-
-
-/* ----------------------- Runtime Check Support ------------------------- */
-
-/*
-  For security, the main invariant is that malloc/free/etc never
-  writes to a static address other than malloc_state, unless static
-  malloc_state itself has been corrupted, which cannot occur via
-  malloc (because of these checks). In essence this means that we
-  believe all pointers, sizes, maps etc held in malloc_state, but
-  check all of those linked or offsetted from other embedded data
-  structures.  These checks are interspersed with main code in a way
-  that tends to minimize their run-time cost.
-
-  When FOOTERS is defined, in addition to range checking, we also
-  verify footer fields of inuse chunks, which can be used guarantee
-  that the mstate controlling malloc/free is intact.  This is a
-  streamlined version of the approach described by William Robertson
-  et al in "Run-time Detection of Heap-based Overflows" LISA'03
-  http://www.usenix.org/events/lisa03/tech/robertson.html The footer
-  of an inuse chunk holds the xor of its mstate and a random seed,
-  that is checked upon calls to free() and realloc().  This is
-  (probablistically) unguessable from outside the program, but can be
-  computed by any code successfully malloc'ing any chunk, so does not
-  itself provide protection against code that has already broken
-  security through some other means.  Unlike Robertson et al, we
-  always dynamically check addresses of all offset chunks (previous,
-  next, etc). This turns out to be cheaper than relying on hashes.
-*/
-
-#if !INSECURE
-/* Check if address a is at least as high as any from MORECORE or MMAP */
-#define ok_address(M, a) ((char*)(a) >= (M)->least_addr)
-/* Check if address of next chunk n is higher than base chunk p */
-#define ok_next(p, n)    ((char*)(p) < (char*)(n))
-/* Check if p has its cinuse bit on */
-#define ok_cinuse(p)     cinuse(p)
-/* Check if p has its pinuse bit on */
-#define ok_pinuse(p)     pinuse(p)
-
-#else /* !INSECURE */
-#define ok_address(M, a) (1)
-#define ok_next(b, n)    (1)
-#define ok_cinuse(p)     (1)
-#define ok_pinuse(p)     (1)
-#endif /* !INSECURE */
-
-#if (FOOTERS && !INSECURE)
-/* Check if (alleged) mstate m has expected magic field */
-#define ok_magic(M)      ((M)->magic == mparams.magic)
-#else  /* (FOOTERS && !INSECURE) */
-#define ok_magic(M)      (1)
-#endif /* (FOOTERS && !INSECURE) */
-
-
-/* In gcc, use __builtin_expect to minimize impact of checks */
-#if !INSECURE
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define RTCHECK(e)  __builtin_expect(e, 1)
-#else /* GNUC */
-#define RTCHECK(e)  (e)
-#endif /* GNUC */
-#else /* !INSECURE */
-#define RTCHECK(e)  (1)
-#endif /* !INSECURE */
-
-/* macros to set up inuse chunks with or without footers */
-
-#if !FOOTERS
-
-#define mark_inuse_foot(M,p,s)
-
-/* Set cinuse bit and pinuse bit of next chunk */
-#define set_inuse(M,p,s)\
-  ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
-  ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
-
-/* Set cinuse and pinuse of this chunk and pinuse of next chunk */
-#define set_inuse_and_pinuse(M,p,s)\
-  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
-  ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT)
-
-/* Set size, cinuse and pinuse bit of this chunk */
-#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
-  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT))
-
-#else /* FOOTERS */
-
-/* Set foot of inuse chunk to be xor of mstate and seed */
-#define mark_inuse_foot(M,p,s)\
-  (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic))
-
-#define get_mstate_for(p)\
-  ((mstate)(((mchunkptr)((char*)(p) +\
-    (chunksize(p))))->prev_foot ^ mparams.magic))
-
-#define set_inuse(M,p,s)\
-  ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\
-  (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \
-  mark_inuse_foot(M,p,s))
-
-#define set_inuse_and_pinuse(M,p,s)\
-  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
-  (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\
- mark_inuse_foot(M,p,s))
-
-#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\
-  ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\
-  mark_inuse_foot(M, p, s))
-
-#endif /* !FOOTERS */
-
-/* ---------------------------- setting mparams -------------------------- */
-
-/* Initialize mparams */
-static int init_mparams(void) {
-  if (mparams.page_size == 0) {
-    size_t s;
-
-    mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD;
-    mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD;
-#if MORECORE_CONTIGUOUS
-    mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT;
-#else  /* MORECORE_CONTIGUOUS */
-    mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT;
-#endif /* MORECORE_CONTIGUOUS */
-
-#if (FOOTERS && !INSECURE)
-    {
-#if USE_DEV_RANDOM
-      int fd;
-      unsigned char buf[sizeof(size_t)];
-      /* Try to use /dev/urandom, else fall back on using time */
-      if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 &&
-          read(fd, buf, sizeof(buf)) == sizeof(buf)) {
-        s = *((size_t *) buf);
-        close(fd);
-      }
-      else
-#endif /* USE_DEV_RANDOM */
-        s = (size_t)(time(0) ^ (size_t)0x55555555U);
-
-      s |= (size_t)8U;    /* ensure nonzero */
-      s &= ~(size_t)7U;   /* improve chances of fault for bad values */
-
-    }
-#else /* (FOOTERS && !INSECURE) */
-    s = (size_t)0x58585858U;
-#endif /* (FOOTERS && !INSECURE) */
-    ACQUIRE_MAGIC_INIT_LOCK();
-    if (mparams.magic == 0) {
-      mparams.magic = s;
-      /* Set up lock for main malloc area */
-      INITIAL_LOCK(&gm->mutex);
-      gm->mflags = mparams.default_mflags;
-    }
-    RELEASE_MAGIC_INIT_LOCK();
-
-#ifndef WIN32
-    mparams.page_size = malloc_getpagesize;
-    mparams.granularity = ((DEFAULT_GRANULARITY != 0)?
-                           DEFAULT_GRANULARITY : mparams.page_size);
-#else /* WIN32 */
-    {
-      SYSTEM_INFO system_info;
-      GetSystemInfo(&system_info);
-      mparams.page_size = system_info.dwPageSize;
-      mparams.granularity = system_info.dwAllocationGranularity;
-    }
-#endif /* WIN32 */
-
-    /* Sanity-check configuration:
-       size_t must be unsigned and as wide as pointer type.
-       ints must be at least 4 bytes.
-       alignment must be at least 8.
-       Alignment, min chunk size, and page size must all be powers of 2.
-    */
-    if ((sizeof(size_t) != sizeof(char*)) ||
-        (MAX_SIZE_T < MIN_CHUNK_SIZE)  ||
-        (sizeof(int) < 4)  ||
-        (MALLOC_ALIGNMENT < (size_t)8U) ||
-        ((MALLOC_ALIGNMENT    & (MALLOC_ALIGNMENT-SIZE_T_ONE))    != 0) ||
-        ((MCHUNK_SIZE         & (MCHUNK_SIZE-SIZE_T_ONE))         != 0) ||
-        ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) ||
-        ((mparams.page_size   & (mparams.page_size-SIZE_T_ONE))   != 0))
-      ABORT;
-  }
-  return 0;
-}
-
-/* support for mallopt */
-static int change_mparam(int param_number, int value) {
-  size_t val = (size_t)value;
-  init_mparams();
-  switch(param_number) {
-  case M_TRIM_THRESHOLD:
-    mparams.trim_threshold = val;
-    return 1;
-  case M_GRANULARITY:
-    if (val >= mparams.page_size && ((val & (val-1)) == 0)) {
-      mparams.granularity = val;
-      return 1;
-    }
-    else
-      return 0;
-  case M_MMAP_THRESHOLD:
-    mparams.mmap_threshold = val;
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-#if DEBUG
-/* ------------------------- Debugging Support --------------------------- */
-
-/* Check properties of any chunk, whether free, inuse, mmapped etc  */
-static void do_check_any_chunk(mstate m, mchunkptr p) {
-  assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
-  assert(ok_address(m, p));
-}
-
-/* Check properties of top chunk */
-static void do_check_top_chunk(mstate m, mchunkptr p) {
-  msegmentptr sp = segment_holding(m, (char*)p);
-  size_t  sz = chunksize(p);
-  assert(sp != 0);
-  assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
-  assert(ok_address(m, p));
-  assert(sz == m->topsize);
-  assert(sz > 0);
-  assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE);
-  assert(pinuse(p));
-  assert(!next_pinuse(p));
-}
-
-/* Check properties of (inuse) mmapped chunks */
-static void do_check_mmapped_chunk(mstate m, mchunkptr p) {
-  size_t  sz = chunksize(p);
-  size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD);
-  assert(is_mmapped(p));
-  assert(use_mmap(m));
-  assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD));
-  assert(ok_address(m, p));
-  assert(!is_small(sz));
-  assert((len & (mparams.page_size-SIZE_T_ONE)) == 0);
-  assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD);
-  assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0);
-}
-
-/* Check properties of inuse chunks */
-static void do_check_inuse_chunk(mstate m, mchunkptr p) {
-  do_check_any_chunk(m, p);
-  assert(cinuse(p));
-  assert(next_pinuse(p));
-  /* If not pinuse and not mmapped, previous chunk has OK offset */
-  assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p);
-  if (is_mmapped(p))
-    do_check_mmapped_chunk(m, p);
-}
-
-/* Check properties of free chunks */
-static void do_check_free_chunk(mstate m, mchunkptr p) {
-  size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT);
-  mchunkptr next = chunk_plus_offset(p, sz);
-  do_check_any_chunk(m, p);
-  assert(!cinuse(p));
-  assert(!next_pinuse(p));
-  assert (!is_mmapped(p));
-  if (p != m->dv && p != m->top) {
-    if (sz >= MIN_CHUNK_SIZE) {
-      assert((sz & CHUNK_ALIGN_MASK) == 0);
-      assert(is_aligned(chunk2mem(p)));
-      assert(next->prev_foot == sz);
-      assert(pinuse(p));
-      assert (next == m->top || cinuse(next));
-      assert(p->fd->bk == p);
-      assert(p->bk->fd == p);
-    }
-    else  /* markers are always of size SIZE_T_SIZE */
-      assert(sz == SIZE_T_SIZE);
-  }
-}
-
-/* Check properties of malloced chunks at the point they are malloced */
-static void do_check_malloced_chunk(mstate m, void* mem, size_t s) {
-  if (mem != 0) {
-    mchunkptr p = mem2chunk(mem);
-    size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT);
-    do_check_inuse_chunk(m, p);
-    assert((sz & CHUNK_ALIGN_MASK) == 0);
-    assert(sz >= MIN_CHUNK_SIZE);
-    assert(sz >= s);
-    /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */
-    assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE));
-  }
-}
-
-/* Check a tree and its subtrees.  */
-static void do_check_tree(mstate m, tchunkptr t) {
-  tchunkptr head = 0;
-  tchunkptr u = t;
-  bindex_t tindex = t->index;
-  size_t tsize = chunksize(t);
-  bindex_t idx;
-  compute_tree_index(tsize, idx);
-  assert(tindex == idx);
-  assert(tsize >= MIN_LARGE_SIZE);
-  assert(tsize >= minsize_for_tree_index(idx));
-  assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1))));
-
-  do { /* traverse through chain of same-sized nodes */
-    do_check_any_chunk(m, ((mchunkptr)u));
-    assert(u->index == tindex);
-    assert(chunksize(u) == tsize);
-    assert(!cinuse(u));
-    assert(!next_pinuse(u));
-    assert(u->fd->bk == u);
-    assert(u->bk->fd == u);
-    if (u->parent == 0) {
-      assert(u->child[0] == 0);
-      assert(u->child[1] == 0);
-    }
-    else {
-      assert(head == 0); /* only one node on chain has parent */
-      head = u;
-      assert(u->parent != u);
-      assert (u->parent->child[0] == u ||
-              u->parent->child[1] == u ||
-              *((tbinptr*)(u->parent)) == u);
-      if (u->child[0] != 0) {
-        assert(u->child[0]->parent == u);
-        assert(u->child[0] != u);
-        do_check_tree(m, u->child[0]);
-      }
-      if (u->child[1] != 0) {
-        assert(u->child[1]->parent == u);
-        assert(u->child[1] != u);
-        do_check_tree(m, u->child[1]);
-      }
-      if (u->child[0] != 0 && u->child[1] != 0) {
-        assert(chunksize(u->child[0]) < chunksize(u->child[1]));
-      }
-    }
-    u = u->fd;
-  } while (u != t);
-  assert(head != 0);
-}
-
-/*  Check all the chunks in a treebin.  */
-static void do_check_treebin(mstate m, bindex_t i) {
-  tbinptr* tb = treebin_at(m, i);
-  tchunkptr t = *tb;
-  int empty = (m->treemap & (1U << i)) == 0;
-  if (t == 0)
-    assert(empty);
-  if (!empty)
-    do_check_tree(m, t);
-}
-
-/*  Check all the chunks in a smallbin.  */
-static void do_check_smallbin(mstate m, bindex_t i) {
-  sbinptr b = smallbin_at(m, i);
-  mchunkptr p = b->bk;
-  unsigned int empty = (m->smallmap & (1U << i)) == 0;
-  if (p == b)
-    assert(empty);
-  if (!empty) {
-    for (; p != b; p = p->bk) {
-      size_t size = chunksize(p);
-      mchunkptr q;
-      /* each chunk claims to be free */
-      do_check_free_chunk(m, p);
-      /* chunk belongs in bin */
-      assert(small_index(size) == i);
-      assert(p->bk == b || chunksize(p->bk) == chunksize(p));
-      /* chunk is followed by an inuse chunk */
-      q = next_chunk(p);
-      if (q->head != FENCEPOST_HEAD)
-        do_check_inuse_chunk(m, q);
-    }
-  }
-}
-
-/* Find x in a bin. Used in other check functions. */
-static int bin_find(mstate m, mchunkptr x) {
-  size_t size = chunksize(x);
-  if (is_small(size)) {
-    bindex_t sidx = small_index(size);
-    sbinptr b = smallbin_at(m, sidx);
-    if (smallmap_is_marked(m, sidx)) {
-      mchunkptr p = b;
-      do {
-        if (p == x)
-          return 1;
-      } while ((p = p->fd) != b);
-    }
-  }
-  else {
-    bindex_t tidx;
-    compute_tree_index(size, tidx);
-    if (treemap_is_marked(m, tidx)) {
-      tchunkptr t = *treebin_at(m, tidx);
-      size_t sizebits = size << leftshift_for_tree_index(tidx);
-      while (t != 0 && chunksize(t) != size) {
-        t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
-        sizebits <<= 1;
-      }
-      if (t != 0) {
-        tchunkptr u = t;
-        do {
-          if (u == (tchunkptr)x)
-            return 1;
-        } while ((u = u->fd) != t);
-      }
-    }
-  }
-  return 0;
-}
-
-/* Traverse each chunk and check it; return total */
-static size_t traverse_and_check(mstate m) {
-  size_t sum = 0;
-  if (is_initialized(m)) {
-    msegmentptr s = &m->seg;
-    sum += m->topsize + TOP_FOOT_SIZE;
-    while (s != 0) {
-      mchunkptr q = align_as_chunk(s->base);
-      mchunkptr lastq = 0;
-      assert(pinuse(q));
-      while (segment_holds(s, q) &&
-             q != m->top && q->head != FENCEPOST_HEAD) {
-        sum += chunksize(q);
-        if (cinuse(q)) {
-          assert(!bin_find(m, q));
-          do_check_inuse_chunk(m, q);
-        }
-        else {
-          assert(q == m->dv || bin_find(m, q));
-          assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */
-          do_check_free_chunk(m, q);
-        }
-        lastq = q;
-        q = next_chunk(q);
-      }
-      s = s->next;
-    }
-  }
-  return sum;
-}
-
-/* Check all properties of malloc_state. */
-static void do_check_malloc_state(mstate m) {
-  bindex_t i;
-  size_t total;
-  /* check bins */
-  for (i = 0; i < NSMALLBINS; ++i)
-    do_check_smallbin(m, i);
-  for (i = 0; i < NTREEBINS; ++i)
-    do_check_treebin(m, i);
-
-  if (m->dvsize != 0) { /* check dv chunk */
-    do_check_any_chunk(m, m->dv);
-    assert(m->dvsize == chunksize(m->dv));
-    assert(m->dvsize >= MIN_CHUNK_SIZE);
-    assert(bin_find(m, m->dv) == 0);
-  }
-
-  if (m->top != 0) {   /* check top chunk */
-    do_check_top_chunk(m, m->top);
-    assert(m->topsize == chunksize(m->top));
-    assert(m->topsize > 0);
-    assert(bin_find(m, m->top) == 0);
-  }
-
-  total = traverse_and_check(m);
-  assert(total <= m->footprint);
-  assert(m->footprint <= m->max_footprint);
-}
-#endif /* DEBUG */
-
-/* ----------------------------- statistics ------------------------------ */
-
-#if !NO_MALLINFO
-static struct mallinfo internal_mallinfo(mstate m) {
-  struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-  if (!PREACTION(m)) {
-    check_malloc_state(m);
-    if (is_initialized(m)) {
-      size_t nfree = SIZE_T_ONE; /* top always free */
-      size_t mfree = m->topsize + TOP_FOOT_SIZE;
-      size_t sum = mfree;
-      msegmentptr s = &m->seg;
-      while (s != 0) {
-        mchunkptr q = align_as_chunk(s->base);
-        while (segment_holds(s, q) &&
-               q != m->top && q->head != FENCEPOST_HEAD) {
-          size_t sz = chunksize(q);
-          sum += sz;
-          if (!cinuse(q)) {
-            mfree += sz;
-            ++nfree;
-          }
-          q = next_chunk(q);
-        }
-        s = s->next;
-      }
-
-      nm.arena    = sum;
-      nm.ordblks  = nfree;
-      nm.hblkhd   = m->footprint - sum;
-      nm.usmblks  = m->max_footprint;
-      nm.uordblks = m->footprint - mfree;
-      nm.fordblks = mfree;
-      nm.keepcost = m->topsize;
-    }
-
-    POSTACTION(m);
-  }
-  return nm;
-}
-#endif /* !NO_MALLINFO */
-
-static void internal_malloc_stats(mstate m) {
-  if (!PREACTION(m)) {
-    size_t maxfp = 0;
-    size_t fp = 0;
-    size_t used = 0;
-    check_malloc_state(m);
-    if (is_initialized(m)) {
-      msegmentptr s = &m->seg;
-      maxfp = m->max_footprint;
-      fp = m->footprint;
-      used = fp - (m->topsize + TOP_FOOT_SIZE);
-
-      while (s != 0) {
-        mchunkptr q = align_as_chunk(s->base);
-        while (segment_holds(s, q) &&
-               q != m->top && q->head != FENCEPOST_HEAD) {
-          if (!cinuse(q))
-            used -= chunksize(q);
-          q = next_chunk(q);
-        }
-        s = s->next;
-      }
-    }
-
-    fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp));
-    fprintf(stderr, "system bytes     = %10lu\n", (unsigned long)(fp));
-    fprintf(stderr, "in use bytes     = %10lu\n", (unsigned long)(used));
-
-    POSTACTION(m);
-  }
-}
-
-/* ----------------------- Operations on smallbins ----------------------- */
-
-/*
-  Various forms of linking and unlinking are defined as macros.  Even
-  the ones for trees, which are very long but have very short typical
-  paths.  This is ugly but reduces reliance on inlining support of
-  compilers.
-*/
-
-/* Link a free chunk into a smallbin  */
-#define insert_small_chunk(M, P, S) {\
-  bindex_t I  = small_index(S);\
-  mchunkptr B = smallbin_at(M, I);\
-  mchunkptr F = B;\
-  assert(S >= MIN_CHUNK_SIZE);\
-  if (!smallmap_is_marked(M, I))\
-    mark_smallmap(M, I);\
-  else if (RTCHECK(ok_address(M, B->fd)))\
-    F = B->fd;\
-  else {\
-    CORRUPTION_ERROR_ACTION(M);\
-  }\
-  B->fd = P;\
-  F->bk = P;\
-  P->fd = F;\
-  P->bk = B;\
-}
-
-/* Unlink a chunk from a smallbin  */
-#define unlink_small_chunk(M, P, S) {\
-  mchunkptr F = P->fd;\
-  mchunkptr B = P->bk;\
-  bindex_t I = small_index(S);\
-  assert(P != B);\
-  assert(P != F);\
-  assert(chunksize(P) == small_index2size(I));\
-  if (F == B)\
-    clear_smallmap(M, I);\
-  else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\
-                   (B == smallbin_at(M,I) || ok_address(M, B)))) {\
-    F->bk = B;\
-    B->fd = F;\
-  }\
-  else {\
-    CORRUPTION_ERROR_ACTION(M);\
-  }\
-}
-
-/* Unlink the first chunk from a smallbin */
-#define unlink_first_small_chunk(M, B, P, I) {\
-  mchunkptr F = P->fd;\
-  assert(P != B);\
-  assert(P != F);\
-  assert(chunksize(P) == small_index2size(I));\
-  if (B == F)\
-    clear_smallmap(M, I);\
-  else if (RTCHECK(ok_address(M, F))) {\
-    B->fd = F;\
-    F->bk = B;\
-  }\
-  else {\
-    CORRUPTION_ERROR_ACTION(M);\
-  }\
-}
-
-/* Replace dv node, binning the old one */
-/* Used only when dvsize known to be small */
-#define replace_dv(M, P, S) {\
-  size_t DVS = M->dvsize;\
-  if (DVS != 0) {\
-    mchunkptr DV = M->dv;\
-    assert(is_small(DVS));\
-    insert_small_chunk(M, DV, DVS);\
-  }\
-  M->dvsize = S;\
-  M->dv = P;\
-}
-
-/* ------------------------- Operations on trees ------------------------- */
-
-/* Insert chunk into tree */
-#define insert_large_chunk(M, X, S) {\
-  tbinptr* H;\
-  bindex_t I;\
-  compute_tree_index(S, I);\
-  H = treebin_at(M, I);\
-  X->index = I;\
-  X->child[0] = X->child[1] = 0;\
-  if (!treemap_is_marked(M, I)) {\
-    mark_treemap(M, I);\
-    *H = X;\
-    X->parent = (tchunkptr)H;\
-    X->fd = X->bk = X;\
-  }\
-  else {\
-    tchunkptr T = *H;\
-    size_t K = S << leftshift_for_tree_index(I);\
-    for (;;) {\
-      if (chunksize(T) != S) {\
-        tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\
-        K <<= 1;\
-        if (*C != 0)\
-          T = *C;\
-        else if (RTCHECK(ok_address(M, C))) {\
-          *C = X;\
-          X->parent = T;\
-          X->fd = X->bk = X;\
-          break;\
-        }\
-        else {\
-          CORRUPTION_ERROR_ACTION(M);\
-          break;\
-        }\
-      }\
-      else {\
-        tchunkptr F = T->fd;\
-        if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\
-          T->fd = F->bk = X;\
-          X->fd = F;\
-          X->bk = T;\
-          X->parent = 0;\
-          break;\
-        }\
-        else {\
-          CORRUPTION_ERROR_ACTION(M);\
-          break;\
-        }\
-      }\
-    }\
-  }\
-}
-
-/*
-  Unlink steps:
-
-  1. If x is a chained node, unlink it from its same-sized fd/bk links
-     and choose its bk node as its replacement.
-  2. If x was the last node of its size, but not a leaf node, it must
-     be replaced with a leaf node (not merely one with an open left or
-     right), to make sure that lefts and rights of descendents
-     correspond properly to bit masks.  We use the rightmost descendent
-     of x.  We could use any other leaf, but this is easy to locate and
-     tends to counteract removal of leftmosts elsewhere, and so keeps
-     paths shorter than minimally guaranteed.  This doesn't loop much
-     because on average a node in a tree is near the bottom.
-  3. If x is the base of a chain (i.e., has parent links) relink
-     x's parent and children to x's replacement (or null if none).
-*/
-
-#define unlink_large_chunk(M, X) {\
-  tchunkptr XP = X->parent;\
-  tchunkptr R;\
-  if (X->bk != X) {\
-    tchunkptr F = X->fd;\
-    R = X->bk;\
-    if (RTCHECK(ok_address(M, F))) {\
-      F->bk = R;\
-      R->fd = F;\
-    }\
-    else {\
-      CORRUPTION_ERROR_ACTION(M);\
-    }\
-  }\
-  else {\
-    tchunkptr* RP;\
-    if (((R = *(RP = &(X->child[1]))) != 0) ||\
-        ((R = *(RP = &(X->child[0]))) != 0)) {\
-      tchunkptr* CP;\
-      while ((*(CP = &(R->child[1])) != 0) ||\
-             (*(CP = &(R->child[0])) != 0)) {\
-        R = *(RP = CP);\
-      }\
-      if (RTCHECK(ok_address(M, RP)))\
-        *RP = 0;\
-      else {\
-        CORRUPTION_ERROR_ACTION(M);\
-      }\
-    }\
-  }\
-  if (XP != 0) {\
-    tbinptr* H = treebin_at(M, X->index);\
-    if (X == *H) {\
-      if ((*H = R) == 0) \
-        clear_treemap(M, X->index);\
-    }\
-    else if (RTCHECK(ok_address(M, XP))) {\
-      if (XP->child[0] == X) \
-        XP->child[0] = R;\
-      else \
-        XP->child[1] = R;\
-    }\
-    else\
-      CORRUPTION_ERROR_ACTION(M);\
-    if (R != 0) {\
-      if (RTCHECK(ok_address(M, R))) {\
-        tchunkptr C0, C1;\
-        R->parent = XP;\
-        if ((C0 = X->child[0]) != 0) {\
-          if (RTCHECK(ok_address(M, C0))) {\
-            R->child[0] = C0;\
-            C0->parent = R;\
-          }\
-          else\
-            CORRUPTION_ERROR_ACTION(M);\
-        }\
-        if ((C1 = X->child[1]) != 0) {\
-          if (RTCHECK(ok_address(M, C1))) {\
-            R->child[1] = C1;\
-            C1->parent = R;\
-          }\
-          else\
-            CORRUPTION_ERROR_ACTION(M);\
-        }\
-      }\
-      else\
-        CORRUPTION_ERROR_ACTION(M);\
-    }\
-  }\
-}
-
-/* Relays to large vs small bin operations */
-
-#define insert_chunk(M, P, S)\
-  if (is_small(S)) insert_small_chunk(M, P, S)\
-  else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); }
-
-#define unlink_chunk(M, P, S)\
-  if (is_small(S)) unlink_small_chunk(M, P, S)\
-  else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); }
-
-
-/* Relays to internal calls to malloc/free from realloc, memalign etc */
-
-#if ONLY_MSPACES
-#define internal_malloc(m, b) mspace_malloc(m, b)
-#define internal_free(m, mem) mspace_free(m,mem);
-#else /* ONLY_MSPACES */
-#if MSPACES
-#define internal_malloc(m, b)\
-   (m == gm)? dlmalloc(b) : mspace_malloc(m, b)
-#define internal_free(m, mem)\
-   if (m == gm) dlfree(mem); else mspace_free(m,mem);
-#else /* MSPACES */
-#define internal_malloc(m, b) dlmalloc(b)
-#define internal_free(m, mem) dlfree(mem)
-#endif /* MSPACES */
-#endif /* ONLY_MSPACES */
-
-/* -----------------------  Direct-mmapping chunks ----------------------- */
-
-/*
-  Directly mmapped chunks are set up with an offset to the start of
-  the mmapped region stored in the prev_foot field of the chunk. This
-  allows reconstruction of the required argument to MUNMAP when freed,
-  and also allows adjustment of the returned chunk to meet alignment
-  requirements (especially in memalign).  There is also enough space
-  allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain
-  the PINUSE bit so frees can be checked.
-*/
-
-/* Malloc using mmap */
-static void* mmap_alloc(mstate m, size_t nb) {
-  size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
-  if (mmsize > nb) {     /* Check for wrap around 0 */
-    char* mm = (char*)(DIRECT_MMAP(mmsize));
-    if (mm != CMFAIL) {
-      size_t offset = align_offset(chunk2mem(mm));
-      size_t psize = mmsize - offset - MMAP_FOOT_PAD;
-      mchunkptr p = (mchunkptr)(mm + offset);
-      p->prev_foot = offset | IS_MMAPPED_BIT;
-      (p)->head = (psize|CINUSE_BIT);
-      mark_inuse_foot(m, p, psize);
-      chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD;
-      chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0;
-
-      if (mm < m->least_addr)
-        m->least_addr = mm;
-      if ((m->footprint += mmsize) > m->max_footprint)
-        m->max_footprint = m->footprint;
-      assert(is_aligned(chunk2mem(p)));
-      check_mmapped_chunk(m, p);
-      return chunk2mem(p);
-    }
-  }
-  return 0;
-}
-
-/* Realloc using mmap */
-static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) {
-  size_t oldsize = chunksize(oldp);
-  if (is_small(nb)) /* Can't shrink mmap regions below small size */
-    return 0;
-  /* Keep old chunk if big enough but not too big */
-  if (oldsize >= nb + SIZE_T_SIZE &&
-      (oldsize - nb) <= (mparams.granularity << 1))
-    return oldp;
-  else {
-    size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT;
-    size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD;
-    size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES +
-                                         CHUNK_ALIGN_MASK);
-    char* cp = (char*)CALL_MREMAP((char*)oldp - offset,
-                                  oldmmsize, newmmsize, 1);
-    if (cp != CMFAIL) {
-      mchunkptr newp = (mchunkptr)(cp + offset);
-      size_t psize = newmmsize - offset - MMAP_FOOT_PAD;
-      newp->head = (psize|CINUSE_BIT);
-      mark_inuse_foot(m, newp, psize);
-      chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD;
-      chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0;
-
-      if (cp < m->least_addr)
-        m->least_addr = cp;
-      if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint)
-        m->max_footprint = m->footprint;
-      check_mmapped_chunk(m, newp);
-      return newp;
-    }
-  }
-  return 0;
-}
-
-/* -------------------------- mspace management -------------------------- */
-
-/* Initialize top chunk and its size */
-static void init_top(mstate m, mchunkptr p, size_t psize) {
-  /* Ensure alignment */
-  size_t offset = align_offset(chunk2mem(p));
-  p = (mchunkptr)((char*)p + offset);
-  psize -= offset;
-
-  m->top = p;
-  m->topsize = psize;
-  p->head = psize | PINUSE_BIT;
-  /* set size of fake trailing chunk holding overhead space only once */
-  chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE;
-  m->trim_check = mparams.trim_threshold; /* reset on each update */
-}
-
-/* Initialize bins for a new mstate that is otherwise zeroed out */
-static void init_bins(mstate m) {
-  /* Establish circular links for smallbins */
-  bindex_t i;
-  for (i = 0; i < NSMALLBINS; ++i) {
-    sbinptr bin = smallbin_at(m,i);
-    bin->fd = bin->bk = bin;
-  }
-}
-
-#if PROCEED_ON_ERROR
-
-/* default corruption action */
-static void reset_on_error(mstate m) {
-  int i;
-  ++malloc_corruption_error_count;
-  /* Reinitialize fields to forget about all memory */
-  m->smallbins = m->treebins = 0;
-  m->dvsize = m->topsize = 0;
-  m->seg.base = 0;
-  m->seg.size = 0;
-  m->seg.next = 0;
-  m->top = m->dv = 0;
-  for (i = 0; i < NTREEBINS; ++i)
-    *treebin_at(m, i) = 0;
-  init_bins(m);
-}
-#endif /* PROCEED_ON_ERROR */
-
-/* Allocate chunk and prepend remainder with chunk in successor base. */
-static void* prepend_alloc(mstate m, char* newbase, char* oldbase,
-                           size_t nb) {
-  mchunkptr p = align_as_chunk(newbase);
-  mchunkptr oldfirst = align_as_chunk(oldbase);
-  size_t psize = (char*)oldfirst - (char*)p;
-  mchunkptr q = chunk_plus_offset(p, nb);
-  size_t qsize = psize - nb;
-  set_size_and_pinuse_of_inuse_chunk(m, p, nb);
-
-  assert((char*)oldfirst > (char*)q);
-  assert(pinuse(oldfirst));
-  assert(qsize >= MIN_CHUNK_SIZE);
-
-  /* consolidate remainder with first chunk of old base */
-  if (oldfirst == m->top) {
-    size_t tsize = m->topsize += qsize;
-    m->top = q;
-    q->head = tsize | PINUSE_BIT;
-    check_top_chunk(m, q);
-  }
-  else if (oldfirst == m->dv) {
-    size_t dsize = m->dvsize += qsize;
-    m->dv = q;
-    set_size_and_pinuse_of_free_chunk(q, dsize);
-  }
-  else {
-    if (!cinuse(oldfirst)) {
-      size_t nsize = chunksize(oldfirst);
-      unlink_chunk(m, oldfirst, nsize);
-      oldfirst = chunk_plus_offset(oldfirst, nsize);
-      qsize += nsize;
-    }
-    set_free_with_pinuse(q, qsize, oldfirst);
-    insert_chunk(m, q, qsize);
-    check_free_chunk(m, q);
-  }
-
-  check_malloced_chunk(m, chunk2mem(p), nb);
-  return chunk2mem(p);
-}
-
-
-/* Add a segment to hold a new noncontiguous region */
-static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
-  /* Determine locations and sizes of segment, fenceposts, old top */
-  char* old_top = (char*)m->top;
-  msegmentptr oldsp = segment_holding(m, old_top);
-  char* old_end = oldsp->base + oldsp->size;
-  size_t ssize = pad_request(sizeof(struct malloc_segment));
-  char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK);
-  size_t offset = align_offset(chunk2mem(rawsp));
-  char* asp = rawsp + offset;
-  char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp;
-  mchunkptr sp = (mchunkptr)csp;
-  msegmentptr ss = (msegmentptr)(chunk2mem(sp));
-  mchunkptr tnext = chunk_plus_offset(sp, ssize);
-  mchunkptr p = tnext;
-  int nfences = 0;
-
-  /* reset top to new space */
-  init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
-
-  /* Set up segment record */
-  assert(is_aligned(ss));
-  set_size_and_pinuse_of_inuse_chunk(m, sp, ssize);
-  *ss = m->seg; /* Push current record */
-  m->seg.base = tbase;
-  m->seg.size = tsize;
-  m->seg.sflags = mmapped;
-  m->seg.next = ss;
-
-  /* Insert trailing fenceposts */
-  for (;;) {
-    mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE);
-    p->head = FENCEPOST_HEAD;
-    ++nfences;
-    if ((char*)(&(nextp->head)) < old_end)
-      p = nextp;
-    else
-      break;
-  }
-  assert(nfences >= 2);
-
-  /* Insert the rest of old top into a bin as an ordinary free chunk */
-  if (csp != old_top) {
-    mchunkptr q = (mchunkptr)old_top;
-    size_t psize = csp - old_top;
-    mchunkptr tn = chunk_plus_offset(q, psize);
-    set_free_with_pinuse(q, psize, tn);
-    insert_chunk(m, q, psize);
-  }
-
-  check_top_chunk(m, m->top);
-}
-
-/* -------------------------- System allocation -------------------------- */
-
-/* Get memory from system using MORECORE or MMAP */
-static void* sys_alloc(mstate m, size_t nb) {
-  char* tbase = CMFAIL;
-  size_t tsize = 0;
-  flag_t mmap_flag = 0;
-
-  init_mparams();
-
-  /* Directly map large chunks */
-  if (use_mmap(m) && nb >= mparams.mmap_threshold) {
-    void* mem = mmap_alloc(m, nb);
-    if (mem != 0)
-      return mem;
-  }
-
-  /*
-    Try getting memory in any of three ways (in most-preferred to
-    least-preferred order):
-    1. A call to MORECORE that can normally contiguously extend memory.
-       (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or
-       or main space is mmapped or a previous contiguous call failed)
-    2. A call to MMAP new space (disabled if not HAVE_MMAP).
-       Note that under the default settings, if MORECORE is unable to
-       fulfill a request, and HAVE_MMAP is true, then mmap is
-       used as a noncontiguous system allocator. This is a useful backup
-       strategy for systems with holes in address spaces -- in this case
-       sbrk cannot contiguously expand the heap, but mmap may be able to
-       find space.
-    3. A call to MORECORE that cannot usually contiguously extend memory.
-       (disabled if not HAVE_MORECORE)
-  */
-
-  if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) {
-    char* br = CMFAIL;
-    msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top);
-    size_t asize = 0;
-    ACQUIRE_MORECORE_LOCK();
-
-    if (ss == 0) {  /* First time through or recovery */
-      char* base = (char*)CALL_MORECORE(0);
-      if (base != CMFAIL) {
-        asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE);
-        /* Adjust to end on a page boundary */
-        if (!is_page_aligned(base))
-          asize += (page_align((size_t)base) - (size_t)base);
-        /* Can't call MORECORE if size is negative when treated as signed */
-        if (asize < HALF_MAX_SIZE_T &&
-            (br = (char*)(CALL_MORECORE(asize))) == base) {
-          tbase = base;
-          tsize = asize;
-        }
-      }
-    }
-    else {
-      /* Subtract out existing available top space from MORECORE request. */
-      asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE);
-      /* Use mem here only if it did continuously extend old space */
-      if (asize < HALF_MAX_SIZE_T &&
-          (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) {
-        tbase = br;
-        tsize = asize;
-      }
-    }
-
-    if (tbase == CMFAIL) {    /* Cope with partial failure */
-      if (br != CMFAIL) {    /* Try to use/extend the space we did get */
-        if (asize < HALF_MAX_SIZE_T &&
-            asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) {
-          size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize);
-          if (esize < HALF_MAX_SIZE_T) {
-            char* end = (char*)CALL_MORECORE(esize);
-            if (end != CMFAIL)
-              asize += esize;
-            else {            /* Can't use; try to release */
-              CALL_MORECORE(-asize);
-              br = CMFAIL;
-            }
-          }
-        }
-      }
-      if (br != CMFAIL) {    /* Use the space we did get */
-        tbase = br;
-        tsize = asize;
-      }
-      else
-        disable_contiguous(m); /* Don't try contiguous path in the future */
-    }
-
-    RELEASE_MORECORE_LOCK();
-  }
-
-  if (HAVE_MMAP && tbase == CMFAIL) {  /* Try MMAP */
-    size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE;
-    size_t rsize = granularity_align(req);
-    if (rsize > nb) { /* Fail if wraps around zero */
-      char* mp = (char*)(CALL_MMAP(rsize));
-      if (mp != CMFAIL) {
-        tbase = mp;
-        tsize = rsize;
-        mmap_flag = IS_MMAPPED_BIT;
-      }
-    }
-  }
-
-  if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */
-    size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE);
-    if (asize < HALF_MAX_SIZE_T) {
-      char* br = CMFAIL;
-      char* end = CMFAIL;
-      ACQUIRE_MORECORE_LOCK();
-      br = (char*)(CALL_MORECORE(asize));
-      end = (char*)(CALL_MORECORE(0));
-      RELEASE_MORECORE_LOCK();
-      if (br != CMFAIL && end != CMFAIL && br < end) {
-        size_t ssize = end - br;
-        if (ssize > nb + TOP_FOOT_SIZE) {
-          tbase = br;
-          tsize = ssize;
-        }
-      }
-    }
-  }
-
-  if (tbase != CMFAIL) {
-
-    if ((m->footprint += tsize) > m->max_footprint)
-      m->max_footprint = m->footprint;
-
-    if (!is_initialized(m)) { /* first-time initialization */
-      m->seg.base = m->least_addr = tbase;
-      m->seg.size = tsize;
-      m->seg.sflags = mmap_flag;
-      m->magic = mparams.magic;
-      init_bins(m);
-      if (is_global(m)) 
-        init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE);
-      else {
-        /* Offset top by embedded malloc_state */
-        mchunkptr mn = next_chunk(mem2chunk(m));
-        init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE);
-      }
-    }
-
-    else {
-      /* Try to merge with an existing segment */
-      msegmentptr sp = &m->seg;
-      while (sp != 0 && tbase != sp->base + sp->size)
-        sp = sp->next;
-      if (sp != 0 &&
-          !is_extern_segment(sp) &&
-          (sp->sflags & IS_MMAPPED_BIT) == mmap_flag &&
-          segment_holds(sp, m->top)) { /* append */
-        sp->size += tsize;
-        init_top(m, m->top, m->topsize + tsize);
-      }
-      else {
-        if (tbase < m->least_addr)
-          m->least_addr = tbase;
-        sp = &m->seg;
-        while (sp != 0 && sp->base != tbase + tsize)
-          sp = sp->next;
-        if (sp != 0 &&
-            !is_extern_segment(sp) &&
-            (sp->sflags & IS_MMAPPED_BIT) == mmap_flag) {
-          char* oldbase = sp->base;
-          sp->base = tbase;
-          sp->size += tsize;
-          return prepend_alloc(m, tbase, oldbase, nb);
-        }
-        else
-          add_segment(m, tbase, tsize, mmap_flag);
-      }
-    }
-
-    if (nb < m->topsize) { /* Allocate from new or extended top space */
-      size_t rsize = m->topsize -= nb;
-      mchunkptr p = m->top;
-      mchunkptr r = m->top = chunk_plus_offset(p, nb);
-      r->head = rsize | PINUSE_BIT;
-      set_size_and_pinuse_of_inuse_chunk(m, p, nb);
-      check_top_chunk(m, m->top);
-      check_malloced_chunk(m, chunk2mem(p), nb);
-      return chunk2mem(p);
-    }
-  }
-
-  MALLOC_FAILURE_ACTION;
-  return 0;
-}
-
-/* -----------------------  system deallocation -------------------------- */
-
-/* Unmap and unlink any mmapped segments that don't contain used chunks */
-static size_t release_unused_segments(mstate m) {
-  size_t released = 0;
-  msegmentptr pred = &m->seg;
-  msegmentptr sp = pred->next;
-  while (sp != 0) {
-    char* base = sp->base;
-    size_t size = sp->size;
-    msegmentptr next = sp->next;
-    if (is_mmapped_segment(sp) && !is_extern_segment(sp)) {
-      mchunkptr p = align_as_chunk(base);
-      size_t psize = chunksize(p);
-      /* Can unmap if first chunk holds entire segment and not pinned */
-      if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) {
-        tchunkptr tp = (tchunkptr)p;
-        assert(segment_holds(sp, (char*)sp));
-        if (p == m->dv) {
-          m->dv = 0;
-          m->dvsize = 0;
-        }
-        else {
-          unlink_large_chunk(m, tp);
-        }
-        if (CALL_MUNMAP(base, size) == 0) {
-          released += size;
-          m->footprint -= size;
-          /* unlink obsoleted record */
-          sp = pred;
-          sp->next = next;
-        }
-        else { /* back out if cannot unmap */
-          insert_large_chunk(m, tp, psize);
-        }
-      }
-    }
-    pred = sp;
-    sp = next;
-  }
-  return released;
-}
-
-static int sys_trim(mstate m, size_t pad) {
-  size_t released = 0;
-  if (pad < MAX_REQUEST && is_initialized(m)) {
-    pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */
-
-    if (m->topsize > pad) {
-      /* Shrink top space in granularity-size units, keeping at least one */
-      size_t unit = mparams.granularity;
-      size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit -
-                      SIZE_T_ONE) * unit;
-      msegmentptr sp = segment_holding(m, (char*)m->top);
-
-      if (!is_extern_segment(sp)) {
-        if (is_mmapped_segment(sp)) {
-          if (HAVE_MMAP &&
-              sp->size >= extra &&
-              !has_segment_link(m, sp)) { /* can't shrink if pinned */
-            /* Prefer mremap, fall back to munmap */
-            if ((CALL_MREMAP(sp->base, sp->size, sp->size - extra, 0) != MFAIL) ||
-                (CALL_MUNMAP(sp->base + sp->size - extra, extra) == 0)) {
-              released = extra;
-            }
-          }
-        }
-        else if (HAVE_MORECORE) {
-          if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */
-            extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit;
-          ACQUIRE_MORECORE_LOCK();
-          {
-            /* Make sure end of memory is where we last set it. */
-            char* old_br = (char*)(CALL_MORECORE(0));
-            if (old_br == sp->base + sp->size) {
-              char* rel_br = (char*)(CALL_MORECORE(-extra));
-              char* new_br = (char*)(CALL_MORECORE(0));
-              if (rel_br != CMFAIL && new_br < old_br)
-                released = old_br - new_br;
-            }
-          }
-          RELEASE_MORECORE_LOCK();
-        }
-      }
-
-      if (released != 0) {
-        sp->size -= released;
-        m->footprint -= released;
-        init_top(m, m->top, m->topsize - released);
-        check_top_chunk(m, m->top);
-      }
-    }
-
-    /* Unmap any unused mmapped segments */
-    if (HAVE_MMAP) 
-      released += release_unused_segments(m);
-
-    /* On failure, disable autotrim to avoid repeated failed future calls */
-    if (released == 0)
-      m->trim_check = MAX_SIZE_T;
-  }
-
-  return (released != 0)? 1 : 0;
-}
-
-/* ---------------------------- malloc support --------------------------- */
-
-/* allocate a large request from the best fitting chunk in a treebin */
-static void* tmalloc_large(mstate m, size_t nb) {
-  tchunkptr v = 0;
-  size_t rsize = -nb; /* Unsigned negation */
-  tchunkptr t;
-  bindex_t idx;
-  compute_tree_index(nb, idx);
-
-  if ((t = *treebin_at(m, idx)) != 0) {
-    /* Traverse tree for this bin looking for node with size == nb */
-    size_t sizebits = nb << leftshift_for_tree_index(idx);
-    tchunkptr rst = 0;  /* The deepest untaken right subtree */
-    for (;;) {
-      tchunkptr rt;
-      size_t trem = chunksize(t) - nb;
-      if (trem < rsize) {
-        v = t;
-        if ((rsize = trem) == 0)
-          break;
-      }
-      rt = t->child[1];
-      t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1];
-      if (rt != 0 && rt != t)
-        rst = rt;
-      if (t == 0) {
-        t = rst; /* set t to least subtree holding sizes > nb */
-        break;
-      }
-      sizebits <<= 1;
-    }
-  }
-
-  if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */
-    binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap;
-    if (leftbits != 0) {
-      bindex_t i;
-      binmap_t leastbit = least_bit(leftbits);
-      compute_bit2idx(leastbit, i);
-      t = *treebin_at(m, i);
-    }
-  }
-
-  while (t != 0) { /* find smallest of tree or subtree */
-    size_t trem = chunksize(t) - nb;
-    if (trem < rsize) {
-      rsize = trem;
-      v = t;
-    }
-    t = leftmost_child(t);
-  }
-
-  /*  If dv is a better fit, return 0 so malloc will use it */
-  if (v != 0 && rsize < (size_t)(m->dvsize - nb)) {
-    if (RTCHECK(ok_address(m, v))) { /* split */
-      mchunkptr r = chunk_plus_offset(v, nb);
-      assert(chunksize(v) == rsize + nb);
-      if (RTCHECK(ok_next(v, r))) {
-        unlink_large_chunk(m, v);
-        if (rsize < MIN_CHUNK_SIZE)
-          set_inuse_and_pinuse(m, v, (rsize + nb));
-        else {
-          set_size_and_pinuse_of_inuse_chunk(m, v, nb);
-          set_size_and_pinuse_of_free_chunk(r, rsize);
-          insert_chunk(m, r, rsize);
-        }
-        return chunk2mem(v);
-      }
-    }
-    CORRUPTION_ERROR_ACTION(m);
-  }
-  return 0;
-}
-
-/* allocate a small request from the best fitting chunk in a treebin */
-static void* tmalloc_small(mstate m, size_t nb) {
-  tchunkptr t, v;
-  size_t rsize;
-  bindex_t i;
-  binmap_t leastbit = least_bit(m->treemap);
-  compute_bit2idx(leastbit, i);
-
-  v = t = *treebin_at(m, i);
-  rsize = chunksize(t) - nb;
-
-  while ((t = leftmost_child(t)) != 0) {
-    size_t trem = chunksize(t) - nb;
-    if (trem < rsize) {
-      rsize = trem;
-      v = t;
-    }
-  }
-
-  if (RTCHECK(ok_address(m, v))) {
-    mchunkptr r = chunk_plus_offset(v, nb);
-    assert(chunksize(v) == rsize + nb);
-    if (RTCHECK(ok_next(v, r))) {
-      unlink_large_chunk(m, v);
-      if (rsize < MIN_CHUNK_SIZE)
-        set_inuse_and_pinuse(m, v, (rsize + nb));
-      else {
-        set_size_and_pinuse_of_inuse_chunk(m, v, nb);
-        set_size_and_pinuse_of_free_chunk(r, rsize);
-        replace_dv(m, r, rsize);
-      }
-      return chunk2mem(v);
-    }
-  }
-
-  CORRUPTION_ERROR_ACTION(m);
-  return 0;
-}
-
-/* --------------------------- realloc support --------------------------- */
-
-static void* internal_realloc(mstate m, void* oldmem, size_t bytes) {
-  if (bytes >= MAX_REQUEST) {
-    MALLOC_FAILURE_ACTION;
-    return 0;
-  }
-  if (!PREACTION(m)) {
-    mchunkptr oldp = mem2chunk(oldmem);
-    size_t oldsize = chunksize(oldp);
-    mchunkptr next = chunk_plus_offset(oldp, oldsize);
-    mchunkptr newp = 0;
-    void* extra = 0;
-
-    /* Try to either shrink or extend into top. Else malloc-copy-free */
-
-    if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) &&
-                ok_next(oldp, next) && ok_pinuse(next))) {
-      size_t nb = request2size(bytes);
-      if (is_mmapped(oldp))
-        newp = mmap_resize(m, oldp, nb);
-      else if (oldsize >= nb) { /* already big enough */
-        size_t rsize = oldsize - nb;
-        newp = oldp;
-        if (rsize >= MIN_CHUNK_SIZE) {
-          mchunkptr remainder = chunk_plus_offset(newp, nb);
-          set_inuse(m, newp, nb);
-          set_inuse(m, remainder, rsize);
-          extra = chunk2mem(remainder);
-        }
-      }
-      else if (next == m->top && oldsize + m->topsize > nb) {
-        /* Expand into top */
-        size_t newsize = oldsize + m->topsize;
-        size_t newtopsize = newsize - nb;
-        mchunkptr newtop = chunk_plus_offset(oldp, nb);
-        set_inuse(m, oldp, nb);
-        newtop->head = newtopsize |PINUSE_BIT;
-        m->top = newtop;
-        m->topsize = newtopsize;
-        newp = oldp;
-      }
-    }
-    else {
-      USAGE_ERROR_ACTION(m, oldmem);
-      POSTACTION(m);
-      return 0;
-    }
-
-    POSTACTION(m);
-
-    if (newp != 0) {
-      if (extra != 0) {
-        internal_free(m, extra);
-      }
-      check_inuse_chunk(m, newp);
-      return chunk2mem(newp);
-    }
-    else {
-      void* newmem = internal_malloc(m, bytes);
-      if (newmem != 0) {
-        size_t oc = oldsize - overhead_for(oldp);
-        memcpy(newmem, oldmem, (oc < bytes)? oc : bytes);
-        internal_free(m, oldmem);
-      }
-      return newmem;
-    }
-  }
-  return 0;
-}
-
-/* --------------------------- memalign support -------------------------- */
-
-static void* internal_memalign(mstate m, size_t alignment, size_t bytes) {
-  if (alignment <= MALLOC_ALIGNMENT)    /* Can just use malloc */
-    return internal_malloc(m, bytes);
-  if (alignment <  MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */
-    alignment = MIN_CHUNK_SIZE;
-  if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */
-    size_t a = MALLOC_ALIGNMENT << 1;
-    while (a < alignment) a <<= 1;
-    alignment = a;
-  }
-  
-  if (bytes >= MAX_REQUEST - alignment) {
-    if (m != 0)  { /* Test isn't needed but avoids compiler warning */
-      MALLOC_FAILURE_ACTION;
-    }
-  }
-  else {
-    size_t nb = request2size(bytes);
-    size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD;
-    char* mem = (char*)internal_malloc(m, req);
-    if (mem != 0) {
-      void* leader = 0;
-      void* trailer = 0;
-      mchunkptr p = mem2chunk(mem);
-
-      if (PREACTION(m)) return 0;
-      if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */
-        /*
-          Find an aligned spot inside chunk.  Since we need to give
-          back leading space in a chunk of at least MIN_CHUNK_SIZE, if
-          the first calculation places us at a spot with less than
-          MIN_CHUNK_SIZE leader, we can move to the next aligned spot.
-          We've allocated enough total room so that this is always
-          possible.
-        */
-        char* br = (char*)mem2chunk((size_t)(((size_t)(mem +
-                                                       alignment -
-                                                       SIZE_T_ONE)) &
-                                             -alignment));
-        char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)?
-          br : br+alignment;
-        mchunkptr newp = (mchunkptr)pos;
-        size_t leadsize = pos - (char*)(p);
-        size_t newsize = chunksize(p) - leadsize;
-
-        if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */
-          newp->prev_foot = p->prev_foot + leadsize;
-          newp->head = (newsize|CINUSE_BIT);
-        }
-        else { /* Otherwise, give back leader, use the rest */
-          set_inuse(m, newp, newsize);
-          set_inuse(m, p, leadsize);
-          leader = chunk2mem(p);
-        }
-        p = newp;
-      }
-
-      /* Give back spare room at the end */
-      if (!is_mmapped(p)) {
-        size_t size = chunksize(p);
-        if (size > nb + MIN_CHUNK_SIZE) {
-          size_t remainder_size = size - nb;
-          mchunkptr remainder = chunk_plus_offset(p, nb);
-          set_inuse(m, p, nb);
-          set_inuse(m, remainder, remainder_size);
-          trailer = chunk2mem(remainder);
-        }
-      }
-
-      assert (chunksize(p) >= nb);
-      assert((((size_t)(chunk2mem(p))) % alignment) == 0);
-      check_inuse_chunk(m, p);
-      POSTACTION(m);
-      if (leader != 0) {
-        internal_free(m, leader);
-      }
-      if (trailer != 0) {
-        internal_free(m, trailer);
-      }
-      return chunk2mem(p);
-    }
-  }
-  return 0;
-}
-
-/* ------------------------ comalloc/coalloc support --------------------- */
-
-static void** ialloc(mstate m,
-                     size_t n_elements,
-                     size_t* sizes,
-                     int opts,
-                     void* chunks[]) {
-  /*
-    This provides common support for independent_X routines, handling
-    all of the combinations that can result.
-
-    The opts arg has:
-    bit 0 set if all elements are same size (using sizes[0])
-    bit 1 set if elements should be zeroed
-  */
-
-  size_t    element_size;   /* chunksize of each element, if all same */
-  size_t    contents_size;  /* total size of elements */
-  size_t    array_size;     /* request size of pointer array */
-  void*     mem;            /* malloced aggregate space */
-  mchunkptr p;              /* corresponding chunk */
-  size_t    remainder_size; /* remaining bytes while splitting */
-  void**    marray;         /* either "chunks" or malloced ptr array */
-  mchunkptr array_chunk;    /* chunk for malloced ptr array */
-  flag_t    was_enabled;    /* to disable mmap */
-  size_t    size;
-  size_t    i;
-
-  /* compute array length, if needed */
-  if (chunks != 0) {
-    if (n_elements == 0)
-      return chunks; /* nothing to do */
-    marray = chunks;
-    array_size = 0;
-  }
-  else {
-    /* if empty req, must still return chunk representing empty array */
-    if (n_elements == 0)
-      return (void**)internal_malloc(m, 0);
-    marray = 0;
-    array_size = request2size(n_elements * (sizeof(void*)));
-  }
-
-  /* compute total element size */
-  if (opts & 0x1) { /* all-same-size */
-    element_size = request2size(*sizes);
-    contents_size = n_elements * element_size;
-  }
-  else { /* add up all the sizes */
-    element_size = 0;
-    contents_size = 0;
-    for (i = 0; i != n_elements; ++i)
-      contents_size += request2size(sizes[i]);
-  }
-
-  size = contents_size + array_size;
-
-  /*
-     Allocate the aggregate chunk.  First disable direct-mmapping so
-     malloc won't use it, since we would not be able to later
-     free/realloc space internal to a segregated mmap region.
-  */
-  was_enabled = use_mmap(m);
-  disable_mmap(m);
-  mem = internal_malloc(m, size - CHUNK_OVERHEAD);
-  if (was_enabled)
-    enable_mmap(m);
-  if (mem == 0)
-    return 0;
-
-  if (PREACTION(m)) return 0;
-  p = mem2chunk(mem);
-  remainder_size = chunksize(p);
-
-  assert(!is_mmapped(p));
-
-  if (opts & 0x2) {       /* optionally clear the elements */
-    memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size);
-  }
-
-  /* If not provided, allocate the pointer array as final part of chunk */
-  if (marray == 0) {
-    size_t  array_chunk_size;
-    array_chunk = chunk_plus_offset(p, contents_size);
-    array_chunk_size = remainder_size - contents_size;
-    marray = (void**) (chunk2mem(array_chunk));
-    set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size);
-    remainder_size = contents_size;
-  }
-
-  /* split out elements */
-  for (i = 0; ; ++i) {
-    marray[i] = chunk2mem(p);
-    if (i != n_elements-1) {
-      if (element_size != 0)
-        size = element_size;
-      else
-        size = request2size(sizes[i]);
-      remainder_size -= size;
-      set_size_and_pinuse_of_inuse_chunk(m, p, size);
-      p = chunk_plus_offset(p, size);
-    }
-    else { /* the final element absorbs any overallocation slop */
-      set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size);
-      break;
-    }
-  }
-
-#if DEBUG
-  if (marray != chunks) {
-    /* final element must have exactly exhausted chunk */
-    if (element_size != 0) {
-      assert(remainder_size == element_size);
-    }
-    else {
-      assert(remainder_size == request2size(sizes[i]));
-    }
-    check_inuse_chunk(m, mem2chunk(marray));
-  }
-  for (i = 0; i != n_elements; ++i)
-    check_inuse_chunk(m, mem2chunk(marray[i]));
-
-#endif /* DEBUG */
-
-  POSTACTION(m);
-  return marray;
-}
-
-
-/* -------------------------- public routines ---------------------------- */
-
-#if !ONLY_MSPACES
-
-void* dlmalloc(size_t bytes) {
-  /*
-     Basic algorithm:
-     If a small request (< 256 bytes minus per-chunk overhead):
-       1. If one exists, use a remainderless chunk in associated smallbin.
-          (Remainderless means that there are too few excess bytes to
-          represent as a chunk.)
-       2. If it is big enough, use the dv chunk, which is normally the
-          chunk adjacent to the one used for the most recent small request.
-       3. If one exists, split the smallest available chunk in a bin,
-          saving remainder in dv.
-       4. If it is big enough, use the top chunk.
-       5. If available, get memory from system and use it
-     Otherwise, for a large request:
-       1. Find the smallest available binned chunk that fits, and use it
-          if it is better fitting than dv chunk, splitting if necessary.
-       2. If better fitting than any binned chunk, use the dv chunk.
-       3. If it is big enough, use the top chunk.
-       4. If request size >= mmap threshold, try to directly mmap this chunk.
-       5. If available, get memory from system and use it
-
-     The ugly goto's here ensure that postaction occurs along all paths.
-  */
-
-  if (!PREACTION(gm)) {
-    void* mem;
-    size_t nb;
-    if (bytes <= MAX_SMALL_REQUEST) {
-      bindex_t idx;
-      binmap_t smallbits;
-      nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
-      idx = small_index(nb);
-      smallbits = gm->smallmap >> idx;
-
-      if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
-        mchunkptr b, p;
-        idx += ~smallbits & 1;       /* Uses next bin if idx empty */
-        b = smallbin_at(gm, idx);
-        p = b->fd;
-        assert(chunksize(p) == small_index2size(idx));
-        unlink_first_small_chunk(gm, b, p, idx);
-        set_inuse_and_pinuse(gm, p, small_index2size(idx));
-        mem = chunk2mem(p);
-        check_malloced_chunk(gm, mem, nb);
-        goto postaction;
-      }
-
-      else if (nb > gm->dvsize) {
-        if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
-          mchunkptr b, p, r;
-          size_t rsize;
-          bindex_t i;
-          binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
-          binmap_t leastbit = least_bit(leftbits);
-          compute_bit2idx(leastbit, i);
-          b = smallbin_at(gm, i);
-          p = b->fd;
-          assert(chunksize(p) == small_index2size(i));
-          unlink_first_small_chunk(gm, b, p, i);
-          rsize = small_index2size(i) - nb;
-          /* Fit here cannot be remainderless if 4byte sizes */
-          if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
-            set_inuse_and_pinuse(gm, p, small_index2size(i));
-          else {
-            set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
-            r = chunk_plus_offset(p, nb);
-            set_size_and_pinuse_of_free_chunk(r, rsize);
-            replace_dv(gm, r, rsize);
-          }
-          mem = chunk2mem(p);
-          check_malloced_chunk(gm, mem, nb);
-          goto postaction;
-        }
-
-        else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) {
-          check_malloced_chunk(gm, mem, nb);
-          goto postaction;
-        }
-      }
-    }
-    else if (bytes >= MAX_REQUEST)
-      nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
-    else {
-      nb = pad_request(bytes);
-      if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) {
-        check_malloced_chunk(gm, mem, nb);
-        goto postaction;
-      }
-    }
-
-    if (nb <= gm->dvsize) {
-      size_t rsize = gm->dvsize - nb;
-      mchunkptr p = gm->dv;
-      if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
-        mchunkptr r = gm->dv = chunk_plus_offset(p, nb);
-        gm->dvsize = rsize;
-        set_size_and_pinuse_of_free_chunk(r, rsize);
-        set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
-      }
-      else { /* exhaust dv */
-        size_t dvs = gm->dvsize;
-        gm->dvsize = 0;
-        gm->dv = 0;
-        set_inuse_and_pinuse(gm, p, dvs);
-      }
-      mem = chunk2mem(p);
-      check_malloced_chunk(gm, mem, nb);
-      goto postaction;
-    }
-
-    else if (nb < gm->topsize) { /* Split top */
-      size_t rsize = gm->topsize -= nb;
-      mchunkptr p = gm->top;
-      mchunkptr r = gm->top = chunk_plus_offset(p, nb);
-      r->head = rsize | PINUSE_BIT;
-      set_size_and_pinuse_of_inuse_chunk(gm, p, nb);
-      mem = chunk2mem(p);
-      check_top_chunk(gm, gm->top);
-      check_malloced_chunk(gm, mem, nb);
-      goto postaction;
-    }
-
-    mem = sys_alloc(gm, nb);
-
-  postaction:
-    POSTACTION(gm);
-    return mem;
-  }
-
-  return 0;
-}
-
-void dlfree(void* mem) {
-  /*
-     Consolidate freed chunks with preceeding or succeeding bordering
-     free chunks, if they exist, and then place in a bin.  Intermixed
-     with special cases for top, dv, mmapped chunks, and usage errors.
-  */
-
-  if (mem != 0) {
-    mchunkptr p  = mem2chunk(mem);
-#if FOOTERS
-    mstate fm = get_mstate_for(p);
-    if (!ok_magic(fm)) {
-      USAGE_ERROR_ACTION(fm, p);
-      return;
-    }
-#else /* FOOTERS */
-#define fm gm
-#endif /* FOOTERS */
-    if (!PREACTION(fm)) {
-      check_inuse_chunk(fm, p);
-      if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) {
-        size_t psize = chunksize(p);
-        mchunkptr next = chunk_plus_offset(p, psize);
-        if (!pinuse(p)) {
-          size_t prevsize = p->prev_foot;
-          if ((prevsize & IS_MMAPPED_BIT) != 0) {
-            prevsize &= ~IS_MMAPPED_BIT;
-            psize += prevsize + MMAP_FOOT_PAD;
-            if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
-              fm->footprint -= psize;
-            goto postaction;
-          }
-          else {
-            mchunkptr prev = chunk_minus_offset(p, prevsize);
-            psize += prevsize;
-            p = prev;
-            if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
-              if (p != fm->dv) {
-                unlink_chunk(fm, p, prevsize);
-              }
-              else if ((next->head & INUSE_BITS) == INUSE_BITS) {
-                fm->dvsize = psize;
-                set_free_with_pinuse(p, psize, next);
-                goto postaction;
-              }
-            }
-            else
-              goto erroraction;
-          }
-        }
-
-        if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
-          if (!cinuse(next)) {  /* consolidate forward */
-            if (next == fm->top) {
-              size_t tsize = fm->topsize += psize;
-              fm->top = p;
-              p->head = tsize | PINUSE_BIT;
-              if (p == fm->dv) {
-                fm->dv = 0;
-                fm->dvsize = 0;
-              }
-              if (should_trim(fm, tsize))
-                sys_trim(fm, 0);
-              goto postaction;
-            }
-            else if (next == fm->dv) {
-              size_t dsize = fm->dvsize += psize;
-              fm->dv = p;
-              set_size_and_pinuse_of_free_chunk(p, dsize);
-              goto postaction;
-            }
-            else {
-              size_t nsize = chunksize(next);
-              psize += nsize;
-              unlink_chunk(fm, next, nsize);
-              set_size_and_pinuse_of_free_chunk(p, psize);
-              if (p == fm->dv) {
-                fm->dvsize = psize;
-                goto postaction;
-              }
-            }
-          }
-          else
-            set_free_with_pinuse(p, psize, next);
-          insert_chunk(fm, p, psize);
-          check_free_chunk(fm, p);
-          goto postaction;
-        }
-      }
-    erroraction:
-      USAGE_ERROR_ACTION(fm, p);
-    postaction:
-      POSTACTION(fm);
-    }
-  }
-#if !FOOTERS
-#undef fm
-#endif /* FOOTERS */
-}
-
-void* dlcalloc(size_t n_elements, size_t elem_size) {
-  void* mem;
-  size_t req = 0;
-  if (n_elements != 0) {
-    req = n_elements * elem_size;
-    if (((n_elements | elem_size) & ~(size_t)0xffff) &&
-        (req / n_elements != elem_size))
-      req = MAX_SIZE_T; /* force downstream failure on overflow */
-  }
-  mem = dlmalloc(req);
-  if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
-    memset(mem, 0, req);
-  return mem;
-}
-
-void* dlrealloc(void* oldmem, size_t bytes) {
-  if (oldmem == 0)
-    return dlmalloc(bytes);
-#ifdef REALLOC_ZERO_BYTES_FREES
-  if (bytes == 0) {
-    dlfree(oldmem);
-    return 0;
-  }
-#endif /* REALLOC_ZERO_BYTES_FREES */
-  else {
-#if ! FOOTERS
-    mstate m = gm;
-#else /* FOOTERS */
-    mstate m = get_mstate_for(mem2chunk(oldmem));
-    if (!ok_magic(m)) {
-      USAGE_ERROR_ACTION(m, oldmem);
-      return 0;
-    }
-#endif /* FOOTERS */
-    return internal_realloc(m, oldmem, bytes);
-  }
-}
-
-void* dlmemalign(size_t alignment, size_t bytes) {
-  return internal_memalign(gm, alignment, bytes);
-}
-
-void** dlindependent_calloc(size_t n_elements, size_t elem_size,
-                                 void* chunks[]) {
-  size_t sz = elem_size; /* serves as 1-element array */
-  return ialloc(gm, n_elements, &sz, 3, chunks);
-}
-
-void** dlindependent_comalloc(size_t n_elements, size_t sizes[],
-                                   void* chunks[]) {
-  return ialloc(gm, n_elements, sizes, 0, chunks);
-}
-
-void* dlvalloc(size_t bytes) {
-  size_t pagesz;
-  init_mparams();
-  pagesz = mparams.page_size;
-  return dlmemalign(pagesz, bytes);
-}
-
-void* dlpvalloc(size_t bytes) {
-  size_t pagesz;
-  init_mparams();
-  pagesz = mparams.page_size;
-  return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE));
-}
-
-int dlmalloc_trim(size_t pad) {
-  int result = 0;
-  if (!PREACTION(gm)) {
-    result = sys_trim(gm, pad);
-    POSTACTION(gm);
-  }
-  return result;
-}
-
-size_t dlmalloc_footprint(void) {
-  return gm->footprint;
-}
-
-size_t dlmalloc_max_footprint(void) {
-  return gm->max_footprint;
-}
-
-#if !NO_MALLINFO
-struct mallinfo dlmallinfo(void) {
-  return internal_mallinfo(gm);
-}
-#endif /* NO_MALLINFO */
-
-void dlmalloc_stats() {
-  internal_malloc_stats(gm);
-}
-
-size_t dlmalloc_usable_size(void* mem) {
-  if (mem != 0) {
-    mchunkptr p = mem2chunk(mem);
-    if (cinuse(p))
-      return chunksize(p) - overhead_for(p);
-  }
-  return 0;
-}
-
-int dlmallopt(int param_number, int value) {
-  return change_mparam(param_number, value);
-}
-
-#endif /* !ONLY_MSPACES */
-
-/* ----------------------------- user mspaces ---------------------------- */
-
-#if MSPACES
-
-static mstate init_user_mstate(char* tbase, size_t tsize) {
-  size_t msize = pad_request(sizeof(struct malloc_state));
-  mchunkptr mn;
-  mchunkptr msp = align_as_chunk(tbase);
-  mstate m = (mstate)(chunk2mem(msp));
-  memset(m, 0, msize);
-  INITIAL_LOCK(&m->mutex);
-  msp->head = (msize|PINUSE_BIT|CINUSE_BIT);
-  m->seg.base = m->least_addr = tbase;
-  m->seg.size = m->footprint = m->max_footprint = tsize;
-  m->magic = mparams.magic;
-  m->mflags = mparams.default_mflags;
-  disable_contiguous(m);
-  init_bins(m);
-  mn = next_chunk(mem2chunk(m));
-  init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE);
-  check_top_chunk(m, m->top);
-  return m;
-}
-
-mspace create_mspace(size_t capacity, int locked) {
-  mstate m = 0;
-  size_t msize = pad_request(sizeof(struct malloc_state));
-  init_mparams(); /* Ensure pagesize etc initialized */
-
-  if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
-    size_t rs = ((capacity == 0)? mparams.granularity :
-                 (capacity + TOP_FOOT_SIZE + msize));
-    size_t tsize = granularity_align(rs);
-    char* tbase = (char*)(CALL_MMAP(tsize));
-    if (tbase != CMFAIL) {
-      m = init_user_mstate(tbase, tsize);
-      m->seg.sflags = IS_MMAPPED_BIT;
-      set_lock(m, locked);
-    }
-  }
-  return (mspace)m;
-}
-
-mspace create_mspace_with_base(void* base, size_t capacity, int locked) {
-  mstate m = 0;
-  size_t msize = pad_request(sizeof(struct malloc_state));
-  init_mparams(); /* Ensure pagesize etc initialized */
-
-  if (capacity > msize + TOP_FOOT_SIZE &&
-      capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) {
-    m = init_user_mstate((char*)base, capacity);
-    m->seg.sflags = EXTERN_BIT;
-    set_lock(m, locked);
-  }
-  return (mspace)m;
-}
-
-size_t destroy_mspace(mspace msp) {
-  size_t freed = 0;
-  mstate ms = (mstate)msp;
-  if (ok_magic(ms)) {
-    msegmentptr sp = &ms->seg;
-    while (sp != 0) {
-      char* base = sp->base;
-      size_t size = sp->size;
-      flag_t flag = sp->sflags;
-      sp = sp->next;
-      if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) &&
-          CALL_MUNMAP(base, size) == 0)
-        freed += size;
-    }
-  }
-  else {
-    USAGE_ERROR_ACTION(ms,ms);
-  }
-  return freed;
-}
-
-/*
-  mspace versions of routines are near-clones of the global
-  versions. This is not so nice but better than the alternatives.
-*/
-
-
-void* mspace_malloc(mspace msp, size_t bytes) {
-  mstate ms = (mstate)msp;
-  if (!ok_magic(ms)) {
-    USAGE_ERROR_ACTION(ms,ms);
-    return 0;
-  }
-  if (!PREACTION(ms)) {
-    void* mem;
-    size_t nb;
-    if (bytes <= MAX_SMALL_REQUEST) {
-      bindex_t idx;
-      binmap_t smallbits;
-      nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes);
-      idx = small_index(nb);
-      smallbits = ms->smallmap >> idx;
-
-      if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */
-        mchunkptr b, p;
-        idx += ~smallbits & 1;       /* Uses next bin if idx empty */
-        b = smallbin_at(ms, idx);
-        p = b->fd;
-        assert(chunksize(p) == small_index2size(idx));
-        unlink_first_small_chunk(ms, b, p, idx);
-        set_inuse_and_pinuse(ms, p, small_index2size(idx));
-        mem = chunk2mem(p);
-        check_malloced_chunk(ms, mem, nb);
-        goto postaction;
-      }
-
-      else if (nb > ms->dvsize) {
-        if (smallbits != 0) { /* Use chunk in next nonempty smallbin */
-          mchunkptr b, p, r;
-          size_t rsize;
-          bindex_t i;
-          binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx));
-          binmap_t leastbit = least_bit(leftbits);
-          compute_bit2idx(leastbit, i);
-          b = smallbin_at(ms, i);
-          p = b->fd;
-          assert(chunksize(p) == small_index2size(i));
-          unlink_first_small_chunk(ms, b, p, i);
-          rsize = small_index2size(i) - nb;
-          /* Fit here cannot be remainderless if 4byte sizes */
-          if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE)
-            set_inuse_and_pinuse(ms, p, small_index2size(i));
-          else {
-            set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
-            r = chunk_plus_offset(p, nb);
-            set_size_and_pinuse_of_free_chunk(r, rsize);
-            replace_dv(ms, r, rsize);
-          }
-          mem = chunk2mem(p);
-          check_malloced_chunk(ms, mem, nb);
-          goto postaction;
-        }
-
-        else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) {
-          check_malloced_chunk(ms, mem, nb);
-          goto postaction;
-        }
-      }
-    }
-    else if (bytes >= MAX_REQUEST)
-      nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */
-    else {
-      nb = pad_request(bytes);
-      if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) {
-        check_malloced_chunk(ms, mem, nb);
-        goto postaction;
-      }
-    }
-
-    if (nb <= ms->dvsize) {
-      size_t rsize = ms->dvsize - nb;
-      mchunkptr p = ms->dv;
-      if (rsize >= MIN_CHUNK_SIZE) { /* split dv */
-        mchunkptr r = ms->dv = chunk_plus_offset(p, nb);
-        ms->dvsize = rsize;
-        set_size_and_pinuse_of_free_chunk(r, rsize);
-        set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
-      }
-      else { /* exhaust dv */
-        size_t dvs = ms->dvsize;
-        ms->dvsize = 0;
-        ms->dv = 0;
-        set_inuse_and_pinuse(ms, p, dvs);
-      }
-      mem = chunk2mem(p);
-      check_malloced_chunk(ms, mem, nb);
-      goto postaction;
-    }
-
-    else if (nb < ms->topsize) { /* Split top */
-      size_t rsize = ms->topsize -= nb;
-      mchunkptr p = ms->top;
-      mchunkptr r = ms->top = chunk_plus_offset(p, nb);
-      r->head = rsize | PINUSE_BIT;
-      set_size_and_pinuse_of_inuse_chunk(ms, p, nb);
-      mem = chunk2mem(p);
-      check_top_chunk(ms, ms->top);
-      check_malloced_chunk(ms, mem, nb);
-      goto postaction;
-    }
-
-    mem = sys_alloc(ms, nb);
-
-  postaction:
-    POSTACTION(ms);
-    return mem;
-  }
-
-  return 0;
-}
-
-void mspace_free(mspace msp, void* mem) {
-  if (mem != 0) {
-    mchunkptr p  = mem2chunk(mem);
-#if FOOTERS
-    mstate fm = get_mstate_for(p);
-#else /* FOOTERS */
-    mstate fm = (mstate)msp;
-#endif /* FOOTERS */
-    if (!ok_magic(fm)) {
-      USAGE_ERROR_ACTION(fm, p);
-      return;
-    }
-    if (!PREACTION(fm)) {
-      check_inuse_chunk(fm, p);
-      if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) {
-        size_t psize = chunksize(p);
-        mchunkptr next = chunk_plus_offset(p, psize);
-        if (!pinuse(p)) {
-          size_t prevsize = p->prev_foot;
-          if ((prevsize & IS_MMAPPED_BIT) != 0) {
-            prevsize &= ~IS_MMAPPED_BIT;
-            psize += prevsize + MMAP_FOOT_PAD;
-            if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
-              fm->footprint -= psize;
-            goto postaction;
-          }
-          else {
-            mchunkptr prev = chunk_minus_offset(p, prevsize);
-            psize += prevsize;
-            p = prev;
-            if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
-              if (p != fm->dv) {
-                unlink_chunk(fm, p, prevsize);
-              }
-              else if ((next->head & INUSE_BITS) == INUSE_BITS) {
-                fm->dvsize = psize;
-                set_free_with_pinuse(p, psize, next);
-                goto postaction;
-              }
-            }
-            else
-              goto erroraction;
-          }
-        }
-
-        if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
-          if (!cinuse(next)) {  /* consolidate forward */
-            if (next == fm->top) {
-              size_t tsize = fm->topsize += psize;
-              fm->top = p;
-              p->head = tsize | PINUSE_BIT;
-              if (p == fm->dv) {
-                fm->dv = 0;
-                fm->dvsize = 0;
-              }
-              if (should_trim(fm, tsize))
-                sys_trim(fm, 0);
-              goto postaction;
-            }
-            else if (next == fm->dv) {
-              size_t dsize = fm->dvsize += psize;
-              fm->dv = p;
-              set_size_and_pinuse_of_free_chunk(p, dsize);
-              goto postaction;
-            }
-            else {
-              size_t nsize = chunksize(next);
-              psize += nsize;
-              unlink_chunk(fm, next, nsize);
-              set_size_and_pinuse_of_free_chunk(p, psize);
-              if (p == fm->dv) {
-                fm->dvsize = psize;
-                goto postaction;
-              }
-            }
-          }
-          else
-            set_free_with_pinuse(p, psize, next);
-          insert_chunk(fm, p, psize);
-          check_free_chunk(fm, p);
-          goto postaction;
-        }
-      }
-    erroraction:
-      USAGE_ERROR_ACTION(fm, p);
-    postaction:
-      POSTACTION(fm);
-    }
-  }
-}
-
-void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) {
-  void* mem;
-  size_t req = 0;
-  mstate ms = (mstate)msp;
-  if (!ok_magic(ms)) {
-    USAGE_ERROR_ACTION(ms,ms);
-    return 0;
-  }
-  if (n_elements != 0) {
-    req = n_elements * elem_size;
-    if (((n_elements | elem_size) & ~(size_t)0xffff) &&
-        (req / n_elements != elem_size))
-      req = MAX_SIZE_T; /* force downstream failure on overflow */
-  }
-  mem = internal_malloc(ms, req);
-  if (mem != 0 && calloc_must_clear(mem2chunk(mem)))
-    memset(mem, 0, req);
-  return mem;
-}
-
-void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) {
-  if (oldmem == 0)
-    return mspace_malloc(msp, bytes);
-#ifdef REALLOC_ZERO_BYTES_FREES
-  if (bytes == 0) {
-    mspace_free(msp, oldmem);
-    return 0;
-  }
-#endif /* REALLOC_ZERO_BYTES_FREES */
-  else {
-#if FOOTERS
-    mchunkptr p  = mem2chunk(oldmem);
-    mstate ms = get_mstate_for(p);
-#else /* FOOTERS */
-    mstate ms = (mstate)msp;
-#endif /* FOOTERS */
-    if (!ok_magic(ms)) {
-      USAGE_ERROR_ACTION(ms,ms);
-      return 0;
-    }
-    return internal_realloc(ms, oldmem, bytes);
-  }
-}
-
-void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) {
-  mstate ms = (mstate)msp;
-  if (!ok_magic(ms)) {
-    USAGE_ERROR_ACTION(ms,ms);
-    return 0;
-  }
-  return internal_memalign(ms, alignment, bytes);
-}
-
-void** mspace_independent_calloc(mspace msp, size_t n_elements,
-                                 size_t elem_size, void* chunks[]) {
-  size_t sz = elem_size; /* serves as 1-element array */
-  mstate ms = (mstate)msp;
-  if (!ok_magic(ms)) {
-    USAGE_ERROR_ACTION(ms,ms);
-    return 0;
-  }
-  return ialloc(ms, n_elements, &sz, 3, chunks);
-}
-
-void** mspace_independent_comalloc(mspace msp, size_t n_elements,
-                                   size_t sizes[], void* chunks[]) {
-  mstate ms = (mstate)msp;
-  if (!ok_magic(ms)) {
-    USAGE_ERROR_ACTION(ms,ms);
-    return 0;
-  }
-  return ialloc(ms, n_elements, sizes, 0, chunks);
-}
-
-int mspace_trim(mspace msp, size_t pad) {
-  int result = 0;
-  mstate ms = (mstate)msp;
-  if (ok_magic(ms)) {
-    if (!PREACTION(ms)) {
-      result = sys_trim(ms, pad);
-      POSTACTION(ms);
-    }
-  }
-  else {
-    USAGE_ERROR_ACTION(ms,ms);
-  }
-  return result;
-}
-
-void mspace_malloc_stats(mspace msp) {
-  mstate ms = (mstate)msp;
-  if (ok_magic(ms)) {
-    internal_malloc_stats(ms);
-  }
-  else {
-    USAGE_ERROR_ACTION(ms,ms);
-  }
-}
-
-size_t mspace_footprint(mspace msp) {
-  size_t result;
-  mstate ms = (mstate)msp;
-  if (ok_magic(ms)) {
-    result = ms->footprint;
-  }
-  USAGE_ERROR_ACTION(ms,ms);
-  return result;
-}
-
-
-size_t mspace_max_footprint(mspace msp) {
-  size_t result;
-  mstate ms = (mstate)msp;
-  if (ok_magic(ms)) {
-    result = ms->max_footprint;
-  }
-  USAGE_ERROR_ACTION(ms,ms);
-  return result;
-}
-
-
-#if !NO_MALLINFO
-struct mallinfo mspace_mallinfo(mspace msp) {
-  mstate ms = (mstate)msp;
-  if (!ok_magic(ms)) {
-    USAGE_ERROR_ACTION(ms,ms);
-  }
-  return internal_mallinfo(ms);
-}
-#endif /* NO_MALLINFO */
-
-int mspace_mallopt(int param_number, int value) {
-  return change_mparam(param_number, value);
-}
-
-#endif /* MSPACES */
-
-/* -------------------- Alternative MORECORE functions ------------------- */
-
-/*
-  Guidelines for creating a custom version of MORECORE:
-
-  * For best performance, MORECORE should allocate in multiples of pagesize.
-  * MORECORE may allocate more memory than requested. (Or even less,
-      but this will usually result in a malloc failure.)
-  * MORECORE must not allocate memory when given argument zero, but
-      instead return one past the end address of memory from previous
-      nonzero call.
-  * For best performance, consecutive calls to MORECORE with positive
-      arguments should return increasing addresses, indicating that
-      space has been contiguously extended.
-  * Even though consecutive calls to MORECORE need not return contiguous
-      addresses, it must be OK for malloc'ed chunks to span multiple
-      regions in those cases where they do happen to be contiguous.
-  * MORECORE need not handle negative arguments -- it may instead
-      just return MFAIL when given negative arguments.
-      Negative arguments are always multiples of pagesize. MORECORE
-      must not misinterpret negative args as large positive unsigned
-      args. You can suppress all such calls from even occurring by defining
-      MORECORE_CANNOT_TRIM,
-
-  As an example alternative MORECORE, here is a custom allocator
-  kindly contributed for pre-OSX macOS.  It uses virtually but not
-  necessarily physically contiguous non-paged memory (locked in,
-  present and won't get swapped out).  You can use it by uncommenting
-  this section, adding some #includes, and setting up the appropriate
-  defines above:
-
-      #define MORECORE osMoreCore
-
-  There is also a shutdown routine that should somehow be called for
-  cleanup upon program exit.
-
-  #define MAX_POOL_ENTRIES 100
-  #define MINIMUM_MORECORE_SIZE  (64 * 1024U)
-  static int next_os_pool;
-  void *our_os_pools[MAX_POOL_ENTRIES];
-
-  void *osMoreCore(int size)
-  {
-    void *ptr = 0;
-    static void *sbrk_top = 0;
-
-    if (size > 0)
-    {
-      if (size < MINIMUM_MORECORE_SIZE)
-         size = MINIMUM_MORECORE_SIZE;
-      if (CurrentExecutionLevel() == kTaskLevel)
-         ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0);
-      if (ptr == 0)
-      {
-        return (void *) MFAIL;
-      }
-      // save ptrs so they can be freed during cleanup
-      our_os_pools[next_os_pool] = ptr;
-      next_os_pool++;
-      ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK);
-      sbrk_top = (char *) ptr + size;
-      return ptr;
-    }
-    else if (size < 0)
-    {
-      // we don't currently support shrink behavior
-      return (void *) MFAIL;
-    }
-    else
-    {
-      return sbrk_top;
-    }
-  }
-
-  // cleanup any allocated memory pools
-  // called as last thing before shutting down driver
-
-  void osCleanupMem(void)
-  {
-    void **ptr;
-
-    for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++)
-      if (*ptr)
-      {
-         PoolDeallocate(*ptr);
-         *ptr = 0;
-      }
-  }
-
-*/
-
-
-/* -----------------------------------------------------------------------
-History:
-    V2.8.3 Thu Sep 22 11:16:32 2005  Doug Lea  (dl at gee)
-      * Add max_footprint functions
-      * Ensure all appropriate literals are size_t
-      * Fix conditional compilation problem for some #define settings
-      * Avoid concatenating segments with the one provided
-        in create_mspace_with_base
-      * Rename some variables to avoid compiler shadowing warnings
-      * Use explicit lock initialization.
-      * Better handling of sbrk interference.
-      * Simplify and fix segment insertion, trimming and mspace_destroy
-      * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x
-      * Thanks especially to Dennis Flanagan for help on these.
-
-    V2.8.2 Sun Jun 12 16:01:10 2005  Doug Lea  (dl at gee)
-      * Fix memalign brace error.
-
-    V2.8.1 Wed Jun  8 16:11:46 2005  Doug Lea  (dl at gee)
-      * Fix improper #endif nesting in C++
-      * Add explicit casts needed for C++
-
-    V2.8.0 Mon May 30 14:09:02 2005  Doug Lea  (dl at gee)
-      * Use trees for large bins
-      * Support mspaces
-      * Use segments to unify sbrk-based and mmap-based system allocation,
-        removing need for emulation on most platforms without sbrk.
-      * Default safety checks
-      * Optional footer checks. Thanks to William Robertson for the idea.
-      * Internal code refactoring
-      * Incorporate suggestions and platform-specific changes.
-        Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas,
-        Aaron Bachmann,  Emery Berger, and others.
-      * Speed up non-fastbin processing enough to remove fastbins.
-      * Remove useless cfree() to avoid conflicts with other apps.
-      * Remove internal memcpy, memset. Compilers handle builtins better.
-      * Remove some options that no one ever used and rename others.
-
-    V2.7.2 Sat Aug 17 09:07:30 2002  Doug Lea  (dl at gee)
-      * Fix malloc_state bitmap array misdeclaration
-
-    V2.7.1 Thu Jul 25 10:58:03 2002  Doug Lea  (dl at gee)
-      * Allow tuning of FIRST_SORTED_BIN_SIZE
-      * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte.
-      * Better detection and support for non-contiguousness of MORECORE.
-        Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger
-      * Bypass most of malloc if no frees. Thanks To Emery Berger.
-      * Fix freeing of old top non-contiguous chunk im sysmalloc.
-      * Raised default trim and map thresholds to 256K.
-      * Fix mmap-related #defines. Thanks to Lubos Lunak.
-      * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield.
-      * Branch-free bin calculation
-      * Default trim and mmap thresholds now 256K.
-
-    V2.7.0 Sun Mar 11 14:14:06 2001  Doug Lea  (dl at gee)
-      * Introduce independent_comalloc and independent_calloc.
-        Thanks to Michael Pachos for motivation and help.
-      * Make optional .h file available
-      * Allow > 2GB requests on 32bit systems.
-      * new WIN32 sbrk, mmap, munmap, lock code from <Walter@GeNeSys-e.de>.
-        Thanks also to Andreas Mueller <a.mueller at paradatec.de>,
-        and Anonymous.
-      * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for
-        helping test this.)
-      * memalign: check alignment arg
-      * realloc: don't try to shift chunks backwards, since this
-        leads to  more fragmentation in some programs and doesn't
-        seem to help in any others.
-      * Collect all cases in malloc requiring system memory into sysmalloc
-      * Use mmap as backup to sbrk
-      * Place all internal state in malloc_state
-      * Introduce fastbins (although similar to 2.5.1)
-      * Many minor tunings and cosmetic improvements
-      * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK
-      * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS
-        Thanks to Tony E. Bennett <tbennett@nvidia.com> and others.
-      * Include errno.h to support default failure action.
-
-    V2.6.6 Sun Dec  5 07:42:19 1999  Doug Lea  (dl at gee)
-      * return null for negative arguments
-      * Added Several WIN32 cleanups from Martin C. Fong <mcfong at yahoo.com>
-         * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h'
-          (e.g. WIN32 platforms)
-         * Cleanup header file inclusion for WIN32 platforms
-         * Cleanup code to avoid Microsoft Visual C++ compiler complaints
-         * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing
-           memory allocation routines
-         * Set 'malloc_getpagesize' for WIN32 platforms (needs more work)
-         * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to
-           usage of 'assert' in non-WIN32 code
-         * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to
-           avoid infinite loop
-      * Always call 'fREe()' rather than 'free()'
-
-    V2.6.5 Wed Jun 17 15:57:31 1998  Doug Lea  (dl at gee)
-      * Fixed ordering problem with boundary-stamping
-
-    V2.6.3 Sun May 19 08:17:58 1996  Doug Lea  (dl at gee)
-      * Added pvalloc, as recommended by H.J. Liu
-      * Added 64bit pointer support mainly from Wolfram Gloger
-      * Added anonymously donated WIN32 sbrk emulation
-      * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen
-      * malloc_extend_top: fix mask error that caused wastage after
-        foreign sbrks
-      * Add linux mremap support code from HJ Liu
-
-    V2.6.2 Tue Dec  5 06:52:55 1995  Doug Lea  (dl at gee)
-      * Integrated most documentation with the code.
-      * Add support for mmap, with help from
-        Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
-      * Use last_remainder in more cases.
-      * Pack bins using idea from  colin@nyx10.cs.du.edu
-      * Use ordered bins instead of best-fit threshhold
-      * Eliminate block-local decls to simplify tracing and debugging.
-      * Support another case of realloc via move into top
-      * Fix error occuring when initial sbrk_base not word-aligned.
-      * Rely on page size for units instead of SBRK_UNIT to
-        avoid surprises about sbrk alignment conventions.
-      * Add mallinfo, mallopt. Thanks to Raymond Nijssen
-        (raymond@es.ele.tue.nl) for the suggestion.
-      * Add `pad' argument to malloc_trim and top_pad mallopt parameter.
-      * More precautions for cases where other routines call sbrk,
-        courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
-      * Added macros etc., allowing use in linux libc from
-        H.J. Lu (hjl@gnu.ai.mit.edu)
-      * Inverted this history list
-
-    V2.6.1 Sat Dec  2 14:10:57 1995  Doug Lea  (dl at gee)
-      * Re-tuned and fixed to behave more nicely with V2.6.0 changes.
-      * Removed all preallocation code since under current scheme
-        the work required to undo bad preallocations exceeds
-        the work saved in good cases for most test programs.
-      * No longer use return list or unconsolidated bins since
-        no scheme using them consistently outperforms those that don't
-        given above changes.
-      * Use best fit for very large chunks to prevent some worst-cases.
-      * Added some support for debugging
-
-    V2.6.0 Sat Nov  4 07:05:23 1995  Doug Lea  (dl at gee)
-      * Removed footers when chunks are in use. Thanks to
-        Paul Wilson (wilson@cs.texas.edu) for the suggestion.
-
-    V2.5.4 Wed Nov  1 07:54:51 1995  Doug Lea  (dl at gee)
-      * Added malloc_trim, with help from Wolfram Gloger
-        (wmglo@Dent.MED.Uni-Muenchen.DE).
-
-    V2.5.3 Tue Apr 26 10:16:01 1994  Doug Lea  (dl at g)
-
-    V2.5.2 Tue Apr  5 16:20:40 1994  Doug Lea  (dl at g)
-      * realloc: try to expand in both directions
-      * malloc: swap order of clean-bin strategy;
-      * realloc: only conditionally expand backwards
-      * Try not to scavenge used bins
-      * Use bin counts as a guide to preallocation
-      * Occasionally bin return list chunks in first scan
-      * Add a few optimizations from colin@nyx10.cs.du.edu
-
-    V2.5.1 Sat Aug 14 15:40:43 1993  Doug Lea  (dl at g)
-      * faster bin computation & slightly different binning
-      * merged all consolidations to one part of malloc proper
-         (eliminating old malloc_find_space & malloc_clean_bin)
-      * Scan 2 returns chunks (not just 1)
-      * Propagate failure in realloc if malloc returns 0
-      * Add stuff to allow compilation on non-ANSI compilers
-          from kpv@research.att.com
-
-    V2.5 Sat Aug  7 07:41:59 1993  Doug Lea  (dl at g.oswego.edu)
-      * removed potential for odd address access in prev_chunk
-      * removed dependency on getpagesize.h
-      * misc cosmetics and a bit more internal documentation
-      * anticosmetics: mangled names in macros to evade debugger strangeness
-      * tested on sparc, hp-700, dec-mips, rs6000
-          with gcc & native cc (hp, dec only) allowing
-          Detlefs & Zorn comparison study (in SIGPLAN Notices.)
-
-    Trial version Fri Aug 28 13:14:29 1992  Doug Lea  (dl at g.oswego.edu)
-      * Based loosely on libg++-1.2X malloc. (It retains some of the overall
-         structure of old version,  but most details differ.)
- 
-*/
-
-/** @}
- */
-
Index: pace/ns/Makefile
===================================================================
--- uspace/ns/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,72 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = ns
-SOURCES = \
-	ns.c
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/ns/ns.c
===================================================================
--- uspace/ns/ns.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,270 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup ns
- * @{
- */ 
-
-/**
- * @file	ns.c
- * @brief	Naming service for HelenOS IPC.
- */
-
-
-#include <ipc/ipc.h>
-#include <ipc/ns.h>
-#include <ipc/services.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <assert.h>
-#include <libadt/list.h>
-#include <libadt/hash_table.h>
-#include <sysinfo.h>
-#include <ddi.h>
-#include <as.h>
-
-#define NAME	"NS"
-
-#define NS_HASH_TABLE_CHAINS	20
-
-static int register_service(ipcarg_t service, ipcarg_t phone, ipc_call_t *call);
-static int connect_to_service(ipcarg_t service, ipc_call_t *call,
-    ipc_callid_t callid);
-
-/* Static functions implementing NS hash table operations. */
-static hash_index_t ns_hash(unsigned long *key);
-static int ns_compare(unsigned long *key, hash_count_t keys, link_t *item);
-static void ns_remove(link_t *item);
-
-/** Operations for NS hash table. */
-static hash_table_operations_t ns_hash_table_ops = {
-	.hash = ns_hash,
-	.compare = ns_compare,
-	.remove_callback = ns_remove
-};
-
-/** NS hash table structure. */
-static hash_table_t ns_hash_table;
-
-/** NS hash table item. */
-typedef struct {
-	link_t link;
-	ipcarg_t service;		/**< Number of the service. */
-	ipcarg_t phone;			/**< Phone registered with the service. */
-	ipcarg_t in_phone_hash;		/**< Incoming phone hash. */
-} hashed_service_t;
-
-static void *clockaddr = NULL;
-static void *klogaddr = NULL;
-
-static void get_as_area(ipc_callid_t callid, ipc_call_t *call, char *name,
-    void **addr)
-{
-	void *ph_addr;
-
-	if (!*addr) {
-		ph_addr = (void *) sysinfo_value(name);
-		if (!ph_addr) {
-			ipc_answer_fast(callid, ENOENT, 0, 0);
-			return;
-		}
-		*addr = as_get_mappable_page(PAGE_SIZE);
-		physmem_map(ph_addr, *addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE);
-	}
-	ipc_answer_fast(callid, 0, (ipcarg_t) *addr, AS_AREA_READ);
-}
-
-int main(int argc, char **argv)
-{
-	ipc_call_t call;
-	ipc_callid_t callid;
-	
-	ipcarg_t retval;
-
-	if (!hash_table_create(&ns_hash_table, NS_HASH_TABLE_CHAINS, 3,
-	    &ns_hash_table_ops)) {
-		return ENOMEM;
-	}
-		
-	while (1) {
-		callid = ipc_wait_for_call(&call);
-		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_AS_AREA_RECV:
-			switch (IPC_GET_ARG3(call)) {
-			case SERVICE_MEM_REALTIME:
-				get_as_area(callid, &call, "clock.faddr",
-				    &clockaddr);
-				break;
-			case SERVICE_MEM_KLOG:
-				get_as_area(callid, &call, "klog.faddr",
-				    &klogaddr);
-				break;
-			default:
-				ipc_answer_fast(callid, ENOENT, 0, 0);
-			}
-			continue;
-		case IPC_M_PHONE_HUNGUP:
-			retval = 0;
-			break;
-		case IPC_M_CONNECT_TO_ME:
-			/*
-			 * Server requests service registration.
-			 */
-			retval = register_service(IPC_GET_ARG1(call),
-			    IPC_GET_ARG3(call), &call);
-			break;
-		case IPC_M_CONNECT_ME_TO:
-			/*
-			 * Client requests to be connected to a service.
-			 */
-			retval = connect_to_service(IPC_GET_ARG1(call), &call,
-			    callid);
-			break;
-		default:
-			retval = ENOENT;
-			break;
-		}
-		if (!(callid & IPC_CALLID_NOTIFICATION)) {
-			ipc_answer_fast(callid, retval, 0, 0);
-		}
-	}
-}
-
-/** Register service.
- *
- * @param service Service to be registered.
- * @param phone Phone to be used for connections to the service.
- * @param call Pointer to call structure.
- *
- * @return Zero on success or a value from @ref errno.h.
- */
-int register_service(ipcarg_t service, ipcarg_t phone, ipc_call_t *call)
-{
-	unsigned long keys[3] = {
-		service,
-		call->in_phone_hash,
-		0
-	};
-	hashed_service_t *hs;
-			
-	if (hash_table_find(&ns_hash_table, keys)) {
-		return EEXISTS;
-	}
-			
-	hs = (hashed_service_t *) malloc(sizeof(hashed_service_t));
-	if (!hs) {
-		return ENOMEM;
-	}
-			
-	link_initialize(&hs->link);
-	hs->service = service;
-	hs->phone = phone;
-	hs->in_phone_hash = call->in_phone_hash;
-	hash_table_insert(&ns_hash_table, keys, &hs->link);
-			
-	return 0;
-}
-
-/** Connect client to service.
- *
- * @param service Service to be connected to.
- * @param call Pointer to call structure.
- * @param callid Call ID of the request.
- *
- * @return Zero on success or a value from @ref errno.h.
- */
-int connect_to_service(ipcarg_t service, ipc_call_t *call, ipc_callid_t callid)
-{
-	unsigned long keys[3] = { service, 0, 0 };
-	link_t *hlp;
-	hashed_service_t *hs;
-			
-	hlp = hash_table_find(&ns_hash_table, keys);
-	if (!hlp) {
-		return ENOENT;
-	}
-	hs = hash_table_get_instance(hlp, hashed_service_t, link);
-	return ipc_forward_fast(callid, hs->phone, 0, 0);
-}
-
-/** Compute hash index into NS hash table.
- *
- * @param key Pointer keys. However, only the first key (i.e. service number)
- * 	      is used to compute the hash index.
- * @return Hash index corresponding to key[0].
- */
-hash_index_t ns_hash(unsigned long *key)
-{
-	assert(key);
-	return *key % NS_HASH_TABLE_CHAINS;
-}
-
-/** Compare a key with hashed item.
- *
- * This compare function always ignores the third key.
- * It exists only to make it possible to remove records
- * originating from connection with key[1] in_phone_hash
- * value. Note that this is close to being classified
- * as a nasty hack.
- *
- * @param key Array of keys.
- * @param keys Must be lesser or equal to 3.
- * @param item Pointer to a hash table item.
- * @return Non-zero if the key matches the item, zero otherwise.
- */
-int ns_compare(unsigned long key[], hash_count_t keys, link_t *item)
-{
-	hashed_service_t *hs;
-
-	assert(key);
-	assert(keys <= 3);
-	assert(item);
-	
-	hs = hash_table_get_instance(item, hashed_service_t, link);
-	
-	if (keys == 2)
-		return key[1] == hs->in_phone_hash;
-	else
-		return key[0] == hs->service;
-}
-
-/** Perform actions after removal of item from the hash table.
- *
- * @param item Item that was removed from the hash table.
- */
-void ns_remove(link_t *item)
-{
-	assert(item);
-	free(hash_table_get_instance(item, hashed_service_t, link));
-}
-
-/** 
- * @}
- */
Index: pace/pci/COPYING
===================================================================
--- uspace/pci/COPYING	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,345 +1,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
Index: pace/pci/Makefile
===================================================================
--- uspace/pci/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,78 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-
-LIBS = libpci/libpci.a $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = pci
-SOURCES = \
-	pci.c
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-	$(MAKE) -C libpci clean
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(MAKE) -C libpci
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
-
-libpci/libpci.a:
-	$(MAKE) -C libpci
Index: pace/pci/libpci/Makefile
===================================================================
--- uspace/pci/libpci/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,29 +1,0 @@
-# Makefile for The PCI Library
-# (c) 1999 Martin Mares <mj@ucw.cz>
-
-# Modified and ported to HelenOS by Jakub Jermar
-
-LIBC_PREFIX=$(shell cd ../../libc; pwd)
-
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-LIBS = $(LIBC_PREFIX)/libc.a
-CFLAGS += -I$(LIBC_PREFIX)/include -trigraphs
-
-OBJS=access.o generic.o names.o
-INCL=internal.h pci.h header.h sysdep.h types.h pci_ids.h
-
-PCILIB=libpci.a
-
-OBJS += i386-ports.o
-
-all: $(PCILIB)
-
-$(PCILIB): $(OBJS)
-	$(AR) rc $@ $(OBJS)
-
-%.o: %.c $(INCL)
-	$(CC) $(CFLAGS) -c $< -o $@
-
-clean:
-	-rm *.o libpci.a
Index: pace/pci/libpci/VERSION
===================================================================
--- uspace/pci/libpci/VERSION	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,2 +1,0 @@
-This libpci has been ported from pciutils-2.2.3
-on May 8, 2006 by Jakub Jermar.
Index: pace/pci/libpci/access.c
===================================================================
--- uspace/pci/libpci/access.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,270 +1,0 @@
-/*
- *	The PCI Library -- User Access
- *
- *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-
-#include "internal.h"
-
-static struct pci_methods *pci_methods[PCI_ACCESS_MAX] = {
-	&pm_intel_conf1,
-	&pm_intel_conf2,
-};
-
-struct pci_access *pci_alloc(void)
-{
-	struct pci_access *a = malloc(sizeof(struct pci_access));
-	int i;
-
-	if (!a)
-		return NULL;
-		
-	bzero(a, sizeof(*a));
-	for (i = 0; i < PCI_ACCESS_MAX; i++)
-		if (pci_methods[i] && pci_methods[i]->config)
-			pci_methods[i]->config(a);
-	return a;
-}
-
-void *pci_malloc(struct pci_access *a, int size)
-{
-	void *x = malloc(size);
-
-	if (!x)
-		a->error("Out of memory (allocation of %d bytes failed)", size);
-	return x;
-}
-
-void pci_mfree(void *x)
-{
-	if (x)
-		free(x);
-}
-
-static void pci_generic_error(char *msg, ...)
-{
-	va_list args;
-
-	va_start(args, msg);
-	puts("pcilib: ");
-	vprintf(msg, args);
-	putchar('\n');
-	exit(1);
-}
-
-static void pci_generic_warn(char *msg, ...)
-{
-	va_list args;
-
-	va_start(args, msg);
-	puts("pcilib: ");
-	vprintf(msg, args);
-	putchar('\n');
-}
-
-static void pci_generic_debug(char *msg, ...)
-{
-	va_list args;
-
-	va_start(args, msg);
-	vprintf(msg, args);
-	va_end(args);
-}
-
-static void pci_null_debug(char *msg UNUSED, ...)
-{
-}
-
-void pci_init(struct pci_access *a)
-{
-	if (!a->error)
-		a->error = pci_generic_error;
-	if (!a->warning)
-		a->warning = pci_generic_warn;
-	if (!a->debug)
-		a->debug = pci_generic_debug;
-	if (!a->debugging)
-		a->debug = pci_null_debug;
-
-	if (a->method) {
-		if (a->method >= PCI_ACCESS_MAX || !pci_methods[a->method])
-			a->error("This access method is not supported.");
-		a->methods = pci_methods[a->method];
-	} else {
-		unsigned int i;
-		for (i = 0; i < PCI_ACCESS_MAX; i++)
-			if (pci_methods[i]) {
-				a->debug("Trying method %d...", i);
-				if (pci_methods[i]->detect(a)) {
-					a->debug("...OK\n");
-					a->methods = pci_methods[i];
-					a->method = i;
-					break;
-				}
-				a->debug("...No.\n");
-			}
-		if (!a->methods)
-			a->error("Cannot find any working access method.");
-	}
-	a->debug("Decided to use %s\n", a->methods->name);
-	a->methods->init(a);
-}
-
-void pci_cleanup(struct pci_access *a)
-{
-	struct pci_dev *d, *e;
-
-	for (d = a->devices; d; d = e) {
-		e = d->next;
-		pci_free_dev(d);
-	}
-	if (a->methods)
-		a->methods->cleanup(a);
-	pci_free_name_list(a);
-	pci_mfree(a);
-}
-
-void pci_scan_bus(struct pci_access *a)
-{
-	a->methods->scan(a);
-}
-
-struct pci_dev *pci_alloc_dev(struct pci_access *a)
-{
-	struct pci_dev *d = pci_malloc(a, sizeof(struct pci_dev));
-
-	bzero(d, sizeof(*d));
-	d->access = a;
-	d->methods = a->methods;
-	d->hdrtype = -1;
-	if (d->methods->init_dev)
-		d->methods->init_dev(d);
-	return d;
-}
-
-int pci_link_dev(struct pci_access *a, struct pci_dev *d)
-{
-	d->next = a->devices;
-	a->devices = d;
-
-	return 1;
-}
-
-struct pci_dev *pci_get_dev(struct pci_access *a, int domain, int bus,
-			    int dev, int func)
-{
-	struct pci_dev *d = pci_alloc_dev(a);
-
-	d->domain = domain;
-	d->bus = bus;
-	d->dev = dev;
-	d->func = func;
-	return d;
-}
-
-void pci_free_dev(struct pci_dev *d)
-{
-	if (d->methods->cleanup_dev)
-		d->methods->cleanup_dev(d);
-	pci_mfree(d);
-}
-
-static inline void
-pci_read_data(struct pci_dev *d, void *buf, int pos, int len)
-{
-	if (pos & (len - 1))
-		d->access->error("Unaligned read: pos=%02x, len=%d", pos,
-				 len);
-	if (pos + len <= d->cache_len)
-		memcpy(buf, d->cache + pos, len);
-	else if (!d->methods->read(d, pos, buf, len))
-		memset(buf, 0xff, len);
-}
-
-byte pci_read_byte(struct pci_dev *d, int pos)
-{
-	byte buf;
-	pci_read_data(d, &buf, pos, 1);
-	return buf;
-}
-
-word pci_read_word(struct pci_dev * d, int pos)
-{
-	word buf;
-	pci_read_data(d, &buf, pos, 2);
-	return le16_to_cpu(buf);
-}
-
-u32 pci_read_long(struct pci_dev * d, int pos)
-{
-	u32 buf;
-	pci_read_data(d, &buf, pos, 4);
-	return le32_to_cpu(buf);
-}
-
-int pci_read_block(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	return d->methods->read(d, pos, buf, len);
-}
-
-static inline int
-pci_write_data(struct pci_dev *d, void *buf, int pos, int len)
-{
-	if (pos & (len - 1))
-		d->access->error("Unaligned write: pos=%02x,len=%d", pos, len);
-	if (pos + len <= d->cache_len)
-		memcpy(d->cache + pos, buf, len);
-	return d->methods->write(d, pos, buf, len);
-}
-
-int pci_write_byte(struct pci_dev *d, int pos, byte data)
-{
-	return pci_write_data(d, &data, pos, 1);
-}
-
-int pci_write_word(struct pci_dev *d, int pos, word data)
-{
-	word buf = cpu_to_le16(data);
-	return pci_write_data(d, &buf, pos, 2);
-}
-
-int pci_write_long(struct pci_dev *d, int pos, u32 data)
-{
-	u32 buf = cpu_to_le32(data);
-	return pci_write_data(d, &buf, pos, 4);
-}
-
-int pci_write_block(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	if (pos < d->cache_len) {
-		int l = (pos + len >= d->cache_len) ? (d->cache_len - pos) : len;
-		memcpy(d->cache + pos, buf, l);
-	}
-	return d->methods->write(d, pos, buf, len);
-}
-
-int pci_fill_info(struct pci_dev *d, int flags)
-{
-	if (flags & PCI_FILL_RESCAN) {
-		flags &= ~PCI_FILL_RESCAN;
-		d->known_fields = 0;
-	}
-	if (flags & ~d->known_fields)
-		d->known_fields |= d->methods->fill_info(d, flags & ~d->known_fields);
-	return d->known_fields;
-}
-
-void pci_setup_cache(struct pci_dev *d, byte * cache, int len)
-{
-	d->cache = cache;
-	d->cache_len = len;
-}
Index: pace/pci/libpci/generic.c
===================================================================
--- uspace/pci/libpci/generic.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,206 +1,0 @@
-/*
- *	The PCI Library -- Generic Direct Access Functions
- *
- *	Copyright (c) 1997--2000 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#include <string.h>
-
-#include "internal.h"
-
-void pci_generic_scan_bus(struct pci_access *a, byte * busmap, int bus)
-{
-	int dev, multi, ht;
-	struct pci_dev *t;
-
-	a->debug("Scanning bus %02x for devices...\n", bus);
-	if (busmap[bus]) {
-		a->warning("Bus %02x seen twice (firmware bug). Ignored.",
-			   bus);
-		return;
-	}
-	busmap[bus] = 1;
-	t = pci_alloc_dev(a);
-	t->bus = bus;
-	for (dev = 0; dev < 32; dev++) {
-		t->dev = dev;
-		multi = 0;
-		for (t->func = 0; !t->func || multi && t->func < 8;
-		     t->func++) {
-			u32 vd = pci_read_long(t, PCI_VENDOR_ID);
-			struct pci_dev *d;
-
-			if (!vd || vd == 0xffffffff)
-				continue;
-			ht = pci_read_byte(t, PCI_HEADER_TYPE);
-			if (!t->func)
-				multi = ht & 0x80;
-			ht &= 0x7f;
-			d = pci_alloc_dev(a);
-			d->bus = t->bus;
-			d->dev = t->dev;
-			d->func = t->func;
-			d->vendor_id = vd & 0xffff;
-			d->device_id = vd >> 16U;
-			d->known_fields = PCI_FILL_IDENT;
-			d->hdrtype = ht;
-			pci_link_dev(a, d);
-			switch (ht) {
-			case PCI_HEADER_TYPE_NORMAL:
-				break;
-			case PCI_HEADER_TYPE_BRIDGE:
-			case PCI_HEADER_TYPE_CARDBUS:
-				pci_generic_scan_bus(a, busmap,
-						     pci_read_byte(t,
-								   PCI_SECONDARY_BUS));
-				break;
-			default:
-				a->debug
-				    ("Device %04x:%02x:%02x.%d has unknown header type %02x.\n",
-				     d->domain, d->bus, d->dev, d->func,
-				     ht);
-			}
-		}
-	}
-	pci_free_dev(t);
-}
-
-void pci_generic_scan(struct pci_access *a)
-{
-	byte busmap[256];
-
-	bzero(busmap, sizeof(busmap));
-	pci_generic_scan_bus(a, busmap, 0);
-}
-
-int pci_generic_fill_info(struct pci_dev *d, int flags)
-{
-	struct pci_access *a = d->access;
-
-	if ((flags & (PCI_FILL_BASES | PCI_FILL_ROM_BASE))
-	    && d->hdrtype < 0)
-		d->hdrtype = pci_read_byte(d, PCI_HEADER_TYPE) & 0x7f;
-	if (flags & PCI_FILL_IDENT) {
-		d->vendor_id = pci_read_word(d, PCI_VENDOR_ID);
-		d->device_id = pci_read_word(d, PCI_DEVICE_ID);
-	}
-	if (flags & PCI_FILL_IRQ)
-		d->irq = pci_read_byte(d, PCI_INTERRUPT_LINE);
-	if (flags & PCI_FILL_BASES) {
-		int cnt = 0, i;
-		bzero(d->base_addr, sizeof(d->base_addr));
-		switch (d->hdrtype) {
-		case PCI_HEADER_TYPE_NORMAL:
-			cnt = 6;
-			break;
-		case PCI_HEADER_TYPE_BRIDGE:
-			cnt = 2;
-			break;
-		case PCI_HEADER_TYPE_CARDBUS:
-			cnt = 1;
-			break;
-		}
-		if (cnt) {
-			for (i = 0; i < cnt; i++) {
-				u32 x = pci_read_long(d, PCI_BASE_ADDRESS_0 + i * 4);
-				if (!x || x == (u32) ~ 0)
-					continue;
-				if ((x & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO)
-					d->base_addr[i] = x;
-				else {
-					if ((x & PCI_BASE_ADDRESS_MEM_TYPE_MASK) != PCI_BASE_ADDRESS_MEM_TYPE_64)
-						d->base_addr[i] = x;
-					else if (i >= cnt - 1)
-						a->warning("%04x:%02x:%02x.%d: Invalid 64-bit address seen for BAR %d.",
-						     d->domain, d->bus,
-						     d->dev, d->func, i);
-					else {
-						u32 y = pci_read_long(d, PCI_BASE_ADDRESS_0 + (++i) * 4);
-#ifdef PCI_HAVE_64BIT_ADDRESS
-						d->base_addr[i - 1] = x | (((pciaddr_t) y) << 32);
-#else
-						if (y)
-							a->warning("%04x:%02x:%02x.%d 64-bit device address ignored.",
-							     d->domain,
-							     d->bus,
-							     d->dev,
-							     d->func);
-						else
-							d->base_addr[i - 1] = x;
-#endif
-					}
-				}
-			}
-		}
-	}
-	if (flags & PCI_FILL_ROM_BASE) {
-		int reg = 0;
-		d->rom_base_addr = 0;
-		switch (d->hdrtype) {
-		case PCI_HEADER_TYPE_NORMAL:
-			reg = PCI_ROM_ADDRESS;
-			break;
-		case PCI_HEADER_TYPE_BRIDGE:
-			reg = PCI_ROM_ADDRESS1;
-			break;
-		}
-		if (reg) {
-			u32 u = pci_read_long(d, reg);
-			if (u != 0xffffffff)
-				d->rom_base_addr = u;
-		}
-	}
-	return flags & ~PCI_FILL_SIZES;
-}
-
-static int
-pci_generic_block_op(struct pci_dev *d, int pos, byte * buf, int len,
-		     int (*r) (struct pci_dev * d, int pos, byte * buf,
-			       int len))
-{
-	if ((pos & 1) && len >= 1) {
-		if (!r(d, pos, buf, 1))
-			return 0;
-		pos++;
-		buf++;
-		len--;
-	}
-	if ((pos & 3) && len >= 2) {
-		if (!r(d, pos, buf, 2))
-			return 0;
-		pos += 2;
-		buf += 2;
-		len -= 2;
-	}
-	while (len >= 4) {
-		if (!r(d, pos, buf, 4))
-			return 0;
-		pos += 4;
-		buf += 4;
-		len -= 4;
-	}
-	if (len >= 2) {
-		if (!r(d, pos, buf, 2))
-			return 0;
-		pos += 2;
-		buf += 2;
-		len -= 2;
-	}
-	if (len && !r(d, pos, buf, 1))
-		return 0;
-	return 1;
-}
-
-int pci_generic_block_read(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	return pci_generic_block_op(d, pos, buf, len, d->access->methods->read);
-}
-
-int pci_generic_block_write(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	return pci_generic_block_op(d, pos, buf, len, d->access->methods->write);
-}
Index: pace/pci/libpci/header.h
===================================================================
--- uspace/pci/libpci/header.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,937 +1,0 @@
-/*
- *	The PCI Library -- PCI Header Structure (based on <linux/pci.h>)
- *
- *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-/*
- * Under PCI, each device has 256 bytes of configuration address space,
- * of which the first 64 bytes are standardized as follows:
- */
-#define PCI_VENDOR_ID		0x00	/* 16 bits */
-#define PCI_DEVICE_ID		0x02	/* 16 bits */
-#define PCI_COMMAND		0x04	/* 16 bits */
-#define  PCI_COMMAND_IO		0x1	/* Enable response in I/O space */
-#define  PCI_COMMAND_MEMORY	0x2	/* Enable response in Memory space */
-#define  PCI_COMMAND_MASTER	0x4	/* Enable bus mastering */
-#define  PCI_COMMAND_SPECIAL	0x8	/* Enable response to special cycles */
-#define  PCI_COMMAND_INVALIDATE	0x10	/* Use memory write and invalidate */
-#define  PCI_COMMAND_VGA_PALETTE 0x20	/* Enable palette snooping */
-#define  PCI_COMMAND_PARITY	0x40	/* Enable parity checking */
-#define  PCI_COMMAND_WAIT 	0x80	/* Enable address/data stepping */
-#define  PCI_COMMAND_SERR	0x100	/* Enable SERR */
-#define  PCI_COMMAND_FAST_BACK	0x200	/* Enable back-to-back writes */
-
-#define PCI_STATUS		0x06	/* 16 bits */
-#define  PCI_STATUS_CAP_LIST	0x10	/* Support Capability List */
-#define  PCI_STATUS_66MHZ	0x20	/* Support 66 Mhz PCI 2.1 bus */
-#define  PCI_STATUS_UDF		0x40	/* Support User Definable Features [obsolete] */
-#define  PCI_STATUS_FAST_BACK	0x80	/* Accept fast-back to back */
-#define  PCI_STATUS_PARITY	0x100	/* Detected parity error */
-#define  PCI_STATUS_DEVSEL_MASK	0x600	/* DEVSEL timing */
-#define  PCI_STATUS_DEVSEL_FAST	0x000
-#define  PCI_STATUS_DEVSEL_MEDIUM 0x200
-#define  PCI_STATUS_DEVSEL_SLOW 0x400
-#define  PCI_STATUS_SIG_TARGET_ABORT 0x800	/* Set on target abort */
-#define  PCI_STATUS_REC_TARGET_ABORT 0x1000	/* Master ack of " */
-#define  PCI_STATUS_REC_MASTER_ABORT 0x2000	/* Set on master abort */
-#define  PCI_STATUS_SIG_SYSTEM_ERROR 0x4000	/* Set when we drive SERR */
-#define  PCI_STATUS_DETECTED_PARITY 0x8000	/* Set on parity error */
-
-#define PCI_CLASS_REVISION	0x08	/* High 24 bits are class, low 8
-					   revision */
-#define PCI_REVISION_ID         0x08	/* Revision ID */
-#define PCI_CLASS_PROG          0x09	/* Reg. Level Programming Interface */
-#define PCI_CLASS_DEVICE        0x0a	/* Device class */
-
-#define PCI_CACHE_LINE_SIZE	0x0c	/* 8 bits */
-#define PCI_LATENCY_TIMER	0x0d	/* 8 bits */
-#define PCI_HEADER_TYPE		0x0e	/* 8 bits */
-#define  PCI_HEADER_TYPE_NORMAL	0
-#define  PCI_HEADER_TYPE_BRIDGE 1
-#define  PCI_HEADER_TYPE_CARDBUS 2
-
-#define PCI_BIST		0x0f	/* 8 bits */
-#define PCI_BIST_CODE_MASK	0x0f	/* Return result */
-#define PCI_BIST_START		0x40	/* 1 to start BIST, 2 secs or less */
-#define PCI_BIST_CAPABLE	0x80	/* 1 if BIST capable */
-
-/*
- * Base addresses specify locations in memory or I/O space.
- * Decoded size can be determined by writing a value of 
- * 0xffffffff to the register, and reading it back.  Only 
- * 1 bits are decoded.
- */
-#define PCI_BASE_ADDRESS_0	0x10	/* 32 bits */
-#define PCI_BASE_ADDRESS_1	0x14	/* 32 bits [htype 0,1 only] */
-#define PCI_BASE_ADDRESS_2	0x18	/* 32 bits [htype 0 only] */
-#define PCI_BASE_ADDRESS_3	0x1c	/* 32 bits */
-#define PCI_BASE_ADDRESS_4	0x20	/* 32 bits */
-#define PCI_BASE_ADDRESS_5	0x24	/* 32 bits */
-#define  PCI_BASE_ADDRESS_SPACE	0x01	/* 0 = memory, 1 = I/O */
-#define  PCI_BASE_ADDRESS_SPACE_IO 0x01
-#define  PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
-#define  PCI_BASE_ADDRESS_MEM_TYPE_MASK 0x06
-#define  PCI_BASE_ADDRESS_MEM_TYPE_32	0x00	/* 32 bit address */
-#define  PCI_BASE_ADDRESS_MEM_TYPE_1M	0x02	/* Below 1M [obsolete] */
-#define  PCI_BASE_ADDRESS_MEM_TYPE_64	0x04	/* 64 bit address */
-#define  PCI_BASE_ADDRESS_MEM_PREFETCH	0x08	/* prefetchable? */
-#define  PCI_BASE_ADDRESS_MEM_MASK	(~(pciaddr_t)0x0f)
-#define  PCI_BASE_ADDRESS_IO_MASK	(~(pciaddr_t)0x03)
-/* bit 1 is reserved if address_space = 1 */
-
-/* Header type 0 (normal devices) */
-#define PCI_CARDBUS_CIS		0x28
-#define PCI_SUBSYSTEM_VENDOR_ID	0x2c
-#define PCI_SUBSYSTEM_ID	0x2e
-#define PCI_ROM_ADDRESS		0x30	/* Bits 31..11 are address, 10..1 reserved */
-#define  PCI_ROM_ADDRESS_ENABLE	0x01
-#define PCI_ROM_ADDRESS_MASK	(~(pciaddr_t)0x7ff)
-
-#define PCI_CAPABILITY_LIST	0x34	/* Offset of first capability list entry */
-
-/* 0x35-0x3b are reserved */
-#define PCI_INTERRUPT_LINE	0x3c	/* 8 bits */
-#define PCI_INTERRUPT_PIN	0x3d	/* 8 bits */
-#define PCI_MIN_GNT		0x3e	/* 8 bits */
-#define PCI_MAX_LAT		0x3f	/* 8 bits */
-
-/* Header type 1 (PCI-to-PCI bridges) */
-#define PCI_PRIMARY_BUS		0x18	/* Primary bus number */
-#define PCI_SECONDARY_BUS	0x19	/* Secondary bus number */
-#define PCI_SUBORDINATE_BUS	0x1a	/* Highest bus number behind the bridge */
-#define PCI_SEC_LATENCY_TIMER	0x1b	/* Latency timer for secondary interface */
-#define PCI_IO_BASE		0x1c	/* I/O range behind the bridge */
-#define PCI_IO_LIMIT		0x1d
-#define  PCI_IO_RANGE_TYPE_MASK	0x0f	/* I/O bridging type */
-#define  PCI_IO_RANGE_TYPE_16	0x00
-#define  PCI_IO_RANGE_TYPE_32	0x01
-#define  PCI_IO_RANGE_MASK	~0x0f
-#define PCI_SEC_STATUS		0x1e	/* Secondary status register */
-#define PCI_MEMORY_BASE		0x20	/* Memory range behind */
-#define PCI_MEMORY_LIMIT	0x22
-#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0f
-#define  PCI_MEMORY_RANGE_MASK	~0x0f
-#define PCI_PREF_MEMORY_BASE	0x24	/* Prefetchable memory range behind */
-#define PCI_PREF_MEMORY_LIMIT	0x26
-#define  PCI_PREF_RANGE_TYPE_MASK 0x0f
-#define  PCI_PREF_RANGE_TYPE_32	0x00
-#define  PCI_PREF_RANGE_TYPE_64	0x01
-#define  PCI_PREF_RANGE_MASK	~0x0f
-#define PCI_PREF_BASE_UPPER32	0x28	/* Upper half of prefetchable memory range */
-#define PCI_PREF_LIMIT_UPPER32	0x2c
-#define PCI_IO_BASE_UPPER16	0x30	/* Upper half of I/O addresses */
-#define PCI_IO_LIMIT_UPPER16	0x32
-/* 0x34 same as for htype 0 */
-/* 0x35-0x3b is reserved */
-#define PCI_ROM_ADDRESS1	0x38	/* Same as PCI_ROM_ADDRESS, but for htype 1 */
-/* 0x3c-0x3d are same as for htype 0 */
-#define PCI_BRIDGE_CONTROL	0x3e
-#define  PCI_BRIDGE_CTL_PARITY	0x01	/* Enable parity detection on secondary interface */
-#define  PCI_BRIDGE_CTL_SERR	0x02	/* The same for SERR forwarding */
-#define  PCI_BRIDGE_CTL_NO_ISA	0x04	/* Disable bridging of ISA ports */
-#define  PCI_BRIDGE_CTL_VGA	0x08	/* Forward VGA addresses */
-#define  PCI_BRIDGE_CTL_MASTER_ABORT 0x20	/* Report master aborts */
-#define  PCI_BRIDGE_CTL_BUS_RESET 0x40	/* Secondary bus reset */
-#define  PCI_BRIDGE_CTL_FAST_BACK 0x80	/* Fast Back2Back enabled on secondary interface */
-
-/* Header type 2 (CardBus bridges) */
-/* 0x14-0x15 reserved */
-#define PCI_CB_SEC_STATUS	0x16	/* Secondary status */
-#define PCI_CB_PRIMARY_BUS	0x18	/* PCI bus number */
-#define PCI_CB_CARD_BUS		0x19	/* CardBus bus number */
-#define PCI_CB_SUBORDINATE_BUS	0x1a	/* Subordinate bus number */
-#define PCI_CB_LATENCY_TIMER	0x1b	/* CardBus latency timer */
-#define PCI_CB_MEMORY_BASE_0	0x1c
-#define PCI_CB_MEMORY_LIMIT_0	0x20
-#define PCI_CB_MEMORY_BASE_1	0x24
-#define PCI_CB_MEMORY_LIMIT_1	0x28
-#define PCI_CB_IO_BASE_0	0x2c
-#define PCI_CB_IO_BASE_0_HI	0x2e
-#define PCI_CB_IO_LIMIT_0	0x30
-#define PCI_CB_IO_LIMIT_0_HI	0x32
-#define PCI_CB_IO_BASE_1	0x34
-#define PCI_CB_IO_BASE_1_HI	0x36
-#define PCI_CB_IO_LIMIT_1	0x38
-#define PCI_CB_IO_LIMIT_1_HI	0x3a
-#define  PCI_CB_IO_RANGE_MASK	~0x03
-/* 0x3c-0x3d are same as for htype 0 */
-#define PCI_CB_BRIDGE_CONTROL	0x3e
-#define  PCI_CB_BRIDGE_CTL_PARITY	0x01	/* Similar to standard bridge control register */
-#define  PCI_CB_BRIDGE_CTL_SERR		0x02
-#define  PCI_CB_BRIDGE_CTL_ISA		0x04
-#define  PCI_CB_BRIDGE_CTL_VGA		0x08
-#define  PCI_CB_BRIDGE_CTL_MASTER_ABORT	0x20
-#define  PCI_CB_BRIDGE_CTL_CB_RESET	0x40	/* CardBus reset */
-#define  PCI_CB_BRIDGE_CTL_16BIT_INT	0x80	/* Enable interrupt for 16-bit cards */
-#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100	/* Prefetch enable for both memory regions */
-#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
-#define  PCI_CB_BRIDGE_CTL_POST_WRITES	0x400
-#define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
-#define PCI_CB_SUBSYSTEM_ID	0x42
-#define PCI_CB_LEGACY_MODE_BASE	0x44	/* 16-bit PC Card legacy mode base address (ExCa) */
-/* 0x48-0x7f reserved */
-
-/* Capability lists */
-
-#define PCI_CAP_LIST_ID		0	/* Capability ID */
-#define  PCI_CAP_ID_PM		0x01	/* Power Management */
-#define  PCI_CAP_ID_AGP		0x02	/* Accelerated Graphics Port */
-#define  PCI_CAP_ID_VPD		0x03	/* Vital Product Data */
-#define  PCI_CAP_ID_SLOTID	0x04	/* Slot Identification */
-#define  PCI_CAP_ID_MSI		0x05	/* Message Signalled Interrupts */
-#define  PCI_CAP_ID_CHSWP	0x06	/* CompactPCI HotSwap */
-#define  PCI_CAP_ID_PCIX        0x07	/* PCI-X */
-#define  PCI_CAP_ID_HT          0x08	/* HyperTransport */
-#define  PCI_CAP_ID_VNDR	0x09	/* Vendor specific */
-#define  PCI_CAP_ID_DBG		0x0A	/* Debug port */
-#define  PCI_CAP_ID_CCRC	0x0B	/* CompactPCI Central Resource Control */
-#define  PCI_CAP_ID_AGP3	0x0E	/* AGP 8x */
-#define  PCI_CAP_ID_EXP		0x10	/* PCI Express */
-#define  PCI_CAP_ID_MSIX	0x11	/* MSI-X */
-#define PCI_CAP_LIST_NEXT	1	/* Next capability in the list */
-#define PCI_CAP_FLAGS		2	/* Capability defined flags (16 bits) */
-#define PCI_CAP_SIZEOF		4
-
-/* Capabilities residing in the PCI Express extended configuration space */
-
-#define PCI_EXT_CAP_ID_AER	0x01	/* Advanced Error Reporting */
-#define PCI_EXT_CAP_ID_VC	0x02	/* Virtual Channel */
-#define PCI_EXT_CAP_ID_DSN	0x03	/* Device Serial Number */
-#define PCI_EXT_CAP_ID_PB	0x04	/* Power Budgeting */
-
-/* Power Management Registers */
-
-#define  PCI_PM_CAP_VER_MASK	0x0007	/* Version (2=PM1.1) */
-#define  PCI_PM_CAP_PME_CLOCK	0x0008	/* Clock required for PME generation */
-#define  PCI_PM_CAP_DSI		0x0020	/* Device specific initialization required */
-#define  PCI_PM_CAP_AUX_C_MASK	0x01c0	/* Maximum aux current required in D3cold */
-#define  PCI_PM_CAP_D1		0x0200	/* D1 power state support */
-#define  PCI_PM_CAP_D2		0x0400	/* D2 power state support */
-#define  PCI_PM_CAP_PME_D0	0x0800	/* PME can be asserted from D0 */
-#define  PCI_PM_CAP_PME_D1	0x1000	/* PME can be asserted from D1 */
-#define  PCI_PM_CAP_PME_D2	0x2000	/* PME can be asserted from D2 */
-#define  PCI_PM_CAP_PME_D3_HOT	0x4000	/* PME can be asserted from D3hot */
-#define  PCI_PM_CAP_PME_D3_COLD	0x8000	/* PME can be asserted from D3cold */
-#define PCI_PM_CTRL		4	/* PM control and status register */
-#define  PCI_PM_CTRL_STATE_MASK	0x0003	/* Current power state (D0 to D3) */
-#define  PCI_PM_CTRL_PME_ENABLE	0x0100	/* PME pin enable */
-#define  PCI_PM_CTRL_DATA_SEL_MASK	0x1e00	/* PM table data index */
-#define  PCI_PM_CTRL_DATA_SCALE_MASK	0x6000	/* PM table data scaling factor */
-#define  PCI_PM_CTRL_PME_STATUS	0x8000	/* PME pin status */
-#define PCI_PM_PPB_EXTENSIONS	6	/* PPB support extensions */
-#define  PCI_PM_PPB_B2_B3	0x40	/* If bridge enters D3hot, bus enters: 0=B3, 1=B2 */
-#define  PCI_PM_BPCC_ENABLE	0x80	/* Secondary bus is power managed */
-#define PCI_PM_DATA_REGISTER	7	/* PM table contents read here */
-#define PCI_PM_SIZEOF		8
-
-/* AGP registers */
-
-#define PCI_AGP_VERSION		2	/* BCD version number */
-#define PCI_AGP_RFU		3	/* Rest of capability flags */
-#define PCI_AGP_STATUS		4	/* Status register */
-#define  PCI_AGP_STATUS_RQ_MASK	0xff000000	/* Maximum number of requests - 1 */
-#define  PCI_AGP_STATUS_ISOCH	0x10000	/* Isochronous transactions supported */
-#define  PCI_AGP_STATUS_ARQSZ_MASK	0xe000	/* log2(optimum async req size in bytes) - 4 */
-#define  PCI_AGP_STATUS_CAL_MASK	0x1c00	/* Calibration cycle timing */
-#define  PCI_AGP_STATUS_SBA	0x0200	/* Sideband addressing supported */
-#define  PCI_AGP_STATUS_ITA_COH	0x0100	/* In-aperture accesses always coherent */
-#define  PCI_AGP_STATUS_GART64	0x0080	/* 64-bit GART entries supported */
-#define  PCI_AGP_STATUS_HTRANS	0x0040	/* If 0, core logic can xlate host CPU accesses thru aperture */
-#define  PCI_AGP_STATUS_64BIT	0x0020	/* 64-bit addressing cycles supported */
-#define  PCI_AGP_STATUS_FW	0x0010	/* Fast write transfers supported */
-#define  PCI_AGP_STATUS_AGP3	0x0008	/* AGP3 mode supported */
-#define  PCI_AGP_STATUS_RATE4	0x0004	/* 4x transfer rate supported (RFU in AGP3 mode) */
-#define  PCI_AGP_STATUS_RATE2	0x0002	/* 2x transfer rate supported (8x in AGP3 mode) */
-#define  PCI_AGP_STATUS_RATE1	0x0001	/* 1x transfer rate supported (4x in AGP3 mode) */
-#define PCI_AGP_COMMAND		8	/* Control register */
-#define  PCI_AGP_COMMAND_RQ_MASK 0xff000000	/* Master: Maximum number of requests */
-#define  PCI_AGP_COMMAND_ARQSZ_MASK	0xe000	/* log2(optimum async req size in bytes) - 4 */
-#define  PCI_AGP_COMMAND_CAL_MASK	0x1c00	/* Calibration cycle timing */
-#define  PCI_AGP_COMMAND_SBA	0x0200	/* Sideband addressing enabled */
-#define  PCI_AGP_COMMAND_AGP	0x0100	/* Allow processing of AGP transactions */
-#define  PCI_AGP_COMMAND_GART64	0x0080	/* 64-bit GART entries enabled */
-#define  PCI_AGP_COMMAND_64BIT	0x0020	/* Allow generation of 64-bit addr cycles */
-#define  PCI_AGP_COMMAND_FW	0x0010	/* Enable FW transfers */
-#define  PCI_AGP_COMMAND_RATE4	0x0004	/* Use 4x rate (RFU in AGP3 mode) */
-#define  PCI_AGP_COMMAND_RATE2	0x0002	/* Use 2x rate (8x in AGP3 mode) */
-#define  PCI_AGP_COMMAND_RATE1	0x0001	/* Use 1x rate (4x in AGP3 mode) */
-#define PCI_AGP_SIZEOF		12
-
-/* Slot Identification */
-
-#define PCI_SID_ESR		2	/* Expansion Slot Register */
-#define  PCI_SID_ESR_NSLOTS	0x1f	/* Number of expansion slots available */
-#define  PCI_SID_ESR_FIC	0x20	/* First In Chassis Flag */
-#define PCI_SID_CHASSIS_NR	3	/* Chassis Number */
-
-/* Message Signalled Interrupts registers */
-
-#define PCI_MSI_FLAGS		2	/* Various flags */
-#define  PCI_MSI_FLAGS_64BIT	0x80	/* 64-bit addresses allowed */
-#define  PCI_MSI_FLAGS_QSIZE	0x70	/* Message queue size configured */
-#define  PCI_MSI_FLAGS_QMASK	0x0e	/* Maximum queue size available */
-#define  PCI_MSI_FLAGS_ENABLE	0x01	/* MSI feature enabled */
-#define PCI_MSI_RFU		3	/* Rest of capability flags */
-#define PCI_MSI_ADDRESS_LO	4	/* Lower 32 bits */
-#define PCI_MSI_ADDRESS_HI	8	/* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
-#define PCI_MSI_DATA_32		8	/* 16 bits of data for 32-bit devices */
-#define PCI_MSI_DATA_64		12	/* 16 bits of data for 64-bit devices */
-
-/* PCI-X */
-#define PCI_PCIX_COMMAND                                                2	/* Command register offset */
-#define PCI_PCIX_COMMAND_DPERE                                     0x0001	/* Data Parity Error Recover Enable */
-#define PCI_PCIX_COMMAND_ERO                                       0x0002	/* Enable Relaxed Ordering */
-#define PCI_PCIX_COMMAND_MAX_MEM_READ_BYTE_COUNT                   0x000c	/* Maximum Memory Read Byte Count */
-#define PCI_PCIX_COMMAND_MAX_OUTSTANDING_SPLIT_TRANS               0x0070
-#define PCI_PCIX_COMMAND_RESERVED                                   0xf80
-#define PCI_PCIX_STATUS                                                 4	/* Status register offset */
-#define PCI_PCIX_STATUS_FUNCTION                               0x00000007
-#define PCI_PCIX_STATUS_DEVICE                                 0x000000f8
-#define PCI_PCIX_STATUS_BUS                                    0x0000ff00
-#define PCI_PCIX_STATUS_64BIT                                  0x00010000
-#define PCI_PCIX_STATUS_133MHZ                                 0x00020000
-#define PCI_PCIX_STATUS_SC_DISCARDED                           0x00040000	/* Split Completion Discarded */
-#define PCI_PCIX_STATUS_UNEXPECTED_SC                          0x00080000	/* Unexpected Split Completion */
-#define PCI_PCIX_STATUS_DEVICE_COMPLEXITY                      0x00100000	/* 0 = simple device, 1 = bridge device */
-#define PCI_PCIX_STATUS_DESIGNED_MAX_MEM_READ_BYTE_COUNT       0x00600000	/* 0 = 512 bytes, 1 = 1024, 2 = 2048, 3 = 4096 */
-#define PCI_PCIX_STATUS_DESIGNED_MAX_OUTSTANDING_SPLIT_TRANS   0x03800000
-#define PCI_PCIX_STATUS_DESIGNED_MAX_CUMULATIVE_READ_SIZE      0x1c000000
-#define PCI_PCIX_STATUS_RCVD_SC_ERR_MESS                       0x20000000	/* Received Split Completion Error Message */
-#define PCI_PCIX_STATUS_266MHZ				       0x40000000	/* 266 MHz capable */
-#define PCI_PCIX_STATUS_533MHZ				       0x80000000	/* 533 MHz capable */
-#define PCI_PCIX_SIZEOF		4
-
-/* PCI-X Bridges */
-#define PCI_PCIX_BRIDGE_SEC_STATUS                                      2	/* Secondary bus status register offset */
-#define PCI_PCIX_BRIDGE_SEC_STATUS_64BIT                           0x0001
-#define PCI_PCIX_BRIDGE_SEC_STATUS_133MHZ                          0x0002
-#define PCI_PCIX_BRIDGE_SEC_STATUS_SC_DISCARDED                    0x0004	/* Split Completion Discarded on secondary bus */
-#define PCI_PCIX_BRIDGE_SEC_STATUS_UNEXPECTED_SC                   0x0008	/* Unexpected Split Completion on secondary bus */
-#define PCI_PCIX_BRIDGE_SEC_STATUS_SC_OVERRUN                      0x0010	/* Split Completion Overrun on secondary bus */
-#define PCI_PCIX_BRIDGE_SEC_STATUS_SPLIT_REQUEST_DELAYED           0x0020
-#define PCI_PCIX_BRIDGE_SEC_STATUS_CLOCK_FREQ                      0x01c0
-#define PCI_PCIX_BRIDGE_SEC_STATUS_RESERVED                        0xfe00
-#define PCI_PCIX_BRIDGE_STATUS                                          4	/* Primary bus status register offset */
-#define PCI_PCIX_BRIDGE_STATUS_FUNCTION                        0x00000007
-#define PCI_PCIX_BRIDGE_STATUS_DEVICE                          0x000000f8
-#define PCI_PCIX_BRIDGE_STATUS_BUS                             0x0000ff00
-#define PCI_PCIX_BRIDGE_STATUS_64BIT                           0x00010000
-#define PCI_PCIX_BRIDGE_STATUS_133MHZ                          0x00020000
-#define PCI_PCIX_BRIDGE_STATUS_SC_DISCARDED                    0x00040000	/* Split Completion Discarded */
-#define PCI_PCIX_BRIDGE_STATUS_UNEXPECTED_SC                   0x00080000	/* Unexpected Split Completion */
-#define PCI_PCIX_BRIDGE_STATUS_SC_OVERRUN                      0x00100000	/* Split Completion Overrun */
-#define PCI_PCIX_BRIDGE_STATUS_SPLIT_REQUEST_DELAYED           0x00200000
-#define PCI_PCIX_BRIDGE_STATUS_RESERVED                        0xffc00000
-#define PCI_PCIX_BRIDGE_UPSTREAM_SPLIT_TRANS_CTRL                       8	/* Upstream Split Transaction Register offset */
-#define PCI_PCIX_BRIDGE_DOWNSTREAM_SPLIT_TRANS_CTRL                    12	/* Downstream Split Transaction Register offset */
-#define PCI_PCIX_BRIDGE_STR_CAPACITY                           0x0000ffff
-#define PCI_PCIX_BRIDGE_STR_COMMITMENT_LIMIT                   0xffff0000
-#define PCI_PCIX_BRIDGE_SIZEOF 12
-
-/* HyperTransport (as of spec rev. 2.00) */
-#define PCI_HT_CMD		2	/* Command Register */
-#define  PCI_HT_CMD_TYP_HI	0xe000	/* Capability Type high part */
-#define  PCI_HT_CMD_TYP_HI_PRI	0x0000	/* Slave or Primary Interface */
-#define  PCI_HT_CMD_TYP_HI_SEC	0x2000	/* Host or Secondary Interface */
-#define  PCI_HT_CMD_TYP		0xf800	/* Capability Type */
-#define  PCI_HT_CMD_TYP_SW	0x4000	/* Switch */
-#define  PCI_HT_CMD_TYP_IDC	0x8000	/* Interrupt Discovery and Configuration */
-#define  PCI_HT_CMD_TYP_RID	0x8800	/* Revision ID */
-#define  PCI_HT_CMD_TYP_UIDC	0x9000	/* UnitID Clumping */
-#define  PCI_HT_CMD_TYP_ECSA	0x9800	/* Extended Configuration Space Access */
-#define  PCI_HT_CMD_TYP_AM	0xa000	/* Address Mapping */
-#define  PCI_HT_CMD_TYP_MSIM	0xa800	/* MSI Mapping */
-#define  PCI_HT_CMD_TYP_DR	0xb000	/* DirectRoute */
-#define  PCI_HT_CMD_TYP_VCS	0xb800	/* VCSet */
-#define  PCI_HT_CMD_TYP_RM	0xc000	/* Retry Mode */
-#define  PCI_HT_CMD_TYP_X86	0xc800	/* X86 (reserved) */
-
-					/* Link Control Register */
-#define  PCI_HT_LCTR_CFLE	0x0002	/* CRC Flood Enable */
-#define  PCI_HT_LCTR_CST	0x0004	/* CRC Start Test */
-#define  PCI_HT_LCTR_CFE	0x0008	/* CRC Force Error */
-#define  PCI_HT_LCTR_LKFAIL	0x0010	/* Link Failure */
-#define  PCI_HT_LCTR_INIT	0x0020	/* Initialization Complete */
-#define  PCI_HT_LCTR_EOC	0x0040	/* End of Chain */
-#define  PCI_HT_LCTR_TXO	0x0080	/* Transmitter Off */
-#define  PCI_HT_LCTR_CRCERR	0x0f00	/* CRC Error */
-#define  PCI_HT_LCTR_ISOCEN	0x1000	/* Isochronous Flow Control Enable */
-#define  PCI_HT_LCTR_LSEN	0x2000	/* LDTSTOP# Tristate Enable */
-#define  PCI_HT_LCTR_EXTCTL	0x4000	/* Extended CTL Time */
-#define  PCI_HT_LCTR_64B	0x8000	/* 64-bit Addressing Enable */
-
-					/* Link Configuration Register */
-#define  PCI_HT_LCNF_MLWI	0x0007	/* Max Link Width In */
-#define  PCI_HT_LCNF_LW_8B	0x0	/* Link Width 8 bits */
-#define  PCI_HT_LCNF_LW_16B	0x1	/* Link Width 16 bits */
-#define  PCI_HT_LCNF_LW_32B	0x3	/* Link Width 32 bits */
-#define  PCI_HT_LCNF_LW_2B	0x4	/* Link Width 2 bits */
-#define  PCI_HT_LCNF_LW_4B	0x5	/* Link Width 4 bits */
-#define  PCI_HT_LCNF_LW_NC	0x7	/* Link physically not connected */
-#define  PCI_HT_LCNF_DFI	0x0008	/* Doubleword Flow Control In */
-#define  PCI_HT_LCNF_MLWO	0x0070	/* Max Link Width Out */
-#define  PCI_HT_LCNF_DFO	0x0080	/* Doubleword Flow Control Out */
-#define  PCI_HT_LCNF_LWI	0x0700	/* Link Width In */
-#define  PCI_HT_LCNF_DFIE	0x0800	/* Doubleword Flow Control In Enable */
-#define  PCI_HT_LCNF_LWO	0x7000	/* Link Width Out */
-#define  PCI_HT_LCNF_DFOE	0x8000	/* Doubleword Flow Control Out Enable */
-
-					/* Revision ID Register */
-#define  PCI_HT_RID_MIN		0x1f	/* Minor Revision */
-#define  PCI_HT_RID_MAJ		0xe0	/* Major Revision */
-
-					/* Link Frequency/Error Register */
-#define  PCI_HT_LFRER_FREQ	0x0f	/* Transmitter Clock Frequency */
-#define  PCI_HT_LFRER_200	0x00	/* 200MHz */
-#define  PCI_HT_LFRER_300	0x01	/* 300MHz */
-#define  PCI_HT_LFRER_400	0x02	/* 400MHz */
-#define  PCI_HT_LFRER_500	0x03	/* 500MHz */
-#define  PCI_HT_LFRER_600	0x04	/* 600MHz */
-#define  PCI_HT_LFRER_800	0x05	/* 800MHz */
-#define  PCI_HT_LFRER_1000	0x06	/* 1.0GHz */
-#define  PCI_HT_LFRER_1200	0x07	/* 1.2GHz */
-#define  PCI_HT_LFRER_1400	0x08	/* 1.4GHz */
-#define  PCI_HT_LFRER_1600	0x09	/* 1.6GHz */
-#define  PCI_HT_LFRER_VEND	0x0f	/* Vendor-Specific */
-#define  PCI_HT_LFRER_ERR	0xf0	/* Link Error */
-#define  PCI_HT_LFRER_PROT	0x10	/* Protocol Error */
-#define  PCI_HT_LFRER_OV	0x20	/* Overflow Error */
-#define  PCI_HT_LFRER_EOC	0x40	/* End of Chain Error */
-#define  PCI_HT_LFRER_CTLT	0x80	/* CTL Timeout */
-
-					/* Link Frequency Capability Register */
-#define  PCI_HT_LFCAP_200	0x0001	/* 200MHz */
-#define  PCI_HT_LFCAP_300	0x0002	/* 300MHz */
-#define  PCI_HT_LFCAP_400	0x0004	/* 400MHz */
-#define  PCI_HT_LFCAP_500	0x0008	/* 500MHz */
-#define  PCI_HT_LFCAP_600	0x0010	/* 600MHz */
-#define  PCI_HT_LFCAP_800	0x0020	/* 800MHz */
-#define  PCI_HT_LFCAP_1000	0x0040	/* 1.0GHz */
-#define  PCI_HT_LFCAP_1200	0x0080	/* 1.2GHz */
-#define  PCI_HT_LFCAP_1400	0x0100	/* 1.4GHz */
-#define  PCI_HT_LFCAP_1600	0x0200	/* 1.6GHz */
-#define  PCI_HT_LFCAP_VEND	0x8000	/* Vendor-Specific */
-
-					/* Feature Register */
-#define  PCI_HT_FTR_ISOCFC	0x0001	/* Isochronous Flow Control Mode */
-#define  PCI_HT_FTR_LDTSTOP	0x0002	/* LDTSTOP# Supported */
-#define  PCI_HT_FTR_CRCTM	0x0004	/* CRC Test Mode */
-#define  PCI_HT_FTR_ECTLT	0x0008	/* Extended CTL Time Required */
-#define  PCI_HT_FTR_64BA	0x0010	/* 64-bit Addressing */
-#define  PCI_HT_FTR_UIDRD	0x0020	/* UnitID Reorder Disable */
-
-					/* Error Handling Register */
-#define  PCI_HT_EH_PFLE		0x0001	/* Protocol Error Flood Enable */
-#define  PCI_HT_EH_OFLE		0x0002	/* Overflow Error Flood Enable */
-#define  PCI_HT_EH_PFE		0x0004	/* Protocol Error Fatal Enable */
-#define  PCI_HT_EH_OFE		0x0008	/* Overflow Error Fatal Enable */
-#define  PCI_HT_EH_EOCFE	0x0010	/* End of Chain Error Fatal Enable */
-#define  PCI_HT_EH_RFE		0x0020	/* Response Error Fatal Enable */
-#define  PCI_HT_EH_CRCFE	0x0040	/* CRC Error Fatal Enable */
-#define  PCI_HT_EH_SERRFE	0x0080	/* System Error Fatal Enable (B */
-#define  PCI_HT_EH_CF		0x0100	/* Chain Fail */
-#define  PCI_HT_EH_RE		0x0200	/* Response Error */
-#define  PCI_HT_EH_PNFE		0x0400	/* Protocol Error Nonfatal Enable */
-#define  PCI_HT_EH_ONFE		0x0800	/* Overflow Error Nonfatal Enable */
-#define  PCI_HT_EH_EOCNFE	0x1000	/* End of Chain Error Nonfatal Enable */
-#define  PCI_HT_EH_RNFE		0x2000	/* Response Error Nonfatal Enable */
-#define  PCI_HT_EH_CRCNFE	0x4000	/* CRC Error Nonfatal Enable */
-#define  PCI_HT_EH_SERRNFE	0x8000	/* System Error Nonfatal Enable */
-
-/* HyperTransport: Slave or Primary Interface */
-#define PCI_HT_PRI_CMD		2	/* Command Register */
-#define  PCI_HT_PRI_CMD_BUID	0x001f	/* Base UnitID */
-#define  PCI_HT_PRI_CMD_UC	0x03e0	/* Unit Count */
-#define  PCI_HT_PRI_CMD_MH	0x0400	/* Master Host */
-#define  PCI_HT_PRI_CMD_DD	0x0800	/* Default Direction */
-#define  PCI_HT_PRI_CMD_DUL	0x1000	/* Drop on Uninitialized Link */
-
-#define PCI_HT_PRI_LCTR0	4	/* Link Control 0 Register */
-#define PCI_HT_PRI_LCNF0	6	/* Link Config 0 Register */
-#define PCI_HT_PRI_LCTR1	8	/* Link Control 1 Register */
-#define PCI_HT_PRI_LCNF1	10	/* Link Config 1 Register */
-#define PCI_HT_PRI_RID		12	/* Revision ID Register */
-#define PCI_HT_PRI_LFRER0	13	/* Link Frequency/Error 0 Register */
-#define PCI_HT_PRI_LFCAP0	14	/* Link Frequency Capability 0 Register */
-#define PCI_HT_PRI_FTR		16	/* Feature Register */
-#define PCI_HT_PRI_LFRER1	17	/* Link Frequency/Error 1 Register */
-#define PCI_HT_PRI_LFCAP1	18	/* Link Frequency Capability 1 Register */
-#define PCI_HT_PRI_ES		20	/* Enumeration Scratchpad Register */
-#define PCI_HT_PRI_EH		22	/* Error Handling Register */
-#define PCI_HT_PRI_MBU		24	/* Memory Base Upper Register */
-#define PCI_HT_PRI_MLU		25	/* Memory Limit Upper Register */
-#define PCI_HT_PRI_BN		26	/* Bus Number Register */
-#define PCI_HT_PRI_SIZEOF	28
-
-/* HyperTransport: Host or Secondary Interface */
-#define PCI_HT_SEC_CMD		2	/* Command Register */
-#define  PCI_HT_SEC_CMD_WR	0x0001	/* Warm Reset */
-#define  PCI_HT_SEC_CMD_DE	0x0002	/* Double-Ended */
-#define  PCI_HT_SEC_CMD_DN	0x0076	/* Device Number */
-#define  PCI_HT_SEC_CMD_CS	0x0080	/* Chain Side */
-#define  PCI_HT_SEC_CMD_HH	0x0100	/* Host Hide */
-#define  PCI_HT_SEC_CMD_AS	0x0400	/* Act as Slave */
-#define  PCI_HT_SEC_CMD_HIECE	0x0800	/* Host Inbound End of Chain Error */
-#define  PCI_HT_SEC_CMD_DUL	0x1000	/* Drop on Uninitialized Link */
-
-#define PCI_HT_SEC_LCTR		4	/* Link Control Register */
-#define PCI_HT_SEC_LCNF		6	/* Link Config Register */
-#define PCI_HT_SEC_RID		8	/* Revision ID Register */
-#define PCI_HT_SEC_LFRER	9	/* Link Frequency/Error Register */
-#define PCI_HT_SEC_LFCAP	10	/* Link Frequency Capability Register */
-#define PCI_HT_SEC_FTR		12	/* Feature Register */
-#define  PCI_HT_SEC_FTR_EXTRS	0x0100	/* Extended Register Set */
-#define  PCI_HT_SEC_FTR_UCNFE	0x0200	/* Upstream Configuration Enable */
-#define PCI_HT_SEC_ES		16	/* Enumeration Scratchpad Register */
-#define PCI_HT_SEC_EH		18	/* Error Handling Register */
-#define PCI_HT_SEC_MBU		20	/* Memory Base Upper Register */
-#define PCI_HT_SEC_MLU		21	/* Memory Limit Upper Register */
-#define PCI_HT_SEC_SIZEOF	24
-
-/* HyperTransport: Switch */
-#define PCI_HT_SW_CMD		2	/* Switch Command Register */
-#define  PCI_HT_SW_CMD_VIBERR	0x0080	/* VIB Error */
-#define  PCI_HT_SW_CMD_VIBFL	0x0100	/* VIB Flood */
-#define  PCI_HT_SW_CMD_VIBFT	0x0200	/* VIB Fatal */
-#define  PCI_HT_SW_CMD_VIBNFT	0x0400	/* VIB Nonfatal */
-#define PCI_HT_SW_PMASK		4	/* Partition Mask Register */
-#define PCI_HT_SW_SWINF		8	/* Switch Info Register */
-#define  PCI_HT_SW_SWINF_DP	0x0000001f	/* Default Port */
-#define  PCI_HT_SW_SWINF_EN	0x00000020	/* Enable Decode */
-#define  PCI_HT_SW_SWINF_CR	0x00000040	/* Cold Reset */
-#define  PCI_HT_SW_SWINF_PCIDX	0x00000f00	/* Performance Counter Index */
-#define  PCI_HT_SW_SWINF_BLRIDX	0x0003f000	/* Base/Limit Range Index */
-#define  PCI_HT_SW_SWINF_SBIDX	0x00002000	/* Secondary Base Range Index */
-#define  PCI_HT_SW_SWINF_HP	0x00040000	/* Hot Plug */
-#define  PCI_HT_SW_SWINF_HIDE	0x00080000	/* Hide Port */
-#define PCI_HT_SW_PCD		12	/* Performance Counter Data Register */
-#define PCI_HT_SW_BLRD		16	/* Base/Limit Range Data Register */
-#define PCI_HT_SW_SBD		20	/* Secondary Base Data Register */
-#define PCI_HT_SW_SIZEOF	24
-
-					/* Counter indices */
-#define  PCI_HT_SW_PC_PCR	0x0	/* Posted Command Receive */
-#define  PCI_HT_SW_PC_NPCR	0x1	/* Nonposted Command Receive */
-#define  PCI_HT_SW_PC_RCR	0x2	/* Response Command Receive */
-#define  PCI_HT_SW_PC_PDWR	0x3	/* Posted DW Receive */
-#define  PCI_HT_SW_PC_NPDWR	0x4	/* Nonposted DW Receive */
-#define  PCI_HT_SW_PC_RDWR	0x5	/* Response DW Receive */
-#define  PCI_HT_SW_PC_PCT	0x6	/* Posted Command Transmit */
-#define  PCI_HT_SW_PC_NPCT	0x7	/* Nonposted Command Transmit */
-#define  PCI_HT_SW_PC_RCT	0x8	/* Response Command Transmit */
-#define  PCI_HT_SW_PC_PDWT	0x9	/* Posted DW Transmit */
-#define  PCI_HT_SW_PC_NPDWT	0xa	/* Nonposted DW Transmit */
-#define  PCI_HT_SW_PC_RDWT	0xb	/* Response DW Transmit */
-
-					/* Base/Limit Range indices */
-#define  PCI_HT_SW_BLR_BASE0_LO	0x0	/* Base 0[31:1], Enable */
-#define  PCI_HT_SW_BLR_BASE0_HI	0x1	/* Base 0 Upper */
-#define  PCI_HT_SW_BLR_LIM0_LO	0x2	/* Limit 0 Lower */
-#define  PCI_HT_SW_BLR_LIM0_HI	0x3	/* Limit 0 Upper */
-
-					/* Secondary Base indices */
-#define  PCI_HT_SW_SB_LO	0x0	/* Secondary Base[31:1], Enable */
-#define  PCI_HT_SW_S0_HI	0x1	/* Secondary Base Upper */
-
-/* HyperTransport: Interrupt Discovery and Configuration */
-#define PCI_HT_IDC_IDX		2	/* Index Register */
-#define PCI_HT_IDC_DATA		4	/* Data Register */
-#define PCI_HT_IDC_SIZEOF	8
-
-					/* Register indices */
-#define  PCI_HT_IDC_IDX_LINT	0x01	/* Last Interrupt Register */
-#define   PCI_HT_IDC_LINT	0x00ff0000	/* Last interrupt definition */
-#define  PCI_HT_IDC_IDX_IDR	0x10	/* Interrupt Definition Registers */
-					/* Low part (at index) */
-#define   PCI_HT_IDC_IDR_MASK	0x10000001	/* Mask */
-#define   PCI_HT_IDC_IDR_POL	0x10000002	/* Polarity */
-#define   PCI_HT_IDC_IDR_II_2	0x1000001c	/* IntrInfo[4:2]: Message Type */
-#define   PCI_HT_IDC_IDR_II_5	0x10000020	/* IntrInfo[5]: Request EOI */
-#define   PCI_HT_IDC_IDR_II_6	0x00ffffc0	/* IntrInfo[23:6] */
-#define   PCI_HT_IDC_IDR_II_24	0xff000000	/* IntrInfo[31:24] */
-					/* High part (at index + 1) */
-#define   PCI_HT_IDC_IDR_II_32	0x00ffffff	/* IntrInfo[55:32] */
-#define   PCI_HT_IDC_IDR_PASSPW	0x40000000	/* PassPW setting for messages */
-#define   PCI_HT_IDC_IDR_WEOI	0x80000000	/* Waiting for EOI */
-
-/* HyperTransport: Revision ID */
-#define PCI_HT_RID_RID		2	/* Revision Register */
-#define PCI_HT_RID_SIZEOF	4
-
-/* HyperTransport: UnitID Clumping */
-#define PCI_HT_UIDC_CS		4	/* Clumping Support Register */
-#define PCI_HT_UIDC_CE		8	/* Clumping Enable Register */
-#define PCI_HT_UIDC_SIZEOF	12
-
-/* HyperTransport: Extended Configuration Space Access */
-#define PCI_HT_ECSA_ADDR	4	/* Configuration Address Register */
-#define  PCI_HT_ECSA_ADDR_REG	0x00000ffc	/* Register */
-#define  PCI_HT_ECSA_ADDR_FUN	0x00007000	/* Function */
-#define  PCI_HT_ECSA_ADDR_DEV	0x000f1000	/* Device */
-#define  PCI_HT_ECSA_ADDR_BUS	0x0ff00000	/* Bus Number */
-#define  PCI_HT_ECSA_ADDR_TYPE	0x10000000	/* Access Type */
-#define PCI_HT_ECSA_DATA	8	/* Configuration Data Register */
-#define PCI_HT_ECSA_SIZEOF	12
-
-/* HyperTransport: Address Mapping */
-#define PCI_HT_AM_CMD		2	/* Command Register */
-#define  PCI_HT_AM_CMD_NDMA	0x000f	/* Number of DMA Mappings */
-#define  PCI_HT_AM_CMD_IOSIZ	0x01f0	/* I/O Size */
-#define  PCI_HT_AM_CMD_MT	0x0600	/* Map Type */
-#define  PCI_HT_AM_CMD_MT_40B	0x0000	/* 40-bit */
-#define  PCI_HT_AM_CMD_MT_64B	0x0200	/* 64-bit */
-
-					/* Window Control Register bits */
-#define  PCI_HT_AM_SBW_CTR_COMP	0x1	/* Compat */
-#define  PCI_HT_AM_SBW_CTR_NCOH	0x2	/* NonCoherent */
-#define  PCI_HT_AM_SBW_CTR_ISOC	0x4	/* Isochronous */
-#define  PCI_HT_AM_SBW_CTR_EN	0x8	/* Enable */
-
-/* HyperTransport: 40-bit Address Mapping */
-#define PCI_HT_AM40_SBNPW	4	/* Secondary Bus Non-Prefetchable Window Register */
-#define  PCI_HT_AM40_SBW_BASE	0x000fffff	/* Window Base */
-#define  PCI_HT_AM40_SBW_CTR	0xf0000000	/* Window Control */
-#define PCI_HT_AM40_SBPW	8	/* Secondary Bus Prefetchable Window Register */
-#define PCI_HT_AM40_DMA_PBASE0	12	/* DMA Window Primary Base 0 Register */
-#define PCI_HT_AM40_DMA_CTR0	15	/* DMA Window Control 0 Register */
-#define  PCI_HT_AM40_DMA_CTR_CTR 0xf0	/* Window Control */
-#define PCI_HT_AM40_DMA_SLIM0	16	/* DMA Window Secondary Limit 0 Register */
-#define PCI_HT_AM40_DMA_SBASE0	18	/* DMA Window Secondary Base 0 Register */
-#define PCI_HT_AM40_SIZEOF	12	/* size is variable: 12 + 8 * NDMA */
-
-/* HyperTransport: 64-bit Address Mapping */
-#define PCI_HT_AM64_IDX		4	/* Index Register */
-#define PCI_HT_AM64_DATA_LO	8	/* Data Lower Register */
-#define PCI_HT_AM64_DATA_HI	12	/* Data Upper Register */
-#define PCI_HT_AM64_SIZEOF	16
-
-					/* Register indices */
-#define  PCI_HT_AM64_IDX_SBNPW	0x00	/* Secondary Bus Non-Prefetchable Window Register */
-#define   PCI_HT_AM64_W_BASE_LO	0xfff00000	/* Window Base Lower */
-#define   PCI_HT_AM64_W_CTR	0x0000000f	/* Window Control */
-#define  PCI_HT_AM64_IDX_SBPW	0x01	/* Secondary Bus Prefetchable Window Register */
-#define   PCI_HT_AM64_IDX_PBNPW	0x02	/* Primary Bus Non-Prefetchable Window Register */
-#define   PCI_HT_AM64_IDX_DMAPB0 0x04	/* DMA Window Primary Base 0 Register */
-#define   PCI_HT_AM64_IDX_DMASB0 0x05	/* DMA Window Secondary Base 0 Register */
-#define   PCI_HT_AM64_IDX_DMASL0 0x06	/* DMA Window Secondary Limit 0 Register */
-
-/* HyperTransport: MSI Mapping */
-#define PCI_HT_MSIM_CMD		2	/* Command Register */
-#define  PCI_HT_MSIM_CMD_EN	0x0001	/* Mapping Active */
-#define  PCI_HT_MSIM_CMD_FIXD	0x0002	/* MSI Mapping Address Fixed */
-#define PCI_HT_MSIM_ADDR_LO	4	/* MSI Mapping Address Lower Register */
-#define PCI_HT_MSIM_ADDR_HI	8	/* MSI Mapping Address Upper Register */
-#define PCI_HT_MSIM_SIZEOF	12
-
-/* HyperTransport: DirectRoute */
-#define PCI_HT_DR_CMD		2	/* Command Register */
-#define  PCI_HT_DR_CMD_NDRS	0x000f	/* Number of DirectRoute Spaces */
-#define  PCI_HT_DR_CMD_IDX	0x01f0	/* Index */
-#define PCI_HT_DR_EN		4	/* Enable Vector Register */
-#define PCI_HT_DR_DATA		8	/* Data Register */
-#define PCI_HT_DR_SIZEOF	12
-
-					/* Register indices */
-#define  PCI_HT_DR_IDX_BASE_LO	0x00	/* DirectRoute Base Lower Register */
-#define   PCI_HT_DR_OTNRD	0x00000001	/* Opposite to Normal Request Direction */
-#define   PCI_HT_DR_BL_LO	0xffffff00	/* Base/Limit Lower */
-#define  PCI_HT_DR_IDX_BASE_HI	0x01	/* DirectRoute Base Upper Register */
-#define  PCI_HT_DR_IDX_LIMIT_LO	0x02	/* DirectRoute Limit Lower Register */
-#define  PCI_HT_DR_IDX_LIMIT_HI	0x03	/* DirectRoute Limit Upper Register */
-
-/* HyperTransport: VCSet */
-#define PCI_HT_VCS_SUP		4	/* VCSets Supported Register */
-#define PCI_HT_VCS_L1EN		5	/* Link 1 VCSets Enabled Register */
-#define PCI_HT_VCS_L0EN		6	/* Link 0 VCSets Enabled Register */
-#define PCI_HT_VCS_SBD		8	/* Stream Bucket Depth Register */
-#define PCI_HT_VCS_SINT		9	/* Stream Interval Register */
-#define PCI_HT_VCS_SSUP		10	/* Number of Streaming VCs Supported Register */
-#define  PCI_HT_VCS_SSUP_0	0x00	/* Streaming VC 0 */
-#define  PCI_HT_VCS_SSUP_3	0x01	/* Streaming VCs 0-3 */
-#define  PCI_HT_VCS_SSUP_15	0x02	/* Streaming VCs 0-15 */
-#define PCI_HT_VCS_NFCBD	12	/* Non-FC Bucket Depth Register */
-#define PCI_HT_VCS_NFCINT	13	/* Non-FC Bucket Interval Register */
-#define PCI_HT_VCS_SIZEOF	16
-
-/* HyperTransport: Retry Mode */
-#define PCI_HT_RM_CTR0		4	/* Control 0 Register */
-#define  PCI_HT_RM_CTR_LRETEN	0x01	/* Link Retry Enable */
-#define  PCI_HT_RM_CTR_FSER	0x02	/* Force Single Error */
-#define  PCI_HT_RM_CTR_ROLNEN	0x04	/* Rollover Nonfatal Enable */
-#define  PCI_HT_RM_CTR_FSS	0x08	/* Force Single Stomp */
-#define  PCI_HT_RM_CTR_RETNEN	0x10	/* Retry Nonfatal Enable */
-#define  PCI_HT_RM_CTR_RETFEN	0x20	/* Retry Fatal Enable */
-#define  PCI_HT_RM_CTR_AA	0xc0	/* Allowed Attempts */
-#define PCI_HT_RM_STS0		5	/* Status 0 Register */
-#define  PCI_HT_RM_STS_RETSNT	0x01	/* Retry Sent */
-#define  PCI_HT_RM_STS_CNTROL	0x02	/* Count Rollover */
-#define  PCI_HT_RM_STS_SRCV	0x04	/* Stomp Received */
-#define PCI_HT_RM_CTR1		6	/* Control 1 Register */
-#define PCI_HT_RM_STS1		7	/* Status 1 Register */
-#define PCI_HT_RM_CNT0		8	/* Retry Count 0 Register */
-#define PCI_HT_RM_CNT1		10	/* Retry Count 1 Register */
-#define PCI_HT_RM_SIZEOF	12
-
-/* PCI Express */
-#define PCI_EXP_FLAGS		0x2	/* Capabilities register */
-#define PCI_EXP_FLAGS_VERS	0x000f	/* Capability version */
-#define PCI_EXP_FLAGS_TYPE	0x00f0	/* Device/Port type */
-#define  PCI_EXP_TYPE_ENDPOINT	0x0	/* Express Endpoint */
-#define  PCI_EXP_TYPE_LEG_END	0x1	/* Legacy Endpoint */
-#define  PCI_EXP_TYPE_ROOT_PORT 0x4	/* Root Port */
-#define  PCI_EXP_TYPE_UPSTREAM	0x5	/* Upstream Port */
-#define  PCI_EXP_TYPE_DOWNSTREAM 0x6	/* Downstream Port */
-#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7	/* PCI/PCI-X Bridge */
-#define PCI_EXP_FLAGS_SLOT	0x0100	/* Slot implemented */
-#define PCI_EXP_FLAGS_IRQ	0x3e00	/* Interrupt message number */
-#define PCI_EXP_DEVCAP		0x4	/* Device capabilities */
-#define  PCI_EXP_DEVCAP_PAYLOAD	0x07	/* Max_Payload_Size */
-#define  PCI_EXP_DEVCAP_PHANTOM	0x18	/* Phantom functions */
-#define  PCI_EXP_DEVCAP_EXT_TAG	0x20	/* Extended tags */
-#define  PCI_EXP_DEVCAP_L0S	0x1c0	/* L0s Acceptable Latency */
-#define  PCI_EXP_DEVCAP_L1	0xe00	/* L1 Acceptable Latency */
-#define  PCI_EXP_DEVCAP_ATN_BUT	0x1000	/* Attention Button Present */
-#define  PCI_EXP_DEVCAP_ATN_IND	0x2000	/* Attention Indicator Present */
-#define  PCI_EXP_DEVCAP_PWR_IND	0x4000	/* Power Indicator Present */
-#define  PCI_EXP_DEVCAP_PWR_VAL	0x3fc0000	/* Slot Power Limit Value */
-#define  PCI_EXP_DEVCAP_PWR_SCL	0xc000000	/* Slot Power Limit Scale */
-#define PCI_EXP_DEVCTL		0x8	/* Device Control */
-#define  PCI_EXP_DEVCTL_CERE	0x0001	/* Correctable Error Reporting En. */
-#define  PCI_EXP_DEVCTL_NFERE	0x0002	/* Non-Fatal Error Reporting Enable */
-#define  PCI_EXP_DEVCTL_FERE	0x0004	/* Fatal Error Reporting Enable */
-#define  PCI_EXP_DEVCTL_URRE	0x0008	/* Unsupported Request Reporting En. */
-#define  PCI_EXP_DEVCTL_RELAXED	0x0010	/* Enable Relaxed Ordering */
-#define  PCI_EXP_DEVCTL_PAYLOAD	0x00e0	/* Max_Payload_Size */
-#define  PCI_EXP_DEVCTL_EXT_TAG	0x0100	/* Extended Tag Field Enable */
-#define  PCI_EXP_DEVCTL_PHANTOM	0x0200	/* Phantom Functions Enable */
-#define  PCI_EXP_DEVCTL_AUX_PME	0x0400	/* Auxiliary Power PM Enable */
-#define  PCI_EXP_DEVCTL_NOSNOOP	0x0800	/* Enable No Snoop */
-#define  PCI_EXP_DEVCTL_READRQ	0x7000	/* Max_Read_Request_Size */
-#define PCI_EXP_DEVSTA		0xa	/* Device Status */
-#define  PCI_EXP_DEVSTA_CED	0x01	/* Correctable Error Detected */
-#define  PCI_EXP_DEVSTA_NFED	0x02	/* Non-Fatal Error Detected */
-#define  PCI_EXP_DEVSTA_FED	0x04	/* Fatal Error Detected */
-#define  PCI_EXP_DEVSTA_URD	0x08	/* Unsupported Request Detected */
-#define  PCI_EXP_DEVSTA_AUXPD	0x10	/* AUX Power Detected */
-#define  PCI_EXP_DEVSTA_TRPND	0x20	/* Transactions Pending */
-#define PCI_EXP_LNKCAP		0xc	/* Link Capabilities */
-#define  PCI_EXP_LNKCAP_SPEED	0x0000f	/* Maximum Link Speed */
-#define  PCI_EXP_LNKCAP_WIDTH	0x003f0	/* Maximum Link Width */
-#define  PCI_EXP_LNKCAP_ASPM	0x00c00	/* Active State Power Management */
-#define  PCI_EXP_LNKCAP_L0S	0x07000	/* L0s Acceptable Latency */
-#define  PCI_EXP_LNKCAP_L1	0x38000	/* L1 Acceptable Latency */
-#define  PCI_EXP_LNKCAP_PORT	0xff000000	/* Port Number */
-#define PCI_EXP_LNKCTL		0x10	/* Link Control */
-#define  PCI_EXP_LNKCTL_ASPM	0x0003	/* ASPM Control */
-#define  PCI_EXP_LNKCTL_RCB	0x0008	/* Read Completion Boundary */
-#define  PCI_EXP_LNKCTL_DISABLE	0x0010	/* Link Disable */
-#define  PCI_EXP_LNKCTL_RETRAIN	0x0020	/* Retrain Link */
-#define  PCI_EXP_LNKCTL_CLOCK	0x0040	/* Common Clock Configuration */
-#define  PCI_EXP_LNKCTL_XSYNCH	0x0080	/* Extended Synch */
-#define PCI_EXP_LNKSTA		0x12	/* Link Status */
-#define  PCI_EXP_LNKSTA_SPEED	0x000f	/* Negotiated Link Speed */
-#define  PCI_EXP_LNKSTA_WIDTH	0x03f0	/* Negotiated Link Width */
-#define  PCI_EXP_LNKSTA_TR_ERR	0x0400	/* Training Error */
-#define  PCI_EXP_LNKSTA_TRAIN	0x0800	/* Link Training */
-#define  PCI_EXP_LNKSTA_SL_CLK	0x1000	/* Slot Clock Configuration */
-#define PCI_EXP_SLTCAP		0x14	/* Slot Capabilities */
-#define  PCI_EXP_SLTCAP_ATNB	0x0001	/* Attention Button Present */
-#define  PCI_EXP_SLTCAP_PWRC	0x0002	/* Power Controller Present */
-#define  PCI_EXP_SLTCAP_MRL	0x0004	/* MRL Sensor Present */
-#define  PCI_EXP_SLTCAP_ATNI	0x0008	/* Attention Indicator Present */
-#define  PCI_EXP_SLTCAP_PWRI	0x0010	/* Power Indicator Present */
-#define  PCI_EXP_SLTCAP_HPS	0x0020	/* Hot-Plug Surprise */
-#define  PCI_EXP_SLTCAP_HPC	0x0040	/* Hot-Plug Capable */
-#define  PCI_EXP_SLTCAP_PWR_VAL	0x00007f80	/* Slot Power Limit Value */
-#define  PCI_EXP_SLTCAP_PWR_SCL	0x00018000	/* Slot Power Limit Scale */
-#define  PCI_EXP_SLTCAP_PSN	0xfff80000	/* Physical Slot Number */
-#define PCI_EXP_SLTCTL		0x18	/* Slot Control */
-#define  PCI_EXP_SLTCTL_ATNB	0x0001	/* Attention Button Pressed Enable */
-#define  PCI_EXP_SLTCTL_PWRF	0x0002	/* Power Fault Detected Enable */
-#define  PCI_EXP_SLTCTL_MRLS	0x0004	/* MRL Sensor Changed Enable */
-#define  PCI_EXP_SLTCTL_PRSD	0x0008	/* Presence Detect Changed Enable */
-#define  PCI_EXP_SLTCTL_CMDC	0x0010	/* Command Completed Interrupt Enable */
-#define  PCI_EXP_SLTCTL_HPIE	0x0020	/* Hot-Plug Interrupt Enable */
-#define  PCI_EXP_SLTCTL_ATNI	0x00C0	/* Attention Indicator Control */
-#define  PCI_EXP_SLTCTL_PWRI	0x0300	/* Power Indicator Control */
-#define  PCI_EXP_SLTCTL_PWRC	0x0400	/* Power Controller Control */
-#define PCI_EXP_SLTSTA		0x1a	/* Slot Status */
-#define PCI_EXP_RTCTL		0x1c	/* Root Control */
-#define  PCI_EXP_RTCTL_SECEE	0x1	/* System Error on Correctable Error */
-#define  PCI_EXP_RTCTL_SENFEE	0x1	/* System Error on Non-Fatal Error */
-#define  PCI_EXP_RTCTL_SEFEE	0x1	/* System Error on Fatal Error */
-#define  PCI_EXP_RTCTL_PMEIE	0x1	/* PME Interrupt Enable */
-#define PCI_EXP_RTSTA		0x20	/* Root Status */
-
-/* MSI-X */
-#define  PCI_MSIX_ENABLE	0x8000
-#define  PCI_MSIX_MASK		0x4000
-#define  PCI_MSIX_TABSIZE	0x03ff
-#define PCI_MSIX_TABLE		4
-#define PCI_MSIX_PBA		8
-#define  PCI_MSIX_BIR		0x7
-
-/* Advanced Error Reporting */
-#define PCI_ERR_UNCOR_STATUS	4	/* Uncorrectable Error Status */
-#define  PCI_ERR_UNC_TRAIN	0x00000001	/* Training */
-#define  PCI_ERR_UNC_DLP	0x00000010	/* Data Link Protocol */
-#define  PCI_ERR_UNC_POISON_TLP	0x00001000	/* Poisoned TLP */
-#define  PCI_ERR_UNC_FCP	0x00002000	/* Flow Control Protocol */
-#define  PCI_ERR_UNC_COMP_TIME	0x00004000	/* Completion Timeout */
-#define  PCI_ERR_UNC_COMP_ABORT	0x00008000	/* Completer Abort */
-#define  PCI_ERR_UNC_UNX_COMP	0x00010000	/* Unexpected Completion */
-#define  PCI_ERR_UNC_RX_OVER	0x00020000	/* Receiver Overflow */
-#define  PCI_ERR_UNC_MALF_TLP	0x00040000	/* Malformed TLP */
-#define  PCI_ERR_UNC_ECRC	0x00080000	/* ECRC Error Status */
-#define  PCI_ERR_UNC_UNSUP	0x00100000	/* Unsupported Request */
-#define PCI_ERR_UNCOR_MASK	8	/* Uncorrectable Error Mask */
-	/* Same bits as above */
-#define PCI_ERR_UNCOR_SEVER	12	/* Uncorrectable Error Severity */
-	/* Same bits as above */
-#define PCI_ERR_COR_STATUS	16	/* Correctable Error Status */
-#define  PCI_ERR_COR_RCVR	0x00000001	/* Receiver Error Status */
-#define  PCI_ERR_COR_BAD_TLP	0x00000040	/* Bad TLP Status */
-#define  PCI_ERR_COR_BAD_DLLP	0x00000080	/* Bad DLLP Status */
-#define  PCI_ERR_COR_REP_ROLL	0x00000100	/* REPLAY_NUM Rollover */
-#define  PCI_ERR_COR_REP_TIMER	0x00001000	/* Replay Timer Timeout */
-#define PCI_ERR_COR_MASK	20	/* Correctable Error Mask */
-	/* Same bits as above */
-#define PCI_ERR_CAP		24	/* Advanced Error Capabilities */
-#define  PCI_ERR_CAP_FEP(x)	((x) & 31)	/* First Error Pointer */
-#define  PCI_ERR_CAP_ECRC_GENC	0x00000020	/* ECRC Generation Capable */
-#define  PCI_ERR_CAP_ECRC_GENE	0x00000040	/* ECRC Generation Enable */
-#define  PCI_ERR_CAP_ECRC_CHKC	0x00000080	/* ECRC Check Capable */
-#define  PCI_ERR_CAP_ECRC_CHKE	0x00000100	/* ECRC Check Enable */
-#define PCI_ERR_HEADER_LOG	28	/* Header Log Register (16 bytes) */
-#define PCI_ERR_ROOT_COMMAND	44	/* Root Error Command */
-#define PCI_ERR_ROOT_STATUS	48
-#define PCI_ERR_ROOT_COR_SRC	52
-#define PCI_ERR_ROOT_SRC	54
-
-/* Virtual Channel */
-#define PCI_VC_PORT_REG1	4
-#define PCI_VC_PORT_REG2	8
-#define PCI_VC_PORT_CTRL	12
-#define PCI_VC_PORT_STATUS	14
-#define PCI_VC_RES_CAP		16
-#define PCI_VC_RES_CTRL		20
-#define PCI_VC_RES_STATUS	26
-
-/* Power Budgeting */
-#define PCI_PWR_DSR		4	/* Data Select Register */
-#define PCI_PWR_DATA		8	/* Data Register */
-#define  PCI_PWR_DATA_BASE(x)	((x) & 0xff)	/* Base Power */
-#define  PCI_PWR_DATA_SCALE(x)	(((x) >> 8) & 3)	/* Data Scale */
-#define  PCI_PWR_DATA_PM_SUB(x)	(((x) >> 10) & 7)	/* PM Sub State */
-#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3)	/* PM State */
-#define  PCI_PWR_DATA_TYPE(x)	(((x) >> 15) & 7)	/* Type */
-#define  PCI_PWR_DATA_RAIL(x)	(((x) >> 18) & 7)	/* Power Rail */
-#define PCI_PWR_CAP		12	/* Capability */
-#define  PCI_PWR_CAP_BUDGET(x)	((x) & 1)	/* Included in system budget */
-
-/*
- * The PCI interface treats multi-function devices as independent
- * devices.  The slot/function address of each device is encoded
- * in a single byte as follows:
- *
- *	7:3 = slot
- *	2:0 = function
- */
-#define PCI_DEVFN(slot,func)	((((slot) & 0x1f) << 3) | ((func) & 0x07))
-#define PCI_SLOT(devfn)		(((devfn) >> 3) & 0x1f)
-#define PCI_FUNC(devfn)		((devfn) & 0x07)
-
-/* Device classes and subclasses */
-
-#define PCI_CLASS_NOT_DEFINED		0x0000
-#define PCI_CLASS_NOT_DEFINED_VGA	0x0001
-
-#define PCI_BASE_CLASS_STORAGE		0x01
-#define PCI_CLASS_STORAGE_SCSI		0x0100
-#define PCI_CLASS_STORAGE_IDE		0x0101
-#define PCI_CLASS_STORAGE_FLOPPY	0x0102
-#define PCI_CLASS_STORAGE_IPI		0x0103
-#define PCI_CLASS_STORAGE_RAID		0x0104
-#define PCI_CLASS_STORAGE_OTHER		0x0180
-
-#define PCI_BASE_CLASS_NETWORK		0x02
-#define PCI_CLASS_NETWORK_ETHERNET	0x0200
-#define PCI_CLASS_NETWORK_TOKEN_RING	0x0201
-#define PCI_CLASS_NETWORK_FDDI		0x0202
-#define PCI_CLASS_NETWORK_ATM		0x0203
-#define PCI_CLASS_NETWORK_OTHER		0x0280
-
-#define PCI_BASE_CLASS_DISPLAY		0x03
-#define PCI_CLASS_DISPLAY_VGA		0x0300
-#define PCI_CLASS_DISPLAY_XGA		0x0301
-#define PCI_CLASS_DISPLAY_OTHER		0x0380
-
-#define PCI_BASE_CLASS_MULTIMEDIA	0x04
-#define PCI_CLASS_MULTIMEDIA_VIDEO	0x0400
-#define PCI_CLASS_MULTIMEDIA_AUDIO	0x0401
-#define PCI_CLASS_MULTIMEDIA_OTHER	0x0480
-
-#define PCI_BASE_CLASS_MEMORY		0x05
-#define  PCI_CLASS_MEMORY_RAM		0x0500
-#define  PCI_CLASS_MEMORY_FLASH		0x0501
-#define  PCI_CLASS_MEMORY_OTHER		0x0580
-
-#define PCI_BASE_CLASS_BRIDGE		0x06
-#define  PCI_CLASS_BRIDGE_HOST		0x0600
-#define  PCI_CLASS_BRIDGE_ISA		0x0601
-#define  PCI_CLASS_BRIDGE_EISA		0x0602
-#define  PCI_CLASS_BRIDGE_MC		0x0603
-#define  PCI_CLASS_BRIDGE_PCI		0x0604
-#define  PCI_CLASS_BRIDGE_PCMCIA	0x0605
-#define  PCI_CLASS_BRIDGE_NUBUS		0x0606
-#define  PCI_CLASS_BRIDGE_CARDBUS	0x0607
-#define  PCI_CLASS_BRIDGE_OTHER		0x0680
-
-#define PCI_BASE_CLASS_COMMUNICATION	0x07
-#define PCI_CLASS_COMMUNICATION_SERIAL	0x0700
-#define PCI_CLASS_COMMUNICATION_PARALLEL 0x0701
-#define PCI_CLASS_COMMUNICATION_OTHER	0x0780
-
-#define PCI_BASE_CLASS_SYSTEM		0x08
-#define PCI_CLASS_SYSTEM_PIC		0x0800
-#define PCI_CLASS_SYSTEM_DMA		0x0801
-#define PCI_CLASS_SYSTEM_TIMER		0x0802
-#define PCI_CLASS_SYSTEM_RTC		0x0803
-#define PCI_CLASS_SYSTEM_OTHER		0x0880
-
-#define PCI_BASE_CLASS_INPUT		0x09
-#define PCI_CLASS_INPUT_KEYBOARD	0x0900
-#define PCI_CLASS_INPUT_PEN		0x0901
-#define PCI_CLASS_INPUT_MOUSE		0x0902
-#define PCI_CLASS_INPUT_OTHER		0x0980
-
-#define PCI_BASE_CLASS_DOCKING		0x0a
-#define PCI_CLASS_DOCKING_GENERIC	0x0a00
-#define PCI_CLASS_DOCKING_OTHER		0x0a01
-
-#define PCI_BASE_CLASS_PROCESSOR	0x0b
-#define PCI_CLASS_PROCESSOR_386		0x0b00
-#define PCI_CLASS_PROCESSOR_486		0x0b01
-#define PCI_CLASS_PROCESSOR_PENTIUM	0x0b02
-#define PCI_CLASS_PROCESSOR_ALPHA	0x0b10
-#define PCI_CLASS_PROCESSOR_POWERPC	0x0b20
-#define PCI_CLASS_PROCESSOR_CO		0x0b40
-
-#define PCI_BASE_CLASS_SERIAL		0x0c
-#define PCI_CLASS_SERIAL_FIREWIRE	0x0c00
-#define PCI_CLASS_SERIAL_ACCESS		0x0c01
-#define PCI_CLASS_SERIAL_SSA		0x0c02
-#define PCI_CLASS_SERIAL_USB		0x0c03
-#define PCI_CLASS_SERIAL_FIBER		0x0c04
-
-#define PCI_CLASS_OTHERS		0xff
-
-/* Several ID's we need in the library */
-
-#define PCI_VENDOR_ID_INTEL		0x8086
-#define PCI_VENDOR_ID_COMPAQ		0x0e11
Index: pace/pci/libpci/i386-ports.c
===================================================================
--- uspace/pci/libpci/i386-ports.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,274 +1,0 @@
-/*
- *	The PCI Library -- Direct Configuration access via i386 Ports
- *
- *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#include <unistd.h>
-
-#include "internal.h"
-
-static inline void outb(u8 b, u16 port)
-{
-	asm volatile ("outb %0, %1\n" :: "a" (b), "d" (port));
-}
-
-static inline void outw(u16 w, u16 port)
-{
-	asm volatile ("outw %0, %1\n" :: "a" (w), "d" (port));
-}
-
-static inline void outl(u32 l, u16 port)
-{
-	asm volatile ("outl %0, %1\n" :: "a" (l), "d" (port));
-}
-
-static inline u8 inb(u16 port)
-{
-	u8 val;
-
-	asm volatile ("inb %1, %0 \n" : "=a" (val) : "d"(port));
-	return val;
-}
-
-static inline u16 inw(u16 port)
-{
-	u16 val;
-
-	asm volatile ("inw %1, %0 \n" : "=a" (val) : "d"(port));
-	return val;
-}
-
-static inline u32 inl(u16 port)
-{
-	u32 val;
-
-	asm volatile ("inl %1, %0 \n" : "=a" (val) : "d"(port));
-	return val;
-}
-
-static void conf12_init(struct pci_access *a)
-{
-}
-
-static void conf12_cleanup(struct pci_access *a UNUSED)
-{
-}
-
-/*
- * Before we decide to use direct hardware access mechanisms, we try to do some
- * trivial checks to ensure it at least _seems_ to be working -- we just test
- * whether bus 00 contains a host bridge (this is similar to checking
- * techniques used in XFree86, but ours should be more reliable since we
- * attempt to make use of direct access hints provided by the PCI BIOS).
- *
- * This should be close to trivial, but it isn't, because there are buggy
- * chipsets (yes, you guessed it, by Intel and Compaq) that have no class ID.
- */
-
-static int intel_sanity_check(struct pci_access *a, struct pci_methods *m)
-{
-	struct pci_dev d;
-
-	a->debug("...sanity check");
-	d.bus = 0;
-	d.func = 0;
-	for (d.dev = 0; d.dev < 32; d.dev++) {
-		u16 class, vendor;
-		if (m->read(&d, PCI_CLASS_DEVICE, (byte *) & class,
-			 sizeof(class))
-		    && (class == cpu_to_le16(PCI_CLASS_BRIDGE_HOST)
-			|| class == cpu_to_le16(PCI_CLASS_DISPLAY_VGA))
-		    || m->read(&d, PCI_VENDOR_ID, (byte *) & vendor,
-			       sizeof(vendor))
-		    && (vendor == cpu_to_le16(PCI_VENDOR_ID_INTEL)
-			|| vendor == cpu_to_le16(PCI_VENDOR_ID_COMPAQ))) {
-			a->debug("...outside the Asylum at 0/%02x/0",
-				 d.dev);
-			return 1;
-		}
-	}
-	a->debug("...insane");
-	return 0;
-}
-
-/*
- *	Configuration type 1
- */
-
-#define CONFIG_CMD(bus, device_fn, where)   (0x80000000 | (bus << 16) | (device_fn << 8) | (where & ~3))
-
-static int conf1_detect(struct pci_access *a)
-{
-	unsigned int tmp;
-	int res = 0;
-
-	outb(0x01, 0xCFB);
-	tmp = inl(0xCF8);
-	outl(0x80000000, 0xCF8);
-	if (inl(0xCF8) == 0x80000000)
-		res = 1;
-	outl(tmp, 0xCF8);
-	if (res)
-		res = intel_sanity_check(a, &pm_intel_conf1);
-	return res;
-}
-
-static int conf1_read(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	int addr = 0xcfc + (pos & 3);
-
-	if (pos >= 256)
-		return 0;
-
-	outl(0x80000000 | ((d->bus & 0xff) << 16) |
-	     (PCI_DEVFN(d->dev, d->func) << 8) | (pos & ~3), 0xcf8);
-
-	switch (len) {
-	case 1:
-		buf[0] = inb(addr);
-		break;
-	case 2:
-		((u16 *) buf)[0] = cpu_to_le16(inw(addr));
-		break;
-	case 4:
-		((u32 *) buf)[0] = cpu_to_le32(inl(addr));
-		break;
-	default:
-		return pci_generic_block_read(d, pos, buf, len);
-	}
-	return 1;
-}
-
-static int conf1_write(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	int addr = 0xcfc + (pos & 3);
-
-	if (pos >= 256)
-		return 0;
-
-	outl(0x80000000 | ((d->bus & 0xff) << 16) |
-	     (PCI_DEVFN(d->dev, d->func) << 8) | (pos & ~3), 0xcf8);
-
-	switch (len) {
-	case 1:
-		outb(buf[0], addr);
-		break;
-	case 2:
-		outw(le16_to_cpu(((u16 *) buf)[0]), addr);
-		break;
-	case 4:
-		outl(le32_to_cpu(((u32 *) buf)[0]), addr);
-		break;
-	default:
-		return pci_generic_block_write(d, pos, buf, len);
-	}
-	return 1;
-}
-
-/*
- *	Configuration type 2. Obsolete and brain-damaged, but existing.
- */
-
-static int conf2_detect(struct pci_access *a)
-{
-	/* This is ugly and tends to produce false positives. Beware. */
-	outb(0x00, 0xCFB);
-	outb(0x00, 0xCF8);
-	outb(0x00, 0xCFA);
-	if (inb(0xCF8) == 0x00 && inb(0xCFA) == 0x00)
-		return intel_sanity_check(a, &pm_intel_conf2);
-	else
-		return 0;
-}
-
-static int conf2_read(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	int addr = 0xc000 | (d->dev << 8) | pos;
-
-	if (pos >= 256)
-		return 0;
-
-	if (d->dev >= 16)
-		/* conf2 supports only 16 devices per bus */
-		return 0;
-	outb((d->func << 1) | 0xf0, 0xcf8);
-	outb(d->bus, 0xcfa);
-	switch (len) {
-	case 1:
-		buf[0] = inb(addr);
-		break;
-	case 2:
-		((u16 *) buf)[0] = cpu_to_le16(inw(addr));
-		break;
-	case 4:
-		((u32 *) buf)[0] = cpu_to_le32(inl(addr));
-		break;
-	default:
-		outb(0, 0xcf8);
-		return pci_generic_block_read(d, pos, buf, len);
-	}
-	outb(0, 0xcf8);
-	return 1;
-}
-
-static int conf2_write(struct pci_dev *d, int pos, byte * buf, int len)
-{
-	int addr = 0xc000 | (d->dev << 8) | pos;
-
-	if (pos >= 256)
-		return 0;
-
-	if (d->dev >= 16)
-		d->access->error("conf2_write: only first 16 devices exist.");
-	outb((d->func << 1) | 0xf0, 0xcf8);
-	outb(d->bus, 0xcfa);
-	switch (len) {
-	case 1:
-		outb(buf[0], addr);
-		break;
-	case 2:
-		outw(le16_to_cpu(*(u16 *) buf), addr);
-		break;
-	case 4:
-		outl(le32_to_cpu(*(u32 *) buf), addr);
-		break;
-	default:
-		outb(0, 0xcf8);
-		return pci_generic_block_write(d, pos, buf, len);
-	}
-	outb(0, 0xcf8);
-	return 1;
-}
-
-struct pci_methods pm_intel_conf1 = {
-	"Intel-conf1",
-	NULL,			/* config */
-	conf1_detect,
-	conf12_init,
-	conf12_cleanup,
-	pci_generic_scan,
-	pci_generic_fill_info,
-	conf1_read,
-	conf1_write,
-	NULL,			/* init_dev */
-	NULL			/* cleanup_dev */
-};
-
-struct pci_methods pm_intel_conf2 = {
-	"Intel-conf2",
-	NULL,			/* config */
-	conf2_detect,
-	conf12_init,
-	conf12_cleanup,
-	pci_generic_scan,
-	pci_generic_fill_info,
-	conf2_read,
-	conf2_write,
-	NULL,			/* init_dev */
-	NULL			/* cleanup_dev */
-};
Index: pace/pci/libpci/internal.h
===================================================================
--- uspace/pci/libpci/internal.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- *	The PCI Library -- Internal Stuff
- *
- *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#include "pci.h"
-#include "sysdep.h"
-
-struct pci_methods {
-	char *name;
-	void (*config) (struct pci_access *);
-	int (*detect) (struct pci_access *);
-	void (*init) (struct pci_access *);
-	void (*cleanup) (struct pci_access *);
-	void (*scan) (struct pci_access *);
-	int (*fill_info) (struct pci_dev *, int flags);
-	int (*read) (struct pci_dev *, int pos, byte * buf, int len);
-	int (*write) (struct pci_dev *, int pos, byte * buf, int len);
-	void (*init_dev) (struct pci_dev *);
-	void (*cleanup_dev) (struct pci_dev *);
-};
-
-void pci_generic_scan_bus(struct pci_access *, byte * busmap, int bus);
-void pci_generic_scan(struct pci_access *);
-int pci_generic_fill_info(struct pci_dev *, int flags);
-int pci_generic_block_read(struct pci_dev *, int pos, byte * buf, int len);
-int pci_generic_block_write(struct pci_dev *, int pos, byte * buf,
-			    int len);
-
-void *pci_malloc(struct pci_access *, int);
-void pci_mfree(void *);
-
-struct pci_dev *pci_alloc_dev(struct pci_access *);
-int pci_link_dev(struct pci_access *, struct pci_dev *);
-
-extern struct pci_methods pm_intel_conf1, pm_intel_conf2, pm_linux_proc,
-    pm_fbsd_device, pm_aix_device, pm_nbsd_libpci, pm_obsd_device,
-    pm_dump, pm_linux_sysfs;
Index: pace/pci/libpci/names.c
===================================================================
--- uspace/pci/libpci/names.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,456 +1,0 @@
-/*
- *	The PCI Library -- ID to Name Translation
- *
- *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-
-#include "internal.h"
-#include "pci_ids.h"
-
-struct id_entry {
-	struct id_entry *next;
-	u32 id12, id34;
-	byte cat;
-	byte name[1];
-};
-
-enum id_entry_type {
-	ID_UNKNOWN,
-	ID_VENDOR,
-	ID_DEVICE,
-	ID_SUBSYSTEM,
-	ID_GEN_SUBSYSTEM,
-	ID_CLASS,
-	ID_SUBCLASS,
-	ID_PROGIF
-};
-
-struct id_bucket {
-	struct id_bucket *next;
-	unsigned int full;
-};
-
-#define MAX_LINE 1024
-#define BUCKET_SIZE 8192
-#define HASH_SIZE 4099
-
-#ifdef __GNUC__
-#define BUCKET_ALIGNMENT __alignof__(struct id_bucket)
-#else
-union id_align {
-	struct id_bucket *next;
-	unsigned int full;
-};
-#define BUCKET_ALIGNMENT sizeof(union id_align)
-#endif
-#define BUCKET_ALIGN(n) ((n)+BUCKET_ALIGNMENT-(n)%BUCKET_ALIGNMENT)
-
-static void *id_alloc(struct pci_access *a, unsigned int size)
-{
-	struct id_bucket *buck = a->current_id_bucket;
-	unsigned int pos;
-	if (!buck || buck->full + size > BUCKET_SIZE) {
-		buck = pci_malloc(a, BUCKET_SIZE);
-		buck->next = a->current_id_bucket;
-		a->current_id_bucket = buck;
-		buck->full = BUCKET_ALIGN(sizeof(struct id_bucket));
-	}
-	pos = buck->full;
-	buck->full = BUCKET_ALIGN(buck->full + size);
-	return (byte *) buck + pos;
-}
-
-static inline u32 id_pair(unsigned int x, unsigned int y)
-{
-	return ((x << 16) | y);
-}
-
-static inline unsigned int id_hash(int cat, u32 id12, u32 id34)
-{
-	unsigned int h;
-
-	h = id12 ^ (id34 << 3) ^ (cat << 5);
-	return h % HASH_SIZE;
-}
-
-static struct id_entry *id_lookup(struct pci_access *a, int cat, int id1,
-				  int id2, int id3, int id4)
-{
-	struct id_entry *n;
-	u32 id12 = id_pair(id1, id2);
-	u32 id34 = id_pair(id3, id4);
-
-	n = a->id_hash[id_hash(cat, id12, id34)];
-	while (n && (n->id12 != id12 || n->id34 != id34 || n->cat != cat))
-		n = n->next;
-	return n;
-}
-
-static int id_insert(struct pci_access *a, int cat, int id1, int id2,
-		     int id3, int id4, byte * text)
-{
-	u32 id12 = id_pair(id1, id2);
-	u32 id34 = id_pair(id3, id4);
-	unsigned int h = id_hash(cat, id12, id34);
-	struct id_entry *n = a->id_hash[h];
-	int len = strlen((char *) text);
-
-	while (n && (n->id12 != id12 || n->id34 != id34 || n->cat != cat))
-		n = n->next;
-	if (n)
-		return 1;
-	n = id_alloc(a, sizeof(struct id_entry) + len);
-	n->id12 = id12;
-	n->id34 = id34;
-	n->cat = cat;
-	memcpy(n->name, text, len + 1);
-	n->next = a->id_hash[h];
-	a->id_hash[h] = n;
-	return 0;
-}
-
-static int id_hex(byte * p, int cnt)
-{
-	int x = 0;
-	while (cnt--) {
-		x <<= 4;
-		if (*p >= '0' && *p <= '9')
-			x += (*p - '0');
-		else if (*p >= 'a' && *p <= 'f')
-			x += (*p - 'a' + 10);
-		else if (*p >= 'A' && *p <= 'F')
-			x += (*p - 'A' + 10);
-		else
-			return -1;
-		p++;
-	}
-	return x;
-}
-
-static inline int id_white_p(int c)
-{
-	return (c == ' ') || (c == '\t');
-}
-
-static const char *id_parse_list(struct pci_access *a, int *lino)
-{
-	byte *line;
-	byte *p;
-	int id1 = 0, id2 = 0, id3 = 0, id4 = 0;
-	int cat = -1;
-	int nest;
-	static const char parse_error[] = "Parse error";
-	int i;
-
-	*lino = 0;
-	for (i = 0; i < sizeof(pci_ids) / sizeof(char *); i++) {
-		line = (byte *) pci_ids[i];
-		(*lino)++;
-		p = line;
-		while (*p)
-			p++;
-		if (p > line && (p[-1] == ' ' || p[-1] == '\t'))
-			*--p = 0;
-
-		p = line;
-		while (id_white_p(*p))
-			p++;
-		if (!*p || *p == '#')
-			continue;
-
-		p = line;
-		while (*p == '\t')
-			p++;
-		nest = p - line;
-
-		if (!nest) {	/* Top-level entries */
-			if (p[0] == 'C' && p[1] == ' ') {	/* Class block */
-				if ((id1 = id_hex(p + 2, 2)) < 0 || !id_white_p(p[4]))
-					return parse_error;
-				cat = ID_CLASS;
-				p += 5;
-			} else if (p[0] == 'S' && p[1] == ' ') {	/* Generic subsystem block */
-				if ((id1 = id_hex(p + 2, 4)) < 0 || p[6])
-					return parse_error;
-				if (!id_lookup(a, ID_VENDOR, id1, 0, 0, 0))
-					return "Vendor does not exist";
-				cat = ID_GEN_SUBSYSTEM;
-				continue;
-			} else if (p[0] >= 'A' && p[0] <= 'Z' && p[1] == ' ') {	/* Unrecognized block (RFU) */
-				cat = ID_UNKNOWN;
-				continue;
-			} else {	/* Vendor ID */
-
-				if ((id1 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
-					return parse_error;
-				cat = ID_VENDOR;
-				p += 5;
-			}
-			id2 = id3 = id4 = 0;
-		} else if (cat == ID_UNKNOWN)	/* Nested entries in RFU blocks are skipped */
-			continue;
-		else if (nest == 1)	/* Nesting level 1 */
-			switch (cat) {
-			case ID_VENDOR:
-			case ID_DEVICE:
-			case ID_SUBSYSTEM:
-				if ((id2 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
-					return parse_error;
-				p += 5;
-				cat = ID_DEVICE;
-				id3 = id4 = 0;
-				break;
-			case ID_GEN_SUBSYSTEM:
-				if ((id2 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
-					return parse_error;
-				p += 5;
-				id3 = id4 = 0;
-				break;
-			case ID_CLASS:
-			case ID_SUBCLASS:
-			case ID_PROGIF:
-				if ((id2 = id_hex(p, 2)) < 0 || !id_white_p(p[2]))
-					return parse_error;
-				p += 3;
-				cat = ID_SUBCLASS;
-				id3 = id4 = 0;
-				break;
-			default:
-				return parse_error;
-		} else if (nest == 2)	/* Nesting level 2 */
-			switch (cat) {
-			case ID_DEVICE:
-			case ID_SUBSYSTEM:
-				if ((id3 = id_hex(p, 4)) < 0 || !id_white_p(p[4])
-				    || (id4 = id_hex(p + 5, 4)) < 0 || !id_white_p(p[9]))
-					return parse_error;
-				p += 10;
-				cat = ID_SUBSYSTEM;
-				break;
-			case ID_CLASS:
-			case ID_SUBCLASS:
-			case ID_PROGIF:
-				if ((id3 = id_hex(p, 2)) < 0 || !id_white_p(p[2]))
-					return parse_error;
-				p += 3;
-				cat = ID_PROGIF;
-				id4 = 0;
-				break;
-			default:
-				return parse_error;
-		} else		/* Nesting level 3 or more */
-			return parse_error;
-		while (id_white_p(*p))
-			p++;
-		if (!*p)
-			return parse_error;
-		if (id_insert(a, cat, id1, id2, id3, id4, p))
-			return "Duplicate entry";
-	}
-	return NULL;
-}
-
-int pci_load_name_list(struct pci_access *a)
-{
-	int lino;
-	const char *err;
-
-	pci_free_name_list(a);
-	a->id_hash = pci_malloc(a, sizeof(struct id_entry *) * HASH_SIZE);
-	bzero(a->id_hash, sizeof(struct id_entry *) * HASH_SIZE);
-	err = id_parse_list(a, &lino);
-	if (err)
-		a->error("%s at %s, element %d\n", err, "pci_ids.h", lino);
-	return 1;
-}
-
-void pci_free_name_list(struct pci_access *a)
-{
-	pci_mfree(a->id_hash);
-	a->id_hash = NULL;
-	while (a->current_id_bucket) {
-		struct id_bucket *buck = a->current_id_bucket;
-		a->current_id_bucket = buck->next;
-		pci_mfree(buck);
-	}
-}
-
-static struct id_entry *id_lookup_subsys(struct pci_access *a, int iv,
-					 int id, int isv, int isd)
-{
-	struct id_entry *d = NULL;
-	if (iv > 0 && id > 0)	/* Per-device lookup */
-		d = id_lookup(a, ID_SUBSYSTEM, iv, id, isv, isd);
-	if (!d)			/* Generic lookup */
-		d = id_lookup(a, ID_GEN_SUBSYSTEM, isv, isd, 0, 0);
-	if (!d && iv == isv && id == isd)	/* Check for subsystem == device */
-		d = id_lookup(a, ID_DEVICE, iv, id, 0, 0);
-	return d;
-}
-
-char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags,
-		      ...)
-{
-	va_list args;
-	int num, res, synth;
-	struct id_entry *v, *d, *cls, *pif;
-	int iv, id, isv, isd, icls, ipif;
-
-	va_start(args, flags);
-
-	num = 0;
-	if ((flags & PCI_LOOKUP_NUMERIC) || a->numeric_ids) {
-		flags &= ~PCI_LOOKUP_NUMERIC;
-		num = 1;
-	} else if (!a->id_hash) {
-		if (!pci_load_name_list(a))
-			num = a->numeric_ids = 1;
-	}
-
-	if (flags & PCI_LOOKUP_NO_NUMBERS) {
-		flags &= ~PCI_LOOKUP_NO_NUMBERS;
-		synth = 0;
-		if (num)
-			return NULL;
-	} else
-		synth = 1;
-
-	switch (flags) {
-	case PCI_LOOKUP_VENDOR:
-		iv = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%04x", iv);
-		else if (v = id_lookup(a, ID_VENDOR, iv, 0, 0, 0))
-			return (char *) v->name;
-		else
-			res = snprintf(buf, size, "Unknown vendor %04x", iv);
-		break;
-	case PCI_LOOKUP_DEVICE:
-		iv = va_arg(args, int);
-		id = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%04x", id);
-		else if (d = id_lookup(a, ID_DEVICE, iv, id, 0, 0))
-			return (char *) d->name;
-		else if (synth)
-			res = snprintf(buf, size, "Unknown device %04x", id);
-		else
-			return NULL;
-		break;
-	case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE:
-		iv = va_arg(args, int);
-		id = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%04x:%04x", iv, id);
-		else {
-			v = id_lookup(a, ID_VENDOR, iv, 0, 0, 0);
-			d = id_lookup(a, ID_DEVICE, iv, id, 0, 0);
-			if (v && d)
-				res = snprintf(buf, size, "%s %s", v->name,
-					     d->name);
-			else if (!synth)
-				return NULL;
-			else if (!v)
-				res = snprintf(buf, size, "Unknown device %04x:%04x", iv, id);
-			else	/* !d */
-				res = snprintf(buf, size, "%s Unknown device %04x", v->name, id);
-		}
-		break;
-	case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR:
-		isv = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%04x", isv);
-		else if (v = id_lookup(a, ID_VENDOR, isv, 0, 0, 0))
-			return (char *) v->name;
-		else if (synth)
-			res = snprintf(buf, size, "Unknown vendor %04x", isv);
-		else
-			return NULL;
-		break;
-	case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE:
-		iv = va_arg(args, int);
-		id = va_arg(args, int);
-		isv = va_arg(args, int);
-		isd = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%04x", isd);
-		else if (d = id_lookup_subsys(a, iv, id, isv, isd))
-			return (char *) d->name;
-		else if (synth)
-			res = snprintf(buf, size, "Unknown device %04x", isd);
-		else
-			return NULL;
-		break;
-	case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
-		iv = va_arg(args, int);
-		id = va_arg(args, int);
-		isv = va_arg(args, int);
-		isd = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%04x:%04x", isv, isd);
-		else {
-			v = id_lookup(a, ID_VENDOR, isv, 0, 0, 0);
-			d = id_lookup_subsys(a, iv, id, isv, isd);
-			if (v && d)
-				res = snprintf(buf, size, "%s %s", v->name, d->name);
-			else if (!synth)
-				return NULL;
-			else if (!v)
-				res = snprintf(buf, size, "Unknown device %04x:%04x", isv, isd);
-			else	/* !d */
-				res = snprintf(buf, size, "%s Unknown device %04x", v->name, isd);
-		}
-		break;
-	case PCI_LOOKUP_CLASS:
-		icls = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%04x", icls);
-		else if (cls = id_lookup(a, ID_SUBCLASS, icls >> 8, icls & 0xff, 0, 0))
-			return (char *) cls->name;
-		else if (cls = id_lookup(a, ID_CLASS, icls, 0, 0, 0))
-			res = snprintf(buf, size, "%s [%04x]", cls->name, icls);
-		else if (synth)
-			res = snprintf(buf, size, "Class %04x", icls);
-		else
-			return NULL;
-		break;
-	case PCI_LOOKUP_PROGIF:
-		icls = va_arg(args, int);
-		ipif = va_arg(args, int);
-		if (num)
-			res = snprintf(buf, size, "%02x", ipif);
-		else if (pif = id_lookup(a, ID_PROGIF, icls >> 8, icls & 0xff, ipif, 0))
-			return (char *) pif->name;
-		else if (icls == 0x0101 && !(ipif & 0x70)) {
-			/* IDE controllers have complex prog-if semantics */
-			res = snprintf(buf, size, "%s%s%s%s%s",
-				       (ipif & 0x80) ? "Master " : "",
-				       (ipif & 0x08) ? "SecP " : "",
-				       (ipif & 0x04) ? "SecO " : "",
-				       (ipif & 0x02) ? "PriP " : "",
-				       (ipif & 0x01) ? "PriO " : "");
-			if (res > 0 && res < size)
-				buf[--res] = 0;
-		} else if (synth)
-			res = snprintf(buf, size, "ProgIf %02x", ipif);
-		else
-			return NULL;
-		break;
-	default:
-		return "<pci_lookup_name: invalid request>";
-	}
-	if (res < 0 || res >= size)
-		return "<pci_lookup_name: buffer too small>";
-	else
-		return buf;
-}
Index: pace/pci/libpci/pci.h
===================================================================
--- uspace/pci/libpci/pci.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,146 +1,0 @@
-/*
- *	The PCI Library
- *
- *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#ifndef _PCI_LIB_H
-#define _PCI_LIB_H
-
-#include "header.h"
-#include "types.h"
-
-#define PCI_LIB_VERSION 0x020200
-
-/*
- *	PCI Access Structure
- */
-
-struct pci_methods;
-
-enum pci_access_type {
-	/* Known access methods, remember to update access.c as well */
-	PCI_ACCESS_I386_TYPE1,	/* i386 ports, type 1 (params: none) */
-	PCI_ACCESS_I386_TYPE2,	/* i386 ports, type 2 (params: none) */
-	PCI_ACCESS_MAX
-};
-
-struct pci_access {
-	/* Options you can change: */
-	unsigned int method;	/* Access method */
-	char *method_params[PCI_ACCESS_MAX];	/* Parameters for the methods */
-	int writeable;		/* Open in read/write mode */
-	int buscentric;		/* Bus-centric view of the world */
-	int numeric_ids;	/* Don't resolve device IDs to names */
-	int debugging;		/* Turn on debugging messages */
-
-	/* Functions you can override: */
-	void (*error) (char *msg, ...);	/* Write error message and quit */
-	void (*warning) (char *msg, ...);	/* Write a warning message */
-	void (*debug) (char *msg, ...);	/* Write a debugging message */
-
-	struct pci_dev *devices;	/* Devices found on this bus */
-
-	/* Fields used internally: */
-	struct pci_methods *methods;
-	struct id_entry **id_hash;	/* names.c */
-	struct id_bucket *current_id_bucket;
-};
-
-/* Initialize PCI access */
-struct pci_access *pci_alloc(void);
-void pci_init(struct pci_access *);
-void pci_cleanup(struct pci_access *);
-
-/* Scanning of devices */
-void pci_scan_bus(struct pci_access *acc);
-struct pci_dev *pci_get_dev(struct pci_access *acc, int domain, int bus, int dev, int func);	/* Raw access to specified device */
-void pci_free_dev(struct pci_dev *);
-
-/*
- *	Devices
- */
-
-struct pci_dev {
-	struct pci_dev *next;	/* Next device in the chain */
-	u16 domain;		/* PCI domain (host bridge) */
-	u8 bus, dev, func;	/* Bus inside domain, device and function */
-
-	/* These fields are set by pci_fill_info() */
-	int known_fields;	/* Set of info fields already known */
-	u16 vendor_id, device_id;	/* Identity of the device */
-	int irq;		/* IRQ number */
-	pciaddr_t base_addr[6];	/* Base addresses */
-	pciaddr_t size[6];	/* Region sizes */
-	pciaddr_t rom_base_addr;	/* Expansion ROM base address */
-	pciaddr_t rom_size;	/* Expansion ROM size */
-
-	/* Fields used internally: */
-	struct pci_access *access;
-	struct pci_methods *methods;
-	u8 *cache;		/* Cached config registers */
-	int cache_len;
-	int hdrtype;		/* Cached low 7 bits of header type, -1 if unknown */
-	void *aux;		/* Auxillary data */
-};
-
-#define PCI_ADDR_IO_MASK (~(pciaddr_t) 0x3)
-#define PCI_ADDR_MEM_MASK (~(pciaddr_t) 0xf)
-
-u8 pci_read_byte(struct pci_dev *, int pos);	/* Access to configuration space */
-u16 pci_read_word(struct pci_dev *, int pos);
-u32 pci_read_long(struct pci_dev *, int pos);
-int pci_read_block(struct pci_dev *, int pos, u8 * buf, int len);
-int pci_write_byte(struct pci_dev *, int pos, u8 data);
-int pci_write_word(struct pci_dev *, int pos, u16 data);
-int pci_write_long(struct pci_dev *, int pos, u32 data);
-int pci_write_block(struct pci_dev *, int pos, u8 * buf, int len);
-
-int pci_fill_info(struct pci_dev *, int flags);	/* Fill in device information */
-
-#define PCI_FILL_IDENT		1
-#define PCI_FILL_IRQ		2
-#define PCI_FILL_BASES		4
-#define PCI_FILL_ROM_BASE	8
-#define PCI_FILL_SIZES		16
-#define PCI_FILL_RESCAN		0x10000
-
-void pci_setup_cache(struct pci_dev *, u8 * cache, int len);
-
-/*
- *	Conversion of PCI ID's to names (according to the pci.ids file)
- *
- *	Call pci_lookup_name() to identify different types of ID's:
- *
- *	VENDOR				(vendorID) -> vendor
- *	DEVICE				(vendorID, deviceID) -> device
- *	VENDOR | DEVICE			(vendorID, deviceID) -> combined vendor and device
- *	SUBSYSTEM | VENDOR		(subvendorID) -> subsystem vendor
- *	SUBSYSTEM | DEVICE		(vendorID, deviceID, subvendorID, subdevID) -> subsystem device
- *	SUBSYSTEM | VENDOR | DEVICE	(vendorID, deviceID, subvendorID, subdevID) -> combined subsystem v+d
- *	SUBSYSTEM | ...			(-1, -1, subvendorID, subdevID) -> generic subsystem
- *	CLASS				(classID) -> class
- *	PROGIF				(classID, progif) -> programming interface
- */
-
-char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags,
-		      ...);
-
-int pci_load_name_list(struct pci_access *a);	/* Called automatically by pci_lookup_*() when needed; returns success */
-void pci_free_name_list(struct pci_access *a);	/* Called automatically by pci_cleanup() */
-
-enum pci_lookup_mode {
-	PCI_LOOKUP_VENDOR = 1,	/* Vendor name (args: vendorID) */
-	PCI_LOOKUP_DEVICE = 2,	/* Device name (args: vendorID, deviceID) */
-	PCI_LOOKUP_CLASS = 4,	/* Device class (args: classID) */
-	PCI_LOOKUP_SUBSYSTEM = 8,
-	PCI_LOOKUP_PROGIF = 16,	/* Programming interface (args: classID, prog_if) */
-	PCI_LOOKUP_NUMERIC = 0x10000,	/* Want only formatted numbers; default if access->numeric_ids is set */
-	PCI_LOOKUP_NO_NUMBERS = 0x20000	/* Return NULL if not found in the database; default is to print numerically */
-};
-
-#endif
Index: pace/pci/libpci/pci_ids.h
===================================================================
--- uspace/pci/libpci/pci_ids.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,11934 +1,0 @@
-/* DO NOT EDIT, THIS FILE IS AUTOMATICALLY GENERATED */
-char *pci_ids[] = {
-"0000  Gammagraphx, Inc.",
-"001a  Ascend Communications, Inc.",
-"0033  Paradyne corp.",
-"003d  Lockheed Martin-Marietta Corp",
-"0059  Tiger Jet Network Inc. (Wrong ID)",
-"0070  Hauppauge computer works Inc.",
-"0071  Nebula Electronics Ltd.",
-"0095  Silicon Image, Inc. (Wrong ID)",
-"	0680  Ultra ATA/133 IDE RAID CONTROLLER CARD",
-"00a7  Teles AG (Wrong ID)",
-"00f5  BFG Technologies, Inc.",
-"0100  Ncipher Corp Ltd",
-"0123  General Dynamics",
-"018a  LevelOne",
-"	0106  FPC-0106TX misprogrammed [RTL81xx]",
-"021b  Compaq Computer Corporation",
-"	8139  HNE-300 (RealTek RTL8139c) [iPaq Networking]",
-"0270  Hauppauge computer works Inc. (Wrong ID)",
-"0291  Davicom Semiconductor, Inc.",
-"	8212  DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40)",
-"02ac  SpeedStream",
-"	1012  1012 PCMCIA 10/100 Ethernet Card [RTL81xx]",
-"0315  SK-Electronics Co., Ltd.",
-"0357  TTTech AG",
-"	000a  TTP-Monitoring Card V2.0",
-"0432  SCM Microsystems, Inc.",
-"	0001  Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]",
-"045e  Microsoft",
-"	006e  MN-510 802.11b wireless USB paddle",
-"	00c2  MN-710 wireless USB paddle",
-"04cf  Myson Century, Inc",
-"	8818  CS8818 USB2.0-to-ATAPI Bridge Controller with Embedded PHY",
-"050d  Belkin",
-"	0109  F5U409-CU USB/Serial Portable Adapter",
-"	7050  F5D7050 802.11g Wireless USB Adapter",
-"05e3  CyberDoor",
-"	0701  CBD516",
-"066f  Sigmatel Inc.",
-"	3410  SMTP3410",
-"	3500  SMTP3500",
-"0675  Dynalink",
-"	1700  IS64PH ISDN Adapter",
-"	1702  IS64PH ISDN Adapter",
-"	1703  ISDN Adapter (PCI Bus, DV, W)",
-"	1704  ISDN Adapter (PCI Bus, D, C)",
-"067b  Prolific Technology, Inc.",
-"	3507  PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller",
-"0721  Sapphire, Inc.",
-"07e2  ELMEG Communication Systems GmbH",
-"0925  VIA Technologies, Inc. (Wrong ID)",
-"09c1  Arris",
-"	0704  CM 200E Cable Modem",
-"0a89  BREA Technologies Inc",
-"0b0b  Rhino Equiment Corp.",
-"	0105  Rhino R1T1",
-"	0205  Rhino R4FXO",
-"	0305  Rhino R4T1",
-"	0405  Rhino R8FXX",
-"	0505  Rhino R24FXX",
-"	0506  Rhino R2T1",
-"0b49  ASCII Corporation",
-"	064f  Trance Vibrator",
-"0e11  Compaq Computer Corporation",
-"	0001  PCI to EISA Bridge",
-"	0002  PCI to ISA Bridge",
-"	0046  Smart Array 64xx",
-"		0e11 409a  Smart Array 641",
-"		0e11 409b  Smart Array 642",
-"		0e11 409c  Smart Array 6400",
-"		0e11 409d  Smart Array 6400 EM",
-"	0049  NC7132 Gigabit Upgrade Module",
-"	004a  NC6136 Gigabit Server Adapter",
-"	005a  Remote Insight II board - Lights-Out",
-"	007c  NC7770 1000BaseTX",
-"	007d  NC6770 1000BaseTX",
-"	0085  NC7780 1000BaseTX",
-"	00b1  Remote Insight II board - PCI device",
-"	00bb  NC7760",
-"	00ca  NC7771",
-"	00cb  NC7781",
-"	00cf  NC7772",
-"	00d0  NC7782",
-"	00d1  NC7783",
-"	00e3  NC7761",
-"	0508  Netelligent 4/16 Token Ring",
-"	1000  Triflex/Pentium Bridge, Model 1000",
-"	2000  Triflex/Pentium Bridge, Model 2000",
-"	3032  QVision 1280/p",
-"	3033  QVision 1280/p",
-"	3034  QVision 1280/p",
-"	4000  4000 [Triflex]",
-"	4030  SMART-2/P",
-"	4031  SMART-2SL",
-"	4032  Smart Array 3200",
-"	4033  Smart Array 3100ES",
-"	4034  Smart Array 221",
-"	4040  Integrated Array",
-"	4048  Compaq Raid LC2",
-"	4050  Smart Array 4200",
-"	4051  Smart Array 4250ES",
-"	4058  Smart Array 431",
-"	4070  Smart Array 5300",
-"	4080  Smart Array 5i",
-"	4082  Smart Array 532",
-"	4083  Smart Array 5312",
-"	4091  Smart Array 6i",
-"	409a  Smart Array 641",
-"	409b  Smart Array 642",
-"	409c  Smart Array 6400",
-"	409d  Smart Array 6400 EM",
-"	6010  HotPlug PCI Bridge 6010",
-"	7020  USB Controller",
-"	a0ec  Fibre Channel Host Controller",
-"	a0f0  Advanced System Management Controller",
-"	a0f3  Triflex PCI to ISA Bridge",
-"	a0f7  PCI Hotplug Controller",
-"		8086 002a  PCI Hotplug Controller A",
-"		8086 002b  PCI Hotplug Controller B",
-"	a0f8  ZFMicro Chipset USB",
-"	a0fc  FibreChannel HBA Tachyon",
-"	ae10  Smart-2/P RAID Controller",
-"		0e11 4030  Smart-2/P Array Controller",
-"		0e11 4031  Smart-2SL Array Controller",
-"		0e11 4032  Smart Array Controller",
-"		0e11 4033  Smart 3100ES Array Controller",
-"	ae29  MIS-L",
-"	ae2a  MPC",
-"	ae2b  MIS-E",
-"	ae31  System Management Controller",
-"	ae32  Netelligent 10/100 TX PCI UTP",
-"	ae33  Triflex Dual EIDE Controller",
-"	ae34  Netelligent 10 T PCI UTP",
-"	ae35  Integrated NetFlex-3/P",
-"	ae40  Netelligent Dual 10/100 TX PCI UTP",
-"	ae43  Netelligent Integrated 10/100 TX UTP",
-"	ae69  CETUS-L",
-"	ae6c  Northstar",
-"	ae6d  NorthStar CPU to PCI Bridge",
-"	b011  Netelligent 10/100 TX Embedded UTP",
-"	b012  Netelligent 10 T/2 PCI UTP/Coax",
-"	b01e  NC3120 Fast Ethernet NIC",
-"	b01f  NC3122 Fast Ethernet NIC",
-"	b02f  NC1120 Ethernet NIC",
-"	b030  Netelligent 10/100 TX UTP",
-"	b04a  10/100 TX PCI Intel WOL UTP Controller",
-"	b060  Smart Array 5300 Controller",
-"	b0c6  NC3161 Fast Ethernet NIC",
-"	b0c7  NC3160 Fast Ethernet NIC",
-"	b0d7  NC3121 Fast Ethernet NIC",
-"	b0dd  NC3131 Fast Ethernet NIC",
-"	b0de  NC3132 Fast Ethernet Module",
-"	b0df  NC6132 Gigabit Module",
-"	b0e0  NC6133 Gigabit Module",
-"	b0e1  NC3133 Fast Ethernet Module",
-"	b123  NC6134 Gigabit NIC",
-"	b134  NC3163 Fast Ethernet NIC",
-"	b13c  NC3162 Fast Ethernet NIC",
-"	b144  NC3123 Fast Ethernet NIC",
-"	b163  NC3134 Fast Ethernet NIC",
-"	b164  NC3165 Fast Ethernet Upgrade Module",
-"	b178  Smart Array 5i/532",
-"		0e11 4080  Smart Array 5i",
-"		0e11 4082  Smart Array 532",
-"		0e11 4083  Smart Array 5312",
-"	b1a4  NC7131 Gigabit Server Adapter",
-"	b200  Memory Hot-Plug Controller",
-"	b203  Integrated Lights Out Controller",
-"	b204  Integrated Lights Out  Processor",
-"	f130  NetFlex-3/P ThunderLAN 1.0",
-"	f150  NetFlex-3/P ThunderLAN 2.3",
-"0e21  Cowon Systems, Inc.",
-"0e55  HaSoTec GmbH",
-"1000  LSI Logic / Symbios Logic",
-"	0001  53c810",
-"		1000 1000  LSI53C810AE PCI to SCSI I/O Processor",
-"	0002  53c820",
-"	0003  53c825",
-"		1000 1000  LSI53C825AE PCI to SCSI I/O Processor (Ultra Wide)",
-"	0004  53c815",
-"	0005  53c810AP",
-"	0006  53c860",
-"		1000 1000  LSI53C860E PCI to Ultra SCSI I/O Processor",
-"	000a  53c1510",
-"		1000 1000  LSI53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Nonintelligent mode)",
-"	000b  53C896/897",
-"		0e11 6004  EOB003 Series SCSI host adapter",
-"		1000 1000  LSI53C896/7 PCI to Dual Channel Ultra2 SCSI Multifunction Controller",
-"		1000 1010  LSI22910 PCI to Dual Channel Ultra2 SCSI host adapter",
-"		1000 1020  LSI21002 PCI to Dual Channel Ultra2 SCSI host adapter",
-"		13e9 1000  6221L-4U",
-"	000c  53c895",
-"		1000 1010  LSI8951U PCI to Ultra2 SCSI host adapter",
-"		1000 1020  LSI8952U PCI to Ultra2 SCSI host adapter",
-"		1de1 3906  DC-390U2B SCSI adapter",
-"		1de1 3907  DC-390U2W",
-"	000d  53c885",
-"	000f  53c875",
-"		0e11 7004  Embedded Ultra Wide SCSI Controller",
-"		1000 1000  LSI53C876/E PCI to Dual Channel SCSI Controller",
-"		1000 1010  LSI22801 PCI to Dual Channel Ultra SCSI host adapter",
-"		1000 1020  LSI22802 PCI to Dual Channel Ultra SCSI host adapter",
-"		1092 8760  FirePort 40 Dual SCSI Controller",
-"		1de1 3904  DC390F/U Ultra Wide SCSI Adapter",
-"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
-"		4c53 1050  CT7 mainboard",
-"	0010  53C1510",
-"		0e11 4040  Integrated Array Controller",
-"		0e11 4048  RAID LC2 Controller",
-"		1000 1000  53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode)",
-"	0012  53c895a",
-"		1000 1000  LSI53C895A PCI to Ultra2 SCSI Controller",
-"	0013  53c875a",
-"		1000 1000  LSI53C875A PCI to Ultra SCSI Controller",
-"	0020  53c1010 Ultra3 SCSI Adapter",
-"		1000 1000  LSI53C1010-33 PCI to Dual Channel Ultra160 SCSI Controller",
-"		1de1 1020  DC-390U3W",
-"	0021  53c1010 66MHz  Ultra3 SCSI Adapter",
-"		1000 1000  LSI53C1000/1000R/1010R/1010-66 PCI to Ultra160 SCSI Controller",
-"		1000 1010  Asus TR-DLS onboard 53C1010-66",
-"		124b 1070  PMC-USCSI3",
-"		4c53 1080  CT8 mainboard",
-"		4c53 1300  P017 mezzanine (32-bit PMC)",
-"		4c53 1310  P017 mezzanine (64-bit PMC)",
-"	0030  53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI",
-"		0e11 00da  ProLiant ML 350",
-"		1028 0123  PowerEdge 2600",
-"		1028 014a  PowerEdge 1750",
-"		1028 016c  PowerEdge 1850 MPT Fusion SCSI/RAID (Perc 4)",
-"		1028 0183  PowerEdge 1800",
-"		1028 1010  LSI U320 SCSI Controller",
-"		124b 1170  PMC-USCSI320",
-"		1734 1052  Primergy RX300 S2",
-"	0031  53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI",
-"	0032  53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI",
-"		1000 1000  LSI53C1020/1030 PCI-X to Ultra320 SCSI Controller",
-"	0033  1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI",
-"	0040  53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI",
-"		1000 0033  MegaRAID SCSI 320-2XR",
-"		1000 0066  MegaRAID SCSI 320-2XRWS",
-"	0041  53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI",
-"	0050  SAS1064 PCI-X Fusion-MPT SAS",
-"	0054  SAS1068 PCI-X Fusion-MPT SAS",
-"	0056  SAS1064E PCI-Express Fusion-MPT SAS",
-"	0058  SAS1068E PCI-Express Fusion-MPT SAS",
-"	005a  SAS1066E PCI-Express Fusion-MPT SAS",
-"	005c  SAS1064A PCI-X Fusion-MPT SAS",
-"	005e  SAS1066 PCI-X Fusion-MPT SAS",
-"	0060  SAS1078 PCI-X Fusion-MPT SAS",
-"	0062  SAS1078 PCI-Express Fusion-MPT SAS",
-"		1000 0062  SAS1078 PCI-Express Fusion-MPT SAS",
-"	008f  53c875J",
-"		1092 8000  FirePort 40 SCSI Controller",
-"		1092 8760  FirePort 40 Dual SCSI Host Adapter",
-"	0407  MegaRAID",
-"		1000 0530  MegaRAID 530 SCSI 320-0X RAID Controller",
-"		1000 0531  MegaRAID 531 SCSI 320-4X RAID Controller",
-"		1000 0532  MegaRAID 532 SCSI 320-2X RAID Controller",
-"		1028 0531  PowerEdge Expandable RAID Controller 4/QC",
-"		1028 0533  PowerEdge Expandable RAID Controller 4/QC",
-"		8086 0530  MegaRAID Intel RAID Controller SRCZCRX",
-"		8086 0532  MegaRAID Intel RAID Controller SRCU42X",
-"	0408  MegaRAID",
-"		1000 0001  MegaRAID SCSI 320-1E RAID Controller",
-"		1000 0002  MegaRAID SCSI 320-2E RAID Controller",
-"		1025 004d  MegaRAID ACER ROMB-2E RAID Controller",
-"		1028 0001  PowerEdge RAID Controller PERC4e/SC",
-"		1028 0002  PowerEdge RAID Controller PERC4e/DC",
-"		1734 1065  FSC MegaRAID PCI Express ROMB",
-"		8086 0002  MegaRAID Intel RAID Controller SRCU42E",
-"	0409  MegaRAID",
-"		1000 3004  MegaRAID SATA 300-4X RAID Controller",
-"		1000 3008  MegaRAID SATA 300-8X RAID Controller",
-"		8086 3008  MegaRAID RAID Controller SRCS28X",
-"		8086 3431  MegaRAID RAID Controller Alief SROMBU42E",
-"		8086 3499  MegaRAID RAID Controller Harwich SROMBU42E",
-"	0621  FC909 Fibre Channel Adapter",
-"	0622  FC929 Fibre Channel Adapter",
-"		1000 1020  44929 O Dual Fibre Channel card",
-"	0623  FC929 LAN",
-"	0624  FC919 Fibre Channel Adapter",
-"	0625  FC919 LAN",
-"	0626  FC929X Fibre Channel Adapter",
-"		1000 1010  7202-XP-LC Dual Fibre Channel card",
-"	0627  FC929X LAN",
-"	0628  FC919X Fibre Channel Adapter",
-"	0629  FC919X LAN",
-"	0640  FC949X Fibre Channel Adapter",
-"	0642  FC939X Fibre Channel Adapter",
-"	0646  FC949ES Fibre Channel Adapter",
-"	0701  83C885 NT50 DigitalScape Fast Ethernet",
-"	0702  Yellowfin G-NIC gigabit ethernet",
-"		1318 0000  PEI100X",
-"	0804  SA2010",
-"	0805  SA2010ZC",
-"	0806  SA2020",
-"	0807  SA2020ZC",
-"	0901  61C102",
-"	1000  63C815",
-"	1960  MegaRAID",
-"		1000 0518  MegaRAID 518 SCSI 320-2 Controller",
-"		1000 0520  MegaRAID 520 SCSI 320-1 Controller",
-"		1000 0522  MegaRAID 522 i4 133 RAID Controller",
-"		1000 0523  MegaRAID SATA 150-6 RAID Controller",
-"		1000 4523  MegaRAID SATA 150-4 RAID Controller",
-"		1000 a520  MegaRAID ZCR SCSI 320-0 Controller",
-"		1028 0518  MegaRAID 518 DELL PERC 4/DC RAID Controller",
-"		1028 0520  MegaRAID 520 DELL PERC 4/SC RAID Controller",
-"		1028 0531  PowerEdge Expandable RAID Controller 4/QC",
-"		1028 0533  PowerEdge Expandable RAID Controller 4/QC",
-"		8086 0520  MegaRAIDRAID Controller SRCU41L",
-"		8086 0523  MegaRAID RAID Controller SRCS16",
-"1001  Kolter Electronic",
-"	0010  PCI 1616 Measurement card with 32 digital I/O lines",
-"	0011  OPTO-PCI Opto-Isolated digital I/O board",
-"	0012  PCI-AD/DA Analogue I/O board",
-"	0013  PCI-OPTO-RELAIS Digital I/O board with relay outputs",
-"	0014  PCI-Counter/Timer Counter Timer board",
-"	0015  PCI-DAC416 Analogue output board",
-"	0016  PCI-MFB Analogue I/O board",
-"	0017  PROTO-3 PCI Prototyping board",
-"	9100  INI-9100/9100W SCSI Host",
-"1002  ATI Technologies Inc",
-"	3150  M24 1P [Radeon Mobility X600]",
-"	3152  M22 [Radeon Mobility X300]",
-"	3154  M24 1T [FireGL M24 GL]",
-"	3e50  RV380 0x3e50 [Radeon X600]",
-"	3e54  RV380 0x3e54 [FireGL V3200]",
-"	3e70  RV380 [Radeon X600] Secondary",
-"	4136  Radeon IGP 320 M",
-"	4137  Radeon IGP330/340/350",
-"	4144  R300 AD [Radeon 9500 Pro]",
-"	4145  R300 AE [Radeon 9700 Pro]",
-"	4146  R300 AF [Radeon 9700 Pro]",
-"	4147  R300 AG [FireGL Z1/X1]",
-"	4148  R350 AH [Radeon 9800]",
-"	4149  R350 AI [Radeon 9800]",
-"	414a  R350 AJ [Radeon 9800]",
-"	414b  R350 AK [Fire GL X2]",
-"	4150  RV350 AP [Radeon 9600]",
-"		1002 0002  R9600 Pro primary (Asus OEM for HP)",
-"		1002 0003  R9600 Pro secondary (Asus OEM for HP)",
-"		1002 4722  All-in-Wonder 2006 AGP Edition",
-"		1458 4024  Giga-Byte GV-R96128D Primary",
-"		148c 2064  PowerColor R96A-C3N",
-"		148c 2066  PowerColor R96A-C3N",
-"		174b 7c19  Sapphire Atlantis Radeon 9600 Pro",
-"		174b 7c29  GC-R9600PRO Primary [Sapphire]",
-"		17ee 2002  Radeon 9600 256Mb Primary",
-"		18bc 0101  GC-R9600PRO Primary",
-"	4151  RV350 AQ [Radeon 9600]",
-"		1043 c004  A9600SE",
-"	4152  RV350 AR [Radeon 9600]",
-"		1002 0002  Radeon 9600XT",
-"		1002 4772  All-in-Wonder 9600 XT",
-"		1043 c002  Radeon 9600 XT TVD",
-"		1043 c01a  A9600XT/TD",
-"		174b 7c29  Sapphire Radeon 9600XT",
-"		1787 4002  Radeon 9600 XT",
-"	4153  RV350 AS [Radeon 9550]",
-"		1462 932c  865PE Neo2-V (MS-6788) mainboard",
-"	4154  RV350 AT [Fire GL T2]",
-"	4155  RV350 AU [Fire GL T2]",
-"	4156  RV350 AV [Fire GL T2]",
-"	4157  RV350 AW [Fire GL T2]",
-"	4158  68800AX [Mach32]",
-"	4164  R300 AD [Radeon 9500 Pro] (Secondary)",
-"	4165  R300 AE [Radeon 9700 Pro] (Secondary)",
-"	4166  R300 AF [Radeon 9700 Pro] (Secondary)",
-"	4168  Radeon R350 [Radeon 9800] (Secondary)",
-"	4170  RV350 AP [Radeon 9600] (Secondary)",
-"		1002 0003  R9600 Pro secondary (Asus OEM for HP)",
-"		1002 4723  All-in-Wonder 2006 AGP Edition (Secondary)",
-"		1458 4025  Giga-Byte GV-R96128D Secondary",
-"		148c 2067  PowerColor R96A-C3N (Secondary)",
-"		174b 7c28  GC-R9600PRO Secondary [Sapphire]",
-"		17ee 2003  Radeon 9600 256Mb Secondary",
-"		18bc 0100  GC-R9600PRO Secondary",
-"	4171  RV350 AQ [Radeon 9600] (Secondary)",
-"		1043 c005  A9600SE (Secondary)",
-"	4172  RV350 AR [Radeon 9600] (Secondary)",
-"		1002 0003  Radeon 9600XT (Secondary)",
-"		1002 4773  All-in-Wonder 9600 XT (Secondary)",
-"		1043 c003  A9600XT (Secondary)",
-"		1043 c01b  A9600XT/TD (Secondary)",
-"		174b 7c28  Sapphire Radeon 9600XT (Secondary)",
-"		1787 4003  Radeon 9600 XT (Secondary)",
-"	4173  RV350 ?? [Radeon 9550] (Secondary)",
-"	4237  Radeon 7000 IGP",
-"	4242  R200 BB [Radeon All in Wonder 8500DV]",
-"		1002 02aa  Radeon 8500 AIW DV Edition",
-"	4243  R200 BC [Radeon All in Wonder 8500]",
-"	4336  Radeon Mobility U1",
-"		1002 4336  Pavilion ze4300 ATI Radeon Mobility U1 (IGP 320 M)",
-"		103c 0024  Pavilion ze4400 builtin Video",
-"		161f 2029  eMachines M5312 builtin Video",
-"	4337  Radeon IGP 330M/340M/350M",
-"		1014 053a  ThinkPad R40e (2684-HVG) builtin VGA controller",
-"		103c 0850  Radeon IGP 345M",
-"	4341  IXP150 AC'97 Audio Controller",
-"	4345  EHCI USB Controller",
-"	4347  OHCI USB Controller #1",
-"	4348  OHCI USB Controller #2",
-"	4349  ATI Dual Channel Bus Master PCI IDE Controller",
-"	434d  IXP AC'97 Modem",
-"	4353  ATI SMBus",
-"	4354  215CT [Mach64 CT]",
-"	4358  210888CX [Mach64 CX]",
-"	4363  ATI SMBus",
-"	436e  ATI 436E Serial ATA Controller",
-"	4370  IXP SB400 AC'97 Audio Controller",
-"		1025 0079  Aspire 5024WLMMi",
-"		103c 308b  MX6125",
-"		107b 0300  MX6421",
-"	4371  IXP SB400 PCI-PCI Bridge",
-"		103c 308b  MX6125",
-"	4372  IXP SB400 SMBus Controller",
-"		1025 0080  Aspire 5024WLMMi",
-"		103c 308b  MX6125",
-"	4373  IXP SB400 USB2 Host Controller",
-"		1025 0080  Aspire 5024WLMMi",
-"		103c 308b  MX6125",
-"	4374  IXP SB400 USB Host Controller",
-"		103c 308b  MX6125",
-"	4375  IXP SB400 USB Host Controller",
-"		1025 0080  Aspire 5024WLMMi",
-"		103c 308b  MX6125",
-"	4376  Standard Dual Channel PCI IDE Controller ATI",
-"		1025 0080  Aspire 5024WLMMi",
-"		103c 308b  MX6125",
-"	4377  IXP SB400 PCI-ISA Bridge",
-"		1025 0080  Aspire 5024WLMi",
-"		103c 308b  MX6125",
-"	4378  ATI SB400 - AC'97 Modem Controller",
-"		1025 0080  Aspire 5024WLMMi",
-"		103c 308b  MX6125",
-"	4379  ATI 4379 Serial ATA Controller",
-"	437a  ATI 437A Serial ATA Controller",
-"	437b  SB450 HDA Audio",
-"	4380  SB600 Non-Raid-5 SATA",
-"	4381  SB600 Raid-5 SATA",
-"	4382  SB600 AC97 Audio",
-"	4383  SB600 Azalia",
-"	4384  SB600 PCI to PCI Bridge",
-"	4385  SB600 SMBus",
-"	4386  SB600 USB Controller (EHCI)",
-"	4387  SB600 USB (OHCI0)",
-"	4388  SB600 USB (OHCI1)",
-"	4389  SB600 USB (OHCI2)",
-"	438a  SB600 USB (OHCI3)",
-"	438b  SB600 USB (OHCI4)",
-"	438c  SB600 IDE",
-"	438d  SB600 PCI to LPC Bridge",
-"	438e  SB600 AC97 Modem",
-"	4437  Radeon Mobility 7000 IGP",
-"	4554  210888ET [Mach64 ET]",
-"	4654  Mach64 VT",
-"	4742  3D Rage Pro AGP 1X/2X",
-"		1002 0040  Rage Pro Turbo AGP 2X",
-"		1002 0044  Rage Pro Turbo AGP 2X",
-"		1002 0061  Rage Pro AIW AGP 2X",
-"		1002 0062  Rage Pro AIW AGP 2X",
-"		1002 0063  Rage Pro AIW AGP 2X",
-"		1002 0080  Rage Pro Turbo AGP 2X",
-"		1002 0084  Rage Pro Turbo AGP 2X",
-"		1002 4742  Rage Pro Turbo AGP 2X",
-"		1002 8001  Rage Pro Turbo AGP 2X",
-"		1028 0082  Rage Pro Turbo AGP 2X",
-"		1028 4082  Optiplex GX1 Onboard Display Adapter",
-"		1028 8082  Rage Pro Turbo AGP 2X",
-"		1028 c082  Rage Pro Turbo AGP 2X",
-"		8086 4152  Xpert 98D AGP 2X",
-"		8086 464a  Rage Pro Turbo AGP 2X",
-"	4744  3D Rage Pro AGP 1X",
-"		1002 4744  Rage Pro Turbo AGP",
-"	4747  3D Rage Pro",
-"	4749  3D Rage Pro",
-"		1002 0061  Rage Pro AIW",
-"		1002 0062  Rage Pro AIW",
-"	474c  Rage XC",
-"	474d  Rage XL AGP 2X",
-"		1002 0004  Xpert 98 RXL AGP 2X",
-"		1002 0008  Xpert 98 RXL AGP 2X",
-"		1002 0080  Rage XL AGP 2X",
-"		1002 0084  Xpert 98 AGP 2X",
-"		1002 474d  Rage XL AGP",
-"		1033 806a  Rage XL AGP",
-"	474e  Rage XC AGP",
-"		1002 474e  Rage XC AGP",
-"	474f  Rage XL",
-"		1002 0008  Rage XL",
-"		1002 474f  Rage XL",
-"	4750  3D Rage Pro 215GP",
-"		1002 0040  Rage Pro Turbo",
-"		1002 0044  Rage Pro Turbo",
-"		1002 0080  Rage Pro Turbo",
-"		1002 0084  Rage Pro Turbo",
-"		1002 4750  Rage Pro Turbo",
-"	4751  3D Rage Pro 215GQ",
-"	4752  Rage XL",
-"		0e11 001e  Proliant Rage XL",
-"		1002 0008  Rage XL",
-"		1002 4752  Proliant Rage XL",
-"		1002 8008  Rage XL",
-"		1028 00ce  PowerEdge 1400",
-"		1028 00d1  PowerEdge 2550",
-"		1028 00d9  PowerEdge 2500",
-"		1028 0134  Poweredge SC600",
-"		103c 10e1  NetServer Rage XL",
-"		1734 007a  Primergy RX300",
-"		8086 3411  SDS2 Mainboard",
-"		8086 3427  S875WP1-E mainboard",
-"	4753  Rage XC",
-"		1002 4753  Rage XC",
-"	4754  3D Rage I/II 215GT [Mach64 GT]",
-"	4755  3D Rage II+ 215GTB [Mach64 GTB]",
-"	4756  3D Rage IIC 215IIC [Mach64 GT IIC]",
-"		1002 4756  Rage IIC",
-"	4757  3D Rage IIC AGP",
-"		1002 4757  Rage IIC AGP",
-"		1028 0089  Rage 3D IIC",
-"		1028 008e  PowerEdge 1300 onboard video",
-"		1028 4082  Rage 3D IIC",
-"		1028 8082  Rage 3D IIC",
-"		1028 c082  Rage 3D IIC",
-"	4758  210888GX [Mach64 GX]",
-"	4759  3D Rage IIC",
-"	475a  3D Rage IIC AGP",
-"		1002 0084  Rage 3D Pro AGP 2x XPERT 98",
-"		1002 0087  Rage 3D IIC",
-"		1002 475a  Rage IIC AGP",
-"	4964  Radeon RV250 Id [Radeon 9000]",
-"	4965  Radeon RV250 Ie [Radeon 9000]",
-"	4966  Radeon RV250 If [Radeon 9000]",
-"		10f1 0002  RV250 If [Tachyon G9000 PRO]",
-"		148c 2039  RV250 If [Radeon 9000 Pro 'Evil Commando']",
-"		1509 9a00  RV250 If [Radeon 9000 'AT009']",
-"		1681 0040  RV250 If [3D prophet 9000]",
-"		174b 7176  RV250 If [Sapphire Radeon 9000 Pro]",
-"		174b 7192  RV250 If [Radeon 9000 'Atlantis']",
-"		17af 2005  RV250 If [Excalibur Radeon 9000 Pro]",
-"		17af 2006  RV250 If [Excalibur Radeon 9000]",
-"	4967  Radeon RV250 Ig [Radeon 9000]",
-"	496e  Radeon RV250 [Radeon 9000] (Secondary)",
-"	4a48  R420 JH [Radeon X800]",
-"	4a49  R420 JI [Radeon X800PRO]",
-"	4a4a  R420 JJ [Radeon X800SE]",
-"	4a4b  R420 JK [Radeon X800]",
-"	4a4c  R420 JL [Radeon X800]",
-"	4a4d  R420 JM [FireGL X3]",
-"	4a4e  M18 JN [Radeon Mobility 9800]",
-"	4a50  R420 JP [Radeon X800XT]",
-"	4a70  R420 [X800XT-PE] (Secondary)",
-"	4b49  R480 [Radeon X850XT]",
-"	4b4b  R480 [Radeon X850Pro]",
-"	4b4c  R481 [Radeon X850XT-PE]",
-"	4b69  R480 [Radeon X850XT] (Secondary)",
-"	4b6b  R480 [Radeon X850Pro] (Secondary)",
-"	4b6c  R481 [Radeon X850XT-PE] (Secondary)",
-"	4c42  3D Rage LT Pro AGP-133",
-"		0e11 b0e7  Rage LT Pro (Compaq Presario 5240)",
-"		0e11 b0e8  Rage 3D LT Pro",
-"		0e11 b10e  3D Rage LT Pro (Compaq Armada 1750)",
-"		1002 0040  Rage LT Pro AGP 2X",
-"		1002 0044  Rage LT Pro AGP 2X",
-"		1002 4c42  Rage LT Pro AGP 2X",
-"		1002 8001  Rage LT Pro AGP 2X",
-"		1028 0085  Rage 3D LT Pro",
-"	4c44  3D Rage LT Pro AGP-66",
-"	4c45  Rage Mobility M3 AGP",
-"	4c46  Rage Mobility M3 AGP 2x",
-"		1028 00b1  Latitude C600",
-"	4c47  3D Rage LT-G 215LG",
-"	4c49  3D Rage LT Pro",
-"		1002 0004  Rage LT Pro",
-"		1002 0040  Rage LT Pro",
-"		1002 0044  Rage LT Pro",
-"		1002 4c49  Rage LT Pro",
-"	4c4d  Rage Mobility P/M AGP 2x",
-"		0e11 b111  Armada M700",
-"		0e11 b160  Armada E500",
-"		1002 0084  Xpert 98 AGP 2X (Mobility)",
-"		1014 0154  ThinkPad A20m/A21m",
-"		1028 00aa  Latitude CPt",
-"		1028 00bb  Latitude CPx",
-"		10e1 10cf  Fujitsu Siemens LifeBook C Series",
-"		1179 ff00  Satellite 1715XCDS laptop",
-"		13bd 1019  PC-AR10",
-"	4c4e  Rage Mobility L AGP 2x",
-"	4c50  3D Rage LT Pro",
-"		1002 4c50  Rage LT Pro",
-"	4c51  3D Rage LT Pro",
-"	4c52  Rage Mobility P/M",
-"		1033 8112  Versa Note VXi",
-"	4c53  Rage Mobility L",
-"	4c54  264LT [Mach64 LT]",
-"	4c57  Radeon Mobility M7 LW [Radeon Mobility 7500]",
-"		1014 0517  ThinkPad T30",
-"		1028 00e6  Radeon Mobility M7 LW (Dell Inspiron 8100)",
-"		1028 012a  Latitude C640",
-"		144d c006  Radeon Mobility M7 LW in vpr Matrix 170B4",
-"	4c58  Radeon RV200 LX [Mobility FireGL 7800 M7]",
-"	4c59  Radeon Mobility M6 LY",
-"		0e11 b111  Evo N600c",
-"		1014 0235  ThinkPad A30/A30p (2652/2653)",
-"		1014 0239  ThinkPad X22/X23/X24",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		104d 8140  PCG-Z1SP laptop",
-"		1509 1930  Medion MD9703",
-"	4c5a  Radeon Mobility M6 LZ",
-"	4c64  Radeon R250 Ld [Radeon Mobility 9000 M9]",
-"	4c65  Radeon R250 Le [Radeon Mobility 9000 M9]",
-"	4c66  Radeon R250 [Radeon Mobility 9200]",
-"	4c67  Radeon R250 Lg [Radeon Mobility 9000 M9]",
-"	4c6e  Radeon R250 Ln [Radeon Mobility 9000 M9] [Secondary]",
-"	4d46  Rage Mobility M4 AGP",
-"	4d4c  Rage Mobility M4 AGP",
-"	4e44  Radeon R300 ND [Radeon 9700 Pro]",
-"		1002 515e  Radeon ES1000",
-"		1002 5965  Radeon ES1000",
-"	4e45  Radeon R300 NE [Radeon 9500 Pro]",
-"		1002 0002  Radeon R300 NE [Radeon 9500 Pro]",
-"		1681 0002  Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro]",
-"	4e46  RV350 NF [Radeon 9600]",
-"	4e47  Radeon R300 NG [FireGL X1]",
-"	4e48  Radeon R350 [Radeon 9800 Pro]",
-"	4e49  Radeon R350 [Radeon 9800]",
-"	4e4a  RV350 NJ [Radeon 9800 XT]",
-"	4e4b  R350 NK [Fire GL X2]",
-"	4e50  RV350 [Mobility Radeon 9600 M10]",
-"		1025 005a  TravelMate 290",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1462 0311  MSI M510A",
-"		1734 1055  Amilo M1420W",
-"	4e51  M10 NQ [Radeon Mobility 9600]",
-"	4e52  RV350 [Mobility Radeon 9600 M10]",
-"	4e53  M10 NS [Radeon Mobility 9600]",
-"	4e54  M10 NT [FireGL Mobility T2]",
-"	4e56  M11 NV [FireGL Mobility T2e]",
-"	4e64  Radeon R300 [Radeon 9700 Pro] (Secondary)",
-"	4e65  Radeon R300 [Radeon 9500 Pro] (Secondary)",
-"		1002 0003  Radeon R300 NE [Radeon 9500 Pro]",
-"		1681 0003  Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary)",
-"	4e66  RV350 NF [Radeon 9600] (Secondary)",
-"	4e67  Radeon R300 [FireGL X1] (Secondary)",
-"	4e68  Radeon R350 [Radeon 9800 Pro] (Secondary)",
-"	4e69  Radeon R350 [Radeon 9800] (Secondary)",
-"	4e6a  RV350 NJ [Radeon 9800 XT] (Secondary)",
-"		1002 4e71  ATI Technologies Inc M10 NQ [Radeon Mobility 9600]",
-"	4e71  M10 NQ [Radeon Mobility 9600] (Secondary)",
-"	4f72  RV250 [Radeon 9000 Series]",
-"	4f73  Radeon RV250 [Radeon 9000 Series] (Secondary)",
-"	5041  Rage 128 PA/PRO",
-"	5042  Rage 128 PB/PRO AGP 2x",
-"	5043  Rage 128 PC/PRO AGP 4x",
-"	5044  Rage 128 PD/PRO TMDS",
-"		1002 0028  Rage 128 AIW",
-"		1002 0029  Rage 128 AIW",
-"	5045  Rage 128 PE/PRO AGP 2x TMDS",
-"	5046  Rage 128 PF/PRO AGP 4x TMDS",
-"		1002 0004  Rage Fury Pro",
-"		1002 0008  Rage Fury Pro/Xpert 2000 Pro",
-"		1002 0014  Rage Fury Pro",
-"		1002 0018  Rage Fury Pro/Xpert 2000 Pro",
-"		1002 0028  Rage 128 Pro AIW AGP",
-"		1002 002a  Rage 128 Pro AIW AGP",
-"		1002 0048  Rage Fury Pro",
-"		1002 2000  Rage Fury MAXX AGP 4x (TMDS) (VGA device)",
-"		1002 2001  Rage Fury MAXX AGP 4x (TMDS) (Extra device?!)",
-"	5047  Rage 128 PG/PRO",
-"	5048  Rage 128 PH/PRO AGP 2x",
-"	5049  Rage 128 PI/PRO AGP 4x",
-"	504a  Rage 128 PJ/PRO TMDS",
-"	504b  Rage 128 PK/PRO AGP 2x TMDS",
-"	504c  Rage 128 PL/PRO AGP 4x TMDS",
-"	504d  Rage 128 PM/PRO",
-"	504e  Rage 128 PN/PRO AGP 2x",
-"	504f  Rage 128 PO/PRO AGP 4x",
-"	5050  Rage 128 PP/PRO TMDS [Xpert 128]",
-"		1002 0008  Xpert 128",
-"	5051  Rage 128 PQ/PRO AGP 2x TMDS",
-"	5052  Rage 128 PR/PRO AGP 4x TMDS",
-"	5053  Rage 128 PS/PRO",
-"	5054  Rage 128 PT/PRO AGP 2x",
-"	5055  Rage 128 PU/PRO AGP 4x",
-"	5056  Rage 128 PV/PRO TMDS",
-"	5057  Rage 128 PW/PRO AGP 2x TMDS",
-"	5058  Rage 128 PX/PRO AGP 4x TMDS",
-"	5144  Radeon R100 QD [Radeon 7200]",
-"		1002 0008  Radeon 7000/Radeon VE",
-"		1002 0009  Radeon 7000/Radeon",
-"		1002 000a  Radeon 7000/Radeon",
-"		1002 001a  Radeon 7000/Radeon",
-"		1002 0029  Radeon AIW",
-"		1002 0038  Radeon 7000/Radeon",
-"		1002 0039  Radeon 7000/Radeon",
-"		1002 008a  Radeon 7000/Radeon",
-"		1002 00ba  Radeon 7000/Radeon",
-"		1002 0139  Radeon 7000/Radeon",
-"		1002 028a  Radeon 7000/Radeon",
-"		1002 02aa  Radeon AIW",
-"		1002 053a  Radeon 7000/Radeon",
-"	5145  Radeon R100 QE",
-"	5146  Radeon R100 QF",
-"	5147  Radeon R100 QG",
-"	5148  Radeon R200 QH [Radeon 8500]",
-"		1002 010a  FireGL 8800 64Mb",
-"		1002 0152  FireGL 8800 128Mb",
-"		1002 0162  FireGL 8700 32Mb",
-"		1002 0172  FireGL 8700 64Mb",
-"	5149  Radeon R200 QI",
-"	514a  Radeon R200 QJ",
-"	514b  Radeon R200 QK",
-"	514c  Radeon R200 QL [Radeon 8500 LE]",
-"		1002 003a  Radeon R200 QL [Radeon 8500 LE]",
-"		1002 013a  Radeon 8500",
-"		148c 2026  R200 QL [Radeon 8500 Evil Master II Multi Display Edition]",
-"		1681 0010  Radeon 8500 [3D Prophet 8500 128Mb]",
-"		174b 7149  Radeon R200 QL [Sapphire Radeon 8500 LE]",
-"	514d  Radeon R200 QM [Radeon 9100]",
-"	514e  Radeon R200 QN [Radeon 8500LE]",
-"	514f  Radeon R200 QO [Radeon 8500LE]",
-"	5154  R200 QT [Radeon 8500]",
-"	5155  R200 QU [Radeon 9100]",
-"	5157  Radeon RV200 QW [Radeon 7500]",
-"		1002 013a  Radeon 7500",
-"		1002 103a  Dell Optiplex GX260",
-"		1458 4000  RV200 QW [RADEON 7500 PRO MAYA AR]",
-"		148c 2024  RV200 QW [Radeon 7500LE Dual Display]",
-"		148c 2025  RV200 QW [Radeon 7500 Evil Master Multi Display Edition]",
-"		148c 2036  RV200 QW [Radeon 7500 PCI Dual Display]",
-"		174b 7146  RV200 QW [Radeon 7500 LE]",
-"		174b 7147  RV200 QW [Sapphire Radeon 7500LE]",
-"		174b 7161  Radeon RV200 QW [Radeon 7500 LE]",
-"		17af 0202  RV200 QW [Excalibur Radeon 7500LE]",
-"	5158  Radeon RV200 QX [Radeon 7500]",
-"	5159  Radeon RV100 QY [Radeon 7000/VE]",
-"		1002 000a  Radeon 7000/Radeon VE",
-"		1002 000b  Radeon 7000",
-"		1002 0038  Radeon 7000/Radeon VE",
-"		1002 003a  Radeon 7000/Radeon VE",
-"		1002 00ba  Radeon 7000/Radeon VE",
-"		1002 013a  Radeon 7000/Radeon VE",
-"		1002 0908  XVR-100 (supplied by Sun)",
-"		1014 029a  Remote Supervisor Adapter II (RSA2)",
-"		1014 02c8  IBM eServer xSeries server mainboard",
-"		1028 019a  PowerEdge SC1425",
-"		1458 4002  RV100 QY [RADEON 7000 PRO MAYA AV Series]",
-"		148c 2003  RV100 QY [Radeon 7000 Multi-Display Edition]",
-"		148c 2023  RV100 QY [Radeon 7000 Evil Master Multi-Display]",
-"		174b 7112  RV100 QY [Sapphire Radeon VE 7000]",
-"		174b 7c28  Sapphire Radeon VE 7000 DDR",
-"		1787 0202  RV100 QY [Excalibur Radeon 7000]",
-"	515a  Radeon RV100 QZ [Radeon 7000/VE]",
-"	515e  ES1000",
-"	515f  ES1000",
-"	5168  Radeon R200 Qh",
-"	5169  Radeon R200 Qi",
-"	516a  Radeon R200 Qj",
-"	516b  Radeon R200 Qk",
-"	516c  Radeon R200 Ql",
-"	5245  Rage 128 RE/SG",
-"		1002 0008  Xpert 128",
-"		1002 0028  Rage 128 AIW",
-"		1002 0029  Rage 128 AIW",
-"		1002 0068  Rage 128 AIW",
-"	5246  Rage 128 RF/SG AGP",
-"		1002 0004  Magnum/Xpert 128/Xpert 99",
-"		1002 0008  Magnum/Xpert128/X99/Xpert2000",
-"		1002 0028  Rage 128 AIW AGP",
-"		1002 0044  Rage Fury/Xpert 128/Xpert 2000",
-"		1002 0068  Rage 128 AIW AGP",
-"		1002 0448  Rage Fury",
-"	5247  Rage 128 RG",
-"	524b  Rage 128 RK/VR",
-"	524c  Rage 128 RL/VR AGP",
-"		1002 0008  Xpert 99/Xpert 2000",
-"		1002 0088  Xpert 99",
-"	5345  Rage 128 SE/4x",
-"	5346  Rage 128 SF/4x AGP 2x",
-"		1002 0048  RAGE 128 16MB VGA TVOUT AMC PAL",
-"	5347  Rage 128 SG/4x AGP 4x",
-"	5348  Rage 128 SH",
-"	534b  Rage 128 SK/4x",
-"	534c  Rage 128 SL/4x AGP 2x",
-"	534d  Rage 128 SM/4x AGP 4x",
-"		1002 0008  Xpert 99/Xpert 2000",
-"		1002 0018  Xpert 2000",
-"	534e  Rage 128 4x",
-"	5354  Mach 64 VT",
-"		1002 5654  Mach 64 reference",
-"	5446  Rage 128 Pro Ultra TF",
-"		1002 0004  Rage Fury Pro",
-"		1002 0008  Rage Fury Pro/Xpert 2000 Pro",
-"		1002 0018  Rage Fury Pro/Xpert 2000 Pro",
-"		1002 0028  Rage 128 AIW Pro AGP",
-"		1002 0029  Rage 128 AIW",
-"		1002 002a  Rage 128 AIW Pro AGP",
-"		1002 002b  Rage 128 AIW",
-"		1002 0048  Xpert 2000 Pro",
-"	544c  Rage 128 Pro Ultra TL",
-"	5452  Rage 128 Pro Ultra TR",
-"		1002 001c  Rage 128 Pro 4XL",
-"		103c 1279  Rage 128 Pro 4XL",
-"	5453  Rage 128 Pro Ultra TS",
-"	5454  Rage 128 Pro Ultra TT",
-"	5455  Rage 128 Pro Ultra TU",
-"	5460  M22 [Radeon Mobility M300]",
-"	5462  M24 [Radeon Mobility X600]",
-"	5464  M22 [FireGL GL]",
-"	5548  R423 UH [Radeon X800 (PCIE)]",
-"	5549  R423 UI [Radeon X800PRO (PCIE)]",
-"	554a  R423 UJ [Radeon X800LE (PCIE)]",
-"	554b  R423 UK [Radeon X800SE (PCIE)]",
-"	554d  R430 [Radeon X800 XL] (PCIe)",
-"	554f  R430 [Radeon X800 (PCIE)]",
-"	5550  R423 [Fire GL V7100]",
-"	5551  R423 UQ [FireGL V7200 (PCIE)]",
-"	5552  R423 UR [FireGL V5100 (PCIE)]",
-"	5554  R423 UT [FireGL V7100 (PCIE)]",
-"	556b  Radeon R423 UK (PCIE) [X800 SE] (Secondary)",
-"	556d  R430 [Radeon X800 XL] (PCIe) Secondary",
-"	556f  R430 [Radeon X800 (PCIE) Secondary]",
-"	564a  M26 [Mobility FireGL V5000]",
-"	564b  M26 [Mobility FireGL V5000]",
-"	564f  M26 [Radeon Mobility X700 XL] (PCIE)",
-"	5652  M26 [Radeon Mobility X700]",
-"	5653  Radeon Mobility X700 (PCIE)",
-"		1025 0080  Aspire 5024WLMi",
-"	5654  264VT [Mach64 VT]",
-"		1002 5654  Mach64VT Reference",
-"	5655  264VT3 [Mach64 VT3]",
-"	5656  264VT4 [Mach64 VT4]",
-"	5830  RS300 Host Bridge",
-"	5831  RS300 Host Bridge",
-"	5832  RS300 Host Bridge",
-"	5833  Radeon 9100 IGP Host Bridge",
-"	5834  Radeon 9100 IGP",
-"	5835  RS300M AGP [Radeon Mobility 9100IGP]",
-"	5838  Radeon 9100 IGP AGP Bridge",
-"	5940  RV280 [Radeon 9200 PRO] (Secondary)",
-"	5941  RV280 [Radeon 9200] (Secondary)",
-"		1458 4019  Gigabyte Radeon 9200",
-"		174b 7c12  Sapphire Radeon 9200",
-"		17af 200d  Excalibur Radeon 9200",
-"		18bc 0050  GeXcube GC-R9200-C3 (Secondary)",
-"	5944  RV280 [Radeon 9200 SE (PCI)]",
-"	5950  RS480 Host Bridge",
-"		1025 0080  Aspire 5024WLMMi",
-"		103c 308b  MX6125",
-"	5951  ATI Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge",
-"	5954  RS480 [Radeon Xpress 200G Series]",
-"		1002 5954  RV370 [Radeon Xpress 200G Series]",
-"	5955  ATI Radeon XPRESS 200M 5955 (PCIE)",
-"		1002 5955  RS480 0x5955 [ATI Radeon XPRESS 200M 5955 (PCIE)]",
-"		103c 308b  MX6125",
-"	5960  RV280 [Radeon 9200 PRO]",
-"	5961  RV280 [Radeon 9200]",
-"		1002 2f72  All-in-Wonder 9200 Series",
-"		1019 4c30  Radeon 9200 VIVO",
-"		12ab 5961  YUAN SMARTVGA Radeon 9200",
-"		1458 4018  Gigabyte Radeon 9200",
-"		174b 7c13  Sapphire Radeon 9200",
-"		17af 200c  Excalibur Radeon 9200",
-"		18bc 0050  Radeon 9200 Game Buster",
-"		18bc 0051  GeXcube GC-R9200-C3",
-"		18bc 0053  Radeon 9200 Game Buster VIVO",
-"	5962  RV280 [Radeon 9200]",
-"	5964  RV280 [Radeon 9200 SE]",
-"		1043 c006  ASUS Radeon 9200 SE / TD / 128M",
-"		1458 4018  Radeon 9200 SE",
-"		1458 4032  Radeon 9200 SE 128MB",
-"		147b 6191  R9200SE-DT",
-"		148c 2073  CN-AG92E",
-"		174b 7c13  Sapphire Radeon 9200 SE",
-"		1787 5964  Excalibur 9200SE VIVO 128M",
-"		17af 2012  Radeon 9200 SE Excalibur",
-"		18bc 0170  Sapphire Radeon 9200 SE 128MB Game Buster",
-"		18bc 0173  GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]",
-"	5969  ES1000",
-"	5974  RS482 [Radeon Xpress 200]",
-"	5975  RS482 [Radeon Xpress 200M]",
-"	5a34  RS480 PCI-X Root Port",
-"	5a36  RS480 PCI Bridge",
-"	5a38  RS480 PCI Bridge",
-"	5a39  RS480 PCI Bridge",
-"	5a3f  RS480 PCI Bridge",
-"	5a41  RS400 [Radeon Xpress 200]",
-"	5a42  RS400 [Radeon Xpress 200M]",
-"	5a61  RC410 [Radeon Xpress 200]",
-"	5a62  RC410 [Radeon Xpress 200M]",
-"	5b60  RV370 5B60 [Radeon X300 (PCIE)]",
-"		1043 002a  Extreme AX300SE-X",
-"		1043 032e  Extreme AX300/TD",
-"		1462 0400  RX300SE-TD128E (MS-8940 REV:200)",
-"		1462 0402  RX300SE-TD128E (MS-8940)",
-"	5b62  RV370 5B62 [Radeon X600 (PCIE)]",
-"	5b63  RV370 [Sapphire X550 Silent]",
-"	5b64  RV370 5B64 [FireGL V3100 (PCIE)]",
-"	5b65  RV370 5B65 [FireGL D1100 (PCIE)]",
-"	5b70  RV370 [Radeon X300SE]",
-"		1462 0403  RX300SE-TD128E (MS-8940) (secondary display)",
-"	5b72  Radeon X600(RV380)",
-"	5b73  RV370 secondary [Sapphire X550 Silent]",
-"	5b74  RV370 5B64 [FireGL V3100 (PCIE)] (Secondary)",
-"	5c61  M9+ 5C61 [Radeon Mobility 9200 (AGP)]",
-"	5c63  M9+ 5C63 [Radeon Mobility 9200 (AGP)]",
-"		1002 5c63  Apple iBook G4 2004",
-"	5d44  RV280 [Radeon 9200 SE] (Secondary)",
-"		1458 4019  Radeon 9200 SE (Secondary)",
-"		1458 4032  Radeon 9200 SE 128MB",
-"		174b 7c12  Sapphire Radeon 9200 SE (Secondary)",
-"		1787 5965  Excalibur 9200SE VIVO 128M (Secondary)",
-"		17af 2013  Radeon 9200 SE Excalibur (Secondary)",
-"		18bc 0171  Radeon 9200 SE 128MB Game Buster (Secondary)",
-"		18bc 0172  GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]",
-"	5d48  M28 [Radeon Mobility X800XT]",
-"	5d49  M28 [Mobility FireGL V5100]",
-"	5d4a  Mobility Radeon X800",
-"	5d4d  R480 [Radeon X850XT Platinum (PCIE)]",
-"	5d4f  R480 [Radeon X800 GTO (PCIE)]",
-"	5d52  R480 [Radeon X850XT (PCIE)] (Primary)",
-"		1002 0b12  PowerColor X850XT PCIe Primary",
-"		1002 0b13  PowerColor X850XT PCIe Secondary",
-"	5d57  R423 5F57 [Radeon X800XT (PCIE)]",
-"	5d6d  R480 [Radeon X850XT Platinum (PCIE)] (Secondary)",
-"	5d6f  R480 [Radeon X800 GTO (PCIE)] (Secondary)",
-"	5d72  R480 [Radeon X850XT (PCIE)] (Secondary)",
-"	5d77  R423 5F57 [Radeon X800XT (PCIE)] (Secondary)",
-"	5e48  RV410 [FireGL V5000]",
-"	5e49  RV410 [FireGL V3300]",
-"	5e4a  RV410 [Radeon X700XT]",
-"	5e4b  RV410 [Radeon X700 Pro (PCIE)]",
-"	5e4c  RV410 [Radeon X700SE]",
-"	5e4d  RV410 [Radeon X700 (PCIE)]",
-"		148c 2116  PowerColor Bravo X700",
-"	5e4f  RV410 [Radeon X700]",
-"	5e6b  RV410 [Radeon X700 Pro (PCIE)] Secondary",
-"	5e6d  RV410 [Radeon X700 (PCIE)] (Secondary)",
-"		148c 2117  PowerColor Bravo X700",
-"	5f57  R423 [Radeon X800XT (PCIE)]",
-"	700f  PCI Bridge [IGP 320M]",
-"	7010  PCI Bridge [IGP 340M]",
-"	7100  R520 [Radeon X1800]",
-"	7105  R520 [FireGL]",
-"	7109  R520 [Radeon X1800]",
-"		1002 0322  All-in-Wonder X1800XL",
-"		1002 0d02  Radeon X1800 CrossFire Edition",
-"	7120  R520 [Radeon X1800] (Secondary)",
-"	7129  R520 [Radeon X1800] (Secondary)",
-"		1002 0323  All-in-Wonder X1800XL (Secondary)",
-"		1002 0d03  Radeon X1800 CrossFire Edition (Secondary)",
-"	7142  RV515 [Radeon X1300]",
-"		1002 0322  All-in-Wonder 2006 PCI-E Edition",
-"	7145  Radeon Mobility X1400",
-"	7146  RV515 [Radeon X1300]",
-"		1002 0322  All-in-Wonder 2006 PCI-E Edition",
-"	7149  M52 [ATI Mobility Radeon X1300]",
-"	714a  M52 [ATI Mobility Radeon X1300]",
-"	714b  M52 [ATI Mobility Radeon X1300]",
-"	714c  M52 [ATI Mobility Radeon X1300]",
-"	7162  RV515 [Radeon X1300] (Secondary)",
-"		1002 0323  All-in-Wonder 2006 PCI-E Edition (Secondary)",
-"	7166  RV515 [Radeon X1300] (Secondary)",
-"		1002 0323  All-in-Wonder 2006 PCI-E Edition (Secondary)",
-"	71c0  RV530 [Radeon X1600]",
-"	71c2  RV530 [Radeon X1600]",
-"	71c4  M56GL [ATI Mobility FireGL V5200]",
-"	71c5  M56P [Radeon Mobility X1600]",
-"	71e0  RV530 [Radeon X1600] (Secondary)",
-"	71e2  RV530 [Radeon X1600] (Secondary)",
-"	7833  Radeon 9100 IGP Host Bridge",
-"	7834  Radeon 9100 PRO IGP",
-"	7835  Radeon Mobility 9200 IGP",
-"	7838  Radeon 9100 IGP PCI/AGP Bridge",
-"	7c37  RV350 AQ [Radeon 9600 SE]",
-"	cab0  AGP Bridge [IGP 320M]",
-"	cab2  RS200/RS200M AGP Bridge [IGP 340M]",
-"	cab3  R200 AGP Bridge [Mobility Radeon 7000 IGP]",
-"	cbb2  RS200/RS200M AGP Bridge [IGP 340M]",
-"1003  ULSI Systems",
-"	0201  US201",
-"1004  VLSI Technology Inc",
-"	0005  82C592-FC1",
-"	0006  82C593-FC1",
-"	0007  82C594-AFC2",
-"	0008  82C596/7 [Wildcat]",
-"	0009  82C597-AFC2",
-"	000c  82C541 [Lynx]",
-"	000d  82C543 [Lynx]",
-"	0101  82C532",
-"	0102  82C534 [Eagle]",
-"	0103  82C538",
-"	0104  82C535",
-"	0105  82C147",
-"	0200  82C975",
-"	0280  82C925",
-"	0304  QSound ThunderBird PCI Audio",
-"		1004 0304  QSound ThunderBird PCI Audio",
-"		122d 1206  DSP368 Audio",
-"		1483 5020  XWave Thunder 3D Audio",
-"	0305  QSound ThunderBird PCI Audio Gameport",
-"		1004 0305  QSound ThunderBird PCI Audio Gameport",
-"		122d 1207  DSP368 Audio Gameport",
-"		1483 5021  XWave Thunder 3D Audio Gameport",
-"	0306  QSound ThunderBird PCI Audio Support Registers",
-"		1004 0306  QSound ThunderBird PCI Audio Support Registers",
-"		122d 1208  DSP368 Audio Support Registers",
-"		1483 5022  XWave Thunder 3D Audio Support Registers",
-"	0307  Thunderbird",
-"	0308  Thunderbird",
-"	0702  VAS96011 [Golden Gate II]",
-"	0703  Tollgate",
-"1005  Avance Logic Inc. [ALI]",
-"	2064  ALG2032/2064",
-"	2128  ALG2364A",
-"	2301  ALG2301",
-"	2302  ALG2302",
-"	2364  ALG2364",
-"	2464  ALG2364A",
-"	2501  ALG2564A/25128A",
-"1006  Reply Group",
-"1007  NetFrame Systems Inc",
-"1008  Epson",
-"100a  Phoenix Technologies",
-"100b  National Semiconductor Corporation",
-"	0001  DP83810",
-"	0002  87415/87560 IDE",
-"	000e  87560 Legacy I/O",
-"	000f  FireWire Controller",
-"	0011  NS87560 National PCI System I/O",
-"	0012  USB Controller",
-"	0020  DP83815 (MacPhyter) Ethernet Controller",
-"		103c 0024  Pavilion ze4400 builtin Network",
-"		12d9 000c  Aculab E1/T1 PMXc cPCI carrier card",
-"		1385 f311  FA311 / FA312 (FA311 with WoL HW)",
-"	0021  PC87200 PCI to ISA Bridge",
-"	0022  DP83820 10/100/1000 Ethernet Controller",
-"	0028  Geode GX2 Host Bridge",
-"	002a  CS5535 South Bridge",
-"	002b  CS5535 ISA bridge",
-"	002d  CS5535 IDE",
-"	002e  CS5535 Audio",
-"	002f  CS5535 USB",
-"	0030  Geode GX2 Graphics Processor",
-"	0035  DP83065 [Saturn] 10/100/1000 Ethernet Controller",
-"	0500  SCx200 Bridge",
-"	0501  SCx200 SMI",
-"	0502  SCx200 IDE",
-"	0503  SCx200 Audio",
-"	0504  SCx200 Video",
-"	0505  SCx200 XBus",
-"	0510  SC1100 Bridge",
-"	0511  SC1100 SMI",
-"	0515  SC1100 XBus",
-"	d001  87410 IDE",
-"100c  Tseng Labs Inc",
-"	3202  ET4000/W32p rev A",
-"	3205  ET4000/W32p rev B",
-"	3206  ET4000/W32p rev C",
-"	3207  ET4000/W32p rev D",
-"	3208  ET6000",
-"	4702  ET6300",
-"100d  AST Research Inc",
-"100e  Weitek",
-"	9000  P9000 Viper",
-"	9001  P9000 Viper",
-"	9002  P9000 Viper",
-"	9100  P9100 Viper Pro/SE",
-"1010  Video Logic, Ltd.",
-"1011  Digital Equipment Corporation",
-"	0001  DECchip 21050",
-"	0002  DECchip 21040 [Tulip]",
-"	0004  DECchip 21030 [TGA]",
-"	0007  NVRAM [Zephyr NVRAM]",
-"	0008  KZPSA [KZPSA]",
-"	0009  DECchip 21140 [FasterNet]",
-"		1025 0310  21140 Fast Ethernet",
-"		10b8 2001  SMC9332BDT EtherPower 10/100",
-"		10b8 2002  SMC9332BVT EtherPower T4 10/100",
-"		10b8 2003  SMC9334BDT EtherPower 10/100 (1-port)",
-"		1109 2400  ANA-6944A/TX Fast Ethernet",
-"		1112 2300  RNS2300 Fast Ethernet",
-"		1112 2320  RNS2320 Fast Ethernet",
-"		1112 2340  RNS2340 Fast Ethernet",
-"		1113 1207  EN-1207-TX Fast Ethernet",
-"		1186 1100  DFE-500TX Fast Ethernet",
-"		1186 1112  DFE-570TX Fast Ethernet",
-"		1186 1140  DFE-660 Cardbus Ethernet 10/100",
-"		1186 1142  DFE-660 Cardbus Ethernet 10/100",
-"		11f6 0503  Freedomline Fast Ethernet",
-"		1282 9100  AEF-380TXD Fast Ethernet",
-"		1385 1100  FA310TX Fast Ethernet",
-"		2646 0001  KNE100TX Fast Ethernet",
-"	000a  21230 Video Codec",
-"	000d  PBXGB [TGA2]",
-"	000f  PCI-to-PDQ Interface Chip [PFI]",
-"		1011 def1  FDDI controller (DEFPA)",
-"		103c def1  FDDI controller (3X-DEFPA)",
-"	0014  DECchip 21041 [Tulip Pass 3]",
-"		1186 0100  DE-530+",
-"	0016  DGLPB [OPPO]",
-"	0017  PV-PCI Graphics Controller (ZLXp-L)",
-"	0019  DECchip 21142/43",
-"		1011 500a  DE500A Fast Ethernet",
-"		1011 500b  DE500B Fast Ethernet",
-"		1014 0001  10/100 EtherJet Cardbus",
-"		1025 0315  ALN315 Fast Ethernet",
-"		1033 800c  PC-9821-CS01 100BASE-TX Interface Card",
-"		1033 800d  PC-9821NR-B06 100BASE-TX Interface Card",
-"		108d 0016  Rapidfire 2327 10/100 Ethernet",
-"		108d 0017  GoCard 2250 Ethernet 10/100 Cardbus",
-"		10b8 2005  SMC8032DT Extreme Ethernet 10/100",
-"		10b8 8034  SMC8034 Extreme Ethernet 10/100",
-"		10ef 8169  Cardbus Fast Ethernet",
-"		1109 2a00  ANA-6911A/TX Fast Ethernet",
-"		1109 2b00  ANA-6911A/TXC Fast Ethernet",
-"		1109 3000  ANA-6922/TX Fast Ethernet",
-"		1113 1207  Cheetah Fast Ethernet",
-"		1113 2220  Cardbus Fast Ethernet",
-"		115d 0002  Cardbus Ethernet 10/100",
-"		1179 0203  Fast Ethernet",
-"		1179 0204  Cardbus Fast Ethernet",
-"		1186 1100  DFE-500TX Fast Ethernet",
-"		1186 1101  DFE-500TX Fast Ethernet",
-"		1186 1102  DFE-500TX Fast Ethernet",
-"		1186 1112  DFE-570TX Quad Fast Ethernet",
-"		1259 2800  AT-2800Tx Fast Ethernet",
-"		1266 0004  Eagle Fast EtherMAX",
-"		12af 0019  NetFlyer Cardbus Fast Ethernet",
-"		1374 0001  Cardbus Ethernet Card 10/100",
-"		1374 0002  Cardbus Ethernet Card 10/100",
-"		1374 0007  Cardbus Ethernet Card 10/100",
-"		1374 0008  Cardbus Ethernet Card 10/100",
-"		1385 2100  FA510",
-"		1395 0001  10/100 Ethernet CardBus PC Card",
-"		13d1 ab01  EtherFast 10/100 Cardbus (PCMPC200)",
-"		14cb 0100  LNDL-100N 100Base-TX Ethernet PC Card",
-"		8086 0001  EtherExpress PRO/100 Mobile CardBus 32",
-"	001a  Farallon PN9000SX Gigabit Ethernet",
-"	0021  DECchip 21052",
-"	0022  DECchip 21150",
-"	0023  DECchip 21150",
-"	0024  DECchip 21152",
-"	0025  DECchip 21153",
-"	0026  DECchip 21154",
-"	0034  56k Modem Cardbus",
-"		1374 0003  56k Modem Cardbus",
-"	0045  DECchip 21553",
-"	0046  DECchip 21554",
-"		0e11 4050  Integrated Smart Array",
-"		0e11 4051  Integrated Smart Array",
-"		0e11 4058  Integrated Smart Array",
-"		103c 10c2  Hewlett-Packard NetRAID-4M",
-"		12d9 000a  IP Telephony card",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1051  CE7 mainboard",
-"		9005 0364  5400S (Mustang)",
-"		9005 0365  5400S (Mustang)",
-"		9005 1364  Dell PowerEdge RAID Controller 2",
-"		9005 1365  Dell PowerEdge RAID Controller 2",
-"		e4bf 1000  CC8-1-BLUES",
-"	1065  StrongARM DC21285",
-"		1069 0020  DAC960P / DAC1164P",
-"1012  Micronics Computers Inc",
-"1013  Cirrus Logic",
-"	0038  GD 7548",
-"	0040  GD 7555 Flat Panel GUI Accelerator",
-"	004c  GD 7556 Video/Graphics LCD/CRT Ctrlr",
-"	00a0  GD 5430/40 [Alpine]",
-"	00a2  GD 5432 [Alpine]",
-"	00a4  GD 5434-4 [Alpine]",
-"	00a8  GD 5434-8 [Alpine]",
-"	00ac  GD 5436 [Alpine]",
-"	00b0  GD 5440",
-"	00b8  GD 5446",
-"	00bc  GD 5480",
-"		1013 00bc  CL-GD5480",
-"	00d0  GD 5462",
-"	00d2  GD 5462 [Laguna I]",
-"	00d4  GD 5464 [Laguna]",
-"	00d5  GD 5464 BD [Laguna]",
-"	00d6  GD 5465 [Laguna]",
-"		13ce 8031  Barco Metheus 2 Megapixel, Dual Head",
-"		13cf 8031  Barco Metheus 2 Megapixel, Dual Head",
-"	00e8  GD 5436U",
-"	1100  CL 6729",
-"	1110  PD 6832 PCMCIA/CardBus Ctrlr",
-"	1112  PD 6834 PCMCIA/CardBus Ctrlr",
-"	1113  PD 6833 PCMCIA/CardBus Ctrlr",
-"	1200  GD 7542 [Nordic]",
-"	1202  GD 7543 [Viking]",
-"	1204  GD 7541 [Nordic Light]",
-"	4000  MD 5620 [CLM Data Fax Voice]",
-"	4400  CD 4400",
-"	6001  CS 4610/11 [CrystalClear SoundFusion Audio Accelerator]",
-"		1014 1010  CS4610 SoundFusion Audio Accelerator",
-"	6003  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]",
-"		1013 4280  Crystal SoundFusion PCI Audio Accelerator",
-"		1014 0153  ThinkPad A20m",
-"		153b 1136  SiXPack 5.1+",
-"		1681 0050  Game Theater XP",
-"		1681 a011  Fortissimo III 7.1",
-"	6004  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]",
-"	6005  Crystal CS4281 PCI Audio",
-"		1013 4281  Crystal CS4281 PCI Audio",
-"		10cf 10a8  Crystal CS4281 PCI Audio",
-"		10cf 10a9  Crystal CS4281 PCI Audio",
-"		10cf 10aa  Crystal CS4281 PCI Audio",
-"		10cf 10ab  Crystal CS4281 PCI Audio",
-"		10cf 10ac  Crystal CS4281 PCI Audio",
-"		10cf 10ad  Crystal CS4281 PCI Audio",
-"		10cf 10b4  Crystal CS4281 PCI Audio",
-"		1179 0001  Crystal CS4281 PCI Audio",
-"		14c0 000c  Crystal CS4281 PCI Audio",
-"1014  IBM",
-"	0002  PCI to MCA Bridge",
-"	0005  Alta Lite",
-"	0007  Alta MP",
-"	000a  Fire Coral",
-"	0017  CPU to PCI Bridge",
-"	0018  TR Auto LANstreamer",
-"	001b  GXT-150P",
-"	001c  Carrera",
-"	001d  82G2675",
-"	0020  GXT1000 Graphics Adapter",
-"	0022  IBM27-82351",
-"	002d  Python",
-"	002e  SCSI RAID Adapter [ServeRAID]",
-"		1014 002e  ServeRAID-3x",
-"		1014 022e  ServeRAID-4H",
-"	0031  2 Port Serial Adapter",
-"		1014 0031  2721 WAN IOA - 2 Port Sync Serial Adapter",
-"	0036  Miami",
-"	0037  82660 CPU to PCI Bridge",
-"	003a  CPU to PCI Bridge",
-"	003c  GXT250P/GXT255P Graphics Adapter",
-"	003e  16/4 Token ring UTP/STP controller",
-"		1014 003e  Token-Ring Adapter",
-"		1014 00cd  Token-Ring Adapter + Wake-On-LAN",
-"		1014 00ce  16/4 Token-Ring Adapter 2",
-"		1014 00cf  16/4 Token-Ring Adapter Special",
-"		1014 00e4  High-Speed 100/16/4 Token-Ring Adapter",
-"		1014 00e5  16/4 Token-Ring Adapter 2 + Wake-On-LAN",
-"		1014 016d  iSeries 2744 Card",
-"	0045  SSA Adapter",
-"	0046  MPIC interrupt controller",
-"	0047  PCI to PCI Bridge",
-"	0048  PCI to PCI Bridge",
-"	0049  Warhead SCSI Controller",
-"	004e  ATM Controller (14104e00)",
-"	004f  ATM Controller (14104f00)",
-"	0050  ATM Controller (14105000)",
-"	0053  25 MBit ATM Controller",
-"	0054  GXT500P/GXT550P Graphics Adapter",
-"	0057  MPEG PCI Bridge",
-"	005c  i82557B 10/100",
-"	005e  GXT800P Graphics Adapter",
-"	007c  ATM Controller (14107c00)",
-"	007d  3780IDSP [MWave]",
-"	008b  EADS PCI to PCI Bridge",
-"	008e  GXT3000P Graphics Adapter",
-"	0090  GXT 3000P",
-"		1014 008e  GXT-3000P",
-"	0091  SSA Adapter",
-"	0095  20H2999 PCI Docking Bridge",
-"	0096  Chukar chipset SCSI controller",
-"		1014 0097  iSeries 2778 DASD IOA",
-"		1014 0098  iSeries 2763 DASD IOA",
-"		1014 0099  iSeries 2748 DASD IOA",
-"	009f  PCI 4758 Cryptographic Accelerator",
-"	00a5  ATM Controller (1410a500)",
-"	00a6  ATM 155MBPS MM Controller (1410a600)",
-"	00b7  256-bit Graphics Rasterizer [Fire GL1]",
-"		1092 00b8  FireGL1 AGP 32Mb",
-"	00b8  GXT2000P Graphics Adapter",
-"	00be  ATM 622MBPS Controller (1410be00)",
-"	00dc  Advanced Systems Management Adapter (ASMA)",
-"	00fc  CPC710 Dual Bridge and Memory Controller (PCI-64)",
-"	0104  Gigabit Ethernet-SX Adapter",
-"	0105  CPC710 Dual Bridge and Memory Controller (PCI-32)",
-"	010f  Remote Supervisor Adapter (RSA)",
-"	0142  Yotta Video Compositor Input",
-"		1014 0143  Yotta Input Controller (ytin)",
-"	0144  Yotta Video Compositor Output",
-"		1014 0145  Yotta Output Controller (ytout)",
-"	0156  405GP PLB to PCI Bridge",
-"	015e  622Mbps ATM PCI Adapter",
-"	0160  64bit/66MHz PCI ATM 155 MMF",
-"	016e  GXT4000P Graphics Adapter",
-"	0170  GXT6000P Graphics Adapter",
-"	017d  GXT300P Graphics Adapter",
-"	0180  Snipe chipset SCSI controller",
-"		1014 0241  iSeries 2757 DASD IOA",
-"		1014 0264  Quad Channel PCI-X U320 SCSI RAID Adapter (2780)",
-"	0188  EADS-X PCI-X to PCI-X Bridge",
-"	01a7  PCI-X to PCI-X Bridge",
-"	01bd  ServeRAID Controller",
-"		1014 01be  ServeRAID-4M",
-"		1014 01bf  ServeRAID-4L",
-"		1014 0208  ServeRAID-4Mx",
-"		1014 020e  ServeRAID-4Lx",
-"		1014 022e  ServeRAID-4H",
-"		1014 0258  ServeRAID-5i",
-"		1014 0259  ServeRAID-5i",
-"	01c1  64bit/66MHz PCI ATM 155 UTP",
-"	01e6  Cryptographic Accelerator",
-"	01ff  10/100 Mbps Ethernet",
-"	0219  Multiport Serial Adapter",
-"		1014 021a  Dual RVX",
-"		1014 0251  Internal Modem/RVX",
-"		1014 0252  Quad Internal Modem",
-"	021b  GXT6500P Graphics Adapter",
-"	021c  GXT4500P Graphics Adapter",
-"	0233  GXT135P Graphics Adapter",
-"	0266  PCI-X Dual Channel SCSI",
-"	0268  Gigabit Ethernet-SX Adapter (PCI-X)",
-"	0269  10/100/1000 Base-TX Ethernet Adapter (PCI-X)",
-"	028c  Citrine chipset SCSI controller",
-"		1014 028d  Dual Channel PCI-X DDR SAS RAID Adapter (572E)",
-"		1014 02be  Dual Channel PCI-X DDR U320 SCSI RAID Adapter (571B)",
-"		1014 02c0  Dual Channel PCI-X DDR U320 SCSI Adapter (571A)",
-"		1014 030d  PCI-X DDR Auxiliary Cache Adapter (575B)",
-"	02a1  Calgary PCI-X Host Bridge",
-"	02bd  Obsidian chipset SCSI controller",
-"		1014 02c1  PCI-X DDR 3Gb SAS Adapter (572A/572C)",
-"		1014 02c2  PCI-X DDR 3Gb SAS RAID Adapter (572B/571D)",
-"	0302  Winnipeg PCI-X Host Bridge",
-"	0314  ZISC 036 Neural accelerator card",
-"	3022  QLA3022 Network Adapter",
-"	4022  QLA3022 Network Adapter",
-"	ffff  MPIC-2 interrupt controller",
-"1015  LSI Logic Corp of Canada",
-"1016  ICL Personal Systems",
-"1017  SPEA Software AG",
-"	5343  SPEA 3D Accelerator",
-"1018  Unisys Systems",
-"1019  Elitegroup Computer Systems",
-"101a  AT&T GIS (NCR)",
-"	0005  100VG ethernet",
-"101b  Vitesse Semiconductor",
-"101c  Western Digital",
-"	0193  33C193A",
-"	0196  33C196A",
-"	0197  33C197A",
-"	0296  33C296A",
-"	3193  7193",
-"	3197  7197",
-"	3296  33C296A",
-"	4296  34C296",
-"	9710  Pipeline 9710",
-"	9712  Pipeline 9712",
-"	c24a  90C",
-"101e  American Megatrends Inc.",
-"	0009  MegaRAID 428 Ultra RAID Controller (rev 03)",
-"	1960  MegaRAID",
-"		101e 0471  MegaRAID 471 Enterprise 1600 RAID Controller",
-"		101e 0475  MegaRAID 475 Express 500/500LC RAID Controller",
-"		101e 0477  MegaRAID 477 Elite 3100 RAID Controller",
-"		101e 0493  MegaRAID 493 Elite 1600 RAID Controller",
-"		101e 0494  MegaRAID 494 Elite 1650 RAID Controller",
-"		101e 0503  MegaRAID 503 Enterprise 1650 RAID Controller",
-"		101e 0511  MegaRAID 511 i4 IDE RAID Controller",
-"		101e 0522  MegaRAID 522 i4133 RAID Controller",
-"		1028 0471  PowerEdge RAID Controller 3/QC",
-"		1028 0475  PowerEdge RAID Controller 3/SC",
-"		1028 0493  PowerEdge RAID Controller 3/DC",
-"		1028 0511  PowerEdge Cost Effective RAID Controller ATA100/4Ch",
-"		103c 60e7  NetRAID-1M",
-"	9010  MegaRAID 428 Ultra RAID Controller",
-"	9030  EIDE Controller",
-"	9031  EIDE Controller",
-"	9032  EIDE & SCSI Controller",
-"	9033  SCSI Controller",
-"	9040  Multimedia card",
-"	9060  MegaRAID 434 Ultra GT RAID Controller",
-"	9063  MegaRAC",
-"		101e 0767  Dell Remote Assistant Card 2",
-"101f  PictureTel",
-"1020  Hitachi Computer Products",
-"1021  OKI Electric Industry Co. Ltd.",
-"1022  Advanced Micro Devices [AMD]",
-"	1100  K8 [Athlon64/Opteron] HyperTransport Technology Configuration",
-"	1101  K8 [Athlon64/Opteron] Address Map",
-"	1102  K8 [Athlon64/Opteron] DRAM Controller",
-"	1103  K8 [Athlon64/Opteron] Miscellaneous Control",
-"	2000  79c970 [PCnet32 LANCE]",
-"		1014 2000  NetFinity 10/100 Fast Ethernet",
-"		1022 2000  PCnet - Fast 79C971",
-"		103c 104c  Ethernet with LAN remote power Adapter",
-"		103c 1064  Ethernet with LAN remote power Adapter",
-"		103c 1065  Ethernet with LAN remote power Adapter",
-"		103c 106c  Ethernet with LAN remote power Adapter",
-"		103c 106e  Ethernet with LAN remote power Adapter",
-"		103c 10ea  Ethernet with LAN remote power Adapter",
-"		1113 1220  EN1220 10/100 Fast Ethernet",
-"		1259 2450  AT-2450 10/100 Fast Ethernet",
-"		1259 2454  AT-2450v4 10Mb Ethernet Adapter",
-"		1259 2700  AT-2700TX 10/100 Fast Ethernet",
-"		1259 2701  AT-2700FX 100Mb Ethernet",
-"		1259 2702  AT-2700FTX 10/100 Mb Fiber/Copper Fast Ethernet",
-"		1259 2703  AT-2701FX",
-"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
-"		4c53 1010  CP5/CR6 mainboard",
-"		4c53 1020  VR6 mainboard",
-"		4c53 1030  PC5 mainboard",
-"		4c53 1040  CL7 mainboard",
-"		4c53 1060  PC7 mainboard",
-"	2001  79c978 [HomePNA]",
-"		1092 0a78  Multimedia Home Network Adapter",
-"		1668 0299  ActionLink Home Network Adapter",
-"	2003  Am 1771 MBW [Alchemy]",
-"	2020  53c974 [PCscsi]",
-"	2040  79c974",
-"	2081  Geode LX Video",
-"	2082  Geode LX AES Security Block",
-"	208f  CS5536 GeodeLink PCI South Bridge",
-"	2090  CS5536 [Geode companion] ISA",
-"	2091  CS5536 [Geode companion] FLASH",
-"	2093  CS5536 [Geode companion] Audio",
-"	2094  CS5536 [Geode companion] OHC",
-"	2095  CS5536 [Geode companion] EHC",
-"	2096  CS5536 [Geode companion] UDC",
-"	2097  CS5536 [Geode companion] UOC",
-"	209a  CS5536 [Geode companion] IDE",
-"	3000  ELanSC520 Microcontroller",
-"	7006  AMD-751 [Irongate] System Controller",
-"	7007  AMD-751 [Irongate] AGP Bridge",
-"	700a  AMD-IGR4 AGP Host to PCI Bridge",
-"	700b  AMD-IGR4 PCI to PCI Bridge",
-"	700c  AMD-760 MP [IGD4-2P] System Controller",
-"	700d  AMD-760 MP [IGD4-2P] AGP Bridge",
-"	700e  AMD-760 [IGD4-1P] System Controller",
-"	700f  AMD-760 [IGD4-1P] AGP Bridge",
-"	7400  AMD-755 [Cobra] ISA",
-"	7401  AMD-755 [Cobra] IDE",
-"	7403  AMD-755 [Cobra] ACPI",
-"	7404  AMD-755 [Cobra] USB",
-"	7408  AMD-756 [Viper] ISA",
-"	7409  AMD-756 [Viper] IDE",
-"	740b  AMD-756 [Viper] ACPI",
-"	740c  AMD-756 [Viper] USB",
-"	7410  AMD-766 [ViperPlus] ISA",
-"	7411  AMD-766 [ViperPlus] IDE",
-"	7413  AMD-766 [ViperPlus] ACPI",
-"	7414  AMD-766 [ViperPlus] USB",
-"	7440  AMD-768 [Opus] ISA",
-"		1043 8044  A7M-D Mainboard",
-"	7441  AMD-768 [Opus] IDE",
-"	7443  AMD-768 [Opus] ACPI",
-"		1043 8044  A7M-D Mainboard",
-"	7445  AMD-768 [Opus] Audio",
-"	7446  AMD-768 [Opus] MC97 Modem (Smart Link HAMR5600 compatible)",
-"	7448  AMD-768 [Opus] PCI",
-"	7449  AMD-768 [Opus] USB",
-"	7450  AMD-8131 PCI-X Bridge",
-"	7451  AMD-8131 PCI-X IOAPIC",
-"	7454  AMD-8151 System Controller",
-"	7455  AMD-8151 AGP Bridge",
-"	7458  AMD-8132 PCI-X Bridge",
-"	7459  AMD-8132 PCI-X IOAPIC",
-"	7460  AMD-8111 PCI",
-"		161f 3017  HDAMB",
-"	7461  AMD-8111 USB",
-"	7462  AMD-8111 Ethernet",
-"	7464  AMD-8111 USB",
-"		161f 3017  HDAMB",
-"	7468  AMD-8111 LPC",
-"		161f 3017  HDAMB",
-"	7469  AMD-8111 IDE",
-"		1022 2b80  AMD-8111 IDE [Quartet]",
-"		161f 3017  HDAMB",
-"	746a  AMD-8111 SMBus 2.0",
-"	746b  AMD-8111 ACPI",
-"		161f 3017  HDAMB",
-"	746d  AMD-8111 AC97 Audio",
-"		161f 3017  HDAMB",
-"	746e  AMD-8111 MC97 Modem",
-"	756b  AMD-8111 ACPI",
-"1023  Trident Microsystems",
-"	0194  82C194",
-"	2000  4DWave DX",
-"	2001  4DWave NX",
-"		122d 1400  Trident PCI288-Q3DII (NX)",
-"	2100  CyberBlade XP4m32",
-"	2200  XGI Volari XP5",
-"	8400  CyberBlade/i7",
-"		1023 8400  CyberBlade i7 AGP",
-"	8420  CyberBlade/i7d",
-"		0e11 b15a  CyberBlade i7 AGP",
-"	8500  CyberBlade/i1",
-"	8520  CyberBlade i1",
-"		0e11 b16e  CyberBlade i1 AGP",
-"		1023 8520  CyberBlade i1 AGP",
-"	8620  CyberBlade/i1",
-"		1014 0502  ThinkPad R30/T30",
-"		1014 1025  Travelmate 352TE",
-"	8820  CyberBlade XPAi1",
-"	9320  TGUI 9320",
-"	9350  GUI Accelerator",
-"	9360  Flat panel GUI Accelerator",
-"	9382  Cyber 9382 [Reference design]",
-"	9383  Cyber 9383 [Reference design]",
-"	9385  Cyber 9385 [Reference design]",
-"	9386  Cyber 9386",
-"	9388  Cyber 9388",
-"	9397  Cyber 9397",
-"	939a  Cyber 9397DVD",
-"	9420  TGUI 9420",
-"	9430  TGUI 9430",
-"	9440  TGUI 9440",
-"	9460  TGUI 9460",
-"	9470  TGUI 9470",
-"	9520  Cyber 9520",
-"	9525  Cyber 9525",
-"		10cf 1094  Lifebook C6155",
-"	9540  Cyber 9540",
-"	9660  TGUI 9660/938x/968x",
-"	9680  TGUI 9680",
-"	9682  TGUI 9682",
-"	9683  TGUI 9683",
-"	9685  ProVIDIA 9685",
-"	9750  3DImage 9750",
-"		1014 9750  3DImage 9750",
-"		1023 9750  3DImage 9750",
-"	9753  TGUI 9753",
-"	9754  TGUI 9754",
-"	9759  TGUI 975",
-"	9783  TGUI 9783",
-"	9785  TGUI 9785",
-"	9850  3DImage 9850",
-"	9880  Blade 3D PCI/AGP",
-"		1023 9880  Blade 3D",
-"	9910  CyberBlade/XP",
-"	9930  CyberBlade/XPm",
-"1024  Zenith Data Systems",
-"1025  Acer Incorporated [ALI]",
-"	1435  M1435",
-"	1445  M1445",
-"	1449  M1449",
-"	1451  M1451",
-"	1461  M1461",
-"	1489  M1489",
-"	1511  M1511",
-"	1512  ALI M1512 Aladdin",
-"	1513  M1513",
-"	1521  ALI M1521 Aladdin III CPU Bridge",
-"		10b9 1521  ALI M1521 Aladdin III CPU Bridge",
-"	1523  ALI M1523 ISA Bridge",
-"		10b9 1523  ALI M1523 ISA Bridge",
-"	1531  M1531 Northbridge [Aladdin IV/IV+]",
-"	1533  M1533 PCI-to-ISA Bridge",
-"		10b9 1533  ALI M1533 Aladdin IV/V ISA South Bridge",
-"	1535  M1535 PCI Bridge + Super I/O + FIR",
-"	1541  M1541 Northbridge [Aladdin V]",
-"		10b9 1541  ALI M1541 Aladdin V/V+ AGP+PCI North Bridge",
-"	1542  M1542 Northbridge [Aladdin V]",
-"	1543  M1543 PCI-to-ISA Bridge + Super I/O + FIR",
-"	1561  M1561 Northbridge [Aladdin 7]",
-"	1621  M1621 Northbridge [Aladdin-Pro II]",
-"	1631  M1631 Northbridge+3D Graphics [Aladdin TNT2]",
-"	1641  M1641 Northbridge [Aladdin-Pro IV]",
-"	1647  M1647 [MaGiK1] PCI North Bridge",
-"	1671  M1671 Northbridge [ALADDiN-P4]",
-"	1672  Northbridge [CyberALADDiN-P4]",
-"	3141  M3141",
-"	3143  M3143",
-"	3145  M3145",
-"	3147  M3147",
-"	3149  M3149",
-"	3151  M3151",
-"	3307  M3307 MPEG-I Video Controller",
-"	3309  M3309 MPEG-II Video w/ Software Audio Decoder",
-"	3321  M3321 MPEG-II Audio/Video Decoder",
-"	5212  M4803",
-"	5215  ALI PCI EIDE Controller",
-"	5217  M5217H",
-"	5219  M5219",
-"	5225  M5225",
-"	5229  M5229",
-"	5235  M5235",
-"	5237  M5237 PCI USB Host Controller",
-"	5240  EIDE Controller",
-"	5241  PCMCIA Bridge",
-"	5242  General Purpose Controller",
-"	5243  PCI to PCI Bridge Controller",
-"	5244  Floppy Disk Controller",
-"	5247  M1541 PCI to PCI Bridge",
-"	5251  M5251 P1394 Controller",
-"	5427  PCI to AGP Bridge",
-"	5451  M5451 PCI AC-Link Controller Audio Device",
-"	5453  M5453 PCI AC-Link Controller Modem Device",
-"	7101  M7101 PCI PMU Power Management Controller",
-"		10b9 7101  M7101 PCI PMU Power Management Controller",
-"1028  Dell",
-"	0001  PowerEdge Expandable RAID Controller 2/Si",
-"		1028 0001  PowerEdge 2400",
-"	0002  PowerEdge Expandable RAID Controller 3/Di",
-"		1028 0002  PowerEdge 4400",
-"	0003  PowerEdge Expandable RAID Controller 3/Si",
-"		1028 0003  PowerEdge 2450",
-"	0006  PowerEdge Expandable RAID Controller 3/Di",
-"	0007  Remote Access Card III",
-"	0008  Remote Access Card III",
-"	0009  Remote Access Card III: BMC/SMIC device not present",
-"	000a  PowerEdge Expandable RAID Controller 3/Di",
-"	000c  Embedded Remote Access or ERA/O",
-"	000d  Embedded Remote Access: BMC/SMIC device",
-"	000e  PowerEdge Expandable RAID controller 4/Di",
-"	000f  PowerEdge Expandable RAID controller 4/Di",
-"	0010  Remote Access Card 4",
-"	0011  Remote Access Card 4 Daughter Card",
-"	0012  Remote Access Card 4 Daughter Card Virtual UART",
-"	0013  PowerEdge Expandable RAID controller 4",
-"		1028 016c  PowerEdge Expandable RAID Controller 4e/Si",
-"		1028 016d  PowerEdge Expandable RAID Controller 4e/Di",
-"		1028 016e  PowerEdge Expandable RAID Controller 4e/Di",
-"		1028 016f  PowerEdge Expandable RAID Controller 4e/Di",
-"		1028 0170  PowerEdge Expandable RAID Controller 4e/Di",
-"	0014  Remote Access Card 4 Daughter Card SMIC interface",
-"	0015  PowerEdge Expandable RAID controller 5",
-"1029  Siemens Nixdorf IS",
-"102a  LSI Logic",
-"	0000  HYDRA",
-"	0010  ASPEN",
-"	001f  AHA-2940U2/U2W /7890/7891 SCSI Controllers",
-"		9005 000f  2940U2W SCSI Controller",
-"		9005 0106  2940U2W SCSI Controller",
-"		9005 a180  2940U2W SCSI Controller",
-"	00c5  AIC-7899 U160/m SCSI Controller",
-"		1028 00c5  PowerEdge 2550/2650/4600",
-"	00cf  AIC-7899P U160/m",
-"		1028 0106  PowerEdge 4600",
-"		1028 0121  PowerEdge 2650",
-"102b  Matrox Graphics, Inc.",
-"	0010  MGA-I [Impression?]",
-"	0100  MGA 1064SG [Mystique]",
-"	0518  MGA-II [Athena]",
-"	0519  MGA 2064W [Millennium]",
-"	051a  MGA 1064SG [Mystique]",
-"		102b 0100  MGA-1064SG Mystique",
-"		102b 1100  MGA-1084SG Mystique",
-"		102b 1200  MGA-1084SG Mystique",
-"		1100 102b  MGA-1084SG Mystique",
-"		110a 0018  Scenic Pro C5 (D1025)",
-"	051b  MGA 2164W [Millennium II]",
-"		102b 051b  MGA-2164W Millennium II",
-"		102b 1100  MGA-2164W Millennium II",
-"		102b 1200  MGA-2164W Millennium II",
-"	051e  MGA 1064SG [Mystique] AGP",
-"	051f  MGA 2164W [Millennium II] AGP",
-"	0520  MGA G200",
-"		102b dbc2  G200 Multi-Monitor",
-"		102b dbc8  G200 Multi-Monitor",
-"		102b dbe2  G200 Multi-Monitor",
-"		102b dbe8  G200 Multi-Monitor",
-"		102b ff03  Millennium G200 SD",
-"		102b ff04  Marvel G200",
-"	0521  MGA G200 AGP",
-"		1014 ff03  Millennium G200 AGP",
-"		102b 48e9  Mystique G200 AGP",
-"		102b 48f8  Millennium G200 SD AGP",
-"		102b 4a60  Millennium G200 LE AGP",
-"		102b 4a64  Millennium G200 AGP",
-"		102b c93c  Millennium G200 AGP",
-"		102b c9b0  Millennium G200 AGP",
-"		102b c9bc  Millennium G200 AGP",
-"		102b ca60  Millennium G250 LE AGP",
-"		102b ca6c  Millennium G250 AGP",
-"		102b dbbc  Millennium G200 AGP",
-"		102b dbc2  Millennium G200 MMS (Dual G200)",
-"		102b dbc3  G200 Multi-Monitor",
-"		102b dbc8  Millennium G200 MMS (Dual G200)",
-"		102b dbd2  G200 Multi-Monitor",
-"		102b dbd3  G200 Multi-Monitor",
-"		102b dbd4  G200 Multi-Monitor",
-"		102b dbd5  G200 Multi-Monitor",
-"		102b dbd8  G200 Multi-Monitor",
-"		102b dbd9  G200 Multi-Monitor",
-"		102b dbe2  Millennium G200 MMS (Quad G200)",
-"		102b dbe3  G200 Multi-Monitor",
-"		102b dbe8  Millennium G200 MMS (Quad G200)",
-"		102b dbf2  G200 Multi-Monitor",
-"		102b dbf3  G200 Multi-Monitor",
-"		102b dbf4  G200 Multi-Monitor",
-"		102b dbf5  G200 Multi-Monitor",
-"		102b dbf8  G200 Multi-Monitor",
-"		102b dbf9  G200 Multi-Monitor",
-"		102b f806  Mystique G200 Video AGP",
-"		102b ff00  MGA-G200 AGP",
-"		102b ff02  Mystique G200 AGP",
-"		102b ff03  Millennium G200 AGP",
-"		102b ff04  Marvel G200 AGP",
-"		110a 0032  MGA-G200 AGP",
-"	0522  MGA G200e [Pilot] ServerEngines (SEP1)",
-"	0525  MGA G400/G450",
-"		0e11 b16f  MGA-G400 AGP",
-"		102b 0328  Millennium G400 16Mb SDRAM",
-"		102b 0338  Millennium G400 16Mb SDRAM",
-"		102b 0378  Millennium G400 32Mb SDRAM",
-"		102b 0541  Millennium G450 Dual Head",
-"		102b 0542  Millennium G450 Dual Head LX",
-"		102b 0543  Millennium G450 Single Head LX",
-"		102b 0641  Millennium G450 32Mb SDRAM Dual Head",
-"		102b 0642  Millennium G450 32Mb SDRAM Dual Head LX",
-"		102b 0643  Millennium G450 32Mb SDRAM Single Head LX",
-"		102b 07c0  Millennium G450 Dual Head LE",
-"		102b 07c1  Millennium G450 SDR Dual Head LE",
-"		102b 0d41  Millennium G450 Dual Head PCI",
-"		102b 0d42  Millennium G450 Dual Head LX PCI",
-"		102b 0d43  Millennium G450 32Mb Dual Head PCI",
-"		102b 0e00  Marvel G450 eTV",
-"		102b 0e01  Marvel G450 eTV",
-"		102b 0e02  Marvel G450 eTV",
-"		102b 0e03  Marvel G450 eTV",
-"		102b 0f80  Millennium G450 Low Profile",
-"		102b 0f81  Millennium G450 Low Profile",
-"		102b 0f82  Millennium G450 Low Profile DVI",
-"		102b 0f83  Millennium G450 Low Profile DVI",
-"		102b 19d8  Millennium G400 16Mb SGRAM",
-"		102b 19f8  Millennium G400 32Mb SGRAM",
-"		102b 2159  Millennium G400 Dual Head 16Mb",
-"		102b 2179  Millennium G400 MAX/Dual Head 32Mb",
-"		102b 217d  Millennium G400 Dual Head Max",
-"		102b 23c0  Millennium G450",
-"		102b 23c1  Millennium G450",
-"		102b 23c2  Millennium G450 DVI",
-"		102b 23c3  Millennium G450 DVI",
-"		102b 2f58  Millennium G400",
-"		102b 2f78  Millennium G400",
-"		102b 3693  Marvel G400 AGP",
-"		102b 5dd0  4Sight II",
-"		102b 5f50  4Sight II",
-"		102b 5f51  4Sight II",
-"		102b 5f52  4Sight II",
-"		102b 9010  Millennium G400 Dual Head",
-"		1458 0400  GA-G400",
-"		1705 0001  Millennium G450 32MB SGRAM",
-"		1705 0002  Millennium G450 16MB SGRAM",
-"		1705 0003  Millennium G450 32MB",
-"		1705 0004  Millennium G450 16MB",
-"	0527  MGA Parhelia AGP",
-"		102b 0840  Parhelia 128Mb",
-"		102b 0850  Parhelia 256MB AGP 4X",
-"	0528  Parhelia 8X",
-"		102b 1020  Parhelia 128MB",
-"		102b 1030  Parhelia 256 MB Dual DVI",
-"		102b 14e1  Parhelia PCI 256MB",
-"		102b 2021  QID Pro",
-"	0d10  MGA Ultima/Impression",
-"	1000  MGA G100 [Productiva]",
-"		102b ff01  Productiva G100",
-"		102b ff05  Productiva G100 Multi-Monitor",
-"	1001  MGA G100 [Productiva] AGP",
-"		102b 1001  MGA-G100 AGP",
-"		102b ff00  MGA-G100 AGP",
-"		102b ff01  MGA-G100 Productiva AGP",
-"		102b ff03  Millennium G100 AGP",
-"		102b ff04  MGA-G100 AGP",
-"		102b ff05  MGA-G100 Productiva AGP Multi-Monitor",
-"		110a 001e  MGA-G100 AGP",
-"	2007  MGA Mistral",
-"	2527  MGA G550 AGP",
-"		102b 0f83  Millennium G550",
-"		102b 0f84  Millennium G550 Dual Head DDR 32Mb",
-"		102b 1e41  Millennium G550",
-"	2537  Millenium P650/P750",
-"		102b 1820  Millennium P750 64MB",
-"		102b 1830  Millennium P650 64MB",
-"		102b 1c10  QID 128MB",
-"		102b 2811  Millennium P650 Low-profile PCI 64MB",
-"		102b 2c11  QID Low-profile PCI",
-"	2538  Millenium P650 PCIe",
-"		102b 08c7  Millennium P650 PCIe 128MB",
-"		102b 0907  Millennium P650 PCIe 64MB",
-"		102b 1047  Millennium P650 LP PCIe 128MB",
-"		102b 1087  Millennium P650 LP PCIe 64MB",
-"		102b 2538  Parhelia APVe",
-"		102b 3007  QID Low-profile PCIe",
-"	4536  VIA Framegrabber",
-"	6573  Shark 10/100 Multiport SwitchNIC",
-"102c  Chips and Technologies",
-"	00b8  F64310",
-"	00c0  F69000 HiQVideo",
-"		102c 00c0  F69000 HiQVideo",
-"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
-"		4c53 1010  CP5/CR6 mainboard",
-"		4c53 1020  VR6 mainboard",
-"		4c53 1030  PC5 mainboard",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1051  CE7 mainboard",
-"	00d0  F65545",
-"	00d8  F65545",
-"	00dc  F65548",
-"	00e0  F65550",
-"	00e4  F65554",
-"	00e5  F65555 HiQVPro",
-"		0e11 b049  Armada 1700 Laptop Display Controller",
-"		1179 0001  Satellite Pro",
-"	00f0  F68554",
-"	00f4  F68554 HiQVision",
-"	00f5  F68555",
-"	0c30  F69030",
-"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1051  CE7 mainboard",
-"		4c53 1080  CT8 mainboard",
-"102d  Wyse Technology Inc.",
-"	50dc  3328 Audio",
-"102e  Olivetti Advanced Technology",
-"102f  Toshiba America",
-"	0009  r4x00",
-"	000a  TX3927 MIPS RISC PCI Controller",
-"	0020  ATM Meteor 155",
-"		102f 00f8  ATM Meteor 155",
-"	0030  TC35815CF PCI 10/100 Mbit Ethernet Controller",
-"	0031  TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL",
-"	0105  TC86C001 [goku-s] IDE",
-"	0106  TC86C001 [goku-s] USB 1.1 Host",
-"	0107  TC86C001 [goku-s] USB Device Controller",
-"	0108  TC86C001 [goku-s] I2C/SIO/GPIO Controller",
-"	0180  TX4927/38 MIPS RISC PCI Controller",
-"	0181  TX4925 MIPS RISC PCI Controller",
-"	0182  TX4937 MIPS RISC PCI Controller",
-"1030  TMC Research",
-"1031  Miro Computer Products AG",
-"	5601  DC20 ASIC",
-"	5607  Video I/O & motion JPEG compressor",
-"	5631  Media 3D",
-"	6057  MiroVideo DC10/DC30+",
-"1032  Compaq",
-"1033  NEC Corporation",
-"	0000  Vr4181A USB Host or Function Control Unit",
-"	0001  PCI to 486-like bus Bridge",
-"	0002  PCI to VL98 Bridge",
-"	0003  ATM Controller",
-"	0004  R4000 PCI Bridge",
-"	0005  PCI to 486-like bus Bridge",
-"	0006  PC-9800 Graphic Accelerator",
-"	0007  PCI to UX-Bus Bridge",
-"	0008  PC-9800 Graphic Accelerator",
-"	0009  PCI to PC9800 Core-Graph Bridge",
-"	0016  PCI to VL Bridge",
-"	001a  [Nile II]",
-"	0021  Vrc4373 [Nile I]",
-"	0029  PowerVR PCX1",
-"	002a  PowerVR 3D",
-"	002c  Star Alpha 2",
-"	002d  PCI to C-bus Bridge",
-"	0035  USB",
-"		1033 0035  Hama USB 2.0 CardBus",
-"		1179 0001  USB",
-"		12ee 7000  Root Hub",
-"		14c2 0105  PTI-205N USB 2.0 Host Controller",
-"		1799 0001  Root Hub",
-"		1931 000a  GlobeTrotter Fusion Quad Lite (PPP data)",
-"		1931 000b  GlobeTrotter Fusion Quad Lite (GSM data)",
-"		807d 0035  PCI-USB2 (OHCI subsystem)",
-"	003b  PCI to C-bus Bridge",
-"	003e  NAPCCARD Cardbus Controller",
-"	0046  PowerVR PCX2 [midas]",
-"	005a  Vrc5074 [Nile 4]",
-"	0063  Firewarden",
-"	0067  PowerVR Neon 250 Chipset",
-"		1010 0020  PowerVR Neon 250 AGP 32Mb",
-"		1010 0080  PowerVR Neon 250 AGP 16Mb",
-"		1010 0088  PowerVR Neon 250 16Mb",
-"		1010 0090  PowerVR Neon 250 AGP 16Mb",
-"		1010 0098  PowerVR Neon 250 16Mb",
-"		1010 00a0  PowerVR Neon 250 AGP 32Mb",
-"		1010 00a8  PowerVR Neon 250 32Mb",
-"		1010 0120  PowerVR Neon 250 AGP 32Mb",
-"	0072  uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr",
-"	0074  56k Voice Modem",
-"		1033 8014  RCV56ACF 56k Voice Modem",
-"	009b  Vrc5476",
-"	00a5  VRC4173",
-"	00a6  VRC5477 AC97",
-"	00cd  IEEE 1394 [OrangeLink] Host Controller",
-"		12ee 8011  Root hub",
-"	00ce  IEEE 1394 Host Controller",
-"	00df  Vr4131",
-"	00e0  USB 2.0",
-"		12ee 7001  Root hub",
-"		14c2 0205  PTI-205N USB 2.0 Host Controller",
-"		1799 0002  Root Hub",
-"		807d 1043  PCI-USB2 (EHCI subsystem)",
-"	00e7  IEEE 1394 Host Controller",
-"	00f2  uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr",
-"	00f3  uPD6113x Multimedia Decoder/Processor [EMMA2]",
-"	010c  VR7701",
-"	0125  uPD720400 PCI Express - PCI/PCI-X Bridge",
-"1034  Framatome Connectors USA Inc.",
-"1035  Comp. & Comm. Research Lab",
-"1036  Future Domain Corp.",
-"	0000  TMC-18C30 [36C70]",
-"1037  Hitachi Micro Systems",
-"1038  AMP, Inc",
-"1039  Silicon Integrated Systems [SiS]",
-"	0001  Virtual PCI-to-PCI bridge (AGP)",
-"	0002  SG86C202",
-"	0003  SiS AGP Port (virtual PCI-to-PCI bridge)",
-"	0004  PCI-to-PCI bridge",
-"	0006  85C501/2/3",
-"	0008  SiS85C503/5513 (LPC Bridge)",
-"	0009  ACPI",
-"	000a  PCI-to-PCI bridge",
-"	0016  SiS961/2 SMBus Controller",
-"	0018  SiS85C503/5513 (LPC Bridge)",
-"	0180  RAID bus controller 180 SATA/PATA  [SiS]",
-"	0181  SATA",
-"	0182  182 SATA/RAID Controller",
-"	0190  190 Gigabit Ethernet Adapter",
-"	0191  191 Gigabit Ethernet Adapter",
-"	0200  5597/5598/6326 VGA",
-"		1039 0000  SiS5597 SVGA (Shared RAM)",
-"	0204  82C204",
-"	0205  SG86C205",
-"	0300  300/305 PCI/AGP VGA Display Adapter",
-"		107d 2720  Leadtek WinFast VR300",
-"	0310  315H PCI/AGP VGA Display Adapter",
-"	0315  315 PCI/AGP VGA Display Adapter",
-"	0325  315PRO PCI/AGP VGA Display Adapter",
-"	0330  330 [Xabre] PCI/AGP VGA Display Adapter",
-"	0406  85C501/2",
-"	0496  85C496",
-"	0530  530 Host",
-"	0540  540 Host",
-"	0550  550 Host",
-"	0597  5513C",
-"	0601  85C601",
-"	0620  620 Host",
-"	0630  630 Host",
-"	0633  633 Host",
-"	0635  635 Host",
-"	0645  SiS645 Host & Memory & AGP Controller",
-"	0646  SiS645DX Host & Memory & AGP Controller",
-"	0648  645xx",
-"	0650  650/M650 Host",
-"	0651  651 Host",
-"	0655  655 Host",
-"	0660  660 Host",
-"	0661  661FX/M661FX/M661MX Host",
-"	0730  730 Host",
-"	0733  733 Host",
-"	0735  735 Host",
-"	0740  740 Host",
-"	0741  741/741GX/M741 Host",
-"	0745  745 Host",
-"	0746  746 Host",
-"	0755  755 Host",
-"	0760  760/M760 Host",
-"	0761  761/M761 Host",
-"	0900  SiS900 PCI Fast Ethernet",
-"		1019 0a14  K7S5A motherboard",
-"		1039 0900  SiS900 10/100 Ethernet Adapter",
-"		1043 8035  CUSI-FX motherboard",
-"	0961  SiS961 [MuTIOL Media IO]",
-"	0962  SiS962 [MuTIOL Media IO]",
-"	0963  SiS963 [MuTIOL Media IO]",
-"	0964  SiS964 [MuTIOL Media IO]",
-"	0965  SiS965 [MuTIOL Media IO]",
-"	3602  83C602",
-"	5107  5107",
-"	5300  SiS540 PCI Display Adapter",
-"	5315  550 PCI/AGP VGA Display Adapter",
-"	5401  486 PCI Chipset",
-"	5511  5511/5512",
-"	5513  5513 [IDE]",
-"		1019 0970  P6STP-FL motherboard",
-"		1039 5513  SiS5513 EIDE Controller (A,B step)",
-"		1043 8035  CUSI-FX motherboard",
-"	5517  5517",
-"	5571  5571",
-"	5581  5581 Pentium Chipset",
-"	5582  5582",
-"	5591  5591/5592 Host",
-"	5596  5596 Pentium Chipset",
-"	5597  5597 [SiS5582]",
-"	5600  5600 Host",
-"	6204  Video decoder & MPEG interface",
-"	6205  VGA Controller",
-"	6236  6236 3D-AGP",
-"	6300  630/730 PCI/AGP VGA Display Adapter",
-"		1019 0970  P6STP-FL motherboard",
-"		1043 8035  CUSI-FX motherboard",
-"	6306  530/620 PCI/AGP VGA Display Adapter",
-"		1039 6306  SiS530,620 GUI Accelerator+3D",
-"	6325  65x/M650/740 PCI/AGP VGA Display Adapter",
-"	6326  86C326 5598/6326",
-"		1039 6326  SiS6326 GUI Accelerator",
-"		1092 0a50  SpeedStar A50",
-"		1092 0a70  SpeedStar A70",
-"		1092 4910  SpeedStar A70",
-"		1092 4920  SpeedStar A70",
-"		1569 6326  SiS6326 GUI Accelerator",
-"	6330  661/741/760/761 PCI/AGP VGA Display Adapter",
-"		1039 6330  [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter",
-"	7001  USB 1.0 Controller",
-"		1019 0a14  K7S5A motherboard",
-"		1039 7000  Onboard USB Controller",
-"		1462 5470  K7SOM+ 5.2C Motherboard",
-"	7002  USB 2.0 Controller",
-"		1509 7002  Onboard USB Controller",
-"	7007  FireWire Controller",
-"	7012  AC'97 Sound Controller",
-"		15bd 1001  DFI 661FX motherboard",
-"	7013  AC'97 Modem Controller",
-"	7016  SiS7016 PCI Fast Ethernet Adapter",
-"		1039 7016  SiS7016 10/100 Ethernet Adapter",
-"	7018  SiS PCI Audio Accelerator",
-"		1014 01b6  SiS PCI Audio Accelerator",
-"		1014 01b7  SiS PCI Audio Accelerator",
-"		1019 7018  SiS PCI Audio Accelerator",
-"		1025 000e  SiS PCI Audio Accelerator",
-"		1025 0018  SiS PCI Audio Accelerator",
-"		1039 7018  SiS PCI Audio Accelerator",
-"		1043 800b  SiS PCI Audio Accelerator",
-"		1054 7018  SiS PCI Audio Accelerator",
-"		107d 5330  SiS PCI Audio Accelerator",
-"		107d 5350  SiS PCI Audio Accelerator",
-"		1170 3209  SiS PCI Audio Accelerator",
-"		1462 400a  SiS PCI Audio Accelerator",
-"		14a4 2089  SiS PCI Audio Accelerator",
-"		14cd 2194  SiS PCI Audio Accelerator",
-"		14ff 1100  SiS PCI Audio Accelerator",
-"		152d 8808  SiS PCI Audio Accelerator",
-"		1558 1103  SiS PCI Audio Accelerator",
-"		1558 2200  SiS PCI Audio Accelerator",
-"		1563 7018  SiS PCI Audio Accelerator",
-"		15c5 0111  SiS PCI Audio Accelerator",
-"		270f a171  SiS PCI Audio Accelerator",
-"		a0a0 0022  SiS PCI Audio Accelerator",
-"	7019  SiS7019 Audio Accelerator",
-"103a  Seiko Epson Corporation",
-"103b  Tatung Co. of America",
-"103c  Hewlett-Packard Company",
-"	002a  NX9000 Notebook",
-"	1005  A4977A Visualize EG",
-"	1008  Visualize FX",
-"	1028  Tach TL Fibre Channel Host Adapter",
-"	1029  Tach XL2 Fibre Channel Host Adapter",
-"		107e 000f  Interphase 5560 Fibre Channel Adapter",
-"		9004 9210  1Gb/2Gb Family Fibre Channel Controller",
-"		9004 9211  1Gb/2Gb Family Fibre Channel Controller",
-"	102a  Tach TS Fibre Channel Host Adapter",
-"		107e 000e  Interphase 5540/5541 Fibre Channel Adapter",
-"		9004 9110  1Gb/2Gb Family Fibre Channel Controller",
-"		9004 9111  1Gb/2Gb Family Fibre Channel Controller",
-"	1030  J2585A DeskDirect 10/100VG NIC",
-"	1031  J2585B HP 10/100VG PCI LAN Adapter",
-"		103c 1040  J2973A DeskDirect 10BaseT NIC",
-"		103c 1041  J2585B DeskDirect 10/100VG NIC",
-"		103c 1042  J2970A DeskDirect 10BaseT/2 NIC",
-"	1040  J2973A DeskDirect 10BaseT NIC",
-"	1041  J2585B DeskDirect 10/100 NIC",
-"	1042  J2970A DeskDirect 10BaseT/2 NIC",
-"	1048  Diva Serial [GSP] Multiport UART",
-"		103c 1049  Tosca Console",
-"		103c 104a  Tosca Secondary",
-"		103c 104b  Maestro SP2",
-"		103c 1223  Superdome Console",
-"		103c 1226  Keystone SP2",
-"		103c 1227  Powerbar SP2",
-"		103c 1282  Everest SP2",
-"		103c 1301  Diva RMP3",
-"	1054  PCI Local Bus Adapter",
-"	1064  79C970 PCnet Ethernet Controller",
-"	108b  Visualize FXe",
-"	10c1  NetServer Smart IRQ Router",
-"	10ed  TopTools Remote Control",
-"	10f0  rio System Bus Adapter",
-"	10f1  rio I/O Controller",
-"	1200  82557B 10/100 NIC",
-"	1219  NetServer PCI Hot-Plug Controller",
-"	121a  NetServer SMIC Controller",
-"	121b  NetServer Legacy COM Port Decoder",
-"	121c  NetServer PCI COM Port Decoder",
-"	1229  zx1 System Bus Adapter",
-"	122a  zx1 I/O Controller",
-"	122e  zx1 Local Bus Adapter",
-"	127c  sx1000 I/O Controller",
-"	1290  Auxiliary Diva Serial Port",
-"	1291  Auxiliary Diva Serial Port",
-"	12b4  zx1 QuickSilver AGP8x Local Bus Adapter",
-"	12f8  Broadcom BCM4306 802.11b/g Wireless LAN",
-"	12fa  BCM4306 802.11b/g Wireless LAN Controller",
-"	2910  E2910A PCIBus Exerciser",
-"	2925  E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer",
-"	3080  Pavilion ze2028ea",
-"	3085  Realtek RTL8139/8139C/8139C+",
-"	3220  Hewlett-Packard Smart Array P600",
-"	3230  Hewlett-Packard Smart Array Controller",
-"103e  Solliday Engineering",
-"103f  Synopsys/Logic Modeling Group",
-"1040  Accelgraphics Inc.",
-"1041  Computrend",
-"1042  Micron",
-"	1000  PC Tech RZ1000",
-"	1001  PC Tech RZ1001",
-"	3000  Samurai_0",
-"	3010  Samurai_1",
-"	3020  Samurai_IDE",
-"1043  ASUSTeK Computer Inc.",
-"	0675  ISDNLink P-IN100-ST-D",
-"		0675 1704  ISDN Adapter (PCI Bus, D, C)",
-"		0675 1707  ISDN Adapter (PCI Bus, DV, W)",
-"		10cf 105e  ISDN Adapter (PCI Bus, DV, W)",
-"	0c11  A7N8X Motherboard nForce2 IDE/USB/SMBus",
-"	4015  v7100 SDRAM [GeForce2 MX]",
-"	4021  v7100 Combo Deluxe [GeForce2 MX + TV tuner]",
-"	4057  v8200 GeForce 3",
-"	8043  v8240 PAL 128M [P4T] Motherboard",
-"	807b  v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI]",
-"	8095  A7N8X Motherboard nForce2 AC97 Audio",
-"	80ac  A7N8X Motherboard nForce2 AGP/Memory",
-"	80bb  v9180 Magic/T [GeForce4 MX440 AGP 8x 64MB TV-out]",
-"	80c5  nForce3 chipset motherboard [SK8N]",
-"	80df  v9520 Magic/T",
-"	8187  802.11a/b/g Wireless LAN Card",
-"	8188  Tiger Hybrid TV Capture Device",
-"1044  Adaptec (formerly DPT)",
-"	1012  Domino RAID Engine",
-"	a400  SmartCache/Raid I-IV Controller",
-"	a500  PCI Bridge",
-"	a501  SmartRAID V Controller",
-"		1044 c001  PM1554U2 Ultra2 Single Channel",
-"		1044 c002  PM1654U2 Ultra2 Single Channel",
-"		1044 c003  PM1564U3 Ultra3 Single Channel",
-"		1044 c004  PM1564U3 Ultra3 Dual Channel",
-"		1044 c005  PM1554U2 Ultra2 Single Channel (NON ACPI)",
-"		1044 c00a  PM2554U2 Ultra2 Single Channel",
-"		1044 c00b  PM2654U2 Ultra2 Single Channel",
-"		1044 c00c  PM2664U3 Ultra3 Single Channel",
-"		1044 c00d  PM2664U3 Ultra3 Dual Channel",
-"		1044 c00e  PM2554U2 Ultra2 Single Channel (NON ACPI)",
-"		1044 c00f  PM2654U2 Ultra2 Single Channel (NON ACPI)",
-"		1044 c014  PM3754U2 Ultra2 Single Channel (NON ACPI)",
-"		1044 c015  PM3755U2B Ultra2 Single Channel (NON ACPI)",
-"		1044 c016  PM3755F Fibre Channel (NON ACPI)",
-"		1044 c01e  PM3757U2 Ultra2 Single Channel",
-"		1044 c01f  PM3757U2 Ultra2 Dual Channel",
-"		1044 c020  PM3767U3 Ultra3 Dual Channel",
-"		1044 c021  PM3767U3 Ultra3 Quad Channel",
-"		1044 c028  PM2865U3 Ultra3 Single Channel",
-"		1044 c029  PM2865U3 Ultra3 Dual Channel",
-"		1044 c02a  PM2865F Fibre Channel",
-"		1044 c03c  2000S Ultra3 Single Channel",
-"		1044 c03d  2000S Ultra3 Dual Channel",
-"		1044 c03e  2000F Fibre Channel",
-"		1044 c046  3000S Ultra3 Single Channel",
-"		1044 c047  3000S Ultra3 Dual Channel",
-"		1044 c048  3000F Fibre Channel",
-"		1044 c050  5000S Ultra3 Single Channel",
-"		1044 c051  5000S Ultra3 Dual Channel",
-"		1044 c052  5000F Fibre Channel",
-"		1044 c05a  2400A UDMA Four Channel",
-"		1044 c05b  2400A UDMA Four Channel DAC",
-"		1044 c064  3010S Ultra3 Dual Channel",
-"		1044 c065  3410S Ultra160 Four Channel",
-"		1044 c066  3010S Fibre Channel",
-"	a511  SmartRAID V Controller",
-"		1044 c032  ASR-2005S I2O Zero Channel",
-"		1044 c035  ASR-2010S I2O Zero Channel",
-"1045  OPTi Inc.",
-"	a0f8  82C750 [Vendetta] USB Controller",
-"	c101  92C264",
-"	c178  92C178",
-"	c556  82X556 [Viper]",
-"	c557  82C557 [Viper-M]",
-"	c558  82C558 [Viper-M ISA+IDE]",
-"	c567  82C750 [Vendetta], device 0",
-"	c568  82C750 [Vendetta], device 1",
-"	c569  82C579 [Viper XPress+ Chipset]",
-"	c621  82C621 [Viper-M/N+]",
-"	c700  82C700 [FireStar]",
-"	c701  82C701 [FireStar Plus]",
-"	c814  82C814 [Firebridge 1]",
-"	c822  82C822",
-"	c824  82C824",
-"	c825  82C825 [Firebridge 2]",
-"	c832  82C832",
-"	c861  82C861",
-"	c895  82C895",
-"	c935  EV1935 ECTIVA MachOne PCIAudio",
-"	d568  82C825 [Firebridge 2]",
-"	d721  IDE [FireStar]",
-"1046  IPC Corporation, Ltd.",
-"1047  Genoa Systems Corp",
-"1048  Elsa AG",
-"	0c60  Gladiac MX",
-"	0d22  Quadro4 900XGL [ELSA GLoria4 900XGL]",
-"	1000  QuickStep 1000",
-"	3000  QuickStep 3000",
-"	8901  Gloria XL",
-"		1048 0935  GLoria XL (Virge)",
-"1049  Fountain Technologies, Inc.",
-"104a  STMicroelectronics",
-"	0008  STG 2000X",
-"	0009  STG 1764X",
-"	0010  STG4000 [3D Prophet Kyro Series]",
-"	0209  STPC Consumer/Industrial North- and Southbridge",
-"	020a  STPC Atlas/ConsumerS/Consumer IIA Northbridge",
-"	0210  STPC Atlas ISA Bridge",
-"	021a  STPC Consumer S Southbridge",
-"	021b  STPC Consumer IIA Southbridge",
-"	0500  ST70137 [Unicorn] ADSL DMT Transceiver",
-"	0564  STPC Client Northbridge",
-"	0981  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	1746  STG 1764X",
-"	2774  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	3520  MPEG-II decoder card",
-"	55cc  STPC Client Southbridge",
-"104b  BusLogic",
-"	0140  BT-946C (old) [multimaster  01]",
-"	1040  BT-946C (BA80C30) [MultiMaster 10]",
-"	8130  Flashpoint LT",
-"104c  Texas Instruments",
-"	0500  100 MBit LAN Controller",
-"	0508  TMS380C2X Compressor Interface",
-"	1000  Eagle i/f AS",
-"	104c  PCI1510 PC card Cardbus Controller",
-"	3d04  TVP4010 [Permedia]",
-"	3d07  TVP4020 [Permedia 2]",
-"		1011 4d10  Comet",
-"		1040 000f  AccelStar II",
-"		1040 0011  AccelStar II",
-"		1048 0a31  WINNER 2000",
-"		1048 0a32  GLoria Synergy",
-"		1048 0a34  GLoria Synergy",
-"		1048 0a35  GLoria Synergy",
-"		1048 0a36  GLoria Synergy",
-"		1048 0a43  GLoria Synergy",
-"		1048 0a44  GLoria Synergy",
-"		107d 2633  WinFast 3D L2300",
-"		1092 0127  FIRE GL 1000 PRO",
-"		1092 0136  FIRE GL 1000 PRO",
-"		1092 0141  FIRE GL 1000 PRO",
-"		1092 0146  FIRE GL 1000 PRO",
-"		1092 0148  FIRE GL 1000 PRO",
-"		1092 0149  FIRE GL 1000 PRO",
-"		1092 0152  FIRE GL 1000 PRO",
-"		1092 0154  FIRE GL 1000 PRO",
-"		1092 0155  FIRE GL 1000 PRO",
-"		1092 0156  FIRE GL 1000 PRO",
-"		1092 0157  FIRE GL 1000 PRO",
-"		1097 3d01  Jeronimo Pro",
-"		1102 100f  Graphics Blaster Extreme",
-"		3d3d 0100  Reference Permedia 2 3D",
-"	8000  PCILynx/PCILynx2 IEEE 1394 Link Layer Controller",
-"		e4bf 1010  CF1-1-SNARE",
-"		e4bf 1020  CF1-2-SNARE",
-"	8009  FireWire Controller",
-"		104d 8032  8032 OHCI i.LINK (IEEE 1394) Controller",
-"	8017  PCI4410 FireWire Controller",
-"	8019  TSB12LV23 IEEE-1394 Controller",
-"		11bd 000a  Studio DV500-1394",
-"		11bd 000e  Studio DV",
-"		e4bf 1010  CF2-1-CYMBAL",
-"	8020  TSB12LV26 IEEE-1394 Controller (Link)",
-"		11bd 000f  Studio DV500-1394",
-"	8021  TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated)",
-"		104d 80df  Vaio PCG-FX403",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"	8022  TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link)",
-"	8023  TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)",
-"		103c 088c  NC8000 laptop",
-"		1043 808b  K8N4-E Mainboard",
-"	8024  TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)",
-"	8025  TSB82AA2 IEEE-1394b Link Layer Controller",
-"		1458 1000  GA-K8N Ultra-9 Mainboard",
-"	8026  TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)",
-"		1025 003c  Aspire 2001WLCi (Compaq CL50 motherboard)",
-"		103c 006a  NX9500",
-"		1043 808d  A7V333 mainboard.",
-"	8027  PCI4451 IEEE-1394 Controller",
-"		1028 00e6  PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)",
-"	8029  PCI4510 IEEE-1394 Controller",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		1071 8160  MIM2900",
-"	802b  PCI7410,7510,7610 OHCI-Lynx Controller",
-"		1028 0139  Latitude D400",
-"		1028 014e  PCI7410,7510,7610 OHCI-Lynx Controller (Dell Latitude D800)",
-"	802e  PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller",
-"	8031  PCIxx21/x515 Cardbus Controller",
-"		1025 0080  Aspire 5024WLMi",
-"		103c 099c  NX6110/NC6120",
-"		103c 308b  MX6125",
-"	8032  OHCI Compliant IEEE 1394 Host Controller",
-"		1025 0080  Aspire 5024WLMi",
-"		103c 099c  NX6110/NC6120",
-"		103c 308b  MX6125",
-"	8033  PCIxx21 Integrated FlashMedia Controller",
-"		1025 0080  Aspire 5024WLMi",
-"		103c 099c  NX6110/NC6120",
-"		103c 308b  MX6125",
-"	8034  PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller",
-"		1025 0080  Aspire 5024WLMi",
-"		103c 099c  NX6110/NC6120",
-"		103c 308b  MX6125",
-"	8035  PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Smart Card Controller (SMC)",
-"		103c 099c  NX6110/NC6120",
-"	8036  PCI6515 Cardbus Controller",
-"	8038  PCI6515 SmartCard Controller",
-"	803b  5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)",
-"	8201  PCI1620 Firmware Loading Function",
-"	8204  PCI7410,7510,7610 PCI Firmware Loading Function",
-"		1028 0139  Latitude D400",
-"		1028 014e  Latitude D800",
-"	8231  XIO2000(A)/XIO2200 PCI Express-to-PCI Bridge",
-"	8235  XIO2200 IEEE-1394a-2000 Controller (PHY/Link)",
-"	8400  ACX 100 22Mbps Wireless Interface",
-"		1186 3b00  DWL-650+ PC Card cardbus 22Mbs Wireless Adapter [AirPlus]",
-"		1186 3b01  DWL-520+ 22Mbps PCI Wireless Adapter",
-"		16ab 8501  WL-8305 IEEE802.11b+ Wireless LAN PCI Adapter",
-"	8401  ACX 100 22Mbps Wireless Interface",
-"	9000  Wireless Interface (of unknown type)",
-"	9065  TMS320DM642",
-"	9066  ACX 111 54Mbps Wireless Interface",
-"		104c 9066  Trendnet TEW-421PC Wireless PCI Adapter",
-"		1186 3b04  DWL-G520+ Wireless PCI Adapter",
-"		1186 3b05  DWL-G650+ AirPlusG+ CardBus Wireless LAN",
-"		13d1 aba0  SWLMP-54108 108Mbps Wireless mini PCI card 802.11g+",
-"		1737 0033  WPC54G Ver.2 802.11G PC Card",
-"	a001  TDC1570",
-"	a100  TDC1561",
-"	a102  TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f",
-"	a106  TMS320C6414 TMS320C6415 TMS320C6416",
-"		175c 5000  ASI50xx Audio Adapter",
-"		175c 6400  ASI6400 Cobranet series",
-"		175c 8700  ASI87xx Radio Tuner card",
-"	ac10  PCI1050",
-"	ac11  PCI1053",
-"	ac12  PCI1130",
-"	ac13  PCI1031",
-"	ac15  PCI1131",
-"	ac16  PCI1250",
-"		1014 0092  ThinkPad 600",
-"	ac17  PCI1220",
-"	ac18  PCI1260",
-"	ac19  PCI1221",
-"	ac1a  PCI1210",
-"	ac1b  PCI1450",
-"		0e11 b113  Armada M700",
-"		1014 0130  Thinkpad T20/T22/A21m",
-"	ac1c  PCI1225",
-"		0e11 b121  Armada E500",
-"		1028 0088  Latitude CPi A400XT",
-"	ac1d  PCI1251A",
-"	ac1e  PCI1211",
-"	ac1f  PCI1251B",
-"	ac20  TI 2030",
-"	ac21  PCI2031",
-"	ac22  PCI2032 PCI Docking Bridge",
-"	ac23  PCI2250 PCI-to-PCI Bridge",
-"	ac28  PCI2050 PCI-to-PCI Bridge",
-"	ac30  PCI1260 PC card Cardbus Controller",
-"	ac40  PCI4450 PC card Cardbus Controller",
-"	ac41  PCI4410 PC card Cardbus Controller",
-"	ac42  PCI4451 PC card Cardbus Controller",
-"		1028 00e6  PCI4451 PC card CardBus Controller (Dell Inspiron 8100)",
-"	ac44  PCI4510 PC card Cardbus Controller",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		1071 8160  MIM2000",
-"	ac46  PCI4520 PC card Cardbus Controller",
-"	ac47  PCI7510 PC card Cardbus Controller",
-"		1028 0139  Latitude D400",
-"		1028 013f  Precision M60",
-"		1028 014e  Latitude D800",
-"	ac4a  PCI7510,7610 PC card Cardbus Controller",
-"		1028 0139  Latitude D400",
-"		1028 014e  Latitude D800",
-"	ac50  PCI1410 PC card Cardbus Controller",
-"	ac51  PCI1420",
-"		0e11 004e  Evo N600c",
-"		1014 0148  ThinkPad A20m",
-"		1014 023b  ThinkPad T23 (2647-4MG)",
-"		1028 00b1  Latitude C600",
-"		1028 012a  Latitude C640",
-"		1033 80cd  Versa Note VXi",
-"		1095 10cf  Fujitsu-Siemens LifeBook C Series",
-"		10cf 1095  Lifebook S-4510/C6155",
-"		e4bf 1000  CP2-2-HIPHOP",
-"	ac52  PCI1451 PC card Cardbus Controller",
-"	ac53  PCI1421 PC card Cardbus Controller",
-"	ac54  PCI1620 PC Card Controller",
-"	ac55  PCI1520 PC card Cardbus Controller",
-"		1014 0512  ThinkPad T30/T40",
-"	ac56  PCI1510 PC card Cardbus Controller",
-"		1014 0528  ThinkPad R40e (2684-HVG) Cardbus Controller",
-"	ac60  PCI2040 PCI to DSP Bridge Controller",
-"		175c 5100  ASI51xx Audio Adapter",
-"		175c 6100  ASI61xx Audio Adapter",
-"		175c 6200  ASI62xx Audio Adapter",
-"		175c 8800  ASI88xx Audio Adapter",
-"	ac8d  PCI 7620",
-"	ac8e  PCI7420 CardBus Controller",
-"	ac8f  PCI7420/PCI7620 Dual Socket CardBus and Smart Card Cont. w/ 1394a-2000 OHCI Two-Port  PHY/Link-Layer Cont. and SD/MS-Pro Sockets",
-"	fe00  FireWire Host Controller",
-"	fe03  12C01A FireWire Host Controller",
-"104d  Sony Corporation",
-"	8004  DTL-H2500 [Playstation development board]",
-"	8009  CXD1947Q i.LINK Controller",
-"	8039  CXD3222 i.LINK Controller",
-"	8056  Rockwell HCF 56K modem",
-"	808a  Memory Stick Controller",
-"104e  Oak Technology, Inc",
-"	0017  OTI-64017",
-"	0107  OTI-107 [Spitfire]",
-"	0109  Video Adapter",
-"	0111  OTI-64111 [Spitfire]",
-"	0217  OTI-64217",
-"	0317  OTI-64317",
-"104f  Co-time Computer Ltd",
-"1050  Winbond Electronics Corp",
-"	0000  NE2000",
-"	0001  W83769F",
-"	0033  W89C33D 802.11 a/b/g BB/MAC",
-"	0105  W82C105",
-"	0840  W89C840",
-"		1050 0001  W89C840 Ethernet Adapter",
-"		1050 0840  W89C840 Ethernet Adapter",
-"	0940  W89C940",
-"	5a5a  W89C940F",
-"	6692  W6692",
-"		1043 1702  ISDN Adapter (PCI Bus, D, W)",
-"		1043 1703  ISDN Adapter (PCI Bus, DV, W)",
-"		1043 1707  ISDN Adapter (PCI Bus, DV, W)",
-"		144f 1702  ISDN Adapter (PCI Bus, D, W)",
-"		144f 1703  ISDN Adapter (PCI Bus, DV, W)",
-"		144f 1707  ISDN Adapter (PCI Bus, DV, W)",
-"	9921  W99200F MPEG-1 Video Encoder",
-"	9922  W99200F/W9922PF MPEG-1/2 Video Encoder",
-"	9970  W9970CF",
-"1051  Anigma, Inc.",
-"1052  ?Young Micro Systems",
-"1053  Young Micro Systems",
-"1054  Hitachi, Ltd",
-"1055  Efar Microsystems",
-"	9130  SLC90E66 [Victory66] IDE",
-"	9460  SLC90E66 [Victory66] ISA",
-"	9462  SLC90E66 [Victory66] USB",
-"	9463  SLC90E66 [Victory66] ACPI",
-"1056  ICL",
-"1057  Motorola",
-"	0001  MPC105 [Eagle]",
-"	0002  MPC106 [Grackle]",
-"	0003  MPC8240 [Kahlua]",
-"	0004  MPC107",
-"	0006  MPC8245 [Unity]",
-"	0008  MPC8540",
-"	0009  MPC8560",
-"	0100  MC145575 [HFC-PCI]",
-"	0431  KTI829c 100VG",
-"	1801  DSP56301 Digital Signal Processor",
-"		14fb 0101  Transas Radar Imitator Board [RIM]",
-"		14fb 0102  Transas Radar Imitator Board [RIM-2]",
-"		14fb 0202  Transas Radar Integrator Board [RIB-2]",
-"		14fb 0611  1 channel CAN bus Controller [CanPci-1]",
-"		14fb 0612  2 channels CAN bus Controller [CanPci-2]",
-"		14fb 0613  3 channels CAN bus Controller [CanPci-3]",
-"		14fb 0614  4 channels CAN bus Controller [CanPci-4]",
-"		14fb 0621  1 channel CAN bus Controller [CanPci2-1]",
-"		14fb 0622  2 channels CAN bus Controller [CanPci2-2]",
-"		14fb 0810  Transas VTS Radar Integrator Board [RIB-4]",
-"		175c 4200  ASI4215 Audio Adapter",
-"		175c 4300  ASI43xx Audio Adapter",
-"		175c 4400  ASI4401 Audio Adapter",
-"		ecc0 0010  Darla",
-"		ecc0 0020  Gina",
-"		ecc0 0030  Layla rev.0",
-"		ecc0 0031  Layla rev.1",
-"		ecc0 0040  Darla24 rev.0",
-"		ecc0 0041  Darla24 rev.1",
-"		ecc0 0050  Gina24 rev.0",
-"		ecc0 0051  Gina24 rev.1",
-"		ecc0 0070  Mona rev.0",
-"		ecc0 0071  Mona rev.1",
-"		ecc0 0072  Mona rev.2",
-"	18c0  MPC8265A/8266/8272",
-"	18c1  MPC8271/MPC8272",
-"	3410  DSP56361 Digital Signal Processor",
-"		ecc0 0050  Gina24 rev.0",
-"		ecc0 0051  Gina24 rev.1",
-"		ecc0 0060  Layla24",
-"		ecc0 0070  Mona rev.0",
-"		ecc0 0071  Mona rev.1",
-"		ecc0 0072  Mona rev.2",
-"		ecc0 0080  Mia rev.0",
-"		ecc0 0081  Mia rev.1",
-"		ecc0 0090  Indigo",
-"		ecc0 00a0  Indigo IO",
-"		ecc0 00b0  Indigo DJ",
-"		ecc0 0100  3G",
-"	4801  Raven",
-"	4802  Falcon",
-"	4803  Hawk",
-"	4806  CPX8216",
-"	4d68  20268",
-"	5600  SM56 PCI Modem",
-"		1057 0300  SM56 PCI Speakerphone Modem",
-"		1057 0301  SM56 PCI Voice Modem",
-"		1057 0302  SM56 PCI Fax Modem",
-"		1057 5600  SM56 PCI Voice modem",
-"		13d2 0300  SM56 PCI Speakerphone Modem",
-"		13d2 0301  SM56 PCI Voice modem",
-"		13d2 0302  SM56 PCI Fax Modem",
-"		1436 0300  SM56 PCI Speakerphone Modem",
-"		1436 0301  SM56 PCI Voice modem",
-"		1436 0302  SM56 PCI Fax Modem",
-"		144f 100c  SM56 PCI Fax Modem",
-"		1494 0300  SM56 PCI Speakerphone Modem",
-"		1494 0301  SM56 PCI Voice modem",
-"		14c8 0300  SM56 PCI Speakerphone Modem",
-"		14c8 0302  SM56 PCI Fax Modem",
-"		1668 0300  SM56 PCI Speakerphone Modem",
-"		1668 0302  SM56 PCI Fax Modem",
-"	5608  Wildcard X100P",
-"	5803  MPC5200",
-"	5806  MCF54 Coldfire",
-"	5808  MPC8220",
-"	5809  MPC5200B",
-"	6400  MPC190 Security Processor (S1 family, encryption)",
-"	6405  MPC184 Security Processor (S1 family)",
-"1058  Electronics & Telecommunications RSH",
-"1059  Teknor Industrial Computers Inc",
-"105a  Promise Technology, Inc.",
-"	0d30  PDC20265 (FastTrak100 Lite/Ultra100)",
-"		105a 4d33  Ultra100",
-"	0d38  20263",
-"		105a 4d39  Fasttrak66",
-"	1275  20275",
-"	3318  PDC20318 (SATA150 TX4)",
-"	3319  PDC20319 (FastTrak S150 TX4)",
-"		8086 3427  S875WP1-E mainboard",
-"	3371  PDC20371 (FastTrak S150 TX2plus)",
-"	3373  PDC20378 (FastTrak 378/SATA 378)",
-"		1043 80f5  K8V Deluxe/PC-DL Deluxe motherboard",
-"		1462 702e  K8T NEO FIS2R motherboard",
-"	3375  PDC20375 (SATA150 TX2plus)",
-"	3376  PDC20376 (FastTrak 376)",
-"		1043 809e  A7V8X motherboard",
-"	3515  PDC40719 [FastTrak TX4300/TX4310]",
-"	3519  PDC40519 (FastTrak TX4200)",
-"	3570  20771 (FastTrak TX2300)",
-"	3571  PDC20571 (FastTrak TX2200)",
-"	3574  PDC20579 SATAII 150 IDE Controller",
-"	3577  PDC40779 (SATA 300 779)",
-"	3d17  PDC40718 (SATA 300 TX4)",
-"	3d18  PDC20518/PDC40518 (SATAII 150 TX4)",
-"	3d73  PDC40775 (SATA 300 TX2plus)",
-"	3d75  PDC20575 (SATAII150 TX2plus)",
-"	4d30  PDC20267 (FastTrak100/Ultra100)",
-"		105a 4d33  Ultra100",
-"		105a 4d39  FastTrak100",
-"	4d33  20246",
-"		105a 4d33  20246 IDE Controller",
-"	4d38  PDC20262 (FastTrak66/Ultra66)",
-"		105a 4d30  Ultra Device on SuperTrak",
-"		105a 4d33  Ultra66",
-"		105a 4d39  FastTrak66",
-"	4d68  PDC20268 (Ultra100 TX2)",
-"		105a 4d68  Ultra100TX2",
-"	4d69  20269",
-"		105a 4d68  Ultra133TX2",
-"	5275  PDC20276 (MBFastTrak133 Lite)",
-"		1043 807e  A7V333 motherboard.",
-"		105a 0275  SuperTrak SX6000 IDE",
-"		105a 1275  MBFastTrak133 Lite (tm) Controller (RAID mode)",
-"		1458 b001  MBUltra 133",
-"	5300  DC5300",
-"	6268  PDC20270 (FastTrak100 LP/TX2/TX4)",
-"		105a 4d68  FastTrak100 TX2",
-"	6269  PDC20271 (FastTrak TX2000)",
-"		105a 6269  FastTrak TX2/TX2000",
-"	6621  PDC20621 (FastTrak S150 SX4/FastTrak SX4000 lite)",
-"	6622  PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller",
-"	6624  PDC20621 [FastTrak SX4100]",
-"	6626  PDC20618 (Ultra 618)",
-"	6629  PDC20619 (FastTrak TX4000)",
-"	7275  PDC20277 (SBFastTrak133 Lite)",
-"	8002  SATAII150 SX8",
-"105b  Foxconn International, Inc.",
-"105c  Wipro Infotech Limited",
-"105d  Number 9 Computer Company",
-"	2309  Imagine 128",
-"	2339  Imagine 128-II",
-"		105d 0000  Imagine 128 series 2 4Mb VRAM",
-"		105d 0001  Imagine 128 series 2 4Mb VRAM",
-"		105d 0002  Imagine 128 series 2 4Mb VRAM",
-"		105d 0003  Imagine 128 series 2 4Mb VRAM",
-"		105d 0004  Imagine 128 series 2 4Mb VRAM",
-"		105d 0005  Imagine 128 series 2 4Mb VRAM",
-"		105d 0006  Imagine 128 series 2 4Mb VRAM",
-"		105d 0007  Imagine 128 series 2 4Mb VRAM",
-"		105d 0008  Imagine 128 series 2e 4Mb DRAM",
-"		105d 0009  Imagine 128 series 2e 4Mb DRAM",
-"		105d 000a  Imagine 128 series 2 8Mb VRAM",
-"		105d 000b  Imagine 128 series 2 8Mb H-VRAM",
-"		11a4 000a  Barco Metheus 5 Megapixel",
-"		13cc 0000  Barco Metheus 5 Megapixel",
-"		13cc 0004  Barco Metheus 5 Megapixel",
-"		13cc 0005  Barco Metheus 5 Megapixel",
-"		13cc 0006  Barco Metheus 5 Megapixel",
-"		13cc 0008  Barco Metheus 5 Megapixel",
-"		13cc 0009  Barco Metheus 5 Megapixel",
-"		13cc 000a  Barco Metheus 5 Megapixel",
-"		13cc 000c  Barco Metheus 5 Megapixel",
-"	493d  Imagine 128 T2R [Ticket to Ride]",
-"		11a4 000a  Barco Metheus 5 Megapixel, Dual Head",
-"		11a4 000b  Barco Metheus 5 Megapixel, Dual Head",
-"		13cc 0002  Barco Metheus 4 Megapixel, Dual Head",
-"		13cc 0003  Barco Metheus 5 Megapixel, Dual Head",
-"		13cc 0007  Barco Metheus 5 Megapixel, Dual Head",
-"		13cc 0008  Barco Metheus 5 Megapixel, Dual Head",
-"		13cc 0009  Barco Metheus 5 Megapixel, Dual Head",
-"		13cc 000a  Barco Metheus 5 Megapixel, Dual Head",
-"	5348  Revolution 4",
-"		105d 0037  Revolution IV-FP AGP (For SGI 1600SW)",
-"		11a4 0028  PVS5600M",
-"		11a4 0038  PVS5600D",
-"105e  Vtech Computers Ltd",
-"105f  Infotronic America Inc",
-"1060  United Microelectronics [UMC]",
-"	0001  UM82C881",
-"	0002  UM82C886",
-"	0101  UM8673F",
-"	0881  UM8881",
-"	0886  UM8886F",
-"	0891  UM8891A",
-"	1001  UM886A",
-"	673a  UM8886BF",
-"	673b  EIDE Master/DMA",
-"	8710  UM8710",
-"	886a  UM8886A",
-"	8881  UM8881F",
-"	8886  UM8886F",
-"	888a  UM8886A",
-"	8891  UM8891A",
-"	9017  UM9017F",
-"	9018  UM9018",
-"	9026  UM9026",
-"	e881  UM8881N",
-"	e886  UM8886N",
-"	e88a  UM8886N",
-"	e891  UM8891N",
-"1061  I.I.T.",
-"	0001  AGX016",
-"	0002  IIT3204/3501",
-"1062  Maspar Computer Corp",
-"1063  Ocean Office Automation",
-"1064  Alcatel",
-"1065  Texas Microsystems",
-"1066  PicoPower Technology",
-"	0000  PT80C826",
-"	0001  PT86C521 [Vesuvius v1] Host Bridge",
-"	0002  PT86C523 [Vesuvius v3] PCI-ISA Bridge Master",
-"	0003  PT86C524 [Nile] PCI-to-PCI Bridge",
-"	0004  PT86C525 [Nile-II] PCI-to-PCI Bridge",
-"	0005  National PC87550 System Controller",
-"	8002  PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave",
-"1067  Mitsubishi Electric",
-"	0301  AccelGraphics AccelECLIPSE",
-"	0304  AccelGALAXY A2100 [OEM Evans & Sutherland]",
-"	0308  Tornado 3000 [OEM Evans & Sutherland]",
-"	1002  VG500 [VolumePro Volume Rendering Accelerator]",
-"1068  Diversified Technology",
-"1069  Mylex Corporation",
-"	0001  DAC960P",
-"	0002  DAC960PD",
-"	0010  DAC960PG",
-"	0020  DAC960LA",
-"	0050  AcceleRAID 352/170/160 support Device",
-"		1069 0050  AcceleRAID 352 support Device",
-"		1069 0052  AcceleRAID 170 support Device",
-"		1069 0054  AcceleRAID 160 support Device",
-"	b166  AcceleRAID 600/500/400/Sapphire support Device",
-"		1014 0242  iSeries 2872 DASD IOA",
-"		1014 0266  Dual Channel PCI-X U320 SCSI Adapter",
-"		1014 0278  Dual Channel PCI-X U320 SCSI RAID Adapter",
-"		1014 02d3  Dual Channel PCI-X U320 SCSI Adapter",
-"		1014 02d4  Dual Channel PCI-X U320 SCSI RAID Adapter",
-"		1069 0200  AcceleRAID 400, Single Channel, PCI-X, U320, SCSI RAID",
-"		1069 0202  AcceleRAID Sapphire, Dual Channel, PCI-X, U320, SCSI RAID",
-"		1069 0204  AcceleRAID 500, Dual Channel, Low-Profile, PCI-X, U320, SCSI RAID",
-"		1069 0206  AcceleRAID 600, Dual Channel, PCI-X, U320, SCSI RAID",
-"	ba55  eXtremeRAID 1100 support Device",
-"	ba56  eXtremeRAID 2000/3000 support Device",
-"		1069 0030  eXtremeRAID 3000 support Device",
-"		1069 0040  eXtremeRAID 2000 support Device",
-"	ba57  eXtremeRAID 4000/5000 support Device",
-"		1069 0072  eXtremeRAID 5000 support Device",
-"106a  Aten Research Inc",
-"106b  Apple Computer Inc.",
-"	0001  Bandit PowerPC host bridge",
-"	0002  Grand Central I/O",
-"	0003  Control Video",
-"	0004  PlanB Video-In",
-"	0007  O'Hare I/O",
-"	000c  DOS on Mac",
-"	000e  Hydra Mac I/O",
-"	0010  Heathrow Mac I/O",
-"	0017  Paddington Mac I/O",
-"	0018  UniNorth FireWire",
-"	0019  KeyLargo USB",
-"	001e  UniNorth Internal PCI",
-"	001f  UniNorth PCI",
-"	0020  UniNorth AGP",
-"	0021  UniNorth GMAC (Sun GEM)",
-"	0022  KeyLargo Mac I/O",
-"	0024  UniNorth/Pangea GMAC (Sun GEM)",
-"	0025  KeyLargo/Pangea Mac I/O",
-"	0026  KeyLargo/Pangea USB",
-"	0027  UniNorth/Pangea AGP",
-"	0028  UniNorth/Pangea PCI",
-"	0029  UniNorth/Pangea Internal PCI",
-"	002d  UniNorth 1.5 AGP",
-"	002e  UniNorth 1.5 PCI",
-"	002f  UniNorth 1.5 Internal PCI",
-"	0030  UniNorth/Pangea FireWire",
-"	0031  UniNorth 2 FireWire",
-"		106b 5811  iBook G4 2004",
-"	0032  UniNorth 2 GMAC (Sun GEM)",
-"	0033  UniNorth 2 ATA/100",
-"	0034  UniNorth 2 AGP",
-"	0035  UniNorth 2 PCI",
-"	0036  UniNorth 2 Internal PCI",
-"	003b  UniNorth/Intrepid ATA/100",
-"	003e  KeyLargo/Intrepid Mac I/O",
-"	003f  KeyLargo/Intrepid USB",
-"	0040  K2 KeyLargo USB",
-"	0041  K2 KeyLargo Mac/IO",
-"	0042  K2 FireWire",
-"	0043  K2 ATA/100",
-"	0045  K2 HT-PCI Bridge",
-"	0046  K2 HT-PCI Bridge",
-"	0047  K2 HT-PCI Bridge",
-"	0048  K2 HT-PCI Bridge",
-"	0049  K2 HT-PCI Bridge",
-"	004b  U3 AGP",
-"	004c  K2 GMAC (Sun GEM)",
-"	004f  Shasta Mac I/O",
-"	0050  Shasta IDE",
-"	0051  Shasta (Sun GEM)",
-"	0052  Shasta Firewire",
-"	0053  Shasta PCI Bridge",
-"	0054  Shasta PCI Bridge",
-"	0055  Shasta PCI Bridge",
-"	0058  U3L AGP Bridge",
-"	0059  U3H AGP Bridge",
-"	0066  Intrepid2 AGP Bridge",
-"	0067  Intrepid2 PCI Bridge",
-"	0068  Intrepid2 PCI Bridge",
-"	0069  Intrepid2 ATA/100",
-"	006a  Intrepid2 Firewire",
-"	006b  Intrepid2 GMAC (Sun GEM)",
-"	1645  Tigon3 Gigabit Ethernet NIC (BCM5701)",
-"106c  Hynix Semiconductor",
-"	8801  Dual Pentium ISA/PCI Motherboard",
-"	8802  PowerPC ISA/PCI Motherboard",
-"	8803  Dual Window Graphics Accelerator",
-"	8804  LAN Controller",
-"	8805  100-BaseT LAN",
-"106d  Sequent Computer Systems",
-"106e  DFI, Inc",
-"106f  City Gate Development Ltd",
-"1070  Daewoo Telecom Ltd",
-"1071  Mitac",
-"	8160  Mitac 8060B Mobile Platform",
-"1072  GIT Co Ltd",
-"1073  Yamaha Corporation",
-"	0001  3D GUI Accelerator",
-"	0002  YGV615 [RPA3 3D-Graphics Controller]",
-"	0003  YMF-740",
-"	0004  YMF-724",
-"		1073 0004  YMF724-Based PCI Audio Adapter",
-"	0005  DS1 Audio",
-"		1073 0005  DS-XG PCI Audio CODEC",
-"	0006  DS1 Audio",
-"	0008  DS1 Audio",
-"		1073 0008  DS-XG PCI Audio CODEC",
-"	000a  DS1L Audio",
-"		1073 0004  DS-XG PCI Audio CODEC",
-"		1073 000a  DS-XG PCI Audio CODEC",
-"	000c  YMF-740C [DS-1L Audio Controller]",
-"		107a 000c  DS-XG PCI Audio CODEC",
-"	000d  YMF-724F [DS-1 Audio Controller]",
-"		1073 000d  DS-XG PCI Audio CODEC",
-"	0010  YMF-744B [DS-1S Audio Controller]",
-"		1073 0006  DS-XG PCI Audio CODEC",
-"		1073 0010  DS-XG PCI Audio CODEC",
-"	0012  YMF-754 [DS-1E Audio Controller]",
-"		1073 0012  DS-XG PCI Audio Codec",
-"	0020  DS-1 Audio",
-"	2000  DS2416 Digital Mixing Card",
-"		1073 2000  DS2416 Digital Mixing Card",
-"1074  NexGen Microsystems",
-"	4e78  82c500/1",
-"1075  Advanced Integrations Research",
-"1076  Chaintech Computer Co. Ltd",
-"1077  QLogic Corp.",
-"	1016  ISP10160 Single Channel Ultra3 SCSI Processor",
-"	1020  ISP1020 Fast-wide SCSI",
-"	1022  ISP1022 Fast-wide SCSI",
-"	1080  ISP1080 SCSI Host Adapter",
-"	1216  ISP12160 Dual Channel Ultra3 SCSI Processor",
-"		101e 8471  QLA12160 on AMI MegaRAID",
-"		101e 8493  QLA12160 on AMI MegaRAID",
-"	1240  ISP1240 SCSI Host Adapter",
-"	1280  ISP1280 SCSI Host Adapter",
-"	2020  ISP2020A Fast!SCSI Basic Adapter",
-"	2100  QLA2100 64-bit Fibre Channel Adapter",
-"		1077 0001  QLA2100 64-bit Fibre Channel Adapter",
-"	2200  QLA2200 64-bit Fibre Channel Adapter",
-"		1077 0002  QLA2200",
-"	2300  QLA2300 64-bit Fibre Channel Adapter",
-"	2312  QLA2312 Fibre Channel Adapter",
-"	2322  QLA2322 Fibre Channel Adapter",
-"	2422  QLA2422 Fibre Channel Adapter",
-"	2432  QLA2432 Fibre Channel Adapter",
-"	3010  QLA3010 Network Adapter",
-"	3022  QLA3022 Network Adapter",
-"	4010  QLA4010 iSCSI TOE Adapter",
-"	4022  QLA4022 iSCSI TOE Adapter",
-"	6312  QLA6312 Fibre Channel Adapter",
-"	6322  QLA6322 Fibre Channel Adapter",
-"1078  Cyrix Corporation",
-"	0000  5510 [Grappa]",
-"	0001  PCI Master",
-"	0002  5520 [Cognac]",
-"	0100  5530 Legacy [Kahlua]",
-"	0101  5530 SMI [Kahlua]",
-"	0102  5530 IDE [Kahlua]",
-"	0103  5530 Audio [Kahlua]",
-"	0104  5530 Video [Kahlua]",
-"	0400  ZFMicro PCI Bridge",
-"	0401  ZFMicro Chipset SMI",
-"	0402  ZFMicro Chipset IDE",
-"	0403  ZFMicro Expansion Bus",
-"1079  I-Bus",
-"107a  NetWorth",
-"107b  Gateway 2000",
-"107c  LG Electronics [Lucky Goldstar Co. Ltd]",
-"107d  LeadTek Research Inc.",
-"	0000  P86C850",
-"	204d  [GeForce 7800 GTX] Winfast PX7800 GTX TDH",
-"	2134  WinFast 3D S320 II",
-"	2971  [GeForce FX 5900] WinFast A350 TDH MyViVo",
-"107e  Interphase Corporation",
-"	0001  5515 ATM Adapter [Flipper]",
-"	0002  100 VG AnyLan Controller",
-"	0004  5526 Fibre Channel Host Adapter",
-"	0005  x526 Fibre Channel Host Adapter",
-"	0008  5525/5575 ATM Adapter (155 Mbit) [Atlantic]",
-"	9003  5535-4P-BRI-ST",
-"	9007  5535-4P-BRI-U",
-"	9008  5535-1P-SR",
-"	900c  5535-1P-SR-ST",
-"	900e  5535-1P-SR-U",
-"	9011  5535-1P-PRI",
-"	9013  5535-2P-PRI",
-"	9023  5536-4P-BRI-ST",
-"	9027  5536-4P-BRI-U",
-"	9031  5536-1P-PRI",
-"	9033  5536-2P-PRI",
-"107f  Data Technology Corporation",
-"	0802  SL82C105",
-"1080  Contaq Microsystems",
-"	0600  82C599",
-"	c691  Cypress CY82C691",
-"	c693  82c693",
-"1081  Supermac Technology",
-"	0d47  Radius PCI to NuBUS Bridge",
-"1082  EFA Corporation of America",
-"1083  Forex Computer Corporation",
-"	0001  FR710",
-"1084  Parador",
-"1085  Tulip Computers Int.B.V.",
-"1086  J. Bond Computer Systems",
-"1087  Cache Computer",
-"1088  Microcomputer Systems (M) Son",
-"1089  Data General Corporation",
-"108a  SBS Technologies",
-"	0001  VME Bridge Model 617",
-"	0010  VME Bridge Model 618",
-"	0040  dataBLIZZARD",
-"	3000  VME Bridge Model 2706",
-"108c  Oakleigh Systems Inc.",
-"108d  Olicom",
-"	0001  Token-Ring 16/4 PCI Adapter (3136/3137)",
-"	0002  16/4 Token Ring",
-"	0004  RapidFire 3139 Token-Ring 16/4 PCI Adapter",
-"		108d 0004  OC-3139/3140 RapidFire Token-Ring 16/4 Adapter",
-"	0005  GoCard 3250 Token-Ring 16/4 CardBus PC Card",
-"	0006  OC-3530 RapidFire Token-Ring 100",
-"	0007  RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter",
-"		108d 0007  OC-3141 RapidFire Token-Ring 16/4 Adapter",
-"	0008  RapidFire 3540 HSTR 100/16/4 PCI Adapter",
-"		108d 0008  OC-3540 RapidFire HSTR 100/16/4 Adapter",
-"	0011  OC-2315",
-"	0012  OC-2325",
-"	0013  OC-2183/2185",
-"	0014  OC-2326",
-"	0019  OC-2327/2250 10/100 Ethernet Adapter",
-"		108d 0016  OC-2327 Rapidfire 10/100 Ethernet Adapter",
-"		108d 0017  OC-2250 GoCard 10/100 Ethernet Adapter",
-"	0021  OC-6151/6152 [RapidFire ATM 155]",
-"	0022  ATM Adapter",
-"108e  Sun Microsystems Computer Corp.",
-"	0001  EBUS",
-"	1000  EBUS",
-"	1001  Happy Meal",
-"	1100  RIO EBUS",
-"	1101  RIO GEM",
-"	1102  RIO 1394",
-"	1103  RIO USB",
-"	1648  [bge] Gigabit Ethernet",
-"	2bad  GEM",
-"	5000  Simba Advanced PCI Bridge",
-"	5043  SunPCI Co-processor",
-"	8000  Psycho PCI Bus Module",
-"	8001  Schizo PCI Bus Module",
-"	8002  Schizo+ PCI Bus Module",
-"	a000  Ultra IIi",
-"	a001  Ultra IIe",
-"	a801  Tomatillo PCI Bus Module",
-"	abba  Cassini 10/100/1000",
-"108f  Systemsoft",
-"1090  Compro Computer Services, Inc.",
-"1091  Intergraph Corporation",
-"	0020  3D graphics processor",
-"	0021  3D graphics processor w/Texturing",
-"	0040  3D graphics frame buffer",
-"	0041  3D graphics frame buffer",
-"	0060  Proprietary bus bridge",
-"	00e4  Powerstorm 4D50T",
-"	0720  Motion JPEG codec",
-"	07a0  Sun Expert3D-Lite Graphics Accelerator",
-"	1091  Sun Expert3D Graphics Accelerator",
-"1092  Diamond Multimedia Systems",
-"	00a0  Speedstar Pro SE",
-"	00a8  Speedstar 64",
-"	0550  Viper V550",
-"	08d4  Supra 2260 Modem",
-"	094c  SupraExpress 56i Pro",
-"	1092  Viper V330",
-"	6120  Maximum DVD",
-"	8810  Stealth SE",
-"	8811  Stealth 64/SE",
-"	8880  Stealth",
-"	8881  Stealth",
-"	88b0  Stealth 64",
-"	88b1  Stealth 64",
-"	88c0  Stealth 64",
-"	88c1  Stealth 64",
-"	88d0  Stealth 64",
-"	88d1  Stealth 64",
-"	88f0  Stealth 64",
-"	88f1  Stealth 64",
-"	9999  DMD-I0928-1 'Monster sound' sound chip",
-"1093  National Instruments",
-"	0160  PCI-DIO-96",
-"	0162  PCI-MIO-16XE-50",
-"	1150  PCI-DIO-32HS High Speed Digital I/O Board",
-"	1170  PCI-MIO-16XE-10",
-"	1180  PCI-MIO-16E-1",
-"	1190  PCI-MIO-16E-4",
-"	1310  PCI-6602",
-"	1330  PCI-6031E",
-"	1350  PCI-6071E",
-"	14e0  PCI-6110",
-"	14f0  PCI-6111",
-"	17d0  PCI-6503",
-"	1870  PCI-6713",
-"	1880  PCI-6711",
-"	18b0  PCI-6052E",
-"	2410  PCI-6733",
-"	2890  PCI-6036E",
-"	2a60  PCI-6023E",
-"	2a70  PCI-6024E",
-"	2a80  PCI-6025E",
-"	2c80  PCI-6035E",
-"	2ca0  PCI-6034E",
-"	70a9  PCI-6528 (Digital I/O at 60V)",
-"	70b8  PCI-6251 [M Series - High Speed Multifunction DAQ]",
-"	b001  IMAQ-PCI-1408",
-"	b011  IMAQ-PXI-1408",
-"	b021  IMAQ-PCI-1424",
-"	b031  IMAQ-PCI-1413",
-"	b041  IMAQ-PCI-1407",
-"	b051  IMAQ-PXI-1407",
-"	b061  IMAQ-PCI-1411",
-"	b071  IMAQ-PCI-1422",
-"	b081  IMAQ-PXI-1422",
-"	b091  IMAQ-PXI-1411",
-"	c801  PCI-GPIB",
-"	c831  PCI-GPIB bridge",
-"1094  First International Computers [FIC]",
-"1095  Silicon Image, Inc.",
-"	0240  Adaptec AAR-1210SA SATA HostRAID Controller",
-"	0640  PCI0640",
-"	0643  PCI0643",
-"	0646  PCI0646",
-"	0647  PCI0647",
-"	0648  PCI0648",
-"		1043 8025  CUBX motherboard",
-"	0649  SiI 0649 Ultra ATA/100 PCI to ATA Host Controller",
-"		0e11 005d  Integrated Ultra ATA-100 Dual Channel Controller",
-"		0e11 007e  Integrated Ultra ATA-100 IDE RAID Controller",
-"		101e 0649  AMI MegaRAID IDE 100 Controller",
-"	0650  PBC0650A",
-"	0670  USB0670",
-"		1095 0670  USB0670",
-"	0673  USB0673",
-"	0680  PCI0680 Ultra ATA-133 Host Controller",
-"		1095 3680  Winic W-680 (Silicon Image 680 based)",
-"	3112  SiI 3112 [SATALink/SATARaid] Serial ATA Controller",
-"		1095 3112  SiI 3112 SATALink Controller",
-"		1095 6112  SiI 3112 SATARaid Controller",
-"		9005 0250  SATAConnect 1205SA Host Controller",
-"	3114  SiI 3114 [SATALink/SATARaid] Serial ATA Controller",
-"		1095 3114  SiI 3114 SATALink Controller",
-"		1095 6114  SiI 3114 SATARaid Controller",
-"	3124  SiI 3124 PCI-X Serial ATA Controller",
-"		1095 3124  SiI 3124 PCI-X Serial ATA Controller",
-"	3132  SiI 3132 Serial ATA Raid II Controller",
-"	3512  SiI 3512 [SATALink/SATARaid] Serial ATA Controller",
-"		1095 3512  SiI 3512 SATALink Controller",
-"		1095 6512  SiI 3512 SATARaid Controller",
-"1096  Alacron",
-"1097  Appian Technology",
-"1098  Quantum Designs (H.K.) Ltd",
-"	0001  QD-8500",
-"	0002  QD-8580",
-"1099  Samsung Electronics Co., Ltd",
-"109a  Packard Bell",
-"109b  Gemlight Computer Ltd.",
-"109c  Megachips Corporation",
-"109d  Zida Technologies Ltd.",
-"109e  Brooktree Corporation",
-"	032e  Bt878 Video Capture",
-"	0350  Bt848 Video Capture",
-"	0351  Bt849A Video capture",
-"	0369  Bt878 Video Capture",
-"		1002 0001  TV-Wonder",
-"		1002 0003  TV-Wonder/VE",
-"	036c  Bt879(??) Video Capture",
-"		13e9 0070  Win/TV (Video Section)",
-"	036e  Bt878 Video Capture",
-"		0070 13eb  WinTV Series",
-"		0070 ff01  Viewcast Osprey 200",
-"		0071 0101  DigiTV PCI",
-"		107d 6606  WinFast TV 2000",
-"		11bd 0012  PCTV pro (TV + FM stereo receiver)",
-"		11bd 001c  PCTV Sat (DBC receiver)",
-"		127a 0001  Bt878 Mediastream Controller NTSC",
-"		127a 0002  Bt878 Mediastream Controller PAL BG",
-"		127a 0003  Bt878a Mediastream Controller PAL BG",
-"		127a 0048  Bt878/832 Mediastream Controller",
-"		144f 3000  MagicTView CPH060 - Video",
-"		1461 0002  TV98 Series (TV/No FM/Remote)",
-"		1461 0003  AverMedia UltraTV PCI 350",
-"		1461 0004  AVerTV WDM Video Capture",
-"		1461 0761  AverTV DVB-T",
-"		14f1 0001  Bt878 Mediastream Controller NTSC",
-"		14f1 0002  Bt878 Mediastream Controller PAL BG",
-"		14f1 0003  Bt878a Mediastream Controller PAL BG",
-"		14f1 0048  Bt878/832 Mediastream Controller",
-"		1822 0001  VisionPlus DVB card",
-"		1851 1850  FlyVideo'98 - Video",
-"		1851 1851  FlyVideo II",
-"		1852 1852  FlyVideo'98 - Video (with FM Tuner)",
-"		18ac d500  DViCO FusionHDTV5 Lite",
-"		270f fc00  Digitop DTT-1000",
-"		bd11 1200  PCTV pro (TV + FM stereo receiver)",
-"	036f  Bt879 Video Capture",
-"		127a 0044  Bt879 Video Capture NTSC",
-"		127a 0122  Bt879 Video Capture PAL I",
-"		127a 0144  Bt879 Video Capture NTSC",
-"		127a 0222  Bt879 Video Capture PAL BG",
-"		127a 0244  Bt879a Video Capture NTSC",
-"		127a 0322  Bt879 Video Capture NTSC",
-"		127a 0422  Bt879 Video Capture NTSC",
-"		127a 1122  Bt879 Video Capture PAL I",
-"		127a 1222  Bt879 Video Capture PAL BG",
-"		127a 1322  Bt879 Video Capture NTSC",
-"		127a 1522  Bt879a Video Capture PAL I",
-"		127a 1622  Bt879a Video Capture PAL BG",
-"		127a 1722  Bt879a Video Capture NTSC",
-"		14f1 0044  Bt879 Video Capture NTSC",
-"		14f1 0122  Bt879 Video Capture PAL I",
-"		14f1 0144  Bt879 Video Capture NTSC",
-"		14f1 0222  Bt879 Video Capture PAL BG",
-"		14f1 0244  Bt879a Video Capture NTSC",
-"		14f1 0322  Bt879 Video Capture NTSC",
-"		14f1 0422  Bt879 Video Capture NTSC",
-"		14f1 1122  Bt879 Video Capture PAL I",
-"		14f1 1222  Bt879 Video Capture PAL BG",
-"		14f1 1322  Bt879 Video Capture NTSC",
-"		14f1 1522  Bt879a Video Capture PAL I",
-"		14f1 1622  Bt879a Video Capture PAL BG",
-"		14f1 1722  Bt879a Video Capture NTSC",
-"		1851 1850  FlyVideo'98 - Video",
-"		1851 1851  FlyVideo II",
-"		1852 1852  FlyVideo'98 - Video (with FM Tuner)",
-"	0370  Bt880 Video Capture",
-"		1851 1850  FlyVideo'98",
-"		1851 1851  FlyVideo'98 EZ - video",
-"		1852 1852  FlyVideo'98 (with FM Tuner)",
-"	0878  Bt878 Audio Capture",
-"		0070 13eb  WinTV Series",
-"		0070 ff01  Viewcast Osprey 200",
-"		0071 0101  DigiTV PCI",
-"		1002 0001  TV-Wonder",
-"		1002 0003  TV-Wonder/VE",
-"		11bd 0012  PCTV pro (TV + FM stereo receiver, audio section)",
-"		11bd 001c  PCTV Sat (DBC receiver)",
-"		127a 0001  Bt878 Video Capture (Audio Section)",
-"		127a 0002  Bt878 Video Capture (Audio Section)",
-"		127a 0003  Bt878 Video Capture (Audio Section)",
-"		127a 0048  Bt878 Video Capture (Audio Section)",
-"		13e9 0070  Win/TV (Audio Section)",
-"		144f 3000  MagicTView CPH060 - Audio",
-"		1461 0002  Avermedia PCTV98 Audio Capture",
-"		1461 0004  AVerTV WDM Audio Capture",
-"		1461 0761  AVerTV DVB-T",
-"		14f1 0001  Bt878 Video Capture (Audio Section)",
-"		14f1 0002  Bt878 Video Capture (Audio Section)",
-"		14f1 0003  Bt878 Video Capture (Audio Section)",
-"		14f1 0048  Bt878 Video Capture (Audio Section)",
-"		1822 0001  VisionPlus DVB Card",
-"		18ac d500  DViCO FusionHDTV5 Lite",
-"		270f fc00  Digitop DTT-1000",
-"		bd11 1200  PCTV pro (TV + FM stereo receiver, audio section)",
-"	0879  Bt879 Audio Capture",
-"		127a 0044  Bt879 Video Capture (Audio Section)",
-"		127a 0122  Bt879 Video Capture (Audio Section)",
-"		127a 0144  Bt879 Video Capture (Audio Section)",
-"		127a 0222  Bt879 Video Capture (Audio Section)",
-"		127a 0244  Bt879 Video Capture (Audio Section)",
-"		127a 0322  Bt879 Video Capture (Audio Section)",
-"		127a 0422  Bt879 Video Capture (Audio Section)",
-"		127a 1122  Bt879 Video Capture (Audio Section)",
-"		127a 1222  Bt879 Video Capture (Audio Section)",
-"		127a 1322  Bt879 Video Capture (Audio Section)",
-"		127a 1522  Bt879 Video Capture (Audio Section)",
-"		127a 1622  Bt879 Video Capture (Audio Section)",
-"		127a 1722  Bt879 Video Capture (Audio Section)",
-"		14f1 0044  Bt879 Video Capture (Audio Section)",
-"		14f1 0122  Bt879 Video Capture (Audio Section)",
-"		14f1 0144  Bt879 Video Capture (Audio Section)",
-"		14f1 0222  Bt879 Video Capture (Audio Section)",
-"		14f1 0244  Bt879 Video Capture (Audio Section)",
-"		14f1 0322  Bt879 Video Capture (Audio Section)",
-"		14f1 0422  Bt879 Video Capture (Audio Section)",
-"		14f1 1122  Bt879 Video Capture (Audio Section)",
-"		14f1 1222  Bt879 Video Capture (Audio Section)",
-"		14f1 1322  Bt879 Video Capture (Audio Section)",
-"		14f1 1522  Bt879 Video Capture (Audio Section)",
-"		14f1 1622  Bt879 Video Capture (Audio Section)",
-"		14f1 1722  Bt879 Video Capture (Audio Section)",
-"	0880  Bt880 Audio Capture",
-"	2115  BtV 2115 Mediastream controller",
-"	2125  BtV 2125 Mediastream controller",
-"	2164  BtV 2164",
-"	2165  BtV 2165",
-"	8230  Bt8230 ATM Segment/Reassembly Ctrlr (SRC)",
-"	8472  Bt8472",
-"	8474  Bt8474",
-"109f  Trigem Computer Inc.",
-"10a0  Meidensha Corporation",
-"10a1  Juko Electronics Ind. Co. Ltd",
-"10a2  Quantum Corporation",
-"10a3  Everex Systems Inc",
-"10a4  Globe Manufacturing Sales",
-"10a5  Smart Link Ltd.",
-"	3052  SmartPCI562 56K Modem",
-"	5449  SmartPCI561 modem",
-"10a6  Informtech Industrial Ltd.",
-"10a7  Benchmarq Microelectronics",
-"10a8  Sierra Semiconductor",
-"	0000  STB Horizon 64",
-"10a9  Silicon Graphics, Inc.",
-"	0001  Crosstalk to PCI Bridge",
-"	0002  Linc I/O controller",
-"	0003  IOC3 I/O controller",
-"	0004  O2 MACE",
-"	0005  RAD Audio",
-"	0006  HPCEX",
-"	0007  RPCEX",
-"	0008  DiVO VIP",
-"	0009  AceNIC Gigabit Ethernet",
-"		10a9 8002  AceNIC Gigabit Ethernet",
-"	0010  AMP Video I/O",
-"	0011  GRIP",
-"	0012  SGH PSHAC GSN",
-"	1001  Magic Carpet",
-"	1002  Lithium",
-"	1003  Dual JPEG 1",
-"	1004  Dual JPEG 2",
-"	1005  Dual JPEG 3",
-"	1006  Dual JPEG 4",
-"	1007  Dual JPEG 5",
-"	1008  Cesium",
-"	100a  IOC4 I/O controller",
-"	2001  Fibre Channel",
-"	2002  ASDE",
-"	4001  TIO-CE PCI Express Bridge",
-"	4002  TIO-CE PCI Express Port",
-"	8001  O2 1394",
-"	8002  G-net NT",
-"	8010  Broadcom e-net [SGI IO9/IO10 BaseIO]",
-"	8018  Broadcom e-net [SGI A330 Server BaseIO]",
-"10aa  ACC Microelectronics",
-"	0000  ACCM 2188",
-"10ab  Digicom",
-"10ac  Honeywell IAC",
-"10ad  Symphony Labs",
-"	0001  W83769F",
-"	0003  SL82C103",
-"	0005  SL82C105",
-"	0103  SL82c103",
-"	0105  SL82c105",
-"	0565  W83C553",
-"10ae  Cornerstone Technology",
-"10af  Micro Computer Systems Inc",
-"10b0  CardExpert Technology",
-"10b1  Cabletron Systems Inc",
-"10b2  Raytheon Company",
-"10b3  Databook Inc",
-"	3106  DB87144",
-"	b106  DB87144",
-"10b4  STB Systems Inc",
-"	1b1d  Velocity 128 3D",
-"		10b4 237e  Velocity 4400",
-"10b5  PLX Technology, Inc.",
-"	0001  i960 PCI bus interface",
-"	1042  Brandywine / jxi2, Inc. - PMC-SyncClock32, IRIG A & B, Nasa 36",
-"	1076  VScom 800 8 port serial adaptor",
-"	1077  VScom 400 4 port serial adaptor",
-"	1078  VScom 210 2 port serial and 1 port parallel adaptor",
-"	1103  VScom 200 2 port serial adaptor",
-"	1146  VScom 010 1 port parallel adaptor",
-"	1147  VScom 020 2 port parallel adaptor",
-"	2540  IXXAT CAN-Interface PC-I 04/PCI",
-"	2724  Thales PCSM Security Card",
-"	6540  PCI6540/6466 PCI-PCI bridge (transparent mode)",
-"		4c53 10e0  PSL09 PrPMC",
-"	6541  PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side)",
-"		4c53 10e0  PSL09 PrPMC",
-"	6542  PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side)",
-"		4c53 10e0  PSL09 PrPMC",
-"	8111  PEX 8111 PCI Express-to-PCI Bridge",
-"	8114  PEX 8114 PCI Express-to-PCI/PCI-X Bridge",
-"	8516  PEX 8516  Versatile PCI Express Switch",
-"	8532  PEX 8532  Versatile PCI Express Switch",
-"	9030  PCI <-> IOBus Bridge Hot Swap",
-"		10b5 2862  Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board",
-"		10b5 2906  Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board",
-"		10b5 2940  Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board",
-"		10b5 2977  IXXAT iPC-I XC16/PCI CAN Board",
-"		10b5 2978  SH ARC-PCIu SOHARD ARCNET card",
-"		10b5 3025  Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board",
-"		10b5 3068  Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board",
-"		1397 3136  4xS0-ISDN PCI Adapter",
-"		1397 3137  S2M-E1-ISDN PCI Adapter",
-"		1518 0200  Kontron ThinkIO-C",
-"		15ed 1002  MCCS 8-port Serial Hot Swap",
-"		15ed 1003  MCCS 16-port Serial Hot Swap",
-"	9036  9036",
-"	9050  PCI <-> IOBus Bridge",
-"		10b5 1067  IXXAT CAN i165",
-"		10b5 1172  IK220 (Heidenhain)",
-"		10b5 2036  SatPak GPS",
-"		10b5 2221  Alpermann+Velte PCL PCI LV: Timecode Reader Board",
-"		10b5 2273  SH ARC-PCI SOHARD ARCNET card",
-"		10b5 2431  Alpermann+Velte PCL PCI D: Timecode Reader Board",
-"		10b5 2905  Alpermann+Velte PCI TS: Time Synchronisation Board",
-"		10b5 9050  MP9050",
-"		1498 0362  TPMC866 8 Channel Serial Card",
-"		1522 0001  RockForce 4 Port V.90 Data/Fax/Voice Modem",
-"		1522 0002  RockForce 2 Port V.90 Data/Fax/Voice Modem",
-"		1522 0003  RockForce 6 Port V.90 Data/Fax/Voice Modem",
-"		1522 0004  RockForce 8 Port V.90 Data/Fax/Voice Modem",
-"		1522 0010  RockForce2000 4 Port V.90 Data/Fax/Voice Modem",
-"		1522 0020  RockForce2000 2 Port V.90 Data/Fax/Voice Modem",
-"		15ed 1000  Macrolink MCCS 8-port Serial",
-"		15ed 1001  Macrolink MCCS 16-port Serial",
-"		15ed 1002  Macrolink MCCS 8-port Serial Hot Swap",
-"		15ed 1003  Macrolink MCCS 16-port Serial Hot Swap",
-"		5654 2036  OpenSwitch 6 Telephony card",
-"		5654 3132  OpenSwitch 12 Telephony card",
-"		5654 5634  OpenLine4 Telephony Card",
-"		d531 c002  PCIntelliCAN 2xSJA1000 CAN bus",
-"		d84d 4006  EX-4006 1P",
-"		d84d 4008  EX-4008 1P EPP/ECP",
-"		d84d 4014  EX-4014 2P",
-"		d84d 4018  EX-4018 3P EPP/ECP",
-"		d84d 4025  EX-4025 1S(16C550) RS-232",
-"		d84d 4027  EX-4027 1S(16C650) RS-232",
-"		d84d 4028  EX-4028 1S(16C850) RS-232",
-"		d84d 4036  EX-4036 2S(16C650) RS-232",
-"		d84d 4037  EX-4037 2S(16C650) RS-232",
-"		d84d 4038  EX-4038 2S(16C850) RS-232",
-"		d84d 4052  EX-4052 1S(16C550) RS-422/485",
-"		d84d 4053  EX-4053 2S(16C550) RS-422/485",
-"		d84d 4055  EX-4055 4S(16C550) RS-232",
-"		d84d 4058  EX-4055 4S(16C650) RS-232",
-"		d84d 4065  EX-4065 8S(16C550) RS-232",
-"		d84d 4068  EX-4068 8S(16C650) RS-232",
-"		d84d 4078  EX-4078 2S(16C552) RS-232+1P",
-"	9054  PCI <-> IOBus Bridge",
-"		10b5 2455  Wessex Techology PHIL-PCI",
-"		10b5 2696  Innes Corp AM Radcap card",
-"		10b5 2717  Innes Corp Auricon card",
-"		10b5 2844  Innes Corp TVS Encoder card",
-"		12c7 4001  Intel Dialogic DM/V960-4T1 PCI",
-"		12d9 0002  PCI Prosody Card rev 1.5",
-"		16df 0011  PIKA PrimeNet MM PCI",
-"		16df 0012  PIKA PrimeNet MM cPCI 8",
-"		16df 0013  PIKA PrimeNet MM cPCI 8 (without CAS Signaling)",
-"		16df 0014  PIKA PrimeNet MM cPCI 4",
-"		16df 0015  PIKA Daytona MM",
-"		16df 0016  PIKA InLine MM",
-"	9056  Francois",
-"		10b5 2979  CellinkBlade 11 - CPCI board VoATM AAL1",
-"	9060  9060",
-"	906d  9060SD",
-"		125c 0640  Aries 16000P",
-"	906e  9060ES",
-"	9080  9080",
-"		103c 10eb  (Agilent) E2777B 83K Series Optical Communication Interface",
-"		103c 10ec  (Agilent) E6978-66442 PCI CIC",
-"		10b5 9080  9080 [real subsystem ID not set]",
-"		129d 0002  Aculab PCI Prosidy card",
-"		12d9 0002  PCI Prosody Card",
-"		12df 4422  4422PCI ['Do-All' Telemetry Data Aquisition System]",
-"	bb04  B&B 3PCIOSD1A Isolated PCI Serial",
-"10b6  Madge Networks",
-"	0001  Smart 16/4 PCI Ringnode",
-"	0002  Smart 16/4 PCI Ringnode Mk2",
-"		10b6 0002  Smart 16/4 PCI Ringnode Mk2",
-"		10b6 0006  16/4 CardBus Adapter",
-"	0003  Smart 16/4 PCI Ringnode Mk3",
-"		0e11 b0fd  Compaq NC4621 PCI, 4/16, WOL",
-"		10b6 0003  Smart 16/4 PCI Ringnode Mk3",
-"		10b6 0007  Presto PCI Plus Adapter",
-"	0004  Smart 16/4 PCI Ringnode Mk1",
-"	0006  16/4 Cardbus Adapter",
-"		10b6 0006  16/4 CardBus Adapter",
-"	0007  Presto PCI Adapter",
-"		10b6 0007  Presto PCI",
-"	0009  Smart 100/16/4 PCI-HS Ringnode",
-"		10b6 0009  Smart 100/16/4 PCI-HS Ringnode",
-"	000a  Smart 100/16/4 PCI Ringnode",
-"		10b6 000a  Smart 100/16/4 PCI Ringnode",
-"	000b  16/4 CardBus Adapter Mk2",
-"		10b6 0008  16/4 CardBus Adapter Mk2",
-"		10b6 000b  16/4 Cardbus Adapter Mk2",
-"	000c  RapidFire 3140V2 16/4 TR Adapter",
-"		10b6 000c  RapidFire 3140V2 16/4 TR Adapter",
-"	1000  Collage 25/155 ATM Client Adapter",
-"	1001  Collage 155 ATM Server Adapter",
-"10b7  3Com Corporation",
-"	0001  3c985 1000BaseSX (SX/TX)",
-"	0013  AR5212 802.11abg NIC (3CRDAG675)",
-"		10b7 2031  3CRDAG675 11a/b/g Wireless PCI Adapter",
-"	0910  3C910-A01",
-"	1006  MINI PCI type 3B Data Fax Modem",
-"	1007  Mini PCI 56k Winmodem",
-"		10b7 615c  Mini PCI 56K Modem",
-"	1201  3c982-TXM 10/100baseTX Dual Port A [Hydra]",
-"	1202  3c982-TXM 10/100baseTX Dual Port B [Hydra]",
-"	1700  3c940 10/100/1000Base-T [Marvell]",
-"		1043 80eb  A7V600/P4P800/K8V motherboard",
-"		10b7 0010  3C940 Gigabit LOM Ethernet Adapter",
-"		10b7 0020  3C941 Gigabit LOM Ethernet Adapter",
-"		147b 1407  KV8-MAX3 motherboard",
-"	3390  3c339 TokenLink Velocity",
-"	3590  3c359 TokenLink Velocity XL",
-"		10b7 3590  TokenLink Velocity XL Adapter (3C359/359B)",
-"	4500  3c450 HomePNA [Tornado]",
-"	5055  3c555 Laptop Hurricane",
-"	5057  3c575 Megahertz 10/100 LAN CardBus [Boomerang]",
-"		10b7 5a57  3C575 Megahertz 10/100 LAN Cardbus PC Card",
-"	5157  3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone]",
-"		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card",
-"	5257  3cCFE575CT CardBus [Cyclone]",
-"		10b7 5c57  FE575C-3Com 10/100 LAN CardBus-Fast Ethernet",
-"	5900  3c590 10BaseT [Vortex]",
-"	5920  3c592 EISA 10mbps Demon/Vortex",
-"	5950  3c595 100BaseTX [Vortex]",
-"	5951  3c595 100BaseT4 [Vortex]",
-"	5952  3c595 100Base-MII [Vortex]",
-"	5970  3c597 EISA Fast Demon/Vortex",
-"	5b57  3c595 Megahertz 10/100 LAN CardBus [Boomerang]",
-"		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card",
-"	6000  3CRSHPW796 [OfficeConnect Wireless CardBus]",
-"	6001  3com 3CRWE154G72 [Office Connect Wireless LAN Adapter]",
-"	6055  3c556 Hurricane CardBus [Cyclone]",
-"	6056  3c556B CardBus [Tornado]",
-"		10b7 6556  10/100 Mini PCI Ethernet Adapter",
-"	6560  3cCFE656 CardBus [Cyclone]",
-"		10b7 656a  3CCFEM656 10/100 LAN+56K Modem CardBus",
-"	6561  3cCFEM656 10/100 LAN+56K Modem CardBus",
-"		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus",
-"	6562  3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone]",
-"		10b7 656b  3CCFEM656B 10/100 LAN+56K Modem CardBus",
-"	6563  3cCFEM656B 10/100 LAN+56K Modem CardBus",
-"		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus",
-"	6564  3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado]",
-"	7646  3cSOHO100-TX Hurricane",
-"	7770  3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect]",
-"	7940  3c803 FDDILink UTP Controller",
-"	7980  3c804 FDDILink SAS Controller",
-"	7990  3c805 FDDILink DAS Controller",
-"	80eb  3c940B 10/100/1000Base-T",
-"	8811  Token ring",
-"	9000  3c900 10BaseT [Boomerang]",
-"	9001  3c900 10Mbps Combo [Boomerang]",
-"	9004  3c900B-TPO Etherlink XL [Cyclone]",
-"		10b7 9004  3C900B-TPO Etherlink XL TPO 10Mb",
-"	9005  3c900B-Combo Etherlink XL [Cyclone]",
-"		10b7 9005  3C900B-Combo Etherlink XL Combo",
-"	9006  3c900B-TPC Etherlink XL [Cyclone]",
-"	900a  3c900B-FL 10base-FL [Cyclone]",
-"	9050  3c905 100BaseTX [Boomerang]",
-"	9051  3c905 100BaseT4 [Boomerang]",
-"	9055  3c905B 100BaseTX [Cyclone]",
-"		1028 0080  3C905B Fast Etherlink XL 10/100",
-"		1028 0081  3C905B Fast Etherlink XL 10/100",
-"		1028 0082  3C905B Fast Etherlink XL 10/100",
-"		1028 0083  3C905B Fast Etherlink XL 10/100",
-"		1028 0084  3C905B Fast Etherlink XL 10/100",
-"		1028 0085  3C905B Fast Etherlink XL 10/100",
-"		1028 0086  3C905B Fast Etherlink XL 10/100",
-"		1028 0087  3C905B Fast Etherlink XL 10/100",
-"		1028 0088  3C905B Fast Etherlink XL 10/100",
-"		1028 0089  3C905B Fast Etherlink XL 10/100",
-"		1028 0090  3C905B Fast Etherlink XL 10/100",
-"		1028 0091  3C905B Fast Etherlink XL 10/100",
-"		1028 0092  3C905B Fast Etherlink XL 10/100",
-"		1028 0093  3C905B Fast Etherlink XL 10/100",
-"		1028 0094  3C905B Fast Etherlink XL 10/100",
-"		1028 0095  3C905B Fast Etherlink XL 10/100",
-"		1028 0096  3C905B Fast Etherlink XL 10/100",
-"		1028 0097  3C905B Fast Etherlink XL 10/100",
-"		1028 0098  3C905B Fast Etherlink XL 10/100",
-"		1028 0099  3C905B Fast Etherlink XL 10/100",
-"		10b7 9055  3C905B Fast Etherlink XL 10/100",
-"	9056  3c905B-T4 Fast EtherLink XL [Cyclone]",
-"	9058  3c905B Deluxe Etherlink 10/100/BNC [Cyclone]",
-"	905a  3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone]",
-"	9200  3c905C-TX/TX-M [Tornado]",
-"		1028 0095  3C920 Integrated Fast Ethernet Controller",
-"		1028 0097  3C920 Integrated Fast Ethernet Controller",
-"		1028 00fe  Optiplex GX240",
-"		1028 012a  3C920 Integrated Fast Ethernet Controller [Latitude C640]",
-"		10b7 1000  3C905C-TX Fast Etherlink for PC Management NIC",
-"		10b7 7000  10/100 Mini PCI Ethernet Adapter",
-"		10f1 2466  Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller)",
-"	9201  3C920B-EMB Integrated Fast Ethernet Controller [Tornado]",
-"		1043 80ab  A7N8X Deluxe onboard 3C920B-EMB Integrated Fast Ethernet Controller",
-"	9202  3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller",
-"	9210  3C920B-EMB-WNM Integrated Fast Ethernet Controller",
-"	9300  3CSOHO100B-TX 910-A01 [tulip]",
-"	9800  3c980-TX Fast Etherlink XL Server Adapter [Cyclone]",
-"		10b7 9800  3c980-TX Fast Etherlink XL Server Adapter",
-"	9805  3c980-C 10/100baseTX NIC [Python-T]",
-"		10b7 1201  EtherLink Server 10/100 Dual Port A",
-"		10b7 1202  EtherLink Server 10/100 Dual Port B",
-"		10b7 9805  3c980 10/100baseTX NIC [Python-T]",
-"		10f1 2462  Thunder K7 S2462",
-"	9900  3C990-TX [Typhoon]",
-"	9902  3CR990-TX-95 [Typhoon 56-bit]",
-"	9903  3CR990-TX-97 [Typhoon 168-bit]",
-"	9904  3C990B-TX-M/3C990BSVR [Typhoon2]",
-"		10b7 1000  3CR990B-TX-M [Typhoon2]",
-"		10b7 2000  3CR990BSVR [Typhoon2 Server]",
-"	9905  3CR990-FX-95/97/95 [Typhon Fiber]",
-"		10b7 1101  3CR990-FX-95 [Typhoon Fiber 56-bit]",
-"		10b7 1102  3CR990-FX-97 [Typhoon Fiber 168-bit]",
-"		10b7 2101  3CR990-FX-95 Server [Typhoon Fiber 56-bit]",
-"		10b7 2102  3CR990-FX-97 Server [Typhoon Fiber 168-bit]",
-"	9908  3CR990SVR95 [Typhoon Server 56-bit]",
-"	9909  3CR990SVR97 [Typhoon Server 168-bit]",
-"	990a  3C990SVR [Typhoon Server]",
-"	990b  3C990SVR [Typhoon Server]",
-"10b8  Standard Microsystems Corp [SMC]",
-"	0005  83c170 EPIC/100 Fast Ethernet Adapter",
-"		1055 e000  LANEPIC 10/100 [EVB171Q-PCI]",
-"		1055 e002  LANEPIC 10/100 [EVB171G-PCI]",
-"		10b8 a011  EtherPower II 10/100",
-"		10b8 a014  EtherPower II 10/100",
-"		10b8 a015  EtherPower II 10/100",
-"		10b8 a016  EtherPower II 10/100",
-"		10b8 a017  EtherPower II 10/100",
-"	0006  83c175 EPIC/100 Fast Ethernet Adapter",
-"		1055 e100  LANEPIC Cardbus Fast Ethernet Adapter",
-"		1055 e102  LANEPIC Cardbus Fast Ethernet Adapter",
-"		1055 e300  LANEPIC Cardbus Fast Ethernet Adapter",
-"		1055 e302  LANEPIC Cardbus Fast Ethernet Adapter",
-"		10b8 a012  LANEPIC Cardbus Fast Ethernet Adapter",
-"		13a2 8002  LANEPIC Cardbus Fast Ethernet Adapter",
-"		13a2 8006  LANEPIC Cardbus Fast Ethernet Adapter",
-"	1000  FDC 37c665",
-"	1001  FDC 37C922",
-"	2802  SMC2802W [EZ Connect g]",
-"	a011  83C170QF",
-"	b106  SMC34C90",
-"10b9  ALi Corporation",
-"	0101  CMI8338/C3DX PCI Audio Device",
-"	0111  C-Media CMI8738/C3DX Audio Device (OEM)",
-"		10b9 0111  C-Media CMI8738/C3DX Audio Device (OEM)",
-"	0780  Multi-IO Card",
-"	0782  Multi-IO Card",
-"	1435  M1435",
-"	1445  M1445",
-"	1449  M1449",
-"	1451  M1451",
-"	1461  M1461",
-"	1489  M1489",
-"	1511  M1511 [Aladdin]",
-"	1512  M1512 [Aladdin]",
-"	1513  M1513 [Aladdin]",
-"	1521  M1521 [Aladdin III]",
-"		10b9 1521  ALI M1521 Aladdin III CPU Bridge",
-"	1523  M1523",
-"		10b9 1523  ALI M1523 ISA Bridge",
-"	1531  M1531 [Aladdin IV]",
-"	1533  M1533/M1535 PCI to ISA Bridge [Aladdin IV/V/V+]",
-"		1014 053b  ThinkPad R40e (2684-HVG) PCI to ISA Bridge",
-"		10b9 1533  ALi M1533 Aladdin IV/V ISA Bridge",
-"	1541  M1541",
-"		10b9 1541  ALI M1541 Aladdin V/V+ AGP System Controller",
-"	1543  M1543",
-"	1563  M1563 HyperTransport South Bridge",
-"	1573  PCI to LPC Controller",
-"	1621  M1621",
-"	1631  ALI M1631 PCI North Bridge Aladdin Pro III",
-"	1632  M1632M Northbridge+Trident",
-"	1641  ALI M1641 PCI North Bridge Aladdin Pro IV",
-"	1644  M1644/M1644T Northbridge+Trident",
-"	1646  M1646 Northbridge+Trident",
-"	1647  M1647 Northbridge [MAGiK 1 / MobileMAGiK 1]",
-"	1651  M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM]",
-"	1671  M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR]",
-"	1672  M1672 Northbridge [CyberALADDiN-P4]",
-"	1681  M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR]",
-"	1687  M1687 K8 Northbridge [AGP8X and HyperTransport]",
-"	1689  M1689 K8 Northbridge [Super K8 Single Chip]",
-"	1695  M1695 K8 Northbridge [PCI Express and HyperTransport]",
-"	1697  M1697 HTT Host Bridge",
-"	3141  M3141",
-"	3143  M3143",
-"	3145  M3145",
-"	3147  M3147",
-"	3149  M3149",
-"	3151  M3151",
-"	3307  M3307",
-"	3309  M3309",
-"	3323  M3325 Video/Audio Decoder",
-"	5212  M4803",
-"	5215  MS4803",
-"	5217  M5217H",
-"	5219  M5219",
-"	5225  M5225",
-"	5228  M5228 ALi ATA/RAID Controller",
-"	5229  M5229 IDE",
-"		1014 050f  ThinkPad R30",
-"		1014 053d  ThinkPad R40e (2684-HVG) builtin IDE",
-"		103c 0024  Pavilion ze4400 builtin IDE",
-"		1043 8053  A7A266 Motherboard IDE",
-"	5235  M5225",
-"	5237  USB 1.1 Controller",
-"		1014 0540  ThinkPad R40e (2684-HVG) builtin USB",
-"		103c 0024  Pavilion ze4400 builtin USB",
-"		104d 810f  VAIO PCG-U1 USB/OHCI Revision 1.0",
-"	5239  USB 2.0 Controller",
-"	5243  M1541 PCI to AGP Controller",
-"	5246  AGP8X Controller",
-"	5247  PCI to AGP Controller",
-"	5249  M5249 HTT to PCI Bridge",
-"	524b  PCI Express Root Port",
-"	524c  PCI Express Root Port",
-"	524d  PCI Express Root Port",
-"	524e  PCI Express Root Port",
-"	5251  M5251 P1394 OHCI 1.0 Controller",
-"	5253  M5253 P1394 OHCI 1.1 Controller",
-"	5261  M5261 Ethernet Controller",
-"	5263  M5263 Ethernet Controller",
-"	5281  ALi M5281 Serial ATA / RAID Host Controller",
-"	5287  ULi 5287 SATA",
-"	5288  ULi M5288 SATA",
-"	5289  ULi 5289 SATA",
-"	5450  Lucent Technologies Soft Modem AMR",
-"	5451  M5451 PCI AC-Link Controller Audio Device",
-"		1014 0506  ThinkPad R30",
-"		1014 053e  ThinkPad R40e (2684-HVG) builtin Audio",
-"		103c 0024  Pavilion ze4400 builtin Audio",
-"		10b9 5451  HP Compaq nc4010 (DY885AA#ABN)",
-"	5453  M5453 PCI AC-Link Controller Modem Device",
-"	5455  M5455 PCI AC-Link Controller Audio Device",
-"	5457  M5457 AC'97 Modem Controller",
-"		1014 0535  ThinkPad R40e (2684-HVG) builtin modem",
-"		103c 0024  Pavilion ze4400 builtin Modem Device",
-"	5459  SmartLink SmartPCI561 56K Modem",
-"	545a  SmartLink SmartPCI563 56K Modem",
-"	5461  High Definition Audio/AC'97 Host Controller",
-"	5471  M5471 Memory Stick Controller",
-"	5473  M5473 SD-MMC Controller",
-"	7101  M7101 Power Management Controller [PMU]",
-"		1014 0510  ThinkPad R30",
-"		1014 053c  ThinkPad R40e (2684-HVG) Power Management Controller",
-"		103c 0024  Pavilion ze4400",
-"10ba  Mitsubishi Electric Corp.",
-"	0301  AccelGraphics AccelECLIPSE",
-"	0304  AccelGALAXY A2100 [OEM Evans & Sutherland]",
-"	0308  Tornado 3000 [OEM Evans & Sutherland]",
-"	1002  VG500 [VolumePro Volume Rendering Accelerator]",
-"10bb  Dapha Electronics Corporation",
-"10bc  Advanced Logic Research",
-"10bd  Surecom Technology",
-"	0e34  NE-34",
-"10be  Tseng Labs International Co.",
-"10bf  Most Inc",
-"10c0  Boca Research Inc.",
-"10c1  ICM Co., Ltd.",
-"10c2  Auspex Systems Inc.",
-"10c3  Samsung Semiconductors, Inc.",
-"	1100  Smartether100 SC1100 LAN Adapter (i82557B)",
-"10c4  Award Software International Inc.",
-"10c5  Xerox Corporation",
-"10c6  Rambus Inc.",
-"10c7  Media Vision",
-"10c8  Neomagic Corporation",
-"	0001  NM2070 [MagicGraph 128]",
-"	0002  NM2090 [MagicGraph 128V]",
-"	0003  NM2093 [MagicGraph 128ZV]",
-"	0004  NM2160 [MagicGraph 128XD]",
-"		1014 00ba  MagicGraph 128XD",
-"		1025 1007  MagicGraph 128XD",
-"		1028 0074  MagicGraph 128XD",
-"		1028 0075  MagicGraph 128XD",
-"		1028 007d  MagicGraph 128XD",
-"		1028 007e  MagicGraph 128XD",
-"		1033 802f  MagicGraph 128XD",
-"		104d 801b  MagicGraph 128XD",
-"		104d 802f  MagicGraph 128XD",
-"		104d 830b  MagicGraph 128XD",
-"		10ba 0e00  MagicGraph 128XD",
-"		10c8 0004  MagicGraph 128XD",
-"		10cf 1029  MagicGraph 128XD",
-"		10f7 8308  MagicGraph 128XD",
-"		10f7 8309  MagicGraph 128XD",
-"		10f7 830b  MagicGraph 128XD",
-"		10f7 830d  MagicGraph 128XD",
-"		10f7 8312  MagicGraph 128XD",
-"	0005  NM2200 [MagicGraph 256AV]",
-"		1014 00dd  ThinkPad 570",
-"		1028 0088  Latitude CPi A",
-"	0006  NM2360 [MagicMedia 256ZX]",
-"	0016  NM2380 [MagicMedia 256XL+]",
-"		10c8 0016  MagicMedia 256XL+",
-"	0025  NM2230 [MagicGraph 256AV+]",
-"	0083  NM2093 [MagicGraph 128ZV+]",
-"	8005  NM2200 [MagicMedia 256AV Audio]",
-"		0e11 b0d1  MagicMedia 256AV Audio Device on Discovery",
-"		0e11 b126  MagicMedia 256AV Audio Device on Durango",
-"		1014 00dd  MagicMedia 256AV Audio Device on BlackTip Thinkpad",
-"		1025 1003  MagicMedia 256AV Audio Device on TravelMate 720",
-"		1028 0088  Latitude CPi A",
-"		1028 008f  MagicMedia 256AV Audio Device on Colorado Inspiron",
-"		103c 0007  MagicMedia 256AV Audio Device on Voyager II",
-"		103c 0008  MagicMedia 256AV Audio Device on Voyager III",
-"		103c 000d  MagicMedia 256AV Audio Device on Omnibook 900",
-"		10c8 8005  MagicMedia 256AV Audio Device on FireAnt",
-"		110a 8005  MagicMedia 256AV Audio Device",
-"		14c0 0004  MagicMedia 256AV Audio Device",
-"	8006  NM2360 [MagicMedia 256ZX Audio]",
-"	8016  NM2380 [MagicMedia 256XL+ Audio]",
-"10c9  Dataexpert Corporation",
-"10ca  Fujitsu Microelectr., Inc.",
-"10cb  Omron Corporation",
-"10cc  Mai Logic Incorporated",
-"	0660  Articia S Host Bridge",
-"	0661  Articia S PCI Bridge",
-"10cd  Advanced System Products, Inc",
-"	1100  ASC1100",
-"	1200  ASC1200 [(abp940) Fast SCSI-II]",
-"	1300  ABP940-U / ABP960-U",
-"		10cd 1310  ASC1300 SCSI Adapter",
-"	2300  ABP940-UW",
-"	2500  ABP940-U2W",
-"10ce  Radius",
-"10cf  Fujitsu Limited.",
-"	2001  mb86605",
-"10d1  FuturePlus Systems Corp.",
-"10d2  Molex Incorporated",
-"10d3  Jabil Circuit Inc",
-"10d4  Hualon Microelectronics",
-"10d5  Autologic Inc.",
-"10d6  Cetia",
-"10d7  BCM Advanced Research",
-"10d8  Advanced Peripherals Labs",
-"10d9  Macronix, Inc. [MXIC]",
-"	0431  MX98715",
-"	0512  MX98713",
-"	0531  MX987x5",
-"		1186 1200  DFE-540TX ProFAST 10/100 Adapter",
-"	8625  MX86250",
-"	8626  Macronix MX86251 + 3Dfx Voodoo Rush",
-"	8888  MX86200",
-"10da  Compaq IPG-Austin",
-"	0508  TC4048 Token Ring 4/16",
-"	3390  Tl3c3x9",
-"10db  Rohm LSI Systems, Inc.",
-"10dc  CERN/ECP/EDU",
-"	0001  STAR/RD24 SCI-PCI (PMC)",
-"	0002  TAR/RD24 SCI-PCI (PMC)",
-"	0021  HIPPI destination",
-"	0022  HIPPI source",
-"	10dc  ATT2C15-3 FPGA",
-"10dd  Evans & Sutherland",
-"	0100  Lightning 1200",
-"10de  nVidia Corporation",
-"	0008  NV1 [EDGE 3D]",
-"	0009  NV1 [EDGE 3D]",
-"	0010  NV2 [Mutara V08]",
-"	0020  NV4 [RIVA TNT]",
-"		1043 0200  V3400 TNT",
-"		1048 0c18  Erazor II SGRAM",
-"		1048 0c19  Erazor II",
-"		1048 0c1b  Erazor II",
-"		1048 0c1c  Erazor II",
-"		1092 0550  Viper V550",
-"		1092 0552  Viper V550",
-"		1092 4804  Viper V550",
-"		1092 4808  Viper V550",
-"		1092 4810  Viper V550",
-"		1092 4812  Viper V550",
-"		1092 4815  Viper V550",
-"		1092 4820  Viper V550 with TV out",
-"		1092 4822  Viper V550",
-"		1092 4904  Viper V550",
-"		1092 4914  Viper V550",
-"		1092 8225  Viper V550",
-"		10b4 273d  Velocity 4400",
-"		10b4 273e  Velocity 4400",
-"		10b4 2740  Velocity 4400",
-"		10de 0020  Riva TNT",
-"		1102 1015  Graphics Blaster CT6710",
-"		1102 1016  Graphics Blaster RIVA TNT",
-"	0028  NV5 [RIVA TNT2/TNT2 Pro]",
-"		1043 0200  AGP-V3800 SGRAM",
-"		1043 0201  AGP-V3800 SDRAM",
-"		1043 0205  PCI-V3800",
-"		1043 4000  AGP-V3800PRO",
-"		1048 0c21  Synergy II",
-"		1048 0c28  Erazor III",
-"		1048 0c29  Erazor III",
-"		1048 0c2a  Erazor III",
-"		1048 0c2b  Erazor III",
-"		1048 0c31  Erazor III Pro",
-"		1048 0c32  Erazor III Pro",
-"		1048 0c33  Erazor III Pro",
-"		1048 0c34  Erazor III Pro",
-"		107d 2134  WinFast 3D S320 II + TV-Out",
-"		1092 4804  Viper V770",
-"		1092 4a00  Viper V770",
-"		1092 4a02  Viper V770 Ultra",
-"		1092 5a00  RIVA TNT2/TNT2 Pro",
-"		1092 6a02  Viper V770 Ultra",
-"		1092 7a02  Viper V770 Ultra",
-"		10de 0005  RIVA TNT2 Pro",
-"		10de 000f  Compaq NVIDIA TNT2 Pro",
-"		1102 1020  3D Blaster RIVA TNT2",
-"		1102 1026  3D Blaster RIVA TNT2 Digital",
-"		14af 5810  Maxi Gamer Xentor",
-"	0029  NV5 [RIVA TNT2 Ultra]",
-"		1043 0200  AGP-V3800 Deluxe",
-"		1043 0201  AGP-V3800 Ultra SDRAM",
-"		1043 0205  PCI-V3800 Ultra",
-"		1048 0c2e  Erazor III Ultra",
-"		1048 0c2f  Erazor III Ultra",
-"		1048 0c30  Erazor III Ultra",
-"		1102 1021  3D Blaster RIVA TNT2 Ultra",
-"		1102 1029  3D Blaster RIVA TNT2 Ultra",
-"		1102 102f  3D Blaster RIVA TNT2 Ultra",
-"		14af 5820  Maxi Gamer Xentor 32",
-"	002a  NV5 [Riva TnT2]",
-"	002b  NV5 [Riva TnT2]",
-"	002c  NV6 [Vanta/Vanta LT]",
-"		1043 0200  AGP-V3800 Combat SDRAM",
-"		1043 0201  AGP-V3800 Combat",
-"		1048 0c20  TNT2 Vanta",
-"		1048 0c21  TNT2 Vanta",
-"		1092 6820  Viper V730",
-"		1102 1031  CT6938 VANTA 8MB",
-"		1102 1034  CT6894 VANTA 16MB",
-"		14af 5008  Maxi Gamer Phoenix 2",
-"	002d  NV5M64 [RIVA TNT2 Model 64/Model 64 Pro]",
-"		1043 0200  AGP-V3800M",
-"		1043 0201  AGP-V3800M",
-"		1048 0c3a  Erazor III LT",
-"		1048 0c3b  Erazor III LT",
-"		10de 001e  M64 AGP4x",
-"		1102 1023  CT6892 RIVA TNT2 Value",
-"		1102 1024  CT6932 RIVA TNT2 Value 32Mb",
-"		1102 102c  CT6931 RIVA TNT2 Value [Jumper]",
-"		1462 8808  MSI-8808",
-"		1554 1041  Pixelview RIVA TNT2 M64",
-"		1569 002d  Palit Microsystems Daytona TNT2 M64",
-"	002e  NV6 [Vanta]",
-"	002f  NV6 [Vanta]",
-"	0034  MCP04 SMBus",
-"	0035  MCP04 IDE",
-"	0036  MCP04 Serial ATA Controller",
-"	0037  MCP04 Ethernet Controller",
-"	0038  MCP04 Ethernet Controller",
-"	003a  MCP04 AC'97 Audio Controller",
-"	003b  MCP04 USB Controller",
-"	003c  MCP04 USB Controller",
-"	003d  MCP04 PCI Bridge",
-"	003e  MCP04 Serial ATA Controller",
-"	0040  NV40 [GeForce 6800 Ultra]",
-"	0041  NV40 [GeForce 6800]",
-"		1043 817b  V9999 Gamer Edition",
-"	0042  NV40.2 [GeForce 6800 LE]",
-"	0043  NV40.3",
-"	0044  NV40 [GeForce 6800 XT]",
-"	0045  NV40 [GeForce 6800 GT]",
-"	0047  NV40 [GeForce 6800 GS]",
-"		1682 2109  GeForce 6800 GS",
-"	0049  NV40GL",
-"	004e  NV40GL [Quadro FX 4000]",
-"	0050  CK804 ISA Bridge",
-"		1043 815a  K8N4-E Mainboard",
-"		1458 0c11  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	0051  CK804 ISA Bridge",
-"	0052  CK804 SMBus",
-"		1043 815a  K8N4-E Mainboard",
-"		1458 0c11  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	0053  CK804 IDE",
-"		1043 815a  K8N4-E Mainboard",
-"		1458 5002  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	0054  CK804 Serial ATA Controller",
-"		1458 b003  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	0055  CK804 Serial ATA Controller",
-"		1043 815a  K8N4-E Mainboard",
-"		1458 b003  GA-K8N Ultra-9 Mainboard",
-"	0056  CK804 Ethernet Controller",
-"	0057  CK804 Ethernet Controller",
-"		1043 8141  K8N4-E Mainboard",
-"		1458 e000  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	0058  CK804 AC'97 Modem",
-"	0059  CK804 AC'97 Audio Controller",
-"		1043 812a  K8N4-E Mainboard",
-"	005a  CK804 USB Controller",
-"		1043 815a  K8N4-E Mainboard",
-"		1458 5004  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	005b  CK804 USB Controller",
-"		1043 815a  K8N4-E Mainboard",
-"		1458 5004  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	005c  CK804 PCI Bridge",
-"	005d  CK804 PCIE Bridge",
-"	005e  CK804 Memory Controller",
-"		10f1 2891  Thunder K8SRE Mainboard",
-"		1458 5000  GA-K8N Ultra-9 Mainboard",
-"		1462 7100  MSI K8N Diamond",
-"	005f  CK804 Memory Controller",
-"	0060  nForce2 ISA Bridge",
-"		1043 80ad  A7N8X Mainboard",
-"		a0a0 03ba  UK79G-1394 motherboard",
-"	0064  nForce2 SMBus (MCP)",
-"		a0a0 03bb  UK79G-1394 motherboard",
-"	0065  nForce2 IDE",
-"		a0a0 03b2  UK79G-1394 motherboard",
-"	0066  nForce2 Ethernet Controller",
-"		1043 80a7  A7N8X Mainboard onboard nForce2 Ethernet",
-"	0067  nForce2 USB Controller",
-"		1043 0c11  A7N8X Mainboard",
-"	0068  nForce2 USB Controller",
-"		1043 0c11  A7N8X Mainboard",
-"		a0a0 03b4  UK79G-1394 motherboard",
-"	006a  nForce2 AC97 Audio Controler (MCP)",
-"		a0a0 0304  UK79G-1394 motherboard",
-"	006b  nForce Audio Processing Unit",
-"		10de 006b  nForce2 MCP Audio Processing Unit",
-"	006c  nForce2 External PCI Bridge",
-"	006d  nForce2 PCI Bridge",
-"	006e  nForce2 FireWire (IEEE 1394) Controller",
-"		a0a0 0306  UK79G-1394 motherboard",
-"	0080  MCP2A ISA bridge",
-"		147b 1c09  NV7 Motherboard",
-"	0084  MCP2A SMBus",
-"		147b 1c09  NV7 Motherboard",
-"	0085  MCP2A IDE",
-"		147b 1c09  NV7 Motherboard",
-"	0086  MCP2A Ethernet Controller",
-"	0087  MCP2A USB Controller",
-"		147b 1c09  NV7 Motherboard",
-"	0088  MCP2A USB Controller",
-"		147b 1c09  NV7 Motherboard",
-"	008a  MCP2S AC'97 Audio Controller",
-"		147b 1c09  NV7 Motherboard",
-"	008b  MCP2A PCI Bridge",
-"	008c  MCP2A Ethernet Controller",
-"	008e  nForce2 Serial ATA Controller",
-"	0090  G70 [GeForce 7800 GTX]",
-"	0091  G70 [GeForce 7800 GTX]",
-"	0092  G70 [GeForce 7800 GT]",
-"	0093  G70 [GeForce 7800 GS]",
-"	0098  GeForce Go 7800",
-"	0099  GE Force Go 7800 GTX",
-"	009d  G70GL [Quadro FX4500]",
-"	00a0  NV5 [Aladdin TNT2]",
-"		14af 5810  Maxi Gamer Xentor",
-"	00c0  NV41 [GeForce 6800 GS]",
-"	00c1  NV41.1 [GeForce 6800]",
-"	00c2  NV41.2 [GeForce 6800 LE]",
-"	00c3  NV42 [Geforce 6800 XT]",
-"	00c8  NV41.8 [GeForce Go 6800]",
-"	00c9  NV41.9 [GeForce Go 6800 Ultra]",
-"	00cc  NV41 [Quadro FX Go1400]",
-"	00cd  NV41 [Quadro FX 3450/4000 SDI]",
-"	00ce  NV41GL [Quadro FX 1400]",
-"	00d0  nForce3 LPC Bridge",
-"	00d1  nForce3 Host Bridge",
-"	00d2  nForce3 AGP Bridge",
-"	00d3  CK804 Memory Controller",
-"	00d4  nForce3 SMBus",
-"	00d5  nForce3 IDE",
-"	00d6  nForce3 Ethernet",
-"	00d7  nForce3 USB 1.1",
-"	00d8  nForce3 USB 2.0",
-"	00d9  nForce3 Audio",
-"	00da  nForce3 Audio",
-"	00dd  nForce3 PCI Bridge",
-"	00df  CK8S Ethernet Controller",
-"		147b 1c0b  NF8 Mainboard",
-"	00e0  nForce3 250Gb LPC Bridge",
-"		147b 1c0b  NF8 Mainboard",
-"	00e1  nForce3 250Gb Host Bridge",
-"		147b 1c0b  NF8 Mainboard",
-"	00e2  nForce3 250Gb AGP Host to PCI Bridge",
-"	00e3  CK8S Serial ATA Controller (v2.5)",
-"		147b 1c0b  NF8 Mainboard",
-"	00e4  nForce 250Gb PCI System Management",
-"		147b 1c0b  NF8 Mainboard",
-"	00e5  CK8S Parallel ATA Controller (v2.5)",
-"		147b 1c0b  NF8 Mainboard",
-"	00e6  CK8S Ethernet Controller",
-"	00e7  CK8S USB Controller",
-"		147b 1c0b  NF8 Mainboard",
-"	00e8  nForce3 EHCI USB 2.0 Controller",
-"		147b 1c0b  NF8 Mainboard",
-"	00ea  nForce3 250Gb AC'97 Audio Controller",
-"		147b 1c0b  NF8 Mainboard",
-"	00ed  nForce3 250Gb PCI-to-PCI Bridge",
-"	00ee  CK8S Serial ATA Controller (v2.5)",
-"	00f0  NV40 [GeForce 6800/GeForce 6800 Ultra]",
-"	00f1  NV43 [GeForce 6600/GeForce 6600 GT]",
-"		1043 81a6  N6600GT TD 128M AGP",
-"		1682 2119  GeForce 6600 GT AGP 128MB DDR3 DUAL DVI TV",
-"	00f2  NV43 [GeForce 6600/GeForce 6600 GT]",
-"		1682 211c  GeForce 6600 256MB DDR DUAL DVI TV",
-"	00f3  NV43 [GeForce 6200]",
-"	00f4  NV43 [GeForce 6600 LE]",
-"	00f5  G70 [GeForce 7800 GS]",
-"	00f6  NV43 [GeForce 6600 GS]",
-"	00f8  NV45GL [Quadro FX 3400/4400]",
-"	00f9  NV40 [GeForce 6800 Ultra/GeForce 6800 GT]",
-"		1682 2120  GEFORCE 6800 GT PCI-E",
-"	00fa  NV36 [GeForce PCX 5750]",
-"	00fb  NV35 [GeForce PCX 5900]",
-"	00fc  NV37GL [Quadro FX 330/GeForce PCX 5300]",
-"	00fd  NV37GL [Quadro FX 330/Quadro NVS280]",
-"	00fe  NV38GL [Quadro FX 1300]",
-"	00ff  NV18 [GeForce PCX 4300]",
-"	0100  NV10 [GeForce 256 SDR]",
-"		1043 0200  AGP-V6600 SGRAM",
-"		1043 0201  AGP-V6600 SDRAM",
-"		1043 4008  AGP-V6600 SGRAM",
-"		1043 4009  AGP-V6600 SDRAM",
-"		1048 0c41  Erazor X",
-"		1048 0c43  ERAZOR X PCI",
-"		1048 0c48  Synergy Force",
-"		1102 102d  CT6941 GeForce 256",
-"		14af 5022  3D Prophet SE",
-"	0101  NV10DDR [GeForce 256 DDR]",
-"		1043 0202  AGP-V6800 DDR",
-"		1043 400a  AGP-V6800 DDR SGRAM",
-"		1043 400b  AGP-V6800 DDR SDRAM",
-"		1048 0c42  Erazor X",
-"		107d 2822  WinFast GeForce 256",
-"		1102 102e  CT6971 GeForce 256 DDR",
-"		14af 5021  3D Prophet DDR-DVI",
-"	0103  NV10GL [Quadro]",
-"		1048 0c40  GLoria II-64",
-"		1048 0c44  GLoria II",
-"		1048 0c45  GLoria II",
-"		1048 0c4a  GLoria II-64 Pro",
-"		1048 0c4b  GLoria II-64 Pro DVII",
-"	0110  NV11 [GeForce2 MX/MX 400]",
-"		1043 4015  AGP-V7100 Pro",
-"		1043 4031  V7100 Pro with TV output",
-"		1048 0c60  Gladiac MX",
-"		1048 0c61  Gladiac 511PCI",
-"		1048 0c63  Gladiac 511TV-OUT 32MB",
-"		1048 0c64  Gladiac 511TV-OUT 64MB",
-"		1048 0c65  Gladiac 511TWIN",
-"		1048 0c66  Gladiac 311",
-"		10de 0091  Dell OEM GeForce 2 MX 400",
-"		10de 00a1  Apple OEM GeForce2 MX",
-"		1462 8817  MSI GeForce2 MX400 Pro32S [MS-8817]",
-"		14af 7102  3D Prophet II MX",
-"		14af 7103  3D Prophet II MX Dual-Display",
-"	0111  NV11DDR [GeForce2 MX 100 DDR/200 DDR]",
-"	0112  NV11 [GeForce2 Go]",
-"	0113  NV11GL [Quadro2 MXR/EX/Go]",
-"	0140  NV43 [GeForce 6600 GT]",
-"	0141  NV43 [GeForce 6600]",
-"		1458 3124  GV-NX66128DP Turbo Force Edition",
-"	0142  NV43 [GeForce 6600 PCIe]",
-"	0144  NV43 [GeForce Go 6600]",
-"	0145  NV43 [GeForce 6610 XL]",
-"	0146  NV43 [Geforce Go 6600TE/6200TE]",
-"	0148  NV43 [GeForce Go 6600]",
-"	0149  NV43 [GeForce Go 6600 GT]",
-"	014a  Quadro NVS 440",
-"	014c  Quadro FX 550",
-"	014e  NV43GL [Quadro FX 540]",
-"	014f  NV43 [GeForce 6200]",
-"	0150  NV15 [GeForce2 GTS/Pro]",
-"		1043 4016  V7700 AGP Video Card",
-"		1048 0c50  Gladiac",
-"		1048 0c52  Gladiac-64",
-"		107d 2840  WinFast GeForce2 GTS with TV output",
-"		107d 2842  WinFast GeForce 2 Pro",
-"		1462 8831  Creative GeForce2 Pro",
-"	0151  NV15DDR [GeForce2 Ti]",
-"		1043 405f  V7700Ti",
-"		1462 5506  Creative 3D Blaster Geforce2 Titanium",
-"	0152  NV15BR [GeForce2 Ultra, Bladerunner]",
-"		1048 0c56  GLADIAC Ultra",
-"	0153  NV15GL [Quadro2 Pro]",
-"	0161  GeForce 6200 TurboCache(TM)",
-"	0162  NV43 [GeForce 6200 SE]",
-"	0164  NV44 [GeForce Go 6200]",
-"	0165  NV44 [Quadro NVS 285]",
-"	0166  NV43 [GeForce Go 6400]",
-"	0167  GeForce Go 6200 TurboCache",
-"	0168  NV43 [GeForce Go 6200 TurboCache]",
-"	0170  NV17 [GeForce4 MX 460]",
-"	0171  NV17 [GeForce4 MX 440]",
-"		10b0 0002  Gainward Pro/600 TV",
-"		10de 0008  Apple OEM GeForce4 MX 440",
-"		1462 8661  G4MX440-VTP",
-"		1462 8730  MX440SES-T (MS-8873)",
-"		1462 8852  GeForce4 MX440 PCI",
-"		147b 8f00  Abit Siluro GeForce4MX440",
-"	0172  NV17 [GeForce4 MX 420]",
-"	0173  NV17 [GeForce4 MX 440-SE]",
-"	0174  NV17 [GeForce4 440 Go]",
-"	0175  NV17 [GeForce4 420 Go]",
-"	0176  NV17 [GeForce4 420 Go 32M]",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"	0177  NV17 [GeForce4 460 Go]",
-"	0178  NV17GL [Quadro4 550 XGL]",
-"	0179  NV17 [GeForce4 420 Go 32M]",
-"		10de 0179  GeForce4 MX (Mac)",
-"	017a  NV17GL [Quadro4 200/400 NVS]",
-"	017b  NV17GL [Quadro4 550 XGL]",
-"	017c  NV17GL [Quadro4 500 GoGL]",
-"	017d  NV17 [GeForce4 410 Go 16M]",
-"	0181  NV18 [GeForce4 MX 440 AGP 8x]",
-"		1043 806f  V9180 Magic",
-"		1462 8880  MS-StarForce GeForce4 MX 440 with AGP8X",
-"		1462 8900  MS-8890 GeForce 4 MX440 AGP8X",
-"		1462 9350  MSI Geforce4 MX T8X with AGP8X",
-"		147b 8f0d  Siluro GF4 MX-8X",
-"	0182  NV18 [GeForce4 MX 440SE AGP 8x]",
-"	0183  NV18 [GeForce4 MX 420 AGP 8x]",
-"	0185  NV18 [GeForce4 MX 4000 AGP 8x]",
-"	0186  NV18M [GeForce4 448 Go]",
-"	0187  NV18M [GeForce4 488 Go]",
-"	0188  NV18GL [Quadro4 580 XGL]",
-"	018a  NV18GL [Quadro4 NVS AGP 8x]",
-"	018b  NV18GL [Quadro4 380 XGL]",
-"	018c  Quadro NVS 50 PCI",
-"	018d  NV18M [GeForce4 448 Go]",
-"	01a0  NVCrush11 [GeForce2 MX Integrated Graphics]",
-"	01a4  nForce CPU bridge",
-"	01ab  nForce 420 Memory Controller (DDR)",
-"	01ac  nForce 220/420 Memory Controller",
-"	01ad  nForce 220/420 Memory Controller",
-"	01b0  nForce Audio",
-"	01b1  nForce Audio",
-"	01b2  nForce ISA Bridge",
-"	01b4  nForce PCI System Management",
-"	01b7  nForce AGP to PCI Bridge",
-"	01b8  nForce PCI-to-PCI bridge",
-"	01bc  nForce IDE",
-"	01c1  nForce AC'97 Modem Controller",
-"	01c2  nForce USB Controller",
-"	01c3  nForce Ethernet Controller",
-"	01d1  GeForce 7300 LE",
-"	01d7  Quadro NVS 110M / GeForce Go 7300",
-"	01d8  GeForce Go 7400",
-"	01da  Quadro NVS 110M",
-"	01de  Quadro FX 350",
-"		10de 01dc  Quadro  FX Go350M",
-"	01df  GeForce 7300 GS",
-"	01e0  nForce2 AGP (different version?)",
-"		147b 1c09  NV7 Motherboard",
-"	01e8  nForce2 AGP",
-"	01ea  nForce2 Memory Controller 0",
-"		a0a0 03b9  UK79G-1394 motherboard",
-"	01eb  nForce2 Memory Controller 1",
-"		a0a0 03b9  UK79G-1394 motherboard",
-"	01ec  nForce2 Memory Controller 2",
-"		a0a0 03b9  UK79G-1394 motherboard",
-"	01ed  nForce2 Memory Controller 3",
-"		a0a0 03b9  UK79G-1394 motherboard",
-"	01ee  nForce2 Memory Controller 4",
-"		a0a0 03b9  UK79G-1394 motherboard",
-"	01ef  nForce2 Memory Controller 5",
-"		a0a0 03b9  UK79G-1394 motherboard",
-"	01f0  NV18 [GeForce4 MX - nForce GPU]",
-"		a0a0 03b5  UK79G-1394 motherboard",
-"	0200  NV20 [GeForce3]",
-"		1043 402f  AGP-V8200 DDR",
-"		1048 0c70  GLADIAC 920",
-"	0201  NV20 [GeForce3 Ti 200]",
-"	0202  NV20 [GeForce3 Ti 500]",
-"		1043 405b  V8200 T5",
-"		1545 002f  Xtasy 6964",
-"	0203  NV20DCC [Quadro DCC]",
-"	0211  NV40 [GeForce 6800]",
-"	0212  NV40 [GeForce 6800 LE]",
-"	0215  NV40 [GeForce 6800 GT]",
-"	0218  NV40 [GeForce 6800 XT]",
-"	0221  NV43 [GeForce 6200]",
-"	0240  C51PV [GeForce 6150]",
-"		1462 7207  K8NGM2 series",
-"	0241  C51 PCI Express Bridge",
-"	0242  C51G [GeForce 6100]",
-"	0243  C51 PCI Express Bridge",
-"	0244  C51 PCI Express Bridge",
-"	0245  C51 PCI Express Bridge",
-"	0246  C51 PCI Express Bridge",
-"	0247  C51 PCI Express Bridge",
-"	0248  C51 PCI Express Bridge",
-"	0249  C51 PCI Express Bridge",
-"	024a  C51 PCI Express Bridge",
-"	024b  C51 PCI Express Bridge",
-"	024c  C51 PCI Express Bridge",
-"	024d  C51 PCI Express Bridge",
-"	024e  C51 PCI Express Bridge",
-"	024f  C51 PCI Express Bridge",
-"	0250  NV25 [GeForce4 Ti 4600]",
-"	0251  NV25 [GeForce4 Ti 4400]",
-"		1043 8023  v8440 GeForce 4 Ti4400",
-"	0252  NV25 [GeForce4 Ti]",
-"	0253  NV25 [GeForce4 Ti 4200]",
-"		107d 2896  WinFast A250 LE TD (Dual VGA/TV-out/DVI)",
-"		147b 8f09  Siluro (Dual VGA/TV-out/DVI)",
-"	0258  NV25GL [Quadro4 900 XGL]",
-"	0259  NV25GL [Quadro4 750 XGL]",
-"	025b  NV25GL [Quadro4 700 XGL]",
-"	0260  MCP51 LPC Bridge",
-"		1462 7207  K8NGM2 series",
-"	0261  MCP51 LPC Bridge",
-"	0262  MCP51 LPC Bridge",
-"	0263  MCP51 LPC Bridge",
-"	0264  MCP51 SMBus",
-"		1462 7207  K8NGM2 series",
-"	0265  MCP51 IDE",
-"		1462 7207  K8NGM2 series",
-"	0266  MCP51 Serial ATA Controller",
-"		1462 7207  K8NGM2 series",
-"	0267  MCP51 Serial ATA Controller",
-"		1462 7207  K8NGM2 series",
-"	0268  MCP51 Ethernet Controller",
-"	0269  MCP51 Ethernet Controller",
-"		1462 7207  K8NGM2 series",
-"	026a  MCP51 MCI",
-"	026b  MCP51 AC97 Audio Controller",
-"	026c  MCP51 High Definition Audio",
-"		1462 7207  K8NGM2 series",
-"	026d  MCP51 USB Controller",
-"		1462 7207  K8NGM2 series",
-"	026e  MCP51 USB Controller",
-"		1462 7207  K8NGM2 series",
-"	026f  MCP51 PCI Bridge",
-"	0270  MCP51 Host Bridge",
-"		1462 7207  K8NGM2 series",
-"	0271  MCP51 PMU",
-"	0272  MCP51 Memory Controller 0",
-"	027e  C51 Memory Controller 2",
-"		1462 7207  K8NGM2 series",
-"	027f  C51 Memory Controller 3",
-"		1462 7207  K8NGM2 series",
-"	0280  NV28 [GeForce4 Ti 4800]",
-"	0281  NV28 [GeForce4 Ti 4200 AGP 8x]",
-"	0282  NV28 [GeForce4 Ti 4800 SE]",
-"	0286  NV28 [GeForce4 Ti 4200 Go AGP 8x]",
-"	0288  NV28GL [Quadro4 980 XGL]",
-"	0289  NV28GL [Quadro4 780 XGL]",
-"	028c  NV28GLM [Quadro4 700 GoGL]",
-"	0290  GeForce 7900 GTX",
-"	0291  GeForce 7900 GT",
-"	029a  G71 [Quadro FX 2500M]",
-"	029b  G71 [Quadro FX 1500M]",
-"	029c  Quadro FX 5500",
-"	029d  Quadro FX 3500",
-"	029e  Quadro FX 1500",
-"	02a0  NV2A [XGPU]",
-"	02e1  GeForce 7600 GS",
-"	02f0  C51 Host Bridge",
-"		1462 7207  K8NGM2 series",
-"	02f1  C51 Host Bridge",
-"	02f2  C51 Host Bridge",
-"	02f3  C51 Host Bridge",
-"	02f4  C51 Host Bridge",
-"	02f5  C51 Host Bridge",
-"	02f6  C51 Host Bridge",
-"	02f7  C51 Host Bridge",
-"	02f8  C51 Memory Controller 5",
-"		1462 7207  K8NGM2 series",
-"	02f9  C51 Memory Controller 4",
-"		1462 7207  K8NGM2 series",
-"	02fa  C51 Memory Controller 0",
-"		1462 7207  K8NGM2 series",
-"	02fb  C51 PCI Express Bridge",
-"	02fc  C51 PCI Express Bridge",
-"	02fd  C51 PCI Express Bridge",
-"	02fe  C51 Memory Controller 1",
-"		1462 7207  K8NGM2 series",
-"	02ff  C51 Host Bridge",
-"		1462 7207  K8NGM2 series",
-"	0300  NV30 [GeForce FX]",
-"	0301  NV30 [GeForce FX 5800 Ultra]",
-"	0302  NV30 [GeForce FX 5800]",
-"	0308  NV30GL [Quadro FX 2000]",
-"	0309  NV30GL [Quadro FX 1000]",
-"	0311  NV31 [GeForce FX 5600 Ultra]",
-"	0312  NV31 [GeForce FX 5600]",
-"	0313  NV31",
-"	0314  NV31 [GeForce FX 5600XT]",
-"		1043 814a  V9560XT/TD",
-"	0316  NV31M",
-"	0317  NV31M Pro",
-"	031a  NV31M [GeForce FX Go5600]",
-"	031b  NV31M [GeForce FX Go5650]",
-"	031c  NVIDIA Quadro FX Go700",
-"	031d  NV31GLM",
-"	031e  NV31GLM Pro",
-"	031f  NV31GLM Pro",
-"	0320  NV34 [GeForce FX 5200]",
-"	0321  NV34 [GeForce FX 5200 Ultra]",
-"	0322  NV34 [GeForce FX 5200]",
-"		1462 9171  MS-8917 (FX5200-T128)",
-"		1462 9360  MS-8936 (FX5200-T128)",
-"	0323  NV34 [GeForce FX 5200LE]",
-"	0324  NV34M [GeForce FX Go5200]",
-"		1028 0196  Inspiron 5160",
-"		1071 8160  MIM2000",
-"	0325  NV34M [GeForce FX Go5250]",
-"	0326  NV34 [GeForce FX 5500]",
-"	0327  NV34 [GeForce FX 5100]",
-"	0328  NV34M [GeForce FX Go5200 32M/64M]",
-"	0329  NV34M [GeForce FX Go5200]",
-"	032a  NV34GL [Quadro NVS 280 PCI]",
-"	032b  NV34GL [Quadro FX 500/600 PCI]",
-"	032c  NV34GLM [GeForce FX Go 5300]",
-"	032d  NV34 [GeForce FX Go5100]",
-"	032f  NV34GL",
-"	0330  NV35 [GeForce FX 5900 Ultra]",
-"	0331  NV35 [GeForce FX 5900]",
-"		1043 8145  V9950GE",
-"	0332  NV35 [GeForce FX 5900XT]",
-"	0333  NV38 [GeForce FX 5950 Ultra]",
-"	0334  NV35 [GeForce FX 5900ZT]",
-"	0338  NV35GL [Quadro FX 3000]",
-"	033f  NV35GL [Quadro FX 700]",
-"	0341  NV36.1 [GeForce FX 5700 Ultra]",
-"	0342  NV36.2 [GeForce FX 5700]",
-"	0343  NV36 [GeForce FX 5700LE]",
-"	0344  NV36.4 [GeForce FX 5700VE]",
-"	0345  NV36.5",
-"	0347  NV36 [GeForce FX Go5700]",
-"		103c 006a  NX9500",
-"	0348  NV36 [GeForce FX Go5700]",
-"	0349  NV36M Pro",
-"	034b  NV36MAP",
-"	034c  NV36 [Quadro FX Go1000]",
-"	034e  NV36GL [Quadro FX 1100]",
-"	034f  NV36GL",
-"	0360  MCP55 LPC Bridge",
-"	0361  MCP55 LPC Bridge",
-"	0362  MCP55 LPC Bridge",
-"	0363  MCP55 LPC Bridge",
-"	0364  MCP55 LPC Bridge",
-"	0365  MCP55 LPC Bridge",
-"	0366  MCP55 LPC Bridge",
-"	0367  MCP55 LPC Bridge",
-"	0368  MCP55 SMBus",
-"	0369  MCP55 Memory Controller",
-"	036a  MCP55 Memory Controller",
-"	036c  MCP55 USB Controller",
-"	036d  MCP55 USB Controller",
-"	036e  MCP55 IDE",
-"	0371  MCP55 High Definition Audio",
-"	0372  MCP55 Ethernet",
-"	0373  MCP55 Ethernet",
-"	037a  MCP55 Memory Controller",
-"	037e  MCP55 SATA Controller",
-"	037f  MCP55 SATA Controller",
-"	0391  G70 [GeForce 7600 GT]",
-"	0392  G70 [GeForce 7600 GS]",
-"	0398  G70 [GeForce Go 7600]",
-"	039e  Quadro FX 560",
-"	03e0  MCP61 LPC Bridge",
-"	03e1  MCP61 LPC Bridge",
-"	03e2  MCP61 LPC Bridge",
-"	03e3  MCP61 LPC Bridge",
-"	03e4  MCP61 High Definition Audio",
-"	03e5  MCP61 Ethernet",
-"	03e6  MCP61 Ethernet",
-"	03e7  MCP61 SATA Controller",
-"	03ea  MCP61 Memory Controller",
-"	03eb  MCP61 SMBus",
-"	03ec  MCP61 IDE",
-"	03ee  MCP61 Ethernet",
-"	03ef  MCP61 Ethernet",
-"	03f0  MCP61 High Definition Audio",
-"	03f1  MCP61 USB Controller",
-"	03f2  MCP61 USB Controller",
-"	03f5  MCP61 Memory Controller",
-"	03f6  MCP61 SATA Controller",
-"	03f7  MCP61 SATA Controller",
-"10df  Emulex Corporation",
-"	1ae5  LP6000 Fibre Channel Host Adapter",
-"	f085  LP850 Fibre Channel Host Adapter",
-"	f095  LP952 Fibre Channel Host Adapter",
-"	f098  LP982 Fibre Channel Host Adapter",
-"	f0a1  Thor LightPulse Fibre Channel Host Adapter",
-"	f0a5  Thor LightPulse Fibre Channel Host Adapter",
-"	f0b5  Viper LightPulse Fibre Channel Host Adapter",
-"	f0d1  Helios LightPulse Fibre Channel Host Adapter",
-"	f0d5  Helios LightPulse Fibre Channel Host Adapter",
-"	f0e1  Zephyr LightPulse Fibre Channel Host Adapter",
-"	f0e5  Zephyr LightPulse Fibre Channel Host Adapter",
-"	f0f5  Neptune LightPulse Fibre Channel Host Adapter",
-"	f700  LP7000 Fibre Channel Host Adapter",
-"	f701  LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)",
-"	f800  LP8000 Fibre Channel Host Adapter",
-"	f801  LP8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)",
-"	f900  LP9000 Fibre Channel Host Adapter",
-"	f901  LP9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)",
-"	f980  LP9802 Fibre Channel Host Adapter",
-"	f981  LP9802 Fibre Channel Host Adapter Alternate ID",
-"	f982  LP9802 Fibre Channel Host Adapter Alternate ID",
-"	fa00  Thor-X LightPulse Fibre Channel Host Adapter",
-"	fb00  Viper LightPulse Fibre Channel Host Adapter",
-"	fc00  Thor-X LightPulse Fibre Channel Host Adapter",
-"	fc10  Helios-X LightPulse Fibre Channel Host Adapter",
-"	fc20  Zephyr-X LightPulse Fibre Channel Host Adapter",
-"	fd00  Helios-X LightPulse Fibre Channel Host Adapter",
-"	fe00  Zephyr-X LightPulse Fibre Channel Host Adapter",
-"	ff00  Neptune LightPulse Fibre Channel Host Adapter",
-"10e0  Integrated Micro Solutions Inc.",
-"	5026  IMS5026/27/28",
-"	5027  IMS5027",
-"	5028  IMS5028",
-"	8849  IMS8849",
-"	8853  IMS8853",
-"	9128  IMS9128 [Twin turbo 128]",
-"10e1  Tekram Technology Co.,Ltd.",
-"	0391  TRM-S1040",
-"		10e1 0391  DC-315U SCSI-3 Host Adapter",
-"	690c  DC-690c",
-"	dc29  DC-290",
-"10e2  Aptix Corporation",
-"10e3  Tundra Semiconductor Corp.",
-"	0000  CA91C042 [Universe]",
-"	0148  Tsi148 [Tempe]",
-"	0860  CA91C860 [QSpan]",
-"	0862  CA91C862A [QSpan-II]",
-"	8260  CA91L8200B [Dual PCI PowerSpan II]",
-"	8261  CA91L8260B [Single PCI PowerSpan II]",
-"10e4  Tandem Computers",
-"	8029  Realtek 8029 Network Card",
-"10e5  Micro Industries Corporation",
-"10e6  Gainbery Computer Products Inc.",
-"10e7  Vadem",
-"10e8  Applied Micro Circuits Corp.",
-"	1072  INES GPIB-PCI (AMCC5920 based)",
-"	2011  Q-Motion Video Capture/Edit board",
-"	4750  S5930 [Matchmaker]",
-"	5920  S5920",
-"	8043  LANai4.x [Myrinet LANai interface chip]",
-"	8062  S5933_PARASTATION",
-"	807d  S5933 [Matchmaker]",
-"	8088  Kongsberg Spacetec Format Synchronizer",
-"	8089  Kongsberg Spacetec Serial Output Board",
-"	809c  S5933_HEPC3",
-"	80d7  PCI-9112",
-"	80d9  PCI-9118",
-"	80da  PCI-9812",
-"	811a  PCI-IEEE1355-DS-DE Interface",
-"	814c  Fastcom ESCC-PCI (Commtech, Inc.)",
-"	8170  S5933 [Matchmaker] (Chipset Development Tool)",
-"	81e6  Multimedia video controller",
-"	8291  Fastcom 232/8-PCI (Commtech, Inc.)",
-"	82c4  Fastcom 422/4-PCI (Commtech, Inc.)",
-"	82c5  Fastcom 422/2-PCI (Commtech, Inc.)",
-"	82c6  Fastcom IG422/1-PCI (Commtech, Inc.)",
-"	82c7  Fastcom IG232/2-PCI (Commtech, Inc.)",
-"	82ca  Fastcom 232/4-PCI (Commtech, Inc.)",
-"	82db  AJA HDNTV HD SDI Framestore",
-"	82e2  Fastcom DIO24H-PCI (Commtech, Inc.)",
-"	8851  S5933 on Innes Corp FM Radio Capture card",
-"10e9  Alps Electric Co., Ltd.",
-"10ea  Intergraphics Systems",
-"	1680  IGA-1680",
-"	1682  IGA-1682",
-"	1683  IGA-1683",
-"	2000  CyberPro 2000",
-"	2010  CyberPro 2000A",
-"	5000  CyberPro 5000",
-"	5050  CyberPro 5050",
-"	5202  CyberPro 5202",
-"	5252  CyberPro5252",
-"10eb  Artists Graphics",
-"	0101  3GA",
-"	8111  Twist3 Frame Grabber",
-"10ec  Realtek Semiconductor Co., Ltd.",
-"	0139  Zonet Zen3200",
-"	8029  RTL-8029(AS)",
-"		10b8 2011  EZ-Card (SMC1208)",
-"		10ec 8029  RTL-8029(AS)",
-"		1113 1208  EN1208",
-"		1186 0300  DE-528",
-"		1259 2400  AT-2400",
-"	8129  RTL-8129",
-"		10ec 8129  RT8129 Fast Ethernet Adapter",
-"	8138  RT8139 (B/C) Cardbus Fast Ethernet Adapter",
-"		10ec 8138  RT8139 (B/C) Fast Ethernet Adapter",
-"	8139  RTL-8139/8139C/8139C+",
-"		0357 000a  TTP-Monitoring Card V2.0",
-"		1025 005a  TravelMate 290",
-"		1025 8920  ALN-325",
-"		1025 8921  ALN-325",
-"		103c 006a  NX9500",
-"		1043 8109  P5P800-MX Mainboard",
-"		1071 8160  MIM2000",
-"		10bd 0320  EP-320X-R",
-"		10ec 8139  RT8139",
-"		1113 ec01  FNC-0107TX",
-"		1186 1300  DFE-538TX",
-"		1186 1320  SN5200",
-"		1186 8139  DRN-32TX",
-"		11f6 8139  FN22-3(A) LinxPRO Ethernet Adapter",
-"		1259 2500  AT-2500TX",
-"		1259 2503  AT-2500TX/ACPI",
-"		1429 d010  ND010",
-"		1432 9130  EN-9130TX",
-"		1436 8139  RT8139",
-"		1458 e000  GA-7VM400M/7VT600 Motherboard",
-"		1462 788c  865PE Neo2-V Mainboard",
-"		146c 1439  FE-1439TX",
-"		1489 6001  GF100TXRII",
-"		1489 6002  GF100TXRA",
-"		149c 139a  LFE-8139ATX",
-"		149c 8139  LFE-8139TX",
-"		14cb 0200  LNR-100 Family 10/100 Base-TX Ethernet",
-"		1695 9001  Onboard RTL8101L 10/100 MBit",
-"		1799 5000  F5D5000 PCI Card/Desktop Network PCI Card",
-"		1904 8139  RTL8139D Fast Ethernet Adapter",
-"		2646 0001  EtheRx",
-"		8e2e 7000  KF-230TX",
-"		8e2e 7100  KF-230TX/2",
-"		a0a0 0007  ALN-325C",
-"	8169  RTL-8169 Gigabit Ethernet",
-"		1025 0079  Aspire 5024WLMi",
-"		1259 c107  CG-LAPCIGT",
-"		1371 434e  ProG-2000L",
-"		1458 e000  GA-8I915ME-G Mainboard",
-"		1462 702c  K8T NEO 2 motherboard",
-"	8180  RTL8180L 802.11b MAC",
-"	8185  RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller",
-"	8197  SmartLAN56 56K Modem",
-"10ed  Ascii Corporation",
-"	7310  V7310",
-"10ee  Xilinx Corporation",
-"	0205  Wildcard TE205P",
-"	0210  Wildcard TE210P",
-"	0314  Wildcard TE405P/TE410P (1st Gen)",
-"	0405  Wildcard TE405P (2nd Gen)",
-"	0410  Wildcard TE410P (2nd Gen)",
-"	3fc0  RME Digi96",
-"	3fc1  RME Digi96/8",
-"	3fc2  RME Digi96/8 Pro",
-"	3fc3  RME Digi96/8 Pad",
-"	3fc4  RME Digi9652 (Hammerfall)",
-"	3fc5  RME Hammerfall DSP",
-"	3fc6  RME Hammerfall DSP MADI",
-"	8381  Ellips Santos Frame Grabber",
-"	d154  Copley Controls CAN card (PCI-CAN-02)",
-"10ef  Racore Computer Products, Inc.",
-"	8154  M815x Token Ring Adapter",
-"10f0  Peritek Corporation",
-"10f1  Tyan Computer",
-"	2865  Tyan Thunder K8E S2865",
-"10f2  Achme Computer, Inc.",
-"10f3  Alaris, Inc.",
-"10f4  S-MOS Systems, Inc.",
-"10f5  NKK Corporation",
-"	a001  NDR4000 [NR4600 Bridge]",
-"10f6  Creative Electronic Systems SA",
-"10f7  Matsushita Electric Industrial Co., Ltd.",
-"10f8  Altos India Ltd",
-"10f9  PC Direct",
-"10fa  Truevision",
-"	000c  TARGA 1000",
-"10fb  Thesys Gesellschaft fuer Mikroelektronik mbH",
-"	186f  TH 6255",
-"10fc  I-O Data Device, Inc.",
-"	0003  Cardbus IDE Controller",
-"	0005  Cardbus SCSI CBSC II",
-"10fd  Soyo Computer, Inc",
-"10fe  Fast Multimedia AG",
-"10ff  NCube",
-"1100  Jazz Multimedia",
-"1101  Initio Corporation",
-"	1060  INI-A100U2W",
-"	9100  INI-9100/9100W",
-"	9400  INI-940",
-"	9401  INI-950",
-"	9500  360P",
-"	9502  Initio INI-9100UW Ultra Wide SCSI Controller INIC-950P chip",
-"1102  Creative Labs",
-"	0002  SB Live! EMU10k1",
-"		1102 0020  CT4850 SBLive! Value",
-"		1102 0021  CT4620 SBLive!",
-"		1102 002f  SBLive! mainboard implementation",
-"		1102 100a  SB Live! 5.1 Digital OEM [SB0220]",
-"		1102 4001  E-mu APS",
-"		1102 8022  CT4780 SBLive! Value",
-"		1102 8023  CT4790 SoundBlaster PCI512",
-"		1102 8024  CT4760 SBLive!",
-"		1102 8025  SBLive! Mainboard Implementation",
-"		1102 8026  CT4830 SBLive! Value",
-"		1102 8027  CT4832 SBLive! Value",
-"		1102 8028  CT4760 SBLive! OEM version",
-"		1102 8031  CT4831 SBLive! Value",
-"		1102 8040  CT4760 SBLive!",
-"		1102 8051  CT4850 SBLive! Value",
-"		1102 8061  SBLive! Player 5.1",
-"		1102 8064  SBLive! 5.1 Model SB0100",
-"		1102 8065  SBLive! 5.1 Digital Model SB0220",
-"		1102 8067  SBLive! 5.1 eMicro 28028",
-"	0004  SB Audigy",
-"		1102 0051  SB0090 Audigy Player",
-"		1102 0053  SB0090 Audigy Player/OEM",
-"		1102 0058  SB0090 Audigy Player/OEM",
-"		1102 1007  SB0240 Audigy 2 Platinum 6.1",
-"		1102 2002  SB Audigy 2 ZS (SB0350)",
-"	0006  [SB Live! Value] EMU10k1X",
-"	0007  SB Audigy LS",
-"		1102 0007  SBLive! 24bit",
-"		1102 1001  SB0310 Audigy LS",
-"		1102 1002  SB0312 Audigy LS",
-"		1102 1006  SB0410 SBLive! 24-bit",
-"		1462 1009  K8N Diamond",
-"	0008  SB0400 Audigy2 Value",
-"		1102 0008  EMU0404 Digital Audio System",
-"	4001  SB Audigy FireWire Port",
-"		1102 0010  SB Audigy FireWire Port",
-"	7002  SB Live! Game Port",
-"		1102 0020  Gameport Joystick",
-"	7003  SB Audigy Game Port",
-"		1102 0040  SB Audigy MIDI/Game Port",
-"	7004  [SB Live! Value] Input device controller",
-"	7005  SB Audigy LS Game Port",
-"		1102 1001  SB0310 Audigy LS MIDI/Game port",
-"		1102 1002  SB0312 Audigy LS MIDI/Game port",
-"	8064  SB0100 [SBLive! 5.1 OEM]",
-"	8938  Ectiva EV1938",
-"		1033 80e5  SlimTower-Jim (NEC)",
-"		1071 7150  Mitac 7150",
-"		110a 5938  Siemens Scenic Mobile 510PIII",
-"		13bd 100c  Ceres-C (Sharp, Intel BX)",
-"		13bd 100d  Sharp, Intel Banister",
-"		13bd 100e  TwinHead P09S/P09S3 (Sharp)",
-"		13bd f6f1  Marlin (Sharp)",
-"		14ff 0e70  P88TE (TWINHEAD INTERNATIONAL Corp)",
-"		14ff c401  Notebook 9100/9200/2000 (TWINHEAD INTERNATIONAL Corp)",
-"		156d b400  G400 - Geo (AlphaTop (Taiwan))",
-"		156d b550  G560  (AlphaTop (Taiwan))",
-"		156d b560  G560  (AlphaTop (Taiwan))",
-"		156d b700  G700/U700  (AlphaTop (Taiwan))",
-"		156d b795  G795  (AlphaTop (Taiwan))",
-"		156d b797  G797  (AlphaTop (Taiwan))",
-"1103  Triones Technologies, Inc.",
-"	0003  HPT343/345/346/363",
-"	0004  HPT366/368/370/370A/372/372N",
-"		1103 0001  HPT370A",
-"		1103 0004  HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4)",
-"		1103 0005  HPT370 UDMA100",
-"	0005  HPT372A/372N",
-"	0006  HPT302/302N",
-"	0007  HPT371/371N",
-"	0008  HPT374",
-"	0009  HPT372N",
-"1104  RasterOps Corp.",
-"1105  Sigma Designs, Inc.",
-"	1105  REALmagic Xcard MPEG 1/2/3/4 DVD Decoder",
-"	8300  REALmagic Hollywood Plus DVD Decoder",
-"	8400  EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder",
-"	8401  EM8401 REALmagic DVD/MPEG-2 A/V Decoder",
-"	8470  EM8470 REALmagic DVD/MPEG-4 A/V Decoder",
-"	8471  EM8471 REALmagic DVD/MPEG-4 A/V Decoder",
-"	8475  EM8475 REALmagic DVD/MPEG-4 A/V Decoder",
-"		1105 0001  REALmagic X-Card",
-"	8476  EM8476 REALmagic DVD/MPEG-4 A/V Decoder",
-"		127d 0000  CineView II",
-"	8485  EM8485 REALmagic DVD/MPEG-4 A/V Decoder",
-"	8486  EM8486 REALmagic DVD/MPEG-4 A/V Decoder",
-"1106  VIA Technologies, Inc.",
-"	0102  Embedded VIA Ethernet Controller",
-"	0130  VT6305 1394.A Controller",
-"	0204  K8M800 Host Bridge",
-"	0208  PT890 Host Bridge",
-"	0238  K8T890 Host Bridge",
-"	0258  PT880 Host Bridge",
-"	0259  CN400/PM880 Host Bridge",
-"	0269  KT880 Host Bridge",
-"	0282  K8T800Pro Host Bridge",
-"		1043 80a3  A8V Deluxe",
-"	0290  K8M890 Host Bridge",
-"	0293  PM896 Host Bridge",
-"	0296  P4M800 Host Bridge",
-"	0305  VT8363/8365 [KT133/KM133]",
-"		1019 0987  K7VZA Mainboard",
-"		1043 8033  A7V Mainboard",
-"		1043 803e  A7V-E Mainboard",
-"		1043 8042  A7V133/A7V133-C Mainboard",
-"		147b a401  KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard",
-"	0308  PT894 Host Bridge",
-"	0314  CN700/VN800/P4M800CE/Pro Host Bridge",
-"	0324  CX700 Host Bridge",
-"	0327  P4M890 Host Bridge",
-"	0336  K8M890CE Host Bridge",
-"	0340  PT900 Host Bridge",
-"	0351  VT3351 Host Bridge",
-"	0364  P4M900 Host Bridge",
-"	0391  VT8371 [KX133]",
-"	0501  VT8501 [Apollo MVP4]",
-"	0505  VT82C505",
-"	0561  VT82C576MV",
-"	0571  VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE",
-"		1019 0985  P6VXA Motherboard",
-"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
-"		1043 8052  VT8233A Bus Master ATA100/66/33 IDE",
-"		1043 808c  A7V8X / A7V333 motherboard",
-"		1043 80a1  A7V8X-X motherboard rev. 1.01",
-"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
-"		1106 0571  VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE",
-"		1179 0001  Magnia Z310",
-"		1297 f641  FX41 motherboard",
-"		1458 5002  GA-7VAX Mainboard",
-"		1462 7020  K8T NEO 2 motherboard",
-"		147b 1407  KV8-MAX3 motherboard",
-"		1849 0571  K7VT2/K7VT6 motherboard",
-"	0576  VT82C576 3V [Apollo Master]",
-"	0585  VT82C585VP [Apollo VP1/VPX]",
-"	0586  VT82C586/A/B PCI-to-ISA [Apollo VP]",
-"		1106 0000  MVP3 ISA Bridge",
-"	0591  VT8237A SATA 2-Port Controller",
-"	0595  VT82C595 [Apollo VP2]",
-"	0596  VT82C596 ISA [Mobile South]",
-"		1106 0000  VT82C596/A/B PCI to ISA Bridge",
-"		1458 0596  VT82C596/A/B PCI to ISA Bridge",
-"	0597  VT82C597 [Apollo VP3]",
-"	0598  VT82C598 [Apollo MVP3]",
-"	0601  VT8601 [Apollo ProMedia]",
-"	0605  VT8605 [ProSavage PM133]",
-"		1043 802c  CUV4X mainboard",
-"	0680  VT82C680 [Apollo P6]",
-"	0686  VT82C686 [Apollo Super South]",
-"		1019 0985  P6VXA Motherboard",
-"		1043 802c  CUV4X mainboard",
-"		1043 8033  A7V Mainboard",
-"		1043 803e  A7V-E Mainboard",
-"		1043 8040  A7M266 Mainboard",
-"		1043 8042  A7V133/A7V133-C Mainboard",
-"		1106 0000  VT82C686/A PCI to ISA Bridge",
-"		1106 0686  VT82C686/A PCI to ISA Bridge",
-"		1179 0001  Magnia Z310",
-"		147b a702  KG7-Lite Mainboard",
-"	0691  VT82C693A/694x [Apollo PRO133x]",
-"		1019 0985  P6VXA Motherboard",
-"		1179 0001  Magnia Z310",
-"		1458 0691  VT82C691 Apollo Pro System Controller",
-"	0693  VT82C693 [Apollo Pro Plus]",
-"	0698  VT82C693A [Apollo Pro133 AGP]",
-"	0926  VT82C926 [Amazon]",
-"	1000  VT82C570MV",
-"	1106  VT82C570MV",
-"	1204  K8M800 Host Bridge",
-"	1208  PT890 Host Bridge",
-"	1238  K8T890 Host Bridge",
-"	1258  PT880 Host Bridge",
-"	1259  CN400/PM880 Host Bridge",
-"	1269  KT880 Host Bridge",
-"	1282  K8T800Pro Host Bridge",
-"	1290  K8M890 Host Bridge",
-"	1293  PM896 Host Bridge",
-"	1296  P4M800 Host Bridge",
-"	1308  PT894 Host Bridge",
-"	1314  CN700/VN800/P4M800CE/Pro Host Bridge",
-"	1324  CX700 Host Bridge",
-"	1327  P4M890 Host Bridge",
-"	1336  K8M890CE Host Bridge",
-"	1340  PT900 Host Bridge",
-"	1351  VT3351 Host Bridge",
-"	1364  P4M900 Host Bridge",
-"	1571  VT82C576M/VT82C586",
-"	1595  VT82C595/97 [Apollo VP2/97]",
-"	2204  K8M800 Host Bridge",
-"	2208  PT890 Host Bridge",
-"	2238  K8T890 Host Bridge",
-"	2258  PT880 Host Bridge",
-"	2259  CN400/PM880 Host Bridge",
-"	2269  KT880 Host Bridge",
-"	2282  K8T800Pro Host Bridge",
-"	2290  K8M890 Host Bridge",
-"	2293  PM896 Host Bridge",
-"	2296  P4M800 Host Bridge",
-"	2308  PT894 Host Bridge",
-"	2314  CN700/VN800/P4M800CE/Pro Host Bridge",
-"	2324  CX700 Host Bridge",
-"	2327  P4M890 Host Bridge",
-"	2336  K8M890CE Host Bridge",
-"	2340  PT900 Host Bridge",
-"	2351  VT3351 Host Bridge",
-"	2364  P4M900 Host Bridge",
-"	287a  VT8251 PCI to PCI Bridge",
-"	287b  VT8251 Host Bridge",
-"	287c  VT8251 PCIE Root Port",
-"	287d  VT8251 PCIE Root Port",
-"	287e  VT8251 Ultra VLINK Controller",
-"	3022  CLE266",
-"	3038  VT82xxxxx UHCI USB 1.1 Controller",
-"		0925 1234  USB Controller",
-"		1019 0985  P6VXA Motherboard",
-"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
-"		1043 8080  A7V333 motherboard",
-"		1043 808c  VT6202 USB2.0 4 port controller",
-"		1043 80a1  A7V8X-X motherboard",
-"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
-"		1179 0001  Magnia Z310",
-"		1458 5004  GA-7VAX Mainboard",
-"		1462 7020  K8T NEO 2 motherboard",
-"		147b 1407  KV8-MAX3 motherboard",
-"		182d 201d  CN-029 USB2.0 4 port PCI Card",
-"		1849 3038  K7VT6",
-"	3040  VT82C586B ACPI",
-"	3043  VT86C100A [Rhine]",
-"		10bd 0000  VT86C100A Fast Ethernet Adapter",
-"		1106 0100  VT86C100A Fast Ethernet Adapter",
-"		1186 1400  DFE-530TX rev A",
-"	3044  IEEE 1394 Host Controller",
-"		1025 005a  TravelMate 290",
-"		1043 808a  A8V Deluxe",
-"		1458 1000  GA-7VT600-1394 Motherboard",
-"		1462 207d  K8NGM2 series motherboard",
-"		1462 702d  K8T NEO 2 motherboard",
-"		1462 971d  MS-6917",
-"	3050  VT82C596 Power Management",
-"	3051  VT82C596 Power Management",
-"	3053  VT6105M [Rhine-III]",
-"	3057  VT82C686 [Apollo Super ACPI]",
-"		1019 0985  P6VXA Motherboard",
-"		1019 0987  K7VZA Motherboard",
-"		1043 8033  A7V Mainboard",
-"		1043 803e  A7V-E Mainboard",
-"		1043 8040  A7M266 Mainboard",
-"		1043 8042  A7V133/A7V133-C Mainboard",
-"		1179 0001  Magnia Z310",
-"	3058  VT82C686 AC97 Audio Controller",
-"		0e11 0097  SoundMax Digital Integrated Audio",
-"		0e11 b194  Soundmax integrated digital audio",
-"		1019 0985  P6VXA Motherboard",
-"		1019 0987  K7VZA Motherboard",
-"		1043 1106  A7V133/A7V133-C Mainboard",
-"		1106 4511  Onboard Audio on EP7KXA",
-"		1458 7600  Onboard Audio",
-"		1462 3091  MS-6309 Onboard Audio",
-"		1462 3300  MS-6330 Onboard Audio",
-"		15dd 7609  Onboard Audio",
-"	3059  VT8233/A/8235/8237 AC97 Audio Controller",
-"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
-"		1043 8095  A7V8X Motherboard (Realtek ALC650 codec)",
-"		1043 80a1  A7V8X-X Motherboard",
-"		1043 80b0  A7V600/K8V Deluxe motherboard (ADI AD1980 codec [SoundMAX])",
-"		1043 812a  A8V Deluxe motherboard (Realtek ALC850 codec)",
-"		1106 3059  L7VMM2 Motherboard",
-"		1106 4161  K7VT2 motherboard",
-"		1106 4170  PCPartner P4M800-8237R Motherboard",
-"		1106 4552  Soyo KT-600 Dragon Plus (Realtek ALC 650)",
-"		1297 c160  FX41 motherboard (Realtek ALC650 codec)",
-"		1458 a002  GA-7VAX Onboard Audio (Realtek ALC650)",
-"		1462 0080  K8T NEO 2 motherboard",
-"		1462 3800  KT266 onboard audio",
-"		147b 1407  KV8-MAX3 motherboard",
-"		1849 9761  K7VT6 motherboard",
-"		4005 4710  MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P)",
-"		a0a0 01b6  AK77-8XN onboard audio",
-"	3065  VT6102 [Rhine-II]",
-"		1043 80a1  A7V8X-X Motherboard",
-"		1106 0102  VT6102 [Rhine II] Embeded Ethernet Controller on VT8235",
-"		1186 1400  DFE-530TX rev A",
-"		1186 1401  DFE-530TX rev B",
-"		13b9 1421  LD-10/100AL PCI Fast Ethernet Adapter (rev.B)",
-"		147b 1c09  NV7 Motherboard",
-"		1695 3005  VT6103",
-"		1695 300c  Realtek ALC655 sound chip",
-"		1849 3065  K7VT6 motherboard",
-"	3068  AC'97 Modem Controller",
-"		1462 309e  MS-6309 Saturn Motherboard",
-"	3074  VT8233 PCI to ISA Bridge",
-"		1043 8052  VT8233A",
-"	3091  VT8633 [Apollo Pro266]",
-"	3099  VT8366/A/7 [Apollo KT266/A/333]",
-"		1043 8064  A7V266-E Mainboard",
-"		1043 807f  A7V333 Mainboard",
-"		1849 3099  K7VT2 motherboard",
-"	3101  VT8653 Host Bridge",
-"	3102  VT8662 Host Bridge",
-"	3103  VT8615 Host Bridge",
-"	3104  USB 2.0",
-"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
-"		1043 808c  A7V8X motherboard",
-"		1043 80a1  A7V8X-X motherboard rev 1.01",
-"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
-"		1297 f641  FX41 motherboard",
-"		1458 5004  GA-7VAX Mainboard",
-"		1462 7020  K8T NEO 2 motherboard",
-"		147b 1407  KV8-MAX3 motherboard",
-"		182d 201d  CN-029 USB 2.0 4 port PCI Card",
-"		1849 3104  K7VT6 motherboard",
-"	3106  VT6105 [Rhine-III]",
-"		1186 1403  DFE-530TX rev C",
-"	3108  S3 Unichrome Pro VGA Adapter",
-"	3109  VT8233C PCI to ISA Bridge",
-"	3112  VT8361 [KLE133] Host Bridge",
-"	3113  VPX/VPX2 PCI to PCI Bridge Controller",
-"	3116  VT8375 [KM266/KL266] Host Bridge",
-"		1297 f641  FX41 motherboard",
-"	3118  S3 Unichrome Pro VGA Adapter",
-"	3119  VT6120/VT6121/VT6122 Gigabit Ethernet Adapter",
-"	3122  VT8623 [Apollo CLE266] integrated CastleRock graphics",
-"	3123  VT8623 [Apollo CLE266]",
-"	3128  VT8753 [P4X266 AGP]",
-"	3133  VT3133 Host Bridge",
-"	3147  VT8233A ISA Bridge",
-"		1043 808c  A7V333 motherboard",
-"	3148  P4M266 Host Bridge",
-"	3149  VIA VT6420 SATA RAID Controller",
-"		1043 80ed  A7V600/K8V Deluxe/K8V-X/A8V Deluxe motherboard",
-"		1458 b003  GA-7VM400AM(F) Motherboard",
-"		1462 7020  K8T Neo 2 Motherboard",
-"		147b 1407  KV8-MAX3 motherboard",
-"		147b 1408  KV7",
-"		1849 3149  K7VT6 motherboard",
-"	3156  P/KN266 Host Bridge",
-"	3164  VT6410 ATA133 RAID controller",
-"		1043 80f4  P4P800 Mainboard Deluxe ATX",
-"		1462 7028  915P/G Neo2",
-"	3168  VT8374 P4X400 Host Controller/AGP Bridge",
-"	3177  VT8235 ISA Bridge",
-"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
-"		1043 808c  A7V8X motherboard",
-"		1043 80a1  A7V8X-X motherboard",
-"		1297 f641  FX41 motherboard",
-"		1458 5001  GA-7VAX Mainboard",
-"		1849 3177  K7VT2 motherboard",
-"	3178  ProSavageDDR P4N333 Host Bridge",
-"	3188  VT8385 [K8T800 AGP] Host Bridge",
-"		1043 80a3  K8V Deluxe/K8V-X motherboard",
-"		147b 1407  KV8-MAX3 motherboard",
-"	3189  VT8377 [KT400/KT600 AGP] Host Bridge",
-"		1043 807f  A7V8X motherboard",
-"		1458 5000  GA-7VAX Mainboard",
-"		1849 3189  K7VT6 motherboard",
-"	3204  K8M800 Host Bridge",
-"	3205  VT8378 [KM400/A] Chipset Host Bridge",
-"		1458 5000  GA-7VM400M Motherboard",
-"	3208  PT890 Host Bridge",
-"	3213  VPX/VPX2 PCI to PCI Bridge Controller",
-"	3218  K8T800M Host Bridge",
-"	3227  VT8237 ISA bridge [KT600/K8T800/K8T890 South]",
-"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
-"		1106 3227  DFI KT600-AL Motherboard",
-"		1458 5001  GA-7VT600 Motherboard",
-"		147b 1407  KV8-MAX3 motherboard",
-"		1849 3227  K7VT4 motherboard",
-"	3238  K8T890 Host Bridge",
-"	3249  VT6421 IDE RAID Controller",
-"	324a  CX700 PCI to PCI Bridge",
-"	324b  CX700 Host Bridge",
-"	324e  CX700 Internal Module Bus",
-"	3258  PT880 Host Bridge",
-"	3259  CN400/PM880 Host Bridge",
-"	3269  KT880 Host Bridge",
-"	3282  K8T800Pro Host Bridge",
-"	3287  VT8251 PCI to ISA Bridge",
-"	3288  VIA High Definition Audio Controller",
-"	3290  K8M890 Host Bridge",
-"	3296  P4M800 Host Bridge",
-"	3324  CX700 Host Bridge",
-"	3327  P4M890 Host Bridge",
-"	3336  K8M890CE Host Bridge",
-"	3337  VT8237A PCI to ISA Bridge",
-"	3340  PT900 Host Bridge",
-"	3344  UniChrome Pro IGP",
-"	3349  VT8251 AHCI/SATA 4-Port Controller",
-"	3351  VT3351 Host Bridge",
-"	3364  P4M900 Host Bridge",
-"	337a  VT8237A PCI to PCI Bridge",
-"	337b  VT8237A Host Bridge",
-"	4149  VIA VT6420 (ATA133) Controller",
-"	4204  K8M800 Host Bridge",
-"	4208  PT890 Host Bridge",
-"	4238  K8T890 Host Bridge",
-"	4258  PT880 Host Bridge",
-"	4259  CN400/PM880 Host Bridge",
-"	4269  KT880 Host Bridge",
-"	4282  K8T800Pro Host Bridge",
-"	4290  K8M890 Host Bridge",
-"	4293  PM896 Host Bridge",
-"	4296  P4M800 Host Bridge",
-"	4308  PT894 Host Bridge",
-"	4314  CN700/VN800/P4M800CE/Pro Host Bridge",
-"	4324  CX700 Host Bridge",
-"	4327  P4M890 Host Bridge",
-"	4336  K8M890CE Host Bridge",
-"	4340  PT900 Host Bridge",
-"	4351  VT3351 Host Bridge",
-"	4364  P4M900 Host Bridge",
-"	5030  VT82C596 ACPI [Apollo PRO]",
-"	5208  PT890 I/O APIC Interrupt Controller",
-"	5238  K8T890 I/O APIC Interrupt Controller",
-"	5290  K8M890 I/O APIC Interrupt Controller",
-"	5308  PT894 I/O APIC Interrupt Controller",
-"	5327  P4M890 I/O APIC Interrupt Controller",
-"	5336  K8M890CE I/O APIC Interrupt Controller",
-"	5340  PT900 I/O APIC Interrupt Controller",
-"	5351  VT3351 I/O APIC Interrupt Controller",
-"	5364  P4M900 I/O APIC Interrupt Controller",
-"	6100  VT85C100A [Rhine II]",
-"	6327  P4M890 Security Device",
-"	7204  K8M800 Host Bridge",
-"	7205  VT8378 [S3 UniChrome] Integrated Video",
-"		1458 d000  Gigabyte GA-7VM400(A)M(F) Motherboard",
-"	7208  PT890 Host Bridge",
-"	7238  K8T890 Host Bridge",
-"	7258  PT880 Host Bridge",
-"	7259  CN400/PM880 Host Bridge",
-"	7269  KT880 Host Bridge",
-"	7282  K8T800Pro Host Bridge",
-"	7290  K8M890 Host Bridge",
-"	7293  PM896 Host Bridge",
-"	7296  P4M800 Host Bridge",
-"	7308  PT894 Host Bridge",
-"	7314  CN700/VN800/P4M800CE/Pro Host Bridge",
-"	7324  CX700 Host Bridge",
-"	7327  P4M890 Host Bridge",
-"	7336  K8M890CE Host Bridge",
-"	7340  PT900 Host Bridge",
-"	7351  VT3351 Host Bridge",
-"	7364  P4M900 Host Bridge",
-"	8231  VT8231 [PCI-to-ISA Bridge]",
-"	8235  VT8235 ACPI",
-"	8305  VT8363/8365 [KT133/KM133 AGP]",
-"	8324  CX700 PCI to ISA Bridge",
-"	8391  VT8371 [KX133 AGP]",
-"	8501  VT8501 [Apollo MVP4 AGP]",
-"	8596  VT82C596 [Apollo PRO AGP]",
-"	8597  VT82C597 [Apollo VP3 AGP]",
-"	8598  VT82C598/694x [Apollo MVP3/Pro133x AGP]",
-"		1019 0985  P6VXA Motherboard",
-"	8601  VT8601 [Apollo ProMedia AGP]",
-"	8605  VT8605 [PM133 AGP]",
-"	8691  VT82C691 [Apollo Pro]",
-"	8693  VT82C693 [Apollo Pro Plus] PCI Bridge",
-"	a208  PT890 PCI to PCI Bridge Controller",
-"	a238  K8T890 PCI to PCI Bridge Controller",
-"	a327  P4M890 PCI to PCI Bridge Controller",
-"	a364  P4M900 PCI to PCI Bridge Controller",
-"	b091  VT8633 [Apollo Pro266 AGP]",
-"	b099  VT8366/A/7 [Apollo KT266/A/333 AGP]",
-"	b101  VT8653 AGP Bridge",
-"	b102  VT8362 AGP Bridge",
-"	b103  VT8615 AGP Bridge",
-"	b112  VT8361 [KLE133] AGP Bridge",
-"	b113  VPX/VPX2 I/O APIC Interrupt Controller",
-"	b115  VT8363/8365 [KT133/KM133] PCI Bridge",
-"	b168  VT8235 PCI Bridge",
-"	b188  VT8237 PCI bridge [K8T800/K8T890 South]",
-"		147b 1407  KV8-MAX3 motherboard",
-"	b198  VT8237 PCI Bridge",
-"	b213  VPX/VPX2 I/O APIC Interrupt Controller",
-"	b999  [K8T890 North / VT8237 South] PCI Bridge",
-"	c208  PT890 PCI to PCI Bridge Controller",
-"	c238  K8T890 PCI to PCI Bridge Controller",
-"	c327  P4M890 PCI to PCI Bridge Controller",
-"	c340  PT900 PCI to PCI Bridge Controller",
-"	c364  P4M900 PCI to PCI Bridge Controller",
-"	d104  VT8237 Integrated Fast Ethernet Controller",
-"	d208  PT890 PCI to PCI Bridge Controller",
-"	d213  VPX/VPX2 PCI to PCI Bridge Controller",
-"	d238  K8T890 PCI to PCI Bridge Controller",
-"	d340  PT900 PCI to PCI Bridge Controller",
-"	e208  PT890 PCI to PCI Bridge Controller",
-"	e238  K8T890 PCI to PCI Bridge Controller",
-"	e340  PT900 PCI to PCI Bridge Controller",
-"	f208  PT890 PCI to PCI Bridge Controller",
-"	f238  K8T890 PCI to PCI Bridge Controller",
-"	f340  PT900 PCI to PCI Bridge Controller",
-"1107  Stratus Computers",
-"	0576  VIA VT82C570MV [Apollo] (Wrong vendor ID!)",
-"1108  Proteon, Inc.",
-"	0100  p1690plus_AA",
-"	0101  p1690plus_AB",
-"	0105  P1690Plus",
-"	0108  P1690Plus",
-"	0138  P1690Plus",
-"	0139  P1690Plus",
-"	013c  P1690Plus",
-"	013d  P1690Plus",
-"1109  Cogent Data Technologies, Inc.",
-"	1400  EM110TX [EX110TX]",
-"110a  Siemens Nixdorf AG",
-"	0002  Pirahna 2-port",
-"	0005  Tulip controller, power management, switch extender",
-"	0006  FSC PINC (I/O-APIC)",
-"	0015  FSC Multiprocessor Interrupt Controller",
-"	001d  FSC Copernicus Management Controller",
-"	007b  FSC Remote Service Controller, mailbox device",
-"	007c  FSC Remote Service Controller, shared memory device",
-"	007d  FSC Remote Service Controller, SMIC device",
-"	2101  HST SAPHIR V Primary PCI (ISDN/PMx)",
-"	2102  DSCC4 PEB/PEF 20534 DMA Supported Serial Communication Controller with 4 Channels",
-"	2104  Eicon Diva 2.02 compatible passive ISDN card",
-"	3142  SIMATIC NET CP 5613A1 (Profibus Adapter)",
-"	4021  SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter)",
-"	4029  SIMATIC NET CP 5613A2 (Profibus Adapter)",
-"	4942  FPGA I-Bus Tracer for MBD",
-"	6120  SZB6120",
-"110b  Chromatic Research Inc.",
-"	0001  Mpact Media Processor",
-"	0004  Mpact 2",
-"110c  Mini-Max Technology, Inc.",
-"110d  Znyx Advanced Systems",
-"110e  CPU Technology",
-"110f  Ross Technology",
-"1110  Powerhouse Systems",
-"	6037  Firepower Powerized SMP I/O ASIC",
-"	6073  Firepower Powerized SMP I/O ASIC",
-"1111  Santa Cruz Operation",
-"1112  Osicom Technologies Inc",
-"	2200  FDDI Adapter",
-"	2300  Fast Ethernet Adapter",
-"	2340  4 Port Fast Ethernet Adapter",
-"	2400  ATM Adapter",
-"1113  Accton Technology Corporation",
-"	1211  SMC2-1211TX",
-"		103c 1207  EN-1207D Fast Ethernet Adapter",
-"		1113 1211  EN-1207D Fast Ethernet Adapter",
-"	1216  EN-1216 Ethernet Adapter",
-"		1113 2242  EN2242 10/100 Ethernet Mini-PCI Card",
-"		111a 1020  SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?]",
-"	1217  EN-1217 Ethernet Adapter",
-"	5105  10Mbps Network card",
-"	9211  EN-1207D Fast Ethernet Adapter",
-"		1113 9211  EN-1207D Fast Ethernet Adapter",
-"	9511  21x4x DEC-Tulip compatible Fast Ethernet",
-"	d301  CPWNA100 (Philips wireless PCMCIA)",
-"	ec02  SMC 1244TX v3",
-"1114  Atmel Corporation",
-"	0506  at76c506 802.11b Wireless Network Adaptor",
-"1115  3D Labs",
-"1116  Data Translation",
-"	0022  DT3001",
-"	0023  DT3002",
-"	0024  DT3003",
-"	0025  DT3004",
-"	0026  DT3005",
-"	0027  DT3001-PGL",
-"	0028  DT3003-PGL",
-"1117  Datacube, Inc",
-"	9500  Max-1C SVGA card",
-"	9501  Max-1C image processing",
-"1118  Berg Electronics",
-"1119  ICP Vortex Computersysteme GmbH",
-"	0000  GDT 6000/6020/6050",
-"	0001  GDT 6000B/6010",
-"	0002  GDT 6110/6510",
-"	0003  GDT 6120/6520",
-"	0004  GDT 6530",
-"	0005  GDT 6550",
-"	0006  GDT 6117/6517",
-"	0007  GDT 6127/6527",
-"	0008  GDT 6537",
-"	0009  GDT 6557/6557-ECC",
-"	000a  GDT 6115/6515",
-"	000b  GDT 6125/6525",
-"	000c  GDT 6535",
-"	000d  GDT 6555",
-"	0010  GDT 6115/6515",
-"	0011  GDT 6125/6525",
-"	0012  GDT 6535",
-"	0013  GDT 6555/6555-ECC",
-"	0100  GDT 6117RP/6517RP",
-"	0101  GDT 6127RP/6527RP",
-"	0102  GDT 6537RP",
-"	0103  GDT 6557RP",
-"	0104  GDT 6111RP/6511RP",
-"	0105  GDT 6121RP/6521RP",
-"	0110  GDT 6117RD/6517RD",
-"	0111  GDT 6127RD/6527RD",
-"	0112  GDT 6537RD",
-"	0113  GDT 6557RD",
-"	0114  GDT 6111RD/6511RD",
-"	0115  GDT 6121RD/6521RD",
-"	0118  GDT 6118RD/6518RD/6618RD",
-"	0119  GDT 6128RD/6528RD/6628RD",
-"	011a  GDT 6538RD/6638RD",
-"	011b  GDT 6558RD/6658RD",
-"	0120  GDT 6117RP2/6517RP2",
-"	0121  GDT 6127RP2/6527RP2",
-"	0122  GDT 6537RP2",
-"	0123  GDT 6557RP2",
-"	0124  GDT 6111RP2/6511RP2",
-"	0125  GDT 6121RP2/6521RP2",
-"	0136  GDT 6113RS/6513RS",
-"	0137  GDT 6123RS/6523RS",
-"	0138  GDT 6118RS/6518RS/6618RS",
-"	0139  GDT 6128RS/6528RS/6628RS",
-"	013a  GDT 6538RS/6638RS",
-"	013b  GDT 6558RS/6658RS",
-"	013c  GDT 6533RS/6633RS",
-"	013d  GDT 6543RS/6643RS",
-"	013e  GDT 6553RS/6653RS",
-"	013f  GDT 6563RS/6663RS",
-"	0166  GDT 7113RN/7513RN/7613RN",
-"	0167  GDT 7123RN/7523RN/7623RN",
-"	0168  GDT 7118RN/7518RN/7518RN",
-"	0169  GDT 7128RN/7528RN/7628RN",
-"	016a  GDT 7538RN/7638RN",
-"	016b  GDT 7558RN/7658RN",
-"	016c  GDT 7533RN/7633RN",
-"	016d  GDT 7543RN/7643RN",
-"	016e  GDT 7553RN/7653RN",
-"	016f  GDT 7563RN/7663RN",
-"	01d6  GDT 4x13RZ",
-"	01d7  GDT 4x23RZ",
-"	01f6  GDT 8x13RZ",
-"	01f7  GDT 8x23RZ",
-"	01fc  GDT 8x33RZ",
-"	01fd  GDT 8x43RZ",
-"	01fe  GDT 8x53RZ",
-"	01ff  GDT 8x63RZ",
-"	0210  GDT 6519RD/6619RD",
-"	0211  GDT 6529RD/6629RD",
-"	0260  GDT 7519RN/7619RN",
-"	0261  GDT 7529RN/7629RN",
-"	02ff  GDT MAXRP",
-"	0300  GDT NEWRX",
-"111a  Efficient Networks, Inc",
-"	0000  155P-MF1 (FPGA)",
-"	0002  155P-MF1 (ASIC)",
-"	0003  ENI-25P ATM",
-"		111a 0000  ENI-25p Miniport ATM Adapter",
-"	0005  SpeedStream (LANAI)",
-"		111a 0001  ENI-3010 ATM",
-"		111a 0009  ENI-3060 ADSL (VPI=0)",
-"		111a 0101  ENI-3010 ATM",
-"		111a 0109  ENI-3060CO ADSL (VPI=0)",
-"		111a 0809  ENI-3060 ADSL (VPI=0 or 8)",
-"		111a 0909  ENI-3060CO ADSL (VPI=0 or 8)",
-"		111a 0a09  ENI-3060 ADSL (VPI=<0..15>)",
-"	0007  SpeedStream ADSL",
-"		111a 1001  ENI-3061 ADSL [ASIC]",
-"	1203  SpeedStream 1023 Wireless PCI Adapter",
-"111b  Teledyne Electronic Systems",
-"111c  Tricord Systems Inc.",
-"	0001  Powerbis Bridge",
-"111d  Integrated Device Technology, Inc.",
-"	0001  IDT77201/77211 155Mbps ATM SAR Controller [NICStAR]",
-"	0003  IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller",
-"	0004  IDT77V252 155Mbps ATM MICRO ABR SAR Controller",
-"	0005  IDT77V222 155Mbps ATM MICRO ABR SAR Controller",
-"111e  Eldec",
-"111f  Precision Digital Images",
-"	4a47  Precision MX Video engine interface",
-"	5243  Frame capture bus interface",
-"1120  EMC Corporation",
-"1121  Zilog",
-"1122  Multi-tech Systems, Inc.",
-"1123  Excellent Design, Inc.",
-"1124  Leutron Vision AG",
-"	2581  Picport Monochrome",
-"1125  Eurocore",
-"1126  Vigra",
-"1127  FORE Systems Inc",
-"	0200  ForeRunner PCA-200 ATM",
-"	0210  PCA-200PC",
-"	0250  ATM",
-"	0300  ForeRunner PCA-200EPC ATM",
-"	0310  ATM",
-"	0400  ForeRunnerHE ATM Adapter",
-"		1127 0400  ForeRunnerHE ATM",
-"1129  Firmworks",
-"112a  Hermes Electronics Company, Ltd.",
-"112b  Linotype - Hell AG",
-"112c  Zenith Data Systems",
-"112d  Ravicad",
-"112e  Infomedia Microelectronics Inc.",
-"112f  Imaging Technology Inc",
-"	0000  MVC IC-PCI",
-"	0001  MVC IM-PCI Video frame grabber/processor",
-"	0008  PC-CamLink PCI framegrabber",
-"1130  Computervision",
-"1131  Philips Semiconductors",
-"	1561  USB 1.1 Host Controller",
-"	1562  USB 2.0 Host Controller",
-"	3400  SmartPCI56(UCB1500) 56K Modem",
-"	5400  TriMedia TM1000/1100",
-"	5402  TriMedia TM-1300",
-"		1244 0f00  Fritz!Card DSL",
-"	5405  TriMedia TM1500",
-"	5406  TriMedia TM1700",
-"	7130  SAA7130 Video Broadcast Decoder",
-"		102b 48d0  Matrox CronosPlus",
-"		1048 226b  ELSA EX-VISION 300TV",
-"		1131 2001  10MOONS PCI TV CAPTURE CARD",
-"		1131 2005  Techcom (India) TV Tuner Card (SSD-TV-670)",
-"		1461 050c  Nagase Sangyo TransGear 3000TV",
-"		1461 10ff  AVerMedia DVD EZMaker",
-"		1461 2108  AverMedia AverTV/305",
-"		1461 2115  AverMedia AverTV Studio 305",
-"		153b 1152  Terratec Cinergy 200 TV",
-"		185b c100  Compro VideoMate TV PVR/FM",
-"		185b c901  Videomate DVB-T200",
-"		5168 0138  LifeView FlyVIDEO2000",
-"	7133  SAA7133/SAA7135 Video Broadcast Decoder",
-"		0000 4091  Beholder BeholdTV 409 FM",
-"		1019 4cb5  Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)",
-"		1043 0210  FlyTV mini Asus Digimatrix",
-"		1043 4843  ASUS TV-FM 7133",
-"		1043 4845  TV-FM 7135",
-"		1043 4862  P7131 Dual",
-"		1131 2001  Proteus Pro [philips reference design]",
-"		1131 2018  Tiger reference design",
-"		1131 4ee9  MonsterTV Mobile",
-"		11bd 002b  PCTV Stereo",
-"		11bd 002e  PCTV 110i (saa7133)",
-"		12ab 0800  PURPLE TV",
-"		1421 0335  Instant TV DVB-T Cardbus",
-"		1421 1370  Instant TV (saa7135)",
-"		1435 7330  VFG7330",
-"		1435 7350  VFG7350",
-"		1461 1044  AVerTVHD MCE A180",
-"		1461 f31f  Avermedia AVerTV GO 007 FM",
-"		1462 6231  TV@Anywhere plus",
-"		1489 0214  LifeView FlyTV Platinum FM",
-"		14c0 1212  LifeView FlyTV Platinum Mini2",
-"		153b 1160  Cinergy 250 PCI TV",
-"		153b 1162  Terratec Cinergy 400 mobile",
-"		185b c100  VideoMate TV",
-"		5168 0306  LifeView FlyDVB-T DUO",
-"		5168 0319  LifeView FlyDVB Trio",
-"	7134  SAA7134/SAA7135HL Video Broadcast Decoder",
-"		1019 4cb4  Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM)",
-"		1043 0210  Digimatrix TV",
-"		1043 4840  ASUS TV-FM 7134",
-"		1131 2004  EUROPA V3 reference design",
-"		1131 4e85  SKNet Monster TV",
-"		1131 6752  EMPRESS",
-"		11bd 002b  PCTV Stereo",
-"		11bd 002d  PCTV 300i DVB-T + PAL",
-"		1461 2c00  AverTV Hybrid+FM PCI",
-"		1461 9715  AVerTV Studio 307",
-"		1461 a70a  Avermedia AVerTV 307",
-"		1461 a70b  AverMedia M156 / Medion 2819",
-"		1461 d6ee  Cardbus TV/Radio (E500)",
-"		1471 b7e9  AVerTV Cardbus plus",
-"		153b 1142  Terratec Cinergy 400 TV",
-"		153b 1143  Terratec Cinergy 600 TV",
-"		153b 1158  Terratec Cinergy 600 TV MK3",
-"		1540 9524  ProVideo PV952",
-"		16be 0003  Medion 7134",
-"		185b c200  Compro VideoMate Gold+ Pal",
-"		185b c900  Videomate DVB-T300",
-"		1894 a006  KNC One TV-Station DVR",
-"		1894 fe01  KNC One TV-Station RDS / Typhoon TV Tuner RDS",
-"	7145  SAA7145",
-"	7146  SAA7146",
-"		110a 0000  Fujitsu/Siemens DVB-C card rev1.5",
-"		110a ffff  Fujitsu/Siemens DVB-C card rev1.5",
-"		1131 4f56  KNC1 DVB-S Budget",
-"		1131 4f60  Fujitsu-Siemens Activy DVB-S Budget Rev AL",
-"		1131 4f61  Activy DVB-S Budget Rev GR",
-"		1131 5f61  Activy DVB-T Budget",
-"		114b 2003  DVRaptor Video Edit/Capture Card",
-"		11bd 0006  DV500 Overlay",
-"		11bd 000a  DV500 Overlay",
-"		11bd 000f  DV500 Overlay",
-"		13c2 0000  Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5",
-"		13c2 0001  Technotrend/Hauppauge DVB card rev1.3 or rev1.6",
-"		13c2 0002  Technotrend/Hauppauge DVB card rev2.1",
-"		13c2 0003  Technotrend/Hauppauge DVB card rev2.1",
-"		13c2 0004  Technotrend/Hauppauge DVB card rev2.1",
-"		13c2 0006  Technotrend/Hauppauge DVB card rev1.3 or rev1.6",
-"		13c2 0008  Technotrend/Hauppauge DVB-T",
-"		13c2 000a  Octal/Technotrend DVB-C for iTV",
-"		13c2 1003  Technotrend-Budget/Hauppauge WinTV-NOVA-S DVB card",
-"		13c2 1004  Technotrend-Budget/Hauppauge WinTV-NOVA-C DVB card",
-"		13c2 1005  Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card",
-"		13c2 100c  Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card",
-"		13c2 100f  Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card",
-"		13c2 1011  Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card",
-"		13c2 1013  SATELCO Multimedia DVB",
-"		13c2 1016  WinTV-NOVA-SE DVB card",
-"		13c2 1102  Technotrend/Hauppauge DVB card rev2.1",
-"		153b 1156  Terratec Cynergy 1200C",
-"	9730  SAA9730 Integrated Multimedia and Peripheral Controller",
-"1132  Mitel Corp.",
-"1133  Eicon Networks Corporation",
-"	7901  EiconCard S90",
-"	7902  EiconCard S90",
-"	7911  EiconCard S91",
-"	7912  EiconCard S91",
-"	7941  EiconCard S94",
-"	7942  EiconCard S94",
-"	7943  EiconCard S94",
-"	7944  EiconCard S94",
-"	b921  EiconCard P92",
-"	b922  EiconCard P92",
-"	b923  EiconCard P92",
-"	e001  Diva Pro 2.0 S/T",
-"	e002  Diva 2.0 S/T PCI",
-"	e003  Diva Pro 2.0 U",
-"	e004  Diva 2.0 U PCI",
-"	e005  Diva 2.01 S/T PCI",
-"	e006  Diva CT S/T PCI",
-"	e007  Diva CT U PCI",
-"	e008  Diva CT Lite S/T PCI",
-"	e009  Diva CT Lite U PCI",
-"	e00a  Diva ISDN+V.90 PCI",
-"	e00b  Diva 2.02 PCI S/T",
-"	e00c  Diva 2.02 PCI U",
-"	e00d  Diva ISDN Pro 3.0 PCI",
-"	e00e  Diva ISDN+CT S/T PCI Rev 2",
-"	e010  Diva Server BRI-2M PCI",
-"		110a 0021  Fujitsu Siemens ISDN S0",
-"	e011  Diva Server BRI S/T Rev 2",
-"	e012  Diva Server 4BRI-8M PCI",
-"	e013  Diva Server 4BRI Rev 2",
-"		1133 1300  Diva Server V-4BRI-8",
-"		1133 e013  Diva Server 4BRI-8M 2.0 PCI",
-"	e014  Diva Server PRI-30M PCI",
-"	e015  DIVA Server PRI Rev 2",
-"		1133 e015  Diva Server PRI 2.0 PCI",
-"	e016  Diva Server Voice 4BRI PCI",
-"	e017  Diva Server Voice 4BRI Rev 2",
-"		1133 e017  Diva Server Voice 4BRI-8M 2.0 PCI",
-"	e018  Diva Server BRI-2M 2.0 PCI",
-"		1133 1800  Diva Server V-BRI-2",
-"		1133 e018  Diva Server BRI-2M 2.0 PCI",
-"	e019  Diva Server Voice PRI Rev 2",
-"		1133 e019  Diva Server Voice PRI 2.0 PCI",
-"	e01a  Diva Server 2FX",
-"	e01b  Diva Server Voice BRI-2M 2.0 PCI",
-"		1133 e01b  Diva Server Voice BRI-2M 2.0 PCI",
-"	e01c  Diva Server PRI Rev 3",
-"		1133 1c01  Diva Server PRI/E1/T1-8",
-"		1133 1c02  Diva Server PRI/T1-24",
-"		1133 1c03  Diva Server PRI/E1-30",
-"		1133 1c04  Diva Server PRI/E1/T1",
-"		1133 1c05  Diva Server V-PRI/T1-24",
-"		1133 1c06  Diva Server V-PRI/E1-30",
-"		1133 1c07  Diva Server PRI/E1/T1-8 Cornet NQ",
-"		1133 1c08  Diva Server PRI/T1-24 Cornet NQ",
-"		1133 1c09  Diva Server PRI/E1-30 Cornet NQ",
-"		1133 1c0a  Diva Server PRI/E1/T1 Cornet NQ",
-"		1133 1c0b  Diva Server V-PRI/T1-24 Cornet NQ",
-"		1133 1c0c  Diva Server V-PRI/E1-30 Cornet NQ",
-"	e01e  Diva Server 2PRI",
-"	e020  Diva Server 4PRI",
-"	e022  Diva Server Analog-2P",
-"	e024  Diva Server Analog-4P",
-"		1133 2400  Diva Server V-Analog-4P",
-"		1133 e024  Diva Server Analog-4P",
-"	e028  Diva Server Analog-8P",
-"		1133 2800  Diva Server V-Analog-8P",
-"		1133 e028  Diva Server Analog-8P",
-"	e02a  Diva Server IPM-300",
-"	e02c  Diva Server IPM-600",
-"1134  Mercury Computer Systems",
-"	0001  Raceway Bridge",
-"	0002  Dual PCI to RapidIO Bridge",
-"1135  Fuji Xerox Co Ltd",
-"	0001  Printer controller",
-"1136  Momentum Data Systems",
-"1137  Cisco Systems Inc",
-"1138  Ziatech Corporation",
-"	8905  8905 [STD 32 Bridge]",
-"1139  Dynamic Pictures, Inc",
-"	0001  VGA Compatable 3D Graphics",
-"113a  FWB Inc",
-"113b  Network Computing Devices",
-"113c  Cyclone Microsystems, Inc.",
-"	0000  PCI-9060 i960 Bridge",
-"	0001  PCI-SDK [PCI i960 Evaluation Platform]",
-"	0911  PCI-911 [i960Jx-based Intelligent I/O Controller]",
-"	0912  PCI-912 [i960CF-based Intelligent I/O Controller]",
-"	0913  PCI-913",
-"	0914  PCI-914 [I/O Controller w/ secondary PCI bus]",
-"113d  Leading Edge Products Inc",
-"113e  Sanyo Electric Co - Computer Engineering Dept",
-"113f  Equinox Systems, Inc.",
-"	0808  SST-64P Adapter",
-"	1010  SST-128P Adapter",
-"	80c0  SST-16P DB Adapter",
-"	80c4  SST-16P RJ Adapter",
-"	80c8  SST-16P Adapter",
-"	8888  SST-4P Adapter",
-"	9090  SST-8P Adapter",
-"1140  Intervoice Inc",
-"1141  Crest Microsystem Inc",
-"1142  Alliance Semiconductor Corporation",
-"	3210  AP6410",
-"	6422  ProVideo 6422",
-"	6424  ProVideo 6424",
-"	6425  ProMotion AT25",
-"	643d  ProMotion AT3D",
-"1143  NetPower, Inc",
-"1144  Cincinnati Milacron",
-"	0001  Noservo controller",
-"1145  Workbit Corporation",
-"	8007  NinjaSCSI-32 Workbit",
-"	f007  NinjaSCSI-32 KME",
-"	f010  NinjaSCSI-32 Workbit",
-"	f012  NinjaSCSI-32 Logitec",
-"	f013  NinjaSCSI-32 Logitec",
-"	f015  NinjaSCSI-32 Melco",
-"	f020  NinjaSCSI-32 Sony PCGA-DVD51",
-"1146  Force Computers",
-"1147  Interface Corp",
-"1148  SysKonnect",
-"	4000  FDDI Adapter",
-"		0e11 b03b  Netelligent 100 FDDI DAS Fibre SC",
-"		0e11 b03c  Netelligent 100 FDDI SAS Fibre SC",
-"		0e11 b03d  Netelligent 100 FDDI DAS UTP",
-"		0e11 b03e  Netelligent 100 FDDI SAS UTP",
-"		0e11 b03f  Netelligent 100 FDDI SAS Fibre MIC",
-"		1148 5521  FDDI SK-5521 (SK-NET FDDI-UP)",
-"		1148 5522  FDDI SK-5522 (SK-NET FDDI-UP DAS)",
-"		1148 5541  FDDI SK-5541 (SK-NET FDDI-FP)",
-"		1148 5543  FDDI SK-5543 (SK-NET FDDI-LP)",
-"		1148 5544  FDDI SK-5544 (SK-NET FDDI-LP DAS)",
-"		1148 5821  FDDI SK-5821 (SK-NET FDDI-UP64)",
-"		1148 5822  FDDI SK-5822 (SK-NET FDDI-UP64 DAS)",
-"		1148 5841  FDDI SK-5841 (SK-NET FDDI-FP64)",
-"		1148 5843  FDDI SK-5843 (SK-NET FDDI-LP64)",
-"		1148 5844  FDDI SK-5844 (SK-NET FDDI-LP64 DAS)",
-"	4200  Token Ring adapter",
-"	4300  SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)",
-"		1148 9821  SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T)",
-"		1148 9822  SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link)",
-"		1148 9841  SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX)",
-"		1148 9842  SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link)",
-"		1148 9843  SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX)",
-"		1148 9844  SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link)",
-"		1148 9861  SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition)",
-"		1148 9862  SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link)",
-"		1148 9871  SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX)",
-"		1148 9872  SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)",
-"		1259 2970  AT-2970SX Gigabit Ethernet Adapter",
-"		1259 2971  AT-2970LX Gigabit Ethernet Adapter",
-"		1259 2972  AT-2970TX Gigabit Ethernet Adapter",
-"		1259 2973  AT-2971SX Gigabit Ethernet Adapter",
-"		1259 2974  AT-2971T Gigabit Ethernet Adapter",
-"		1259 2975  AT-2970SX/2SC Gigabit Ethernet Adapter",
-"		1259 2976  AT-2970LX/2SC Gigabit Ethernet Adapter",
-"		1259 2977  AT-2970TX/2TX Gigabit Ethernet Adapter",
-"	4320  SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter, PCI64, Fiber ZX/SC",
-"		1148 0121  Marvell RDK-8001 Adapter",
-"		1148 0221  Marvell RDK-8002 Adapter",
-"		1148 0321  Marvell RDK-8003 Adapter",
-"		1148 0421  Marvell RDK-8004 Adapter",
-"		1148 0621  Marvell RDK-8006 Adapter",
-"		1148 0721  Marvell RDK-8007 Adapter",
-"		1148 0821  Marvell RDK-8008 Adapter",
-"		1148 0921  Marvell RDK-8009 Adapter",
-"		1148 1121  Marvell RDK-8011 Adapter",
-"		1148 1221  Marvell RDK-8012 Adapter",
-"		1148 3221  SK-9521 V2.0 10/100/1000Base-T Adapter",
-"		1148 5021  SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter",
-"		1148 5041  SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter",
-"		1148 5043  SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter",
-"		1148 5051  SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter",
-"		1148 5061  SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter",
-"		1148 5071  SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter",
-"		1148 9521  SK-9521 10/100/1000Base-T Adapter",
-"	4400  SK-9Dxx Gigabit Ethernet Adapter",
-"	4500  SK-9Mxx Gigabit Ethernet Adapter",
-"	9000  SK-9S21 10/100/1000Base-T Server Adapter, PCI-X, Copper RJ-45",
-"	9843  [Fujitsu] Gigabit Ethernet",
-"	9e00  SK-9E21D 10/100/1000Base-T Adapter, Copper RJ-45",
-"		1148 2100  SK-9E21 Server Adapter",
-"		1148 21d0  SK-9E21D 10/100/1000Base-T Adapter",
-"		1148 2200  SK-9E22 Server Adapter",
-"		1148 8100  SK-9E81 Server Adapter",
-"		1148 8200  SK-9E82 Server Adapter",
-"		1148 9100  SK-9E91 Server Adapter",
-"		1148 9200  SK-9E92 Server Adapter",
-"1149  Win System Corporation",
-"114a  VMIC",
-"	5579  VMIPCI-5579 (Reflective Memory Card)",
-"	5587  VMIPCI-5587 (Reflective Memory Card)",
-"	6504  VMIC PCI 7755 FPGA",
-"	7587  VMIVME-7587",
-"114b  Canopus Co., Ltd",
-"114c  Annabooks",
-"114d  IC Corporation",
-"114e  Nikon Systems Inc",
-"114f  Digi International",
-"	0002  AccelePort EPC",
-"	0003  RightSwitch SE-6",
-"	0004  AccelePort Xem",
-"	0005  AccelePort Xr",
-"	0006  AccelePort Xr,C/X",
-"	0009  AccelePort Xr/J",
-"	000a  AccelePort EPC/J",
-"	000c  DataFirePRIme T1 (1-port)",
-"	000d  SyncPort 2-Port (x.25/FR)",
-"	0011  AccelePort 8r EIA-232 (IBM)",
-"	0012  AccelePort 8r EIA-422",
-"	0014  AccelePort 8r EIA-422",
-"	0015  AccelePort Xem",
-"	0016  AccelePort EPC/X",
-"	0017  AccelePort C/X",
-"	001a  DataFirePRIme E1 (1-port)",
-"	001b  AccelePort C/X (IBM)",
-"	001d  DataFire RAS T1/E1/PRI",
-"		114f 0050  DataFire RAS E1 Adapter",
-"		114f 0051  DataFire RAS Dual E1 Adapter",
-"		114f 0052  DataFire RAS T1 Adapter",
-"		114f 0053  DataFire RAS Dual T1 Adapter",
-"	0023  AccelePort RAS",
-"	0024  DataFire RAS B4 ST/U",
-"		114f 0030  DataFire RAS BRI U Adapter",
-"		114f 0031  DataFire RAS BRI S/T Adapter",
-"	0026  AccelePort 4r 920",
-"	0027  AccelePort Xr 920",
-"	0028  ClassicBoard 4",
-"	0029  ClassicBoard 8",
-"	0034  AccelePort 2r 920",
-"	0035  DataFire DSP T1/E1/PRI cPCI",
-"	0040  AccelePort Xp",
-"	0042  AccelePort 2p",
-"	0043  AccelePort 4p",
-"	0044  AccelePort 8p",
-"	0045  AccelePort 16p",
-"	004e  AccelePort 32p",
-"	0070  Datafire Micro V IOM2 (Europe)",
-"	0071  Datafire Micro V (Europe)",
-"	0072  Datafire Micro V IOM2 (North America)",
-"	0073  Datafire Micro V (North America)",
-"	00b0  Digi Neo 4",
-"	00b1  Digi Neo 8",
-"	00c8  Digi Neo 2 DB9",
-"	00c9  Digi Neo 2 DB9 PRI",
-"	00ca  Digi Neo 2 RJ45",
-"	00cb  Digi Neo 2 RJ45 PRI",
-"	00d0  ClassicBoard 4 422",
-"	00d1  ClassicBoard 8 422",
-"	6001  Avanstar",
-"1150  Thinking Machines Corp",
-"1151  JAE Electronics Inc.",
-"1152  Megatek",
-"1153  Land Win Electronic Corp",
-"1154  Melco Inc",
-"1155  Pine Technology Ltd",
-"1156  Periscope Engineering",
-"1157  Avsys Corporation",
-"1158  Voarx R & D Inc",
-"	3011  Tokenet/vg 1001/10m anylan",
-"	9050  Lanfleet/Truevalue",
-"	9051  Lanfleet/Truevalue",
-"1159  Mutech Corp",
-"	0001  MV-1000",
-"115a  Harlequin Ltd",
-"115b  Parallax Graphics",
-"115c  Photron Ltd.",
-"115d  Xircom",
-"	0003  Cardbus Ethernet 10/100",
-"		1014 0181  10/100 EtherJet Cardbus Adapter",
-"		1014 1181  10/100 EtherJet Cardbus Adapter",
-"		1014 8181  10/100 EtherJet Cardbus Adapter",
-"		1014 9181  10/100 EtherJet Cardbus Adapter",
-"		115d 0181  Cardbus Ethernet 10/100",
-"		115d 0182  RealPort2 CardBus Ethernet 10/100 (R2BE-100)",
-"		115d 1181  Cardbus Ethernet 10/100",
-"		1179 0181  Cardbus Ethernet 10/100",
-"		8086 8181  EtherExpress PRO/100 Mobile CardBus 32 Adapter",
-"		8086 9181  EtherExpress PRO/100 Mobile CardBus 32 Adapter",
-"	0005  Cardbus Ethernet 10/100",
-"		1014 0182  10/100 EtherJet Cardbus Adapter",
-"		1014 1182  10/100 EtherJet Cardbus Adapter",
-"		115d 0182  Cardbus Ethernet 10/100",
-"		115d 1182  Cardbus Ethernet 10/100",
-"	0007  Cardbus Ethernet 10/100",
-"		1014 0182  10/100 EtherJet Cardbus Adapter",
-"		1014 1182  10/100 EtherJet Cardbus Adapter",
-"		115d 0182  Cardbus Ethernet 10/100",
-"		115d 1182  Cardbus Ethernet 10/100",
-"	000b  Cardbus Ethernet 10/100",
-"		1014 0183  10/100 EtherJet Cardbus Adapter",
-"		115d 0183  Cardbus Ethernet 10/100",
-"	000c  Mini-PCI V.90 56k Modem",
-"	000f  Cardbus Ethernet 10/100",
-"		1014 0183  10/100 EtherJet Cardbus Adapter",
-"		115d 0183  Cardbus Ethernet 10/100",
-"	00d4  Mini-PCI K56Flex Modem",
-"	0101  Cardbus 56k modem",
-"		115d 1081  Cardbus 56k Modem",
-"	0103  Cardbus Ethernet + 56k Modem",
-"		1014 9181  Cardbus 56k Modem",
-"		1115 1181  Cardbus Ethernet 100 + 56k Modem",
-"		115d 1181  CBEM56G-100 Ethernet + 56k Modem",
-"		8086 9181  PRO/100 LAN + Modem56 CardBus",
-"115e  Peer Protocols Inc",
-"115f  Maxtor Corporation",
-"1160  Megasoft Inc",
-"1161  PFU Limited",
-"1162  OA Laboratory Co Ltd",
-"1163  Rendition",
-"	0001  Verite 1000",
-"	2000  Verite V2000/V2100/V2200",
-"		1092 2000  Stealth II S220",
-"1164  Advanced Peripherals Technologies",
-"1165  Imagraph Corporation",
-"	0001  Motion TPEG Recorder/Player with audio",
-"1166  Broadcom",
-"	0000  CMIC-LE",
-"	0005  CNB20-LE Host Bridge",
-"	0006  CNB20HE Host Bridge",
-"	0007  CNB20-LE Host Bridge",
-"	0008  CNB20HE Host Bridge",
-"	0009  CNB20LE Host Bridge",
-"	0010  CIOB30",
-"	0011  CMIC-HE",
-"	0012  CMIC-WS Host Bridge (GC-LE chipset)",
-"	0013  CNB20-HE Host Bridge",
-"	0014  CMIC-LE Host Bridge (GC-LE chipset)",
-"	0015  CMIC-GC Host Bridge",
-"	0016  CMIC-GC Host Bridge",
-"	0017  GCNB-LE Host Bridge",
-"	0036  HT1000 PCI/PCI-X bridge",
-"	0101  CIOB-X2 PCI-X I/O Bridge",
-"	0104  HT1000 PCI/PCI-X bridge",
-"	0110  CIOB-E I/O Bridge with Gigabit Ethernet",
-"	0130  HT1000 PCI-X bridge",
-"	0132  HT1000 PCI-Express bridge",
-"	0200  OSB4 South Bridge",
-"	0201  CSB5 South Bridge",
-"		4c53 1080  CT8 mainboard",
-"	0203  CSB6 South Bridge",
-"		1734 1012  Primergy RX300",
-"	0205  HT1000 Legacy South Bridge",
-"	0211  OSB4 IDE Controller",
-"	0212  CSB5 IDE Controller",
-"		4c53 1080  CT8 mainboard",
-"	0213  CSB6 RAID/IDE Controller",
-"		1028 c134  Poweredge SC600",
-"		1734 1012  Primergy RX300",
-"	0214  HT1000 Legacy IDE controller",
-"	0217  CSB6 IDE Controller",
-"		1028 4134  Poweredge SC600",
-"	0220  OSB4/CSB5 OHCI USB Controller",
-"		4c53 1080  CT8 mainboard",
-"	0221  CSB6 OHCI USB Controller",
-"		1734 1012  Primergy RX300",
-"	0223  HT1000 USB Controller",
-"	0225  CSB5 LPC bridge",
-"	0227  GCLE-2 Host Bridge",
-"		1734 1012  Primergy RX300",
-"	0230  CSB5 LPC bridge",
-"		4c53 1080  CT8 mainboard",
-"	0234  HT1000 LPC Bridge",
-"	0240  K2 SATA",
-"	0241  RAIDCore RC4000",
-"	0242  RAIDCore BC4000",
-"	024a  BCM5785 (HT1000) SATA Native SATA Mode",
-"	024b  BCM5785 (HT1000) PATA/IDE Mode",
-"1167  Mutoh Industries Inc",
-"1168  Thine Electronics Inc",
-"1169  Centre for Development of Advanced Computing",
-"116a  Polaris Communications",
-"	6100  Bus/Tag Channel",
-"	6800  Escon Channel",
-"	7100  Bus/Tag Channel",
-"	7800  Escon Channel",
-"116b  Connectware Inc",
-"116c  Intelligent Resources Integrated Systems",
-"116d  Martin-Marietta",
-"116e  Electronics for Imaging",
-"116f  Workstation Technology",
-"1170  Inventec Corporation",
-"1171  Loughborough Sound Images Plc",
-"1172  Altera Corporation",
-"1173  Adobe Systems, Inc",
-"1174  Bridgeport Machines",
-"1175  Mitron Computer Inc.",
-"1176  SBE Incorporated",
-"1177  Silicon Engineering",
-"1178  Alfa, Inc.",
-"	afa1  Fast Ethernet Adapter",
-"1179  Toshiba America Info Systems",
-"	0102  Extended IDE Controller",
-"	0103  EX-IDE Type-B",
-"	0404  DVD Decoder card",
-"	0406  Tecra Video Capture device",
-"	0407  DVD Decoder card (Version 2)",
-"	0601  CPU to PCI bridge",
-"		1179 0001  Satellite Pro",
-"	0603  ToPIC95 PCI to CardBus Bridge for Notebooks",
-"	060a  ToPIC95",
-"		1179 0001  Satellite Pro",
-"	060f  ToPIC97",
-"	0617  ToPIC100 PCI to Cardbus Bridge with ZV Support",
-"	0618  CPU to PCI and PCI to ISA bridge",
-"	0701  FIR Port",
-"	0804  TC6371AF SmartMedia Controller",
-"	0805  SD TypA Controller",
-"	0d01  FIR Port Type-DO",
-"		1179 0001  FIR Port Type-DO",
-"117a  A-Trend Technology",
-"117b  L G Electronics, Inc.",
-"117c  Atto Technology",
-"	0030  Ultra320 SCSI Host Adapter",
-"		117c 8013  ExpressPCI UL4D",
-"		117c 8014  ExpressPCI UL4S",
-"117d  Becton & Dickinson",
-"117e  T/R Systems",
-"117f  Integrated Circuit Systems",
-"1180  Ricoh Co Ltd",
-"	0465  RL5c465",
-"	0466  RL5c466",
-"	0475  RL5c475",
-"		144d c006  vpr Matrix 170B4 CardBus bridge",
-"	0476  RL5c476 II",
-"		1014 0185  ThinkPad A/T/X Series",
-"		1028 0188  Inspiron 6000 laptop",
-"		1043 1967  V6800V",
-"		1043 1987  Asus A4K and Z81K notebooks, possibly others ( mid-2005 machines )",
-"		104d 80df  Vaio PCG-FX403",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		144d c00c  P35 notebook",
-"		14ef 0220  PCD-RP-220S",
-"		17aa 201c  Thinkpad X60s",
-"	0477  RL5c477",
-"	0478  RL5c478",
-"		1014 0184  ThinkPad A30p (2653-64G)",
-"	0511  R5C511",
-"	0522  R5C522 IEEE 1394 Controller",
-"		1014 01cf  ThinkPad A30p (2653-64G)",
-"		1043 1967  V6800V",
-"	0551  R5C551 IEEE 1394 Controller",
-"		144d c006  vpr Matrix 170B4",
-"	0552  R5C552 IEEE 1394 Controller",
-"		1014 0511  ThinkPad A/T/X Series",
-"		1028 0188  Inspiron 6000 laptop",
-"		144d c00c  P35 notebook",
-"		17aa 201e  Thinkpad X60s",
-"	0554  R5C554",
-"	0575  R5C575 SD Bus Host Adapter",
-"	0576  R5C576 SD Bus Host Adapter",
-"	0592  R5C592 Memory Stick Bus Host Adapter",
-"		1043 1967  V6800V",
-"		144d c018  X20 IV",
-"	0811  R5C811",
-"	0822  R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter",
-"		1014 0556  Thinkpad X40",
-"		1014 0598  Thinkpad Z60m",
-"		1028 0188  Inspiron 6000 laptop",
-"		1028 01a2  Inspiron 9200",
-"		1043 1967  ASUS V6800V",
-"		144d c018  X20 IV",
-"		17aa 201d  Thinkpad X60s",
-"	0841  R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394",
-"	0852  xD-Picture Card Controller",
-"		1043 1967  V6800V",
-"1181  Telmatics International",
-"1183  Fujikura Ltd",
-"1184  Forks Inc",
-"1185  Dataworld International Ltd",
-"1186  D-Link System Inc",
-"	0100  DC21041",
-"	1002  DL10050 Sundance Ethernet",
-"		1186 1002  DFE-550TX",
-"		1186 1012  DFE-580TX",
-"	1025  AirPlus Xtreme G DWL-G650 Adapter",
-"	1026  AirXpert DWL-AG650 Wireless Cardbus Adapter",
-"	1043  AirXpert DWL-AG650 Wireless Cardbus Adapter",
-"	1300  RTL8139 Ethernet",
-"		1186 1300  DFE-538TX 10/100 Ethernet Adapter",
-"		1186 1301  DFE-530TX+ 10/100 Ethernet Adapter",
-"		1186 1303  DFE-528TX 10/100 Fast Ethernet PCI Adapter",
-"	1340  DFE-690TXD CardBus PC Card",
-"	1541  DFE-680TXD CardBus PC Card",
-"	1561  DRP-32TXD Cardbus PC Card",
-"	2027  AirPlus Xtreme G DWL-G520 Adapter",
-"	3203  AirPlus Xtreme G DWL-G520 Adapter",
-"	3300  DWL-510 2.4GHz Wireless PCI Adapter",
-"	3a03  AirPro DWL-A650 Wireless Cardbus Adapter(rev.B)",
-"	3a04  AirPro DWL-AB650 Multimode Wireless Cardbus Adapter",
-"	3a05  AirPro DWL-AB520 Multimode Wireless PCI Adapter",
-"	3a07  AirXpert DWL-AG650 Wireless Cardbus Adapter",
-"	3a08  AirXpert DWL-AG520 Wireless PCI Adapter",
-"	3a10  AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B)",
-"	3a11  AirXpert DWL-AG520 Wireless PCI Adapter(rev.B)",
-"	3a12  AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)",
-"	3a13  AirPlus DWL-G520 Wireless PCI Adapter(rev.B)",
-"	3a14  AirPremier DWL-AG530 Wireless PCI Adapter",
-"	3a63  AirXpert DWL-AG660 Wireless Cardbus Adapter",
-"	4000  DL2000-based Gigabit Ethernet",
-"	4300  DGE-528T Gigabit Ethernet Adapter",
-"	4b01  DGE-530T Gigabit Ethernet Adapter (rev 11)",
-"	4c00  Gigabit Ethernet Adapter",
-"		1186 4c00  DGE-530T Gigabit Ethernet Adapter",
-"	8400  D-Link DWL-650+ CardBus PC Card",
-"1187  Advanced Technology Laboratories, Inc.",
-"1188  Shima Seiki Manufacturing Ltd.",
-"1189  Matsushita Electronics Co Ltd",
-"118a  Hilevel Technology",
-"118b  Hypertec Pty Limited",
-"118c  Corollary, Inc",
-"	0014  PCIB [C-bus II to PCI bus host bridge chip]",
-"	1117  Intel 8-way XEON Profusion Chipset [Cache Coherency Filter]",
-"118d  BitFlow Inc",
-"	0001  Raptor-PCI framegrabber",
-"	0012  Model 12 Road Runner Frame Grabber",
-"	0014  Model 14 Road Runner Frame Grabber",
-"	0024  Model 24 Road Runner Frame Grabber",
-"	0044  Model 44 Road Runner Frame Grabber",
-"	0112  Model 12 Road Runner Frame Grabber",
-"	0114  Model 14 Road Runner Frame Grabber",
-"	0124  Model 24 Road Runner Frame Grabber",
-"	0144  Model 44 Road Runner Frame Grabber",
-"	0212  Model 12 Road Runner Frame Grabber",
-"	0214  Model 14 Road Runner Frame Grabber",
-"	0224  Model 24 Road Runner Frame Grabber",
-"	0244  Model 44 Road Runner Frame Grabber",
-"	0312  Model 12 Road Runner Frame Grabber",
-"	0314  Model 14 Road Runner Frame Grabber",
-"	0324  Model 24 Road Runner Frame Grabber",
-"	0344  Model 44 Road Runner Frame Grabber",
-"118e  Hermstedt GmbH",
-"118f  Green Logic",
-"1190  Tripace",
-"	c731  TP-910/920/940 PCI Ultra(Wide) SCSI Adapter",
-"1191  Artop Electronic Corp",
-"	0003  SCSI Cache Host Adapter",
-"	0004  ATP8400",
-"	0005  ATP850UF",
-"	0006  ATP860 NO-BIOS",
-"	0007  ATP860",
-"	0008  ATP865 NO-ROM",
-"	0009  ATP865",
-"	8002  AEC6710 SCSI-2 Host Adapter",
-"	8010  AEC6712UW SCSI",
-"	8020  AEC6712U SCSI",
-"	8030  AEC6712S SCSI",
-"	8040  AEC6712D SCSI",
-"	8050  AEC6712SUW SCSI",
-"	8060  AEC6712 SCSI",
-"	8080  AEC67160 SCSI",
-"	8081  AEC67160S SCSI",
-"	808a  AEC67162 2-ch. LVD SCSI",
-"1192  Densan Company Ltd",
-"1193  Zeitnet Inc.",
-"	0001  1221",
-"	0002  1225",
-"1194  Toucan Technology",
-"1195  Ratoc System Inc",
-"1196  Hytec Electronics Ltd",
-"1197  Gage Applied Sciences, Inc.",
-"	010c  CompuScope 82G 8bit 2GS/s Analog Input Card",
-"1198  Lambda Systems Inc",
-"1199  Attachmate Corporation",
-"119a  Mind Share, Inc.",
-"119b  Omega Micro Inc.",
-"	1221  82C092G",
-"119c  Information Technology Inst.",
-"119d  Bug, Inc. Sapporo Japan",
-"119e  Fujitsu Microelectronics Ltd.",
-"	0001  FireStream 155",
-"	0003  FireStream 50",
-"119f  Bull HN Information Systems",
-"11a0  Convex Computer Corporation",
-"11a1  Hamamatsu Photonics K.K.",
-"11a2  Sierra Research and Technology",
-"11a3  Deuretzbacher GmbH & Co. Eng. KG",
-"11a4  Barco Graphics NV",
-"11a5  Microunity Systems Eng. Inc",
-"11a6  Pure Data Ltd.",
-"11a7  Power Computing Corp.",
-"11a8  Systech Corp.",
-"11a9  InnoSys Inc.",
-"	4240  AMCC S933Q Intelligent Serial Card",
-"11aa  Actel",
-"11ab  Marvell Technology Group Ltd.",
-"	0146  GT-64010/64010A System Controller",
-"	138f  W8300 802.11 Adapter (rev 07)",
-"	1fa6  Marvell W8300 802.11 Adapter",
-"	1fa7  88W8310 and 88W8000G [Libertas] 802.11g client chipset",
-"	1faa  88w8335 [Libertas] 802.11b/g Wireless",
-"		1385 4e00  WG511 v2 54MBit/ Wireless PC-Card",
-"	4320  88E8001 Gigabit Ethernet Controller",
-"		1019 0f38  Marvell 88E8001 Gigabit Ethernet Controller (ECS)",
-"		1019 8001  Marvell 88E8001 Gigabit Ethernet Controller (ECS)",
-"		1043 173c  Marvell 88E8001 Gigabit Ethernet Controller (Asus)",
-"		1043 811a  Marvell 88E8001 Gigabit Ethernet Controller (Asus)",
-"		105b 0c19  Marvell 88E8001 Gigabit Ethernet Controller (Foxconn)",
-"		10b8 b452  EZ Card 1000 (SMC9452TXV.2)",
-"		11ab 0121  Marvell RDK-8001",
-"		11ab 0321  Marvell RDK-8003",
-"		11ab 1021  Marvell RDK-8010",
-"		11ab 4320  Marvell Yukon Gigabit Ethernet 10/100/1000Baset-T Constroller (Asus)",
-"		11ab 5021  Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (64 bit)",
-"		11ab 9521  Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (32 bit)",
-"		1458 e000  Marvell 88E8001 Gigabit Ethernet Controller (Gigabyte)",
-"		147b 1406  Marvell 88E8001 Gigabit Ethernet Controller (Abit)",
-"		15d4 0047  Marvell 88E8001 Gigabit Ethernet Controller (Iwill)",
-"		1695 9025  Marvell 88E8001 Gigabit Ethernet Controller (Epox)",
-"		17f2 1c03  Marvell 88E8001 Gigabit Ethernet Controller (Albatron)",
-"		270f 2803  Marvell 88E8001 Gigabit Ethernet Controller (Chaintech)",
-"	4340  88E8021 PCI-X IPMI Gigabit Ethernet Controller",
-"	4341  88E8022 PCI-X IPMI Gigabit Ethernet Controller",
-"	4342  88E8061 PCI-E IPMI Gigabit Ethernet Controller",
-"	4343  88E8062 PCI-E IPMI Gigabit Ethernet Controller",
-"	4344  88E8021 PCI-X IPMI Gigabit Ethernet Controller",
-"	4345  88E8022 PCI-X IPMI Gigabit Ethernet Controller",
-"	4346  88E8061 PCI-E IPMI Gigabit Ethernet Controller",
-"	4347  88E8062 PCI-E IPMI Gigabit Ethernet Controller",
-"	4350  88E8035 PCI-E Fast Ethernet Controller",
-"		1179 0001  Marvell 88E8035 Fast Ethernet Controller (Toshiba)",
-"		11ab 3521  Marvell RDK-8035",
-"		1854 000d  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 000e  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 000f  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 0011  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 0012  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 0016  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 0017  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 0018  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 0019  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 001c  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 001e  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"		1854 0020  Marvell 88E8035 Fast Ethernet Controller (LGE)",
-"	4351  88E8036 PCI-E Fast Ethernet Controller",
-"		107b 4009  Marvell 88E8036 Fast Ethernet Controller (Wistron)",
-"		10f7 8338  Marvell 88E8036 Fast Ethernet Controller (Panasonic)",
-"		1179 0001  Marvell 88E8036 Fast Ethernet Controller (Toshiba)",
-"		1179 ff00  Marvell 88E8036 Fast Ethernet Controller (Compal)",
-"		1179 ff10  Marvell 88E8036 Fast Ethernet Controller (Inventec)",
-"		11ab 3621  Marvell RDK-8036",
-"		13d1 ac12  Abocom EFE3K - 10/100 Ethernet Expresscard",
-"		161f 203d  Marvell 88E8036 Fast Ethernet Controller (Arima)",
-"		1854 000d  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 000e  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 000f  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 0011  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 0012  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 0016  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 0017  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 0018  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 0019  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 001c  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 001e  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"		1854 0020  Marvell 88E8036 Fast Ethernet Controller (LGE)",
-"	4352  88E8038 PCI-E Fast Ethernet Controller",
-"	4360  88E8052 PCI-E ASF Gigabit Ethernet Controller",
-"		1043 8134  Marvell 88E8052 Gigabit Ethernet Controller (Asus)",
-"		107b 4009  Marvell 88E8052 Gigabit Ethernet Controller (Wistron)",
-"		11ab 5221  Marvell RDK-8052",
-"		1458 e000  Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte)",
-"		1462 052c  Marvell 88E8052 Gigabit Ethernet Controller (MSI)",
-"		1849 8052  Marvell 88E8052 Gigabit Ethernet Controller (ASRock)",
-"		a0a0 0509  Marvell 88E8052 Gigabit Ethernet Controller (Aopen)",
-"	4361  88E8050 PCI-E ASF Gigabit Ethernet Controller",
-"		107b 3015  Marvell 88E8050 Gigabit Ethernet Controller (Gateway)",
-"		11ab 5021  Marvell 88E8050 Gigabit Ethernet Controller (Intel)",
-"		8086 3063  D925XCVLK mainboard",
-"		8086 3439  Marvell 88E8050 Gigabit Ethernet Controller (Intel)",
-"	4362  88E8053 PCI-E Gigabit Ethernet Controller",
-"		103c 2a0d  Marvell 88E8053 Gigabit Ethernet Controller (Asus)",
-"		1043 8142  Marvell 88E8053 Gigabit Ethernet controller PCIe (Asus)",
-"		109f 3197  Marvell 88E8053 Gigabit Ethernet Controller (Trigem)",
-"		10f7 8338  Marvell 88E8053 Gigabit Ethernet Controller (Panasonic)",
-"		10fd a430  Marvell 88E8053 Gigabit Ethernet Controller (SOYO)",
-"		1179 0001  Marvell 88E8053 Gigabit Ethernet Controller (Toshiba)",
-"		1179 ff00  Marvell 88E8053 Gigabit Ethernet Controller (Compal)",
-"		1179 ff10  Marvell 88E8053 Gigabit Ethernet Controller (Inventec)",
-"		11ab 5321  Marvell RDK-8053",
-"		1297 c240  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
-"		1297 c241  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
-"		1297 c242  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
-"		1297 c243  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
-"		1297 c244  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
-"		13d1 ac11  EGE5K - Giga Ethernet Expresscard",
-"		1458 e000  Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte)",
-"		1462 058c  Marvell 88E8053 Gigabit Ethernet Controller (MSI)",
-"		14c0 0012  Marvell 88E8053 Gigabit Ethernet Controller (Compal)",
-"		1558 04a0  Marvell 88E8053 Gigabit Ethernet Controller (Clevo)",
-"		15bd 1003  Marvell 88E8053 Gigabit Ethernet Controller (DFI)",
-"		161f 203c  Marvell 88E8053 Gigabit Ethernet Controller (Arima)",
-"		161f 203d  Marvell 88E8053 Gigabit Ethernet Controller (Arima)",
-"		1695 9029  Marvell 88E8053 Gigabit Ethernet Controller (Epox)",
-"		17f2 2c08  Marvell 88E8053 Gigabit Ethernet Controller (Albatron)",
-"		17ff 0585  Marvell 88E8053 Gigabit Ethernet Controller (Quanta)",
-"		1849 8053  Marvell 88E8053 Gigabit Ethernet Controller (ASRock)",
-"		1854 000b  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 000c  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 0010  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 0013  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 0014  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 0015  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 001a  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 001b  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 001d  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 001f  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 0021  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		1854 0022  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
-"		270f 2801  Marvell 88E8053 Gigabit Ethernet Controller (Chaintech)",
-"		a0a0 0506  Marvell 88E8053 Gigabit Ethernet Controller (Aopen)",
-"	4363  88E8055 PCI-E Gigabit Ethernet Controller",
-"	4611  GT-64115 System Controller",
-"	4620  GT-64120/64120A/64121A System Controller",
-"	4801  GT-48001",
-"	5005  Belkin F5D5005 Gigabit Desktop Network PCI Card",
-"	5040  MV88SX5040 4-port SATA I PCI-X Controller",
-"	5041  MV88SX5041 4-port SATA I PCI-X Controller",
-"	5080  MV88SX5080 8-port SATA I PCI-X Controller",
-"	5081  MV88SX5081 8-port SATA I PCI-X Controller",
-"	6041  MV88SX6041 4-port SATA II PCI-X Controller",
-"	6081  MV88SX6081 8-port SATA II PCI-X Controller",
-"	6460  MV64360/64361/64362 System Controller",
-"	6480  MV64460/64461/64462 System Controller",
-"	f003  GT-64010 Primary Image Piranha Image Generator",
-"11ac  Canon Information Systems Research Aust.",
-"11ad  Lite-On Communications Inc",
-"	0002  LNE100TX",
-"		11ad 0002  LNE100TX",
-"		11ad 0003  LNE100TX",
-"		11ad f003  LNE100TX",
-"		11ad ffff  LNE100TX",
-"		1385 f004  FA310TX",
-"	c115  LNE100TX [Linksys EtherFast 10/100]",
-"		11ad c001  LNE100TX [ver 2.0]",
-"11ae  Aztech System Ltd",
-"11af  Avid Technology Inc.",
-"	0001  Cinema",
-"	ee40  Digidesign Audiomedia III",
-"11b0  V3 Semiconductor Inc.",
-"	0002  V300PSC",
-"	0292  V292PBC [Am29030/40 Bridge]",
-"	0960  V96xPBC",
-"	c960  V96DPC",
-"11b1  Apricot Computers",
-"11b2  Eastman Kodak",
-"11b3  Barr Systems Inc.",
-"11b4  Leitch Technology International",
-"11b5  Radstone Technology Plc",
-"11b6  United Video Corp",
-"11b7  Motorola",
-"11b8  XPoint Technologies, Inc",
-"	0001  Quad PeerMaster",
-"11b9  Pathlight Technology Inc.",
-"	c0ed  SSA Controller",
-"11ba  Videotron Corp",
-"11bb  Pyramid Technology",
-"11bc  Network Peripherals Inc",
-"	0001  NP-PCI",
-"11bd  Pinnacle Systems Inc.",
-"	002e  PCTV 40i",
-"	bede  AV/DV Studio Capture Card",
-"11be  International Microcircuits Inc",
-"11bf  Astrodesign, Inc.",
-"11c0  Hewlett Packard",
-"11c1  Agere Systems",
-"	0440  56k WinModem",
-"		1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		1033 8047  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		1033 804f  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		10cf 102c  LB LT Modem V.90 56k",
-"		10cf 104a  BIBLO LT Modem 56k",
-"		10cf 105f  LB2 LT Modem V.90 56k",
-"		1179 0001  Internal V.90 Modem",
-"		11c1 0440  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		122d 4101  MDP7800-U Modem",
-"		122d 4102  MDP7800SP-U Modem",
-"		13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		13e0 0440  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		13e0 0441  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		13e0 0450  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		13e0 f100  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		13e0 f101  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		144d 2101  LT56PV Modem",
-"		149f 0440  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"	0441  56k WinModem",
-"		1033 804d  LT WinModem 56k Data+Fax",
-"		1033 8065  LT WinModem 56k Data+Fax",
-"		1092 0440  Supra 56i",
-"		1179 0001  Internal V.90 Modem",
-"		11c1 0440  LT WinModem 56k Data+Fax",
-"		11c1 0441  LT WinModem 56k Data+Fax",
-"		122d 4100  MDP7800-U Modem",
-"		13e0 0040  LT WinModem 56k Data+Fax",
-"		13e0 0100  LT WinModem 56k Data+Fax",
-"		13e0 0410  LT WinModem 56k Data+Fax",
-"		13e0 0420  TelePath Internet 56k WinModem",
-"		13e0 0440  LT WinModem 56k Data+Fax",
-"		13e0 0443  LT WinModem 56k Data+Fax",
-"		13e0 f102  LT WinModem 56k Data+Fax",
-"		1416 9804  CommWave 56k Modem",
-"		141d 0440  LT WinModem 56k Data+Fax",
-"		144f 0441  Lucent 56k V.90 DF Modem",
-"		144f 0449  Lucent 56k V.90 DF Modem",
-"		144f 110d  Lucent Win Modem",
-"		1468 0441  Presario 56k V.90 DF Modem",
-"		1668 0440  Lucent Win Modem",
-"	0442  56k WinModem",
-"		11c1 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		11c1 0442  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		13e0 0412  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		13e0 0442  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		13fc 2471  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		144d 2104  LT56PT Modem",
-"		144f 1104  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		149f 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		1668 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"	0443  LT WinModem",
-"	0444  LT WinModem",
-"	0445  LT WinModem",
-"		8086 2203  PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card)",
-"		8086 2204  PRO/100+ MiniPCI on Armada E500",
-"	0446  LT WinModem",
-"	0447  LT WinModem",
-"	0448  WinModem 56k",
-"		1014 0131  Lucent Win Modem",
-"		1033 8066  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		13e0 0030  56k Voice Modem",
-"		13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd",
-"		1668 2400  LT WinModem 56k (MiniPCI Ethernet+Modem)",
-"	0449  WinModem 56k",
-"		0e11 b14d  56k V.90 Modem",
-"		13e0 0020  LT WinModem 56k Data+Fax",
-"		13e0 0041  TelePath Internet 56k WinModem",
-"		1436 0440  Lucent Win Modem",
-"		144f 0449  Lucent 56k V.90 DFi Modem",
-"		1468 0410  IBM ThinkPad T23 (2647-4MG)",
-"		1468 0440  Lucent Win Modem",
-"		1468 0449  Presario 56k V.90 DFi Modem",
-"	044a  F-1156IV WinModem (V90, 56KFlex)",
-"		10cf 1072  LB Global LT Modem",
-"		13e0 0012  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		13e0 0042  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"		144f 1005  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
-"	044b  LT WinModem",
-"	044c  LT WinModem",
-"	044d  LT WinModem",
-"	044e  LT WinModem",
-"	044f  V90 WildWire Modem",
-"	0450  LT WinModem",
-"		1033 80a8  Versa Note Vxi",
-"		144f 4005  Magnia SG20",
-"		1468 0450  Evo N600c",
-"		4005 144f  LifeBook C Series",
-"	0451  LT WinModem",
-"	0452  LT WinModem",
-"	0453  LT WinModem",
-"	0454  LT WinModem",
-"	0455  LT WinModem",
-"	0456  LT WinModem",
-"	0457  LT WinModem",
-"	0458  LT WinModem",
-"	0459  LT WinModem",
-"	045a  LT WinModem",
-"	045c  LT WinModem",
-"	0461  V90 WildWire Modem",
-"	0462  V90 WildWire Modem",
-"	0480  Venus Modem (V90, 56KFlex)",
-"	048c  V.92 56K WinModem",
-"	048f  V.92 56k WinModem",
-"	5801  USB",
-"	5802  USS-312 USB Controller",
-"	5803  USS-344S USB Controller",
-"	5811  FW323",
-"		8086 524c  D865PERL mainboard",
-"		dead 0800  FireWire Host Bus Adapter",
-"	8110  T8110 H.100/H.110 TDM switch",
-"		12d9 000c  E1/T1 PMXc cPCI carrier card",
-"	ab10  WL60010 Wireless LAN MAC",
-"	ab11  WL60040 Multimode Wireles LAN MAC",
-"		11c1 ab12  WaveLAN 11abg Cardbus card (Model 1102)",
-"		11c1 ab13  WaveLAN 11abg MiniPCI card (Model 0512)",
-"		11c1 ab15  WaveLAN 11abg Cardbus card (Model 1106)",
-"		11c1 ab16  WaveLAN 11abg MiniPCI card (Model 0516)",
-"	ab20  ORiNOCO PCI Adapter",
-"	ab21  Agere Wireless PCI Adapter",
-"	ab30  Hermes2 Mini-PCI WaveLAN a/b/g",
-"		14cd 2012  Hermes2 Mini-PCI WaveLAN a/b/g",
-"	ed00  ET-131x PCI-E Ethernet Controller",
-"11c2  Sand Microelectronics",
-"11c3  NEC Corporation",
-"11c4  Document Technologies, Inc",
-"11c5  Shiva Corporation",
-"11c6  Dainippon Screen Mfg. Co. Ltd",
-"11c7  D.C.M. Data Systems",
-"11c8  Dolphin Interconnect Solutions AS",
-"	0658  PSB32 SCI-Adapter D31x",
-"	d665  PSB64 SCI-Adapter D32x",
-"	d667  PSB66 SCI-Adapter D33x",
-"11c9  Magma",
-"	0010  16-line serial port w/- DMA",
-"	0011  4-line serial port w/- DMA",
-"11ca  LSI Systems, Inc",
-"11cb  Specialix Research Ltd.",
-"	2000  PCI_9050",
-"		11cb 0200  SX",
-"		11cb b008  I/O8+",
-"	4000  SUPI_1",
-"	8000  T225",
-"11cc  Michels & Kleberhoff Computer GmbH",
-"11cd  HAL Computer Systems, Inc.",
-"11ce  Netaccess",
-"11cf  Pioneer Electronic Corporation",
-"11d0  Lockheed Martin Federal Systems-Manassas",
-"11d1  Auravision",
-"	01f7  VxP524",
-"11d2  Intercom Inc.",
-"11d3  Trancell Systems Inc",
-"11d4  Analog Devices",
-"	1535  Blackfin BF535 processor",
-"	1805  SM56 PCI modem",
-"	1889  AD1889 sound chip",
-"	1986  AD1986A sound chip",
-"	5340  AD1881 sound chip",
-"11d5  Ikon Corporation",
-"	0115  10115",
-"	0117  10117",
-"11d6  Tekelec Telecom",
-"11d7  Trenton Technology, Inc.",
-"11d8  Image Technologies Development",
-"11d9  TEC Corporation",
-"11da  Novell",
-"11db  Sega Enterprises Ltd",
-"11dc  Questra Corporation",
-"11dd  Crosfield Electronics Limited",
-"11de  Zoran Corporation",
-"	6057  ZR36057PQC Video cutting chipset",
-"		1031 7efe  DC10 Plus",
-"		1031 fc00  MiroVIDEO DC50, Motion JPEG Capture/CODEC Board",
-"		12f8 8a02  Tekram Video Kit",
-"		13ca 4231  JPEG/TV Card",
-"	6120  ZR36120",
-"		1328 f001  Cinemaster C DVD Decoder",
-"		13c2 0000  MediaFocus Satellite TV Card",
-"		1de1 9fff  Video Kit C210",
-"11df  New Wave PDG",
-"11e0  Cray Communications A/S",
-"11e1  GEC Plessey Semi Inc.",
-"11e2  Samsung Information Systems America",
-"11e3  Quicklogic Corporation",
-"	0001  COM-ON-AIR Dosch&Amand DECT",
-"	5030  PC Watchdog",
-"11e4  Second Wave Inc",
-"11e5  IIX Consulting",
-"11e6  Mitsui-Zosen System Research",
-"11e7  Toshiba America, Elec. Company",
-"11e8  Digital Processing Systems Inc.",
-"11e9  Highwater Designs Ltd.",
-"11ea  Elsag Bailey",
-"11eb  Formation Inc.",
-"11ec  Coreco Inc",
-"11ed  Mediamatics",
-"11ee  Dome Imaging Systems Inc",
-"11ef  Nicolet Technologies B.V.",
-"11f0  Compu-Shack",
-"	4231  FDDI",
-"	4232  FASTline UTP Quattro",
-"	4233  FASTline FO",
-"	4234  FASTline UTP",
-"	4235  FASTline-II UTP",
-"	4236  FASTline-II FO",
-"	4731  GIGAline",
-"11f1  Symbios Logic Inc",
-"11f2  Picture Tel Japan K.K.",
-"11f3  Keithley Metrabyte",
-"11f4  Kinetic Systems Corporation",
-"	2915  CAMAC controller",
-"11f5  Computing Devices International",
-"11f6  Compex",
-"	0112  ENet100VG4",
-"	0113  FreedomLine 100",
-"	1401  ReadyLink 2000",
-"	2011  RL100-ATX 10/100",
-"		11f6 2011  RL100-ATX",
-"	2201  ReadyLink 100TX (Winbond W89C840)",
-"		11f6 2011  ReadyLink 100TX",
-"	9881  RL100TX Fast Ethernet",
-"11f7  Scientific Atlanta",
-"11f8  PMC-Sierra Inc.",
-"	7375  PM7375 [LASAR-155 ATM SAR]",
-"11f9  I-Cube Inc",
-"11fa  Kasan Electronics Company, Ltd.",
-"11fb  Datel Inc",
-"11fc  Silicon Magic",
-"11fd  High Street Consultants",
-"11fe  Comtrol Corporation",
-"	0001  RocketPort 32 port w/external I/F",
-"	0002  RocketPort 8 port w/external I/F",
-"	0003  RocketPort 16 port w/external I/F",
-"	0004  RocketPort 4 port w/quad cable",
-"	0005  RocketPort 8 port w/octa cable",
-"	0006  RocketPort 8 port w/RJ11 connectors",
-"	0007  RocketPort 4 port w/RJ11 connectors",
-"	0008  RocketPort 8 port w/ DB78 SNI (Siemens) connector",
-"	0009  RocketPort 16 port w/ DB78 SNI (Siemens) connector",
-"	000a  RocketPort Plus 4 port",
-"	000b  RocketPort Plus 8 port",
-"	000c  RocketModem 6 port",
-"	000d  RocketModem 4-port",
-"	000e  RocketPort Plus 2 port RS232",
-"	000f  RocketPort Plus 2 port RS422",
-"	0801  RocketPort UPCI 32 port w/external I/F",
-"	0802  RocketPort UPCI 8 port w/external I/F",
-"	0803  RocketPort UPCI 16 port w/external I/F",
-"	0805  RocketPort UPCI 8 port w/octa cable",
-"	080c  RocketModem III 8 port",
-"	080d  RocketModem III 4 port",
-"	0812  RocketPort UPCI Plus 8 port RS422",
-"	0903  RocketPort Compact PCI 16 port w/external I/F",
-"	8015  RocketPort 4-port UART 16954",
-"11ff  Scion Corporation",
-"	0003  AG-5",
-"1200  CSS Corporation",
-"1201  Vista Controls Corp",
-"1202  Network General Corp.",
-"	4300  Gigabit Ethernet Adapter",
-"		1202 9841  SK-9841 LX",
-"		1202 9842  SK-9841 LX dual link",
-"		1202 9843  SK-9843 SX",
-"		1202 9844  SK-9843 SX dual link",
-"1203  Bayer Corporation, Agfa Division",
-"1204  Lattice Semiconductor Corporation",
-"1205  Array Corporation",
-"1206  Amdahl Corporation",
-"1208  Parsytec GmbH",
-"	4853  HS-Link Device",
-"1209  SCI Systems Inc",
-"120a  Synaptel",
-"120b  Adaptive Solutions",
-"120c  Technical Corp.",
-"120d  Compression Labs, Inc.",
-"120e  Cyclades Corporation",
-"	0100  Cyclom-Y below first megabyte",
-"	0101  Cyclom-Y above first megabyte",
-"	0102  Cyclom-4Y below first megabyte",
-"	0103  Cyclom-4Y above first megabyte",
-"	0104  Cyclom-8Y below first megabyte",
-"	0105  Cyclom-8Y above first megabyte",
-"	0200  Cyclades-Z below first megabyte",
-"	0201  Cyclades-Z above first megabyte",
-"	0300  PC300/RSV or /X21 (2 ports)",
-"	0301  PC300/RSV or /X21 (1 port)",
-"	0310  PC300/TE (2 ports)",
-"	0311  PC300/TE (1 port)",
-"	0320  PC300/TE-M (2 ports)",
-"	0321  PC300/TE-M (1 port)",
-"	0400  PC400",
-"120f  Essential Communications",
-"	0001  Roadrunner serial HIPPI",
-"1210  Hyperparallel Technologies",
-"1211  Braintech Inc",
-"1212  Kingston Technology Corp.",
-"1213  Applied Intelligent Systems, Inc.",
-"1214  Performance Technologies, Inc.",
-"1215  Interware Co., Ltd",
-"1216  Purup Prepress A/S",
-"1217  O2 Micro, Inc.",
-"	6729  OZ6729",
-"	673a  OZ6730",
-"	6832  OZ6832/6833 CardBus Controller",
-"	6836  OZ6836/6860 CardBus Controller",
-"	6872  OZ6812 CardBus Controller",
-"	6925  OZ6922 CardBus Controller",
-"	6933  OZ6933/711E1 CardBus/SmartCardBus Controller",
-"		1025 1016  Travelmate 612 TX",
-"	6972  OZ601/6912/711E0 CardBus/SmartCardBus Controller",
-"		1014 020c  ThinkPad R30",
-"		1179 0001  Magnia Z310",
-"	7110  OZ711Mx 4-in-1 MemoryCardBus Accelerator",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1734 106c  Amilo A1645",
-"	7112  OZ711EC1/M1 SmartCardBus/MemoryCardBus Controller",
-"	7113  OZ711EC1 SmartCardBus Controller",
-"	7114  OZ711M1/MC1 4-in-1 MemoryCardBus Controller",
-"	7134  OZ711MP1/MS1 MemoryCardBus Controller",
-"	71e2  OZ711E2 SmartCardBus Controller",
-"	7212  OZ711M2 4-in-1 MemoryCardBus Controller",
-"	7213  OZ6933E CardBus Controller",
-"	7223  OZ711M3/MC3 4-in-1 MemoryCardBus Controller",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"	7233  OZ711MP3/MS3 4-in-1 MemoryCardBus Controller",
-"1218  Hybricon Corp.",
-"1219  First Virtual Corporation",
-"121a  3Dfx Interactive, Inc.",
-"	0001  Voodoo",
-"	0002  Voodoo 2",
-"	0003  Voodoo Banshee",
-"		1092 0003  Monster Fusion",
-"		1092 4000  Monster Fusion",
-"		1092 4002  Monster Fusion",
-"		1092 4801  Monster Fusion AGP",
-"		1092 4803  Monster Fusion AGP",
-"		1092 8030  Monster Fusion",
-"		1092 8035  Monster Fusion AGP",
-"		10b0 0001  Dragon 4000",
-"		1102 1018  3D Blaster Banshee VE",
-"		121a 0001  Voodoo Banshee AGP",
-"		121a 0003  Voodoo Banshee AGP SGRAM",
-"		121a 0004  Voodoo Banshee",
-"		139c 0016  Raven",
-"		139c 0017  Raven",
-"		14af 0002  Maxi Gamer Phoenix",
-"	0004  Voodoo Banshee [Velocity 100]",
-"	0005  Voodoo 3",
-"		121a 0004  Voodoo3 AGP",
-"		121a 0030  Voodoo3 AGP",
-"		121a 0031  Voodoo3 AGP",
-"		121a 0034  Voodoo3 AGP",
-"		121a 0036  Voodoo3 2000 PCI",
-"		121a 0037  Voodoo3 AGP",
-"		121a 0038  Voodoo3 AGP",
-"		121a 003a  Voodoo3 AGP",
-"		121a 0044  Voodoo3",
-"		121a 004b  Velocity 100",
-"		121a 004c  Velocity 200",
-"		121a 004d  Voodoo3 AGP",
-"		121a 004e  Voodoo3 AGP",
-"		121a 0051  Voodoo3 AGP",
-"		121a 0052  Voodoo3 AGP",
-"		121a 0057  Voodoo3 3000 PCI",
-"		121a 0060  Voodoo3 3500 TV (NTSC)",
-"		121a 0061  Voodoo3 3500 TV (PAL)",
-"		121a 0062  Voodoo3 3500 TV (SECAM)",
-"	0009  Voodoo 4 / Voodoo 5",
-"		121a 0003  Voodoo5 PCI 5500",
-"		121a 0009  Voodoo5 AGP 5500/6000",
-"	0057  Voodoo 3/3000 [Avenger]",
-"121b  Advanced Telecommunications Modules",
-"121c  Nippon Texaco., Ltd",
-"121d  Lippert Automationstechnik GmbH",
-"121e  CSPI",
-"	0201  Myrinet 2000 Scalable Cluster Interconnect",
-"121f  Arcus Technology, Inc.",
-"1220  Ariel Corporation",
-"	1220  AMCC 5933 TMS320C80 DSP/Imaging board",
-"1221  Contec Co., Ltd",
-"1222  Ancor Communications, Inc.",
-"1223  Artesyn Communication Products",
-"	0003  PM/Link",
-"	0004  PM/T1",
-"	0005  PM/E1",
-"	0008  PM/SLS",
-"	0009  BajaSpan Resource Target",
-"	000a  BajaSpan Section 0",
-"	000b  BajaSpan Section 1",
-"	000c  BajaSpan Section 2",
-"	000d  BajaSpan Section 3",
-"	000e  PM/PPC",
-"1224  Interactive Images",
-"1225  Power I/O, Inc.",
-"1227  Tech-Source",
-"	0006  Raptor GFX 8P",
-"	0023  Raptor GFX [1100T]",
-"1228  Norsk Elektro Optikk A/S",
-"1229  Data Kinesis Inc.",
-"122a  Integrated Telecom",
-"122b  LG Industrial Systems Co., Ltd",
-"122c  Sican GmbH",
-"122d  Aztech System Ltd",
-"	1206  368DSP",
-"	1400  Trident PCI288-Q3DII (NX)",
-"	50dc  3328 Audio",
-"		122d 0001  3328 Audio",
-"	80da  3328 Audio",
-"		122d 0001  3328 Audio",
-"122e  Xyratex",
-"122f  Andrew Corporation",
-"1230  Fishcamp Engineering",
-"1231  Woodward McCoach, Inc.",
-"1232  GPT Limited",
-"1233  Bus-Tech, Inc.",
-"1234  Technical Corp.",
-"1235  Risq Modular Systems, Inc.",
-"1236  Sigma Designs Corporation",
-"	0000  RealMagic64/GX",
-"	6401  REALmagic 64/GX (SD 6425)",
-"1237  Alta Technology Corporation",
-"1238  Adtran",
-"1239  3DO Company",
-"123a  Visicom Laboratories, Inc.",
-"123b  Seeq Technology, Inc.",
-"123c  Century Systems, Inc.",
-"123d  Engineering Design Team, Inc.",
-"	0000  EasyConnect 8/32",
-"	0002  EasyConnect 8/64",
-"	0003  EasyIO",
-"123e  Simutech, Inc.",
-"123f  C-Cube Microsystems",
-"	00e4  MPEG",
-"	8120  E4?",
-"		11bd 0006  DV500 E4",
-"		11bd 000a  DV500 E4",
-"		11bd 000f  DV500 E4",
-"		1809 0016  Emuzed MAUI-III PCI PVR FM TV",
-"	8888  Cinemaster C 3.0 DVD Decoder",
-"		1002 0001  Cinemaster C 3.0 DVD Decoder",
-"		1002 0002  Cinemaster C 3.0 DVD Decoder",
-"		1328 0001  Cinemaster C 3.0 DVD Decoder",
-"1240  Marathon Technologies Corp.",
-"1241  DSC Communications",
-"1242  JNI Corporation",
-"	1560  JNIC-1560 PCI-X Fibre Channel Controller",
-"		1242 6562  FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter",
-"		1242 656a  FCX-6562 PCI-X Fibre Channel Adapter",
-"	4643  FCI-1063 Fibre Channel Adapter",
-"	6562  FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter",
-"	656a  FCX-6562 PCI-X Fibre Channel Adapter",
-"1243  Delphax",
-"1244  AVM Audiovisuelles MKTG & Computer System GmbH",
-"	0700  B1 ISDN",
-"	0800  C4 ISDN",
-"	0a00  A1 ISDN [Fritz]",
-"		1244 0a00  FRITZ!Card ISDN Controller",
-"	0e00  Fritz!PCI v2.0 ISDN",
-"	1100  C2 ISDN",
-"	1200  T1 ISDN",
-"	2700  Fritz!Card DSL SL",
-"	2900  Fritz!Card DSL v2.0",
-"1245  A.P.D., S.A.",
-"1246  Dipix Technologies, Inc.",
-"1247  Xylon Research, Inc.",
-"1248  Central Data Corporation",
-"1249  Samsung Electronics Co., Ltd.",
-"124a  AEG Electrocom GmbH",
-"124b  SBS/Greenspring Modular I/O",
-"	0040  PCI-40A or cPCI-200 Quad IndustryPack carrier",
-"		124b 9080  PCI9080 Bridge",
-"124c  Solitron Technologies, Inc.",
-"124d  Stallion Technologies, Inc.",
-"	0000  EasyConnection 8/32",
-"	0002  EasyConnection 8/64",
-"	0003  EasyIO",
-"	0004  EasyConnection/RA",
-"124e  Cylink",
-"124f  Infortrend Technology, Inc.",
-"	0041  IFT-2000 Series RAID Controller",
-"1250  Hitachi Microcomputer System Ltd",
-"1251  VLSI Solutions Oy",
-"1253  Guzik Technical Enterprises",
-"1254  Linear Systems Ltd.",
-"1255  Optibase Ltd",
-"	1110  MPEG Forge",
-"	1210  MPEG Fusion",
-"	2110  VideoPlex",
-"	2120  VideoPlex CC",
-"	2130  VideoQuest",
-"1256  Perceptive Solutions, Inc.",
-"	4201  PCI-2220I",
-"	4401  PCI-2240I",
-"	5201  PCI-2000",
-"1257  Vertex Networks, Inc.",
-"1258  Gilbarco, Inc.",
-"1259  Allied Telesyn International",
-"	2560  AT-2560 Fast Ethernet Adapter (i82557B)",
-"	a117  RTL81xx Fast Ethernet",
-"	a120  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"125a  ABB Power Systems",
-"125b  Asix Electronics Corporation",
-"	1400  ALFA GFC2204 Fast Ethernet",
-"		1186 1100  AX8814X Based PCI Fast Ethernet Adapter",
-"125c  Aurora Technologies, Inc.",
-"	0101  Saturn 4520P",
-"	0640  Aries 16000P",
-"125d  ESS Technology",
-"	0000  ES336H Fax Modem (Early Model)",
-"	1948  Solo?",
-"	1968  ES1968 Maestro 2",
-"		1028 0085  ES1968 Maestro-2 PCI",
-"		1033 8051  ES1968 Maestro-2 Audiodrive",
-"	1969  ES1969 Solo-1 Audiodrive",
-"		1014 0166  ES1969 SOLO-1 AudioDrive on IBM Aptiva Mainboard",
-"		125d 8888  Solo-1 Audio Adapter",
-"		153b 111b  Terratec 128i PCI",
-"	1978  ES1978 Maestro 2E",
-"		0e11 b112  Armada M700/E500",
-"		1033 803c  ES1978 Maestro-2E Audiodrive",
-"		1033 8058  ES1978 Maestro-2E Audiodrive",
-"		1092 4000  Monster Sound MX400",
-"		1179 0001  ES1978 Maestro-2E Audiodrive",
-"	1988  ES1988 Allegro-1",
-"		0e11 0098  Evo N600c",
-"		1092 4100  Sonic Impact S100",
-"		125d 1988  ESS Allegro-1 Audiodrive",
-"	1989  ESS Modem",
-"		125d 1989  ESS Modem",
-"	1998  ES1983S Maestro-3i PCI Audio Accelerator",
-"		1028 00b1  Latitude C600",
-"		1028 00e6  ES1983S Maestro-3i (Dell Inspiron 8100)",
-"	1999  ES1983S Maestro-3i PCI Modem Accelerator",
-"	199a  ES1983S Maestro-3i PCI Audio Accelerator",
-"	199b  ES1983S Maestro-3i PCI Modem Accelerator",
-"	2808  ES336H Fax Modem (Later Model)",
-"	2838  ES2838/2839 SuperLink Modem",
-"	2898  ES2898 Modem",
-"		125d 0424  ES56-PI Data Fax Modem",
-"		125d 0425  ES56T-PI Data Fax Modem",
-"		125d 0426  ES56V-PI Data Fax Modem",
-"		125d 0427  VW-PI Data Fax Modem",
-"		125d 0428  ES56ST-PI Data Fax Modem",
-"		125d 0429  ES56SV-PI Data Fax Modem",
-"		147a c001  ES56-PI Data Fax Modem",
-"		14fe 0428  ES56-PI Data Fax Modem",
-"		14fe 0429  ES56-PI Data Fax Modem",
-"125e  Specialvideo Engineering SRL",
-"125f  Concurrent Technologies, Inc.",
-"1260  Intersil Corporation",
-"	3872  Prism 2.5 Wavelan chipset",
-"		1468 0202  LAN-Express IEEE 802.11b Wireless LAN",
-"	3873  Prism 2.5 Wavelan chipset",
-"		1186 3501  DWL-520 Wireless PCI Adapter",
-"		1186 3700  DWL-520 Wireless PCI Adapter, Rev E1",
-"		1385 4105  MA311 802.11b wireless adapter",
-"		1668 0414  HWP01170-01 802.11b PCI Wireless Adapter",
-"		16a5 1601  AIR.mate PC-400 PCI Wireless LAN Adapter",
-"		1737 3874  WMP11 Wireless 802.11b PCI Adapter",
-"		8086 2513  Wireless 802.11b MiniPCI Adapter",
-"	3886  ISL3886 [Prism Javelin/Prism Xbow]",
-"		17cf 0037  XG-901 and clones Wireless Adapter",
-"	3890  ISL3890 [Prism GT/Prism Duette]/ISL3886 [Prism Javelin/Prism Xbow]",
-"		10b8 2802  SMC2802W Wireless PCI Adapter",
-"		10b8 2835  SMC2835W Wireless Cardbus Adapter",
-"		10b8 a835  SMC2835W V2 Wireless Cardbus Adapter",
-"		1113 4203  WN4201B",
-"		1113 ee03  SMC2802W V2 Wireless PCI Adapter [ISL3886]",
-"		1113 ee08  SMC2835W V3 EU Wireless Cardbus Adapter",
-"		1186 3202  DWL-G650 A1 Wireless Adapter",
-"		1259 c104  CG-WLCB54GT Wireless Adapter",
-"		1385 4800  WG511 Wireless Adapter",
-"		16a5 1605  ALLNET ALL0271 Wireless PCI Adapter",
-"		17cf 0014  XG-600 and clones Wireless Adapter",
-"		17cf 0020  XG-900 and clones Wireless Adapter",
-"	8130  HMP8130 NTSC/PAL Video Decoder",
-"	8131  HMP8131 NTSC/PAL Video Decoder",
-"	ffff  ISL3886IK",
-"		1260 0000  Senao 3054MP+ (J) mini-PCI WLAN 802.11g adapter",
-"1261  Matsushita-Kotobuki Electronics Industries, Ltd.",
-"1262  ES Computer Company, Ltd.",
-"1263  Sonic Solutions",
-"1264  Aval Nagasaki Corporation",
-"1265  Casio Computer Co., Ltd.",
-"1266  Microdyne Corporation",
-"	0001  NE10/100 Adapter (i82557B)",
-"	1910  NE2000Plus (RT8029) Ethernet Adapter",
-"		1266 1910  NE2000Plus Ethernet Adapter",
-"1267  S. A. Telecommunications",
-"	5352  PCR2101",
-"	5a4b  Telsat Turbo",
-"1268  Tektronix",
-"1269  Thomson-CSF/TTM",
-"126a  Lexmark International, Inc.",
-"126b  Adax, Inc.",
-"126c  Northern Telecom",
-"	1211  10/100BaseTX [RTL81xx]",
-"	126c  802.11b Wireless Ethernet Adapter",
-"126d  Splash Technology, Inc.",
-"126e  Sumitomo Metal Industries, Ltd.",
-"126f  Silicon Motion, Inc.",
-"	0501  SM501 VoyagerGX Rev. AA",
-"	0510  SM501 VoyagerGX Rev. B",
-"	0710  SM710 LynxEM",
-"	0712  SM712 LynxEM+",
-"	0720  SM720 Lynx3DM",
-"	0730  SM731 Cougar3DR",
-"	0810  SM810 LynxE",
-"	0811  SM811 LynxE",
-"	0820  SM820 Lynx3D",
-"	0910  SM910",
-"1270  Olympus Optical Co., Ltd.",
-"1271  GW Instruments",
-"1272  Telematics International",
-"1273  Hughes Network Systems",
-"	0002  DirecPC",
-"1274  Ensoniq",
-"	1171  ES1373 [AudioPCI] (also Creative Labs CT5803)",
-"	1371  ES1371 [AudioPCI-97]",
-"		0e11 0024  AudioPCI on Motherboard Compaq Deskpro",
-"		0e11 b1a7  ES1371, ES1373 AudioPCI",
-"		1033 80ac  ES1371, ES1373 AudioPCI",
-"		1042 1854  Tazer",
-"		107b 8054  Tabor2",
-"		1274 1371  Creative Sound Blaster AudioPCI64V, AudioPCI128",
-"		1274 8001  CT4751 board",
-"		1462 6470  ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A",
-"		1462 6560  ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10",
-"		1462 6630  ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A",
-"		1462 6631  ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A",
-"		1462 6632  ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A",
-"		1462 6633  ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A",
-"		1462 6820  ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00",
-"		1462 6822  ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A",
-"		1462 6830  ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00",
-"		1462 6880  ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00",
-"		1462 6900  ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00",
-"		1462 6910  ES1371, ES1373 AudioPCI On Motherboard MS-6191",
-"		1462 6930  ES1371, ES1373 AudioPCI On Motherboard MS-6193",
-"		1462 6990  ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A",
-"		1462 6991  ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A",
-"		14a4 2077  ES1371, ES1373 AudioPCI On Motherboard KR639",
-"		14a4 2105  ES1371, ES1373 AudioPCI On Motherboard MR800",
-"		14a4 2107  ES1371, ES1373 AudioPCI On Motherboard MR801",
-"		14a4 2172  ES1371, ES1373 AudioPCI On Motherboard DR739",
-"		1509 9902  ES1371, ES1373 AudioPCI On Motherboard KW11",
-"		1509 9903  ES1371, ES1373 AudioPCI On Motherboard KW31",
-"		1509 9904  ES1371, ES1373 AudioPCI On Motherboard KA11",
-"		1509 9905  ES1371, ES1373 AudioPCI On Motherboard KC13",
-"		152d 8801  ES1371, ES1373 AudioPCI On Motherboard CP810E",
-"		152d 8802  ES1371, ES1373 AudioPCI On Motherboard CP810",
-"		152d 8803  ES1371, ES1373 AudioPCI On Motherboard P3810E",
-"		152d 8804  ES1371, ES1373 AudioPCI On Motherboard P3810-S",
-"		152d 8805  ES1371, ES1373 AudioPCI On Motherboard P3820-S",
-"		270f 2001  ES1371, ES1373 AudioPCI On Motherboard 6CTR",
-"		270f 2200  ES1371, ES1373 AudioPCI On Motherboard 6WTX",
-"		270f 3000  ES1371, ES1373 AudioPCI On Motherboard 6WSV",
-"		270f 3100  ES1371, ES1373 AudioPCI On Motherboard 6WIV2",
-"		270f 3102  ES1371, ES1373 AudioPCI On Motherboard 6WIV",
-"		270f 7060  ES1371, ES1373 AudioPCI On Motherboard 6ASA2",
-"		8086 4249  ES1371, ES1373 AudioPCI On Motherboard BI440ZX",
-"		8086 424c  ES1371, ES1373 AudioPCI On Motherboard BL440ZX",
-"		8086 425a  ES1371, ES1373 AudioPCI On Motherboard BZ440ZX",
-"		8086 4341  ES1371, ES1373 AudioPCI On Motherboard Cayman",
-"		8086 4343  ES1371, ES1373 AudioPCI On Motherboard Cape Cod",
-"		8086 4541  D815EEA Motherboard",
-"		8086 4649  ES1371, ES1373 AudioPCI On Motherboard Fire Island",
-"		8086 464a  ES1371, ES1373 AudioPCI On Motherboard FJ440ZX",
-"		8086 4d4f  ES1371, ES1373 AudioPCI On Motherboard Montreal",
-"		8086 4f43  ES1371, ES1373 AudioPCI On Motherboard OC440LX",
-"		8086 5243  ES1371, ES1373 AudioPCI On Motherboard RC440BX",
-"		8086 5352  ES1371, ES1373 AudioPCI On Motherboard SunRiver",
-"		8086 5643  ES1371, ES1373 AudioPCI On Motherboard Vancouver",
-"		8086 5753  ES1371, ES1373 AudioPCI On Motherboard WS440BX",
-"	5000  ES1370 [AudioPCI]",
-"	5880  5880 AudioPCI",
-"		1274 2000  Creative Sound Blaster AudioPCI128",
-"		1274 2003  Creative SoundBlaster AudioPCI 128",
-"		1274 5880  Creative Sound Blaster AudioPCI128",
-"		1274 8001  Sound Blaster 16PCI 4.1ch",
-"		1458 a000  5880 AudioPCI On Motherboard 6OXET",
-"		1462 6880  5880 AudioPCI On Motherboard MS-6188 1.00",
-"		270f 2001  5880 AudioPCI On Motherboard 6CTR",
-"		270f 2200  5880 AudioPCI On Motherboard 6WTX",
-"		270f 7040  5880 AudioPCI On Motherboard 6ATA4",
-"1275  Network Appliance Corporation",
-"1276  Switched Network Technologies, Inc.",
-"1277  Comstream",
-"1278  Transtech Parallel Systems Ltd.",
-"	0701  TPE3/TM3 PowerPC Node",
-"	0710  TPE5 PowerPC PCI board",
-"1279  Transmeta Corporation",
-"	0060  TM8000 Northbridge",
-"	0061  TM8000 AGP bridge",
-"	0295  Northbridge",
-"	0395  LongRun Northbridge",
-"	0396  SDRAM controller",
-"	0397  BIOS scratchpad",
-"127a  Rockwell International",
-"	1002  HCF 56k Data/Fax Modem",
-"		1092 094c  SupraExpress 56i PRO [Diamond SUP2380]",
-"		122d 4002  HPG / MDP3858-U",
-"		122d 4005  MDP3858-E",
-"		122d 4007  MDP3858-A/-NZ",
-"		122d 4012  MDP3858-SA",
-"		122d 4017  MDP3858-W",
-"		122d 4018  MDP3858-W",
-"		127a 1002  Rockwell 56K D/F HCF Modem",
-"	1003  HCF 56k Data/Fax Modem",
-"		0e11 b0bc  229-DF Zephyr",
-"		0e11 b114  229-DF Cheetah",
-"		1033 802b  229-DF",
-"		13df 1003  PCI56RX Modem",
-"		13e0 0117  IBM",
-"		13e0 0147  IBM F-1156IV+/R3 Spain V.90 Modem",
-"		13e0 0197  IBM",
-"		13e0 01c7  IBM F-1156IV+/R3 WW V.90 Modem",
-"		13e0 01f7  IBM",
-"		1436 1003  IBM",
-"		1436 1103  IBM 5614PM3G V.90 Modem",
-"		1436 1602  Compaq 229-DF Ducati",
-"	1004  HCF 56k Data/Fax/Voice Modem",
-"		1048 1500  MicroLink 56k Modem",
-"		10cf 1059  Fujitsu 229-DFRT",
-"	1005  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"		1005 127a  AOpen FM56-P",
-"		1033 8029  229-DFSV",
-"		1033 8054  Modem",
-"		10cf 103c  Fujitsu",
-"		10cf 1055  Fujitsu 229-DFSV",
-"		10cf 1056  Fujitsu 229-DFSV",
-"		122d 4003  MDP3858SP-U",
-"		122d 4006  Packard Bell MDP3858V-E",
-"		122d 4008  MDP3858SP-A/SP-NZ",
-"		122d 4009  MDP3858SP-E",
-"		122d 4010  MDP3858V-U",
-"		122d 4011  MDP3858SP-SA",
-"		122d 4013  MDP3858V-A/V-NZ",
-"		122d 4015  MDP3858SP-W",
-"		122d 4016  MDP3858V-W",
-"		122d 4019  MDP3858V-SA",
-"		13df 1005  PCI56RVP Modem",
-"		13e0 0187  IBM",
-"		13e0 01a7  IBM",
-"		13e0 01b7  IBM DF-1156IV+/R3 Spain V.90 Modem",
-"		13e0 01d7  IBM DF-1156IV+/R3 WW V.90 Modem",
-"		1436 1005  IBM",
-"		1436 1105  IBM",
-"		1437 1105  IBM 5614PS3G V.90 Modem",
-"	1022  HCF 56k Modem",
-"		1436 1303  M3-5614PM3G V.90 Modem",
-"	1023  HCF 56k Data/Fax Modem",
-"		122d 4020  Packard Bell MDP3858-WE",
-"		122d 4023  MDP3858-UE",
-"		13e0 0247  IBM F-1156IV+/R6 Spain V.90 Modem",
-"		13e0 0297  IBM",
-"		13e0 02c7  IBM F-1156IV+/R6 WW V.90 Modem",
-"		1436 1203  IBM",
-"		1436 1303  IBM",
-"	1024  HCF 56k Data/Fax/Voice Modem",
-"	1025  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"		10cf 106a  Fujitsu 235-DFSV",
-"		122d 4021  Packard Bell MDP3858V-WE",
-"		122d 4022  MDP3858SP-WE",
-"		122d 4024  MDP3858V-UE",
-"		122d 4025  MDP3858SP-UE",
-"	1026  HCF 56k PCI Speakerphone Modem",
-"	1032  HCF 56k Modem",
-"	1033  HCF 56k Modem",
-"	1034  HCF 56k Modem",
-"	1035  HCF 56k PCI Speakerphone Modem",
-"	1036  HCF 56k Modem",
-"	1085  HCF 56k Volcano PCI Modem",
-"	2005  HCF 56k Data/Fax Modem",
-"		104d 8044  229-DFSV",
-"		104d 8045  229-DFSV",
-"		104d 8055  PBE/Aztech 235W-DFSV",
-"		104d 8056  235-DFSV",
-"		104d 805a  Modem",
-"		104d 805f  Modem",
-"		104d 8074  Modem",
-"	2013  HSF 56k Data/Fax Modem",
-"		1179 0001  Modem",
-"		1179 ff00  Modem",
-"	2014  HSF 56k Data/Fax/Voice Modem",
-"		10cf 1057  Fujitsu Citicorp III",
-"		122d 4050  MSP3880-U",
-"		122d 4055  MSP3880-W",
-"	2015  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"		10cf 1063  Fujitsu",
-"		10cf 1064  Fujitsu",
-"		1468 2015  Fujitsu",
-"	2016  HSF 56k Data/Fax/Voice/Spkp Modem",
-"		122d 4051  MSP3880V-W",
-"		122d 4052  MSP3880SP-W",
-"		122d 4054  MSP3880V-U",
-"		122d 4056  MSP3880SP-U",
-"		122d 4057  MSP3880SP-A",
-"	4311  Riptide HSF 56k PCI Modem",
-"		127a 4311  Ring Modular? Riptide HSF RT HP Dom",
-"		13e0 0210  HP-GVC",
-"	4320  Riptide PCI Audio Controller",
-"		1235 4320  Riptide PCI Audio Controller",
-"	4321  Riptide HCF 56k PCI Modem",
-"		1235 4321  Hewlett Packard DF",
-"		1235 4324  Hewlett Packard DF",
-"		13e0 0210  Hewlett Packard DF",
-"		144d 2321  Riptide",
-"	4322  Riptide PCI Game Controller",
-"		1235 4322  Riptide PCI Game Controller",
-"	8234  RapidFire 616X ATM155 Adapter",
-"		108d 0022  RapidFire 616X ATM155 Adapter",
-"		108d 0027  RapidFire 616X ATM155 Adapter",
-"127b  Pixera Corporation",
-"127c  Crosspoint Solutions, Inc.",
-"127d  Vela Research",
-"127e  Winnov, L.P.",
-"127f  Fujifilm",
-"1280  Photoscript Group Ltd.",
-"1281  Yokogawa Electric Corporation",
-"1282  Davicom Semiconductor, Inc.",
-"	9009  Ethernet 100/10 MBit",
-"	9100  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	9102  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	9132  Ethernet 100/10 MBit",
-"1283  Integrated Technology Express, Inc.",
-"	673a  IT8330G",
-"	8211  ITE 8211F Single Channel UDMA 133 (ASUS 8211 (ITE IT8212 ATA RAID Controller))",
-"		1043 8138  P5GD1-VW Mainboard",
-"	8212  IT/ITE8212 Dual channel ATA RAID controller (PCI version seems to be IT8212, embedded seems to be ITE8212)",
-"		1283 0001  IT/ITE8212 Dual channel ATA RAID controller",
-"	8330  IT8330G",
-"	8872  IT8874F PCI Dual Serial Port Controller",
-"	8888  IT8888F PCI to ISA Bridge with SMB",
-"	8889  IT8889F PCI to ISA Bridge",
-"	e886  IT8330G",
-"1284  Sahara Networks, Inc.",
-"1285  Platform Technologies, Inc.",
-"	0100  AGOGO sound chip (aka ESS Maestro 1)",
-"1286  Mazet GmbH",
-"1287  M-Pact, Inc.",
-"	001e  LS220D DVD Decoder",
-"	001f  LS220C DVD Decoder",
-"1288  Timestep Corporation",
-"1289  AVC Technology, Inc.",
-"128a  Asante Technologies, Inc.",
-"128b  Transwitch Corporation",
-"128c  Retix Corporation",
-"128d  G2 Networks, Inc.",
-"	0021  ATM155 Adapter",
-"128e  Hoontech Corporation/Samho Multi Tech Ltd.",
-"	0008  ST128 WSS/SB",
-"	0009  ST128 SAM9407",
-"	000a  ST128 Game Port",
-"	000b  ST128 MPU Port",
-"	000c  ST128 Ctrl Port",
-"128f  Tateno Dennou, Inc.",
-"1290  Sord Computer Corporation",
-"1291  NCS Computer Italia",
-"1292  Tritech Microelectronics Inc",
-"1293  Media Reality Technology",
-"1294  Rhetorex, Inc.",
-"1295  Imagenation Corporation",
-"1296  Kofax Image Products",
-"1297  Holco Enterprise Co, Ltd/Shuttle Computer",
-"1298  Spellcaster Telecommunications Inc.",
-"1299  Knowledge Technology Lab.",
-"129a  VMetro, inc.",
-"	0615  PBT-615 PCI-X Bus Analyzer",
-"129b  Image Access",
-"129c  Jaycor",
-"129d  Compcore Multimedia, Inc.",
-"129e  Victor Company of Japan, Ltd.",
-"129f  OEC Medical Systems, Inc.",
-"12a0  Allen-Bradley Company",
-"12a1  Simpact Associates, Inc.",
-"12a2  Newgen Systems Corporation",
-"12a3  Lucent Technologies",
-"	8105  T8105 H100 Digital Switch",
-"12a4  NTT Electronics Technology Company",
-"12a5  Vision Dynamics Ltd.",
-"12a6  Scalable Networks, Inc.",
-"12a7  AMO GmbH",
-"12a8  News Datacom",
-"12a9  Xiotech Corporation",
-"12aa  SDL Communications, Inc.",
-"12ab  Yuan Yuan Enterprise Co., Ltd.",
-"	0002  AU8830 [Vortex2] Based Sound Card With A3D Support",
-"	3000  MPG-200C PCI DVD Decoder Card",
-"12ac  Measurex Corporation",
-"12ad  Multidata GmbH",
-"12ae  Alteon Networks Inc.",
-"	0001  AceNIC Gigabit Ethernet",
-"		1014 0104  Gigabit Ethernet-SX PCI Adapter",
-"		12ae 0001  Gigabit Ethernet-SX (Universal)",
-"		1410 0104  Gigabit Ethernet-SX PCI Adapter",
-"	0002  AceNIC Gigabit Ethernet (Copper)",
-"		10a9 8002  Acenic Gigabit Ethernet",
-"		12ae 0002  Gigabit Ethernet-T (3C986-T)",
-"	00fa  Farallon PN9100-T Gigabit Ethernet",
-"12af  TDK USA Corp",
-"12b0  Jorge Scientific Corp",
-"12b1  GammaLink",
-"12b2  General Signal Networks",
-"12b3  Inter-Face Co Ltd",
-"12b4  FutureTel Inc",
-"12b5  Granite Systems Inc.",
-"12b6  Natural Microsystems",
-"12b7  Cognex Modular Vision Systems Div. - Acumen Inc.",
-"12b8  Korg",
-"12b9  3Com Corp, Modem Division",
-"	1006  WinModem",
-"		12b9 005c  USR 56k Internal Voice WinModem (Model 3472)",
-"		12b9 005e  USR 56k Internal WinModem (Models 662975)",
-"		12b9 0062  USR 56k Internal Voice WinModem (Model 662978)",
-"		12b9 0068  USR 56k Internal Voice WinModem (Model 5690)",
-"		12b9 007a  USR 56k Internal Voice WinModem (Model 662974)",
-"		12b9 007f  USR 56k Internal WinModem (Models 5698, 5699)",
-"		12b9 0080  USR 56k Internal WinModem (Models 2975, 3528)",
-"		12b9 0081  USR 56k Internal Voice WinModem (Models 2974, 3529)",
-"		12b9 0091  USR 56k Internal Voice WinModem (Model 2978)",
-"	1007  USR 56k Internal WinModem",
-"		12b9 00a3  USR 56k Internal WinModem (Model 3595)",
-"	1008  56K FaxModem Model 5610",
-"		12b9 00a2  USR 56k Internal FAX Modem (Model 2977)",
-"		12b9 00aa  USR 56k Internal Voice Modem (Model 2976)",
-"		12b9 00ab  USR 56k Internal Voice Modem (Model 5609)",
-"		12b9 00ac  USR 56k Internal Voice Modem (Model 3298)",
-"		12b9 00ad  USR 56k Internal FAX Modem (Model 5610)",
-"12ba  BittWare, Inc.",
-"12bb  Nippon Unisoft Corporation",
-"12bc  Array Microsystems",
-"12bd  Computerm Corp.",
-"12be  Anchor Chips Inc.",
-"	3041  AN3041Q CO-MEM",
-"	3042  AN3042Q CO-MEM Lite",
-"		12be 3042  Anchor Chips Lite Evaluation Board",
-"12bf  Fujifilm Microdevices",
-"12c0  Infimed",
-"12c1  GMM Research Corp",
-"12c2  Mentec Limited",
-"12c3  Holtek Microelectronics Inc",
-"	0058  PCI NE2K Ethernet",
-"	5598  PCI NE2K Ethernet",
-"12c4  Connect Tech Inc",
-"	0001  Blue HEAT/PCI 8 (RS232/CL/RJ11)",
-"	0002  Blue HEAT/PCI 4 (RS232)",
-"	0003  Blue HEAT/PCI 2 (RS232)",
-"	0004  Blue HEAT/PCI 8 (UNIV, RS485)",
-"	0005  Blue HEAT/PCI 4+4/6+2 (UNIV, RS232/485)",
-"	0006  Blue HEAT/PCI 4 (OPTO, RS485)",
-"	0007  Blue HEAT/PCI 2+2 (RS232/485)",
-"	0008  Blue HEAT/PCI 2 (OPTO, Tx, RS485)",
-"	0009  Blue HEAT/PCI 2+6 (RS232/485)",
-"	000a  Blue HEAT/PCI 8 (Tx, RS485)",
-"	000b  Blue HEAT/PCI 4 (Tx, RS485)",
-"	000c  Blue HEAT/PCI 2 (20 MHz, RS485)",
-"	000d  Blue HEAT/PCI 2 PTM",
-"	0100  NT960/PCI",
-"	0201  cPCI Titan - 2 Port",
-"	0202  cPCI Titan - 4 Port",
-"	0300  CTI PCI UART 2 (RS232)",
-"	0301  CTI PCI UART 4 (RS232)",
-"	0302  CTI PCI UART 8 (RS232)",
-"	0310  CTI PCI UART 1+1 (RS232/485)",
-"	0311  CTI PCI UART 2+2 (RS232/485)",
-"	0312  CTI PCI UART 4+4 (RS232/485)",
-"	0320  CTI PCI UART 2",
-"	0321  CTI PCI UART 4",
-"	0322  CTI PCI UART 8",
-"	0330  CTI PCI UART 2 (RS485)",
-"	0331  CTI PCI UART 4 (RS485)",
-"	0332  CTI PCI UART 8 (RS485)",
-"12c5  Picture Elements Incorporated",
-"	007e  Imaging/Scanning Subsystem Engine",
-"	007f  Imaging/Scanning Subsystem Engine",
-"	0081  PCIVST [Grayscale Thresholding Engine]",
-"	0085  Video Simulator/Sender",
-"	0086  THR2 Multi-scale Thresholder",
-"12c6  Mitani Corporation",
-"12c7  Dialogic Corp",
-"12c8  G Force Co, Ltd",
-"12c9  Gigi Operations",
-"12ca  Integrated Computing Engines",
-"12cb  Antex Electronics Corporation",
-"12cc  Pluto Technologies International",
-"12cd  Aims Lab",
-"12ce  Netspeed Inc.",
-"12cf  Prophet Systems, Inc.",
-"12d0  GDE Systems, Inc.",
-"12d1  PSITech",
-"12d2  NVidia / SGS Thomson (Joint Venture)",
-"	0008  NV1",
-"	0009  DAC64",
-"	0018  Riva128",
-"		1048 0c10  VICTORY Erazor",
-"		107b 8030  STB Velocity 128",
-"		1092 0350  Viper V330",
-"		1092 1092  Viper V330",
-"		10b4 1b1b  STB Velocity 128",
-"		10b4 1b1d  STB Velocity 128",
-"		10b4 1b1e  STB Velocity 128, PAL TV-Out",
-"		10b4 1b20  STB Velocity 128 Sapphire",
-"		10b4 1b21  STB Velocity 128",
-"		10b4 1b22  STB Velocity 128 AGP, NTSC TV-Out",
-"		10b4 1b23  STB Velocity 128 AGP, PAL TV-Out",
-"		10b4 1b27  STB Velocity 128 DVD",
-"		10b4 1b88  MVP Pro 128",
-"		10b4 222a  STB Velocity 128 AGP",
-"		10b4 2230  STB Velocity 128",
-"		10b4 2232  STB Velocity 128",
-"		10b4 2235  STB Velocity 128 AGP",
-"		2a15 54a3  3DVision-SAGP / 3DexPlorer 3000",
-"	0019  Riva128ZX",
-"	0020  TNT",
-"	0028  TNT2",
-"	0029  UTNT2",
-"	002c  VTNT2",
-"	00a0  ITNT2",
-"12d3  Vingmed Sound A/S",
-"12d4  Ulticom (Formerly DGM&S)",
-"	0200  T1 Card",
-"12d5  Equator Technologies Inc",
-"	0003  BSP16",
-"	1000  BSP15",
-"12d6  Analogic Corp",
-"12d7  Biotronic SRL",
-"12d8  Pericom Semiconductor",
-"	8150  PCI to PCI Bridge",
-"12d9  Aculab PLC",
-"	0002  PCI Prosody",
-"	0004  cPCI Prosody",
-"	0005  Aculab E1/T1 PCI card",
-"	1078  Prosody X class e1000 device",
-"		12d9 000d  Prosody X PCI",
-"12da  True Time Inc.",
-"12db  Annapolis Micro Systems, Inc",
-"12dc  Symicron Computer Communication Ltd.",
-"12dd  Management Graphics",
-"12de  Rainbow Technologies",
-"	0200  CryptoSwift CS200",
-"12df  SBS Technologies Inc",
-"12e0  Chase Research",
-"	0010  ST16C654 Quad UART",
-"	0020  ST16C654 Quad UART",
-"	0030  ST16C654 Quad UART",
-"12e1  Nintendo Co, Ltd",
-"12e2  Datum Inc. Bancomm-Timing Division",
-"12e3  Imation Corp - Medical Imaging Systems",
-"12e4  Brooktrout Technology Inc",
-"12e5  Apex Semiconductor Inc",
-"12e6  Cirel Systems",
-"12e7  Sunsgroup Corporation",
-"12e8  Crisc Corp",
-"12e9  GE Spacenet",
-"12ea  Zuken",
-"12eb  Aureal Semiconductor",
-"	0001  Vortex 1",
-"		104d 8036  AU8820 Vortex Digital Audio Processor",
-"		1092 2000  Sonic Impact A3D",
-"		1092 2100  Sonic Impact A3D",
-"		1092 2110  Sonic Impact A3D",
-"		1092 2200  Sonic Impact A3D",
-"		122d 1002  AU8820 Vortex Digital Audio Processor",
-"		12eb 0001  AU8820 Vortex Digital Audio Processor",
-"		5053 3355  Montego",
-"	0002  Vortex 2",
-"		104d 8049  AU8830 Vortex 3D Digital Audio Processor",
-"		104d 807b  AU8830 Vortex 3D Digital Audio Processor",
-"		1092 3000  Monster Sound II",
-"		1092 3001  Monster Sound II",
-"		1092 3002  Monster Sound II",
-"		1092 3003  Monster Sound II",
-"		1092 3004  Monster Sound II",
-"		12eb 0002  AU8830 Vortex 3D Digital Audio Processor",
-"		12eb 0088  AU8830 Vortex 3D Digital Audio Processor",
-"		144d 3510  AU8830 Vortex 3D Digital Audio Processor",
-"		5053 3356  Montego II",
-"	0003  AU8810 Vortex Digital Audio Processor",
-"		104d 8049  AU8810 Vortex Digital Audio Processor",
-"		104d 8077  AU8810 Vortex Digital Audio Processor",
-"		109f 1000  AU8810 Vortex Digital Audio Processor",
-"		12eb 0003  AU8810 Vortex Digital Audio Processor",
-"		1462 6780  AU8810 Vortex Digital Audio Processor",
-"		14a4 2073  AU8810 Vortex Digital Audio Processor",
-"		14a4 2091  AU8810 Vortex Digital Audio Processor",
-"		14a4 2104  AU8810 Vortex Digital Audio Processor",
-"		14a4 2106  AU8810 Vortex Digital Audio Processor",
-"	8803  Vortex 56k Software Modem",
-"		12eb 8803  Vortex 56k Software Modem",
-"12ec  3A International, Inc.",
-"12ed  Optivision Inc.",
-"12ee  Orange Micro",
-"12ef  Vienna Systems",
-"12f0  Pentek",
-"12f1  Sorenson Vision Inc",
-"12f2  Gammagraphx, Inc.",
-"12f3  Radstone Technology",
-"12f4  Megatel",
-"12f5  Forks",
-"12f6  Dawson France",
-"12f7  Cognex",
-"12f8  Electronic Design GmbH",
-"	0002  VideoMaker",
-"12f9  Four Fold Ltd",
-"12fb  Spectrum Signal Processing",
-"	0001  PMC-MAI",
-"	00f5  F5 Dakar",
-"	02ad  PMC-2MAI",
-"	2adc  ePMC-2ADC",
-"	3100  PRO-3100",
-"	3500  PRO-3500",
-"	4d4f  Modena",
-"	8120  ePMC-8120",
-"	da62  Daytona C6201 PCI (Hurricane)",
-"	db62  Ingliston XBIF",
-"	dc62  Ingliston PLX9054",
-"	dd62  Ingliston JTAG/ISP",
-"	eddc  ePMC-MSDDC",
-"	fa01  ePMC-FPGA",
-"12fc  Capital Equipment Corp",
-"12fd  I2S",
-"12fe  ESD Electronic System Design GmbH",
-"12ff  Lexicon",
-"1300  Harman International Industries Inc",
-"1302  Computer Sciences Corp",
-"1303  Innovative Integration",
-"1304  Juniper Networks",
-"1305  Netphone, Inc",
-"1306  Duet Technologies",
-"1307  Measurement Computing",
-"	0001  PCI-DAS1602/16",
-"	000b  PCI-DIO48H",
-"	000c  PCI-PDISO8",
-"	000d  PCI-PDISO16",
-"	000f  PCI-DAS1200",
-"	0010  PCI-DAS1602/12",
-"	0014  PCI-DIO24H",
-"	0015  PCI-DIO24H/CTR3",
-"	0016  PCI-DIO48H/CTR15",
-"	0017  PCI-DIO96H",
-"	0018  PCI-CTR05",
-"	0019  PCI-DAS1200/JR",
-"	001a  PCI-DAS1001",
-"	001b  PCI-DAS1002",
-"	001c  PCI-DAS1602JR/16",
-"	001d  PCI-DAS6402/16",
-"	001e  PCI-DAS6402/12",
-"	001f  PCI-DAS16/M1",
-"	0020  PCI-DDA02/12",
-"	0021  PCI-DDA04/12",
-"	0022  PCI-DDA08/12",
-"	0023  PCI-DDA02/16",
-"	0024  PCI-DDA04/16",
-"	0025  PCI-DDA08/16",
-"	0026  PCI-DAC04/12-HS",
-"	0027  PCI-DAC04/16-HS",
-"	0028  PCI-DIO24",
-"	0029  PCI-DAS08",
-"	002c  PCI-INT32",
-"	0033  PCI-DUAL-AC5",
-"	0034  PCI-DAS-TC",
-"	0035  PCI-DAS64/M1/16",
-"	0036  PCI-DAS64/M2/16",
-"	0037  PCI-DAS64/M3/16",
-"	004c  PCI-DAS1000",
-"	004d  PCI-QUAD04",
-"	0052  PCI-DAS4020/12",
-"	0054  PCI-DIO96",
-"	005e  PCI-DAS6025",
-"1308  Jato Technologies Inc.",
-"	0001  NetCelerator Adapter",
-"		1308 0001  NetCelerator Adapter",
-"1309  AB Semiconductor Ltd",
-"130a  Mitsubishi Electric Microcomputer",
-"130b  Colorgraphic Communications Corp",
-"130c  Ambex Technologies, Inc",
-"130d  Accelerix Inc",
-"130e  Yamatake-Honeywell Co. Ltd",
-"130f  Advanet Inc",
-"1310  Gespac",
-"1311  Videoserver, Inc",
-"1312  Acuity Imaging, Inc",
-"1313  Yaskawa Electric Co.",
-"1316  Teradyne Inc",
-"1317  Linksys",
-"	0981  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	0985  NC100 Network Everywhere Fast Ethernet 10/100",
-"		1734 100c  Scenic N300 ADMtek AN983 10/100 Mbps PCI Adapter",
-"	1985  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	2850  HSP MicroModem 56",
-"	5120  ADMtek ADM5120 OpenGate System-on-Chip",
-"	8201  ADMtek ADM8211 802.11b Wireless Interface",
-"		10b8 2635  SMC2635W 802.11b (11Mbps) wireless lan pcmcia (cardbus) card",
-"		1317 8201  SMC2635W 802.11b (11mbps) wireless lan pcmcia (cardbus) card",
-"	8211  ADMtek ADM8211 802.11b Wireless Interface",
-"	9511  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"1318  Packet Engines Inc.",
-"	0911  GNIC-II PCI Gigabit Ethernet [Hamachi]",
-"1319  Fortemedia, Inc",
-"	0801  Xwave QS3000A [FM801]",
-"		1319 1319  FM801 PCI Audio",
-"	0802  Xwave QS3000A [FM801 game port]",
-"		1319 1319  FM801 PCI Joystick",
-"	1000  FM801 PCI Audio",
-"	1001  FM801 PCI Joystick",
-"131a  Finisar Corp.",
-"131c  Nippon Electro-Sensory Devices Corp",
-"131d  Sysmic, Inc.",
-"131e  Xinex Networks Inc",
-"131f  Siig Inc",
-"	1000  CyberSerial (1-port) 16550",
-"	1001  CyberSerial (1-port) 16650",
-"	1002  CyberSerial (1-port) 16850",
-"	1010  Duet 1S(16550)+1P",
-"	1011  Duet 1S(16650)+1P",
-"	1012  Duet 1S(16850)+1P",
-"	1020  CyberParallel (1-port)",
-"	1021  CyberParallel (2-port)",
-"	1030  CyberSerial (2-port) 16550",
-"	1031  CyberSerial (2-port) 16650",
-"	1032  CyberSerial (2-port) 16850",
-"	1034  Trio 2S(16550)+1P",
-"	1035  Trio 2S(16650)+1P",
-"	1036  Trio 2S(16850)+1P",
-"	1050  CyberSerial (4-port) 16550",
-"	1051  CyberSerial (4-port) 16650",
-"	1052  CyberSerial (4-port) 16850",
-"	2000  CyberSerial (1-port) 16550",
-"	2001  CyberSerial (1-port) 16650",
-"	2002  CyberSerial (1-port) 16850",
-"	2010  Duet 1S(16550)+1P",
-"	2011  Duet 1S(16650)+1P",
-"	2012  Duet 1S(16850)+1P",
-"	2020  CyberParallel (1-port)",
-"	2021  CyberParallel (2-port)",
-"	2030  CyberSerial (2-port) 16550",
-"		131f 2030  PCI Serial Card",
-"	2031  CyberSerial (2-port) 16650",
-"	2032  CyberSerial (2-port) 16850",
-"	2040  Trio 1S(16550)+2P",
-"	2041  Trio 1S(16650)+2P",
-"	2042  Trio 1S(16850)+2P",
-"	2050  CyberSerial (4-port) 16550",
-"	2051  CyberSerial (4-port) 16650",
-"	2052  CyberSerial (4-port) 16850",
-"	2060  Trio 2S(16550)+1P",
-"	2061  Trio 2S(16650)+1P",
-"	2062  Trio 2S(16850)+1P",
-"	2081  CyberSerial (8-port) ST16654",
-"1320  Crypto AG",
-"1321  Arcobel Graphics BV",
-"1322  MTT Co., Ltd",
-"1323  Dome Inc",
-"1324  Sphere Communications",
-"1325  Salix Technologies, Inc",
-"1326  Seachange international",
-"1327  Voss scientific",
-"1328  quadrant international",
-"1329  Productivity Enhancement",
-"132a  Microcom Inc.",
-"132b  Broadband Technologies",
-"132c  Micrel Inc",
-"132d  Integrated Silicon Solution, Inc.",
-"1330  MMC Networks",
-"1331  Radisys Corp.",
-"	0030  ENP-2611",
-"	8200  82600 Host Bridge",
-"	8201  82600 IDE",
-"	8202  82600 USB",
-"	8210  82600 PCI Bridge",
-"1332  Micro Memory",
-"	5415  MM-5415CN PCI Memory Module with Battery Backup",
-"	5425  MM-5425CN PCI 64/66 Memory Module with Battery Backup",
-"	6140  MM-6140D",
-"1334  Redcreek Communications, Inc",
-"1335  Videomail, Inc",
-"1337  Third Planet Publishing",
-"1338  BT Electronics",
-"133a  Vtel Corp",
-"133b  Softcom Microsystems",
-"133c  Holontech Corp",
-"133d  SS Technologies",
-"133e  Virtual Computer Corp",
-"133f  SCM Microsystems",
-"1340  Atalla Corp",
-"1341  Kyoto Microcomputer Co",
-"1342  Promax Systems Inc",
-"1343  Phylon Communications Inc",
-"1344  Crucial Technology",
-"1345  Arescom Inc",
-"1347  Odetics",
-"1349  Sumitomo Electric Industries, Ltd.",
-"134a  DTC Technology Corp.",
-"	0001  Domex 536",
-"	0002  Domex DMX3194UP SCSI Adapter",
-"134b  ARK Research Corp.",
-"134c  Chori Joho System Co. Ltd",
-"134d  PCTel Inc",
-"	2189  HSP56 MicroModem",
-"	2486  2304WT V.92 MDC Modem",
-"	7890  HSP MicroModem 56",
-"		134d 0001  PCT789 adapter",
-"	7891  HSP MicroModem 56",
-"		134d 0001  HSP MicroModem 56",
-"	7892  HSP MicroModem 56",
-"	7893  HSP MicroModem 56",
-"	7894  HSP MicroModem 56",
-"	7895  HSP MicroModem 56",
-"	7896  HSP MicroModem 56",
-"	7897  HSP MicroModem 56",
-"134e  CSTI",
-"134f  Algo System Co Ltd",
-"1350  Systec Co. Ltd",
-"1351  Sonix Inc",
-"1353  Thales Idatys",
-"	0002  Proserver",
-"	0003  PCI-FUT",
-"	0004  PCI-S0",
-"	0005  PCI-FUT-S0",
-"1354  Dwave System Inc",
-"1355  Kratos Analytical Ltd",
-"1356  The Logical Co",
-"1359  Prisa Networks",
-"135a  Brain Boxes",
-"135b  Giganet Inc",
-"135c  Quatech Inc",
-"	0010  QSC-100",
-"	0020  DSC-100",
-"	0030  DSC-200/300",
-"	0040  QSC-200/300",
-"	0050  ESC-100D",
-"	0060  ESC-100M",
-"	00f0  MPAC-100 Syncronous Serial Card (Zilog 85230)",
-"	0170  QSCLP-100",
-"	0180  DSCLP-100",
-"	0190  SSCLP-100",
-"	01a0  QSCLP-200/300",
-"	01b0  DSCLP-200/300",
-"	01c0  SSCLP-200/300",
-"135d  ABB Network Partner AB",
-"135e  Sealevel Systems Inc",
-"	5101  Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32)",
-"	7101  Single Port RS-232/422/485/530",
-"	7201  Dual Port RS-232/422/485 Interface",
-"	7202  Dual Port RS-232 Interface",
-"	7401  Four Port RS-232 Interface",
-"	7402  Four Port RS-422/485 Interface",
-"	7801  Eight Port RS-232 Interface",
-"	7804  Eight Port RS-232/422/485 Interface",
-"	8001  8001 Digital I/O Adapter",
-"135f  I-Data International A-S",
-"1360  Meinberg Funkuhren",
-"	0101  PCI32 DCF77 Radio Clock",
-"	0102  PCI509 DCF77 Radio Clock",
-"	0103  PCI510 DCF77 Radio Clock",
-"	0104  PCI511 DCF77 Radio Clock",
-"	0201  GPS167PCI GPS Receiver",
-"	0202  GPS168PCI GPS Receiver",
-"	0203  GPS169PCI GPS Receiver",
-"	0204  GPS170PCI GPS Receiver",
-"	0301  TCR510PCI IRIG Timecode Reader",
-"	0302  TCR167PCI IRIG Timecode Reader",
-"1361  Soliton Systems K.K.",
-"1362  Fujifacom Corporation",
-"1363  Phoenix Technology Ltd",
-"1364  ATM Communications Inc",
-"1365  Hypercope GmbH",
-"1366  Teijin Seiki Co. Ltd",
-"1367  Hitachi Zosen Corporation",
-"1368  Skyware Corporation",
-"1369  Digigram",
-"136a  High Soft Tech",
-"136b  Kawasaki Steel Corporation",
-"	ff01  KL5A72002 Motion JPEG",
-"136c  Adtek System Science Co Ltd",
-"136d  Gigalabs Inc",
-"136f  Applied Magic Inc",
-"1370  ATL Products",
-"1371  CNet Technology Inc",
-"	434e  GigaCard Network Adapter",
-"		1371 434e  N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L)",
-"1373  Silicon Vision Inc",
-"1374  Silicom Ltd.",
-"	0024  Silicom Dual port Giga Ethernet BGE Bypass Server Adapter",
-"	0025  Silicom Quad port Giga Ethernet BGE Bypass Server Adapter",
-"	0026  Silicom Dual port Fiber Giga Ethernet 546 Bypass Server Adapter",
-"	0027  Silicom Dual port Fiber LX Giga Ethernet 546 Bypass Server Adapter",
-"	0029  Silicom Dual port Copper Giga Ethernet 546GB Bypass Server Adapter",
-"	002a  Silicom Dual port Fiber Giga Ethernet 546 TAP/Bypass Server Adapter",
-"	002b  Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter (PXE2TBI)",
-"	002c  Silicom Quad port Copper Giga Ethernet 546GB Bypass Server Adapter (PXG4BPI)",
-"	002d  Silicom Quad port Fiber-SX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI)",
-"	002e  Silicom Quad port Fiber-LX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI-LX)",
-"	002f  Silicom Dual port Fiber-SX Giga Ethernet 546GB Low profile Bypass Server Adapter (PXG2BPFIL)",
-"	0030  Silicom Dual port Fiber-LX Giga Ethernet 546GB Low profile Bypass Server Adapter",
-"	0031  Silicom Quad port Copper Giga Ethernet PCI-E Bypass Server Adapter",
-"	0032  Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter",
-"	0034  Silicom Dual port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter",
-"	0035  Silicom Quad port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter",
-"	0036  Silicom Dual port Fiber Giga Ethernet PCI-E BGE Bypass Server Adapter",
-"	0037  Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter",
-"	0038  Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter",
-"	0039  Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter",
-"	003a  Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter",
-"1375  Argosystems Inc",
-"1376  LMC",
-"1377  Electronic Equipment Production & Distribution GmbH",
-"1378  Telemann Co. Ltd",
-"1379  Asahi Kasei Microsystems Co Ltd",
-"137a  Mark of the Unicorn Inc",
-"	0001  PCI-324 Audiowire Interface",
-"137b  PPT Vision",
-"137c  Iwatsu Electric Co Ltd",
-"137d  Dynachip Corporation",
-"137e  Patriot Scientific Corporation",
-"137f  Japan Satellite Systems Inc",
-"1380  Sanritz Automation Co Ltd",
-"1381  Brains Co. Ltd",
-"1382  Marian - Electronic & Software",
-"	0001  ARC88 audio recording card",
-"	2008  Prodif 96 Pro sound system",
-"	2048  Prodif Plus sound system",
-"	2088  Marc 8 Midi sound system",
-"	20c8  Marc A sound system",
-"	4008  Marc 2 sound system",
-"	4010  Marc 2 Pro sound system",
-"	4048  Marc 4 MIDI sound system",
-"	4088  Marc 4 Digi sound system",
-"	4248  Marc X sound system",
-"	4424  TRACE D4 Sound System",
-"1383  Controlnet Inc",
-"1384  Reality Simulation Systems Inc",
-"1385  Netgear",
-"	0013  WG311T 108 Mbps Wireless PCI Adapter",
-"	311a  GA511 Gigabit Ethernet",
-"	4100  802.11b Wireless Adapter (MA301)",
-"	4105  MA311 802.11b wireless adapter",
-"	4251  WG111T 108 Mbps Wireless USB 2.0 Adapter",
-"	4400  WAG511 802.11a/b/g Dual Band Wireless PC Card",
-"	4600  WAG511 802.11a/b/g Dual Band Wireless PC Card",
-"	4601  WAG511 802.11a/b/g Dual Band Wireless PC Card",
-"	4610  WAG511 802.11a/b/g Dual Band Wireless PC Card",
-"	4800  WG511(v1) 54 Mbps Wireless PC Card",
-"	4900  WG311v1 54 Mbps Wireless PCI Adapter",
-"	4a00  WAG311 802.11a/g Wireless PCI Adapter",
-"	4b00  WG511T 108 Mbps Wireless PC Card",
-"	4c00  WG311v2 54 Mbps Wireless PCI Adapter",
-"	4d00  WG311T 108 Mbps Wireless PCI Adapter",
-"	4e00  WG511v2 54 Mbps Wireless PC Card",
-"	4f00  WG511U Double 108 Mbps  Wireless PC Card",
-"	5200  GA511 Gigabit PC Card",
-"	620a  GA620 Gigabit Ethernet",
-"	622a  GA622",
-"	630a  GA630 Gigabit Ethernet",
-"	6b00  WG311v3 54 Mbps Wireless PCI Adapter",
-"	6d00  WPNT511 RangeMax 240 Mbps Wireless PC Card",
-"	f004  FA310TX",
-"1386  Video Domain Technologies",
-"1387  Systran Corp",
-"1388  Hitachi Information Technology Co Ltd",
-"1389  Applicom International",
-"	0001  PCI1500PFB [Intelligent fieldbus adaptor]",
-"138a  Fusion Micromedia Corp",
-"138b  Tokimec Inc",
-"138c  Silicon Reality",
-"138d  Future Techno Designs pte Ltd",
-"138e  Basler GmbH",
-"138f  Patapsco Designs Inc",
-"1390  Concept Development Inc",
-"1391  Development Concepts Inc",
-"1392  Medialight Inc",
-"1393  Moxa Technologies Co Ltd",
-"	1040  Smartio C104H/PCI",
-"	1141  Industrio CP-114",
-"	1680  Smartio C168H/PCI",
-"	2040  Intellio CP-204J",
-"	2180  Intellio C218 Turbo PCI",
-"	3200  Intellio C320 Turbo PCI",
-"1394  Level One Communications",
-"	0001  LXT1001 Gigabit Ethernet",
-"		1394 0001  NetCelerator Adapter",
-"1395  Ambicom Inc",
-"1396  Cipher Systems Inc",
-"1397  Cologne Chip Designs GmbH",
-"	08b4  ISDN network Controller [HFC-4S]",
-"		1397 b520  HFC-4S [IOB4ST]",
-"		1397 b540  HFC-4S [Swyx 4xS0 SX2 QuadBri]",
-"	16b8  ISDN network Controller [HFC-8S]",
-"	2bd0  ISDN network controller [HFC-PCI]",
-"		0675 1704  ISDN Adapter (PCI Bus, D, C)",
-"		0675 1708  ISDN Adapter (PCI Bus, D, C, ACPI)",
-"		1397 2bd0  ISDN Board",
-"		e4bf 1000  CI1-1-Harp",
-"1398  Clarion co. Ltd",
-"1399  Rios systems Co Ltd",
-"139a  Alacritech Inc",
-"	0001  Quad Port 10/100 Server Accelerator",
-"	0003  Single Port 10/100 Server Accelerator",
-"	0005  Single Port Gigabit Server Accelerator",
-"139b  Mediasonic Multimedia Systems Ltd",
-"139c  Quantum 3d Inc",
-"139d  EPL limited",
-"139e  Media4",
-"139f  Aethra s.r.l.",
-"13a0  Crystal Group Inc",
-"13a1  Kawasaki Heavy Industries Ltd",
-"13a2  Ositech Communications Inc",
-"13a3  Hifn Inc.",
-"	0005  7751 Security Processor",
-"	0006  6500 Public Key Processor",
-"	0007  7811 Security Processor",
-"	0012  7951 Security Processor",
-"	0014  78XX Security Processor",
-"	0016  8065 Security Processor",
-"	0017  8165 Security Processor",
-"	0018  8154 Security Processor",
-"	001d  7956 Security Processor",
-"	0020  7955 Security Processor",
-"	0026  8155 Security Processor",
-"13a4  Rascom Inc",
-"13a5  Audio Digital Imaging Inc",
-"13a6  Videonics Inc",
-"13a7  Teles AG",
-"13a8  Exar Corp.",
-"	0152  XR17C/D152 Dual PCI UART",
-"	0154  XR17C154 Quad UART",
-"	0158  XR17C158 Octal UART",
-"13a9  Siemens Medical Systems, Ultrasound Group",
-"13aa  Broadband Networks Inc",
-"13ab  Arcom Control Systems Ltd",
-"13ac  Motion Media Technology Ltd",
-"13ad  Nexus Inc",
-"13ae  ALD Technology Ltd",
-"13af  T.Sqware",
-"13b0  Maxspeed Corp",
-"13b1  Tamura corporation",
-"13b2  Techno Chips Co. Ltd",
-"13b3  Lanart Corporation",
-"13b4  Wellbean Co Inc",
-"13b5  ARM",
-"13b6  Dlog GmbH",
-"13b7  Logic Devices Inc",
-"13b8  Nokia Telecommunications oy",
-"13b9  Elecom Co Ltd",
-"13ba  Oxford Instruments",
-"13bb  Sanyo Technosound Co Ltd",
-"13bc  Bitran Corporation",
-"13bd  Sharp corporation",
-"13be  Miroku Jyoho Service Co. Ltd",
-"13bf  Sharewave Inc",
-"13c0  Microgate Corporation",
-"	0010  SyncLink Adapter v1",
-"	0020  SyncLink SCC Adapter",
-"	0030  SyncLink Multiport Adapter",
-"	0210  SyncLink Adapter v2",
-"13c1  3ware Inc",
-"	1000  5xxx/6xxx-series PATA-RAID",
-"	1001  7xxx/8xxx-series PATA/SATA-RAID",
-"		13c1 1001  7xxx/8xxx-series PATA/SATA-RAID",
-"	1002  9xxx-series SATA-RAID",
-"	1003  9550SX SATA-RAID",
-"13c2  Technotrend Systemtechnik GmbH",
-"	000e  Technotrend/Hauppauge DVB card rev2.3",
-"13c3  Janz Computer AG",
-"13c4  Phase Metrics",
-"13c5  Alphi Technology Corp",
-"13c6  Condor Engineering Inc",
-"	0520  CEI-520 A429 Card",
-"	0620  CEI-620 A429 Card",
-"	0820  CEI-820 A429 Card",
-"13c7  Blue Chip Technology Ltd",
-"13c8  Apptech Inc",
-"13c9  Eaton Corporation",
-"13ca  Iomega Corporation",
-"13cb  Yano Electric Co Ltd",
-"13cc  Metheus Corporation",
-"13cd  Compatible Systems Corporation",
-"13ce  Cocom A/S",
-"13cf  Studio Audio & Video Ltd",
-"13d0  Techsan Electronics Co Ltd",
-"	2103  B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card",
-"	2200  B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card",
-"13d1  Abocom Systems Inc",
-"	ab02  ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter",
-"	ab03  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	ab06  RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter",
-"	ab08  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"13d2  Shark Multimedia Inc",
-"13d3  IMC Networks",
-"13d4  Graphics Microsystems Inc",
-"13d5  Media 100 Inc",
-"13d6  K.I. Technology Co Ltd",
-"13d7  Toshiba Engineering Corporation",
-"13d8  Phobos corporation",
-"13d9  Apex PC Solutions Inc",
-"13da  Intresource Systems pte Ltd",
-"13db  Janich & Klass Computertechnik GmbH",
-"13dc  Netboost Corporation",
-"13dd  Multimedia Bundle Inc",
-"13de  ABB Robotics Products AB",
-"13df  E-Tech Inc",
-"	0001  PCI56RVP Modem",
-"		13df 0001  PCI56RVP Modem",
-"13e0  GVC Corporation",
-"13e1  Silicom Multimedia Systems Inc",
-"13e2  Dynamics Research Corporation",
-"13e3  Nest Inc",
-"13e4  Calculex Inc",
-"13e5  Telesoft Design Ltd",
-"13e6  Argosy research Inc",
-"13e7  NAC Incorporated",
-"13e8  Chip Express Corporation",
-"13e9  Intraserver Technology Inc",
-"13ea  Dallas Semiconductor",
-"13eb  Hauppauge Computer Works Inc",
-"13ec  Zydacron Inc",
-"	000a  NPC-RC01 Remote control receiver",
-"13ed  Raytheion E-Systems",
-"13ee  Hayes Microcomputer Products Inc",
-"13ef  Coppercom Inc",
-"13f0  Sundance Technology Inc / IC Plus Corp",
-"	0200  IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY",
-"	0201  ST201 Sundance Ethernet",
-"	1023  IC Plus IP1000 Family Gigabit Ethernet",
-"13f1  Oce' - Technologies B.V.",
-"13f2  Ford Microelectronics Inc",
-"13f3  Mcdata Corporation",
-"13f4  Troika Networks, Inc.",
-"	1401  Zentai Fibre Channel Adapter",
-"13f5  Kansai Electric Co. Ltd",
-"13f6  C-Media Electronics Inc",
-"	0011  CMI8738",
-"	0100  CM8338A",
-"		13f6 ffff  CMI8338/C3DX PCI Audio Device",
-"	0101  CM8338B",
-"		13f6 0101  CMI8338-031 PCI Audio Device",
-"	0111  CM8738",
-"		1019 0970  P6STP-FL motherboard",
-"		1043 8035  CUSI-FX motherboard",
-"		1043 8077  CMI8738 6-channel audio controller",
-"		1043 80e2  CMI8738 6ch-MX",
-"		13f6 0111  CMI8738/C3DX PCI Audio Device",
-"		1681 a000  Gamesurround MUSE XL",
-"	0211  CM8738",
-"13f7  Wildfire Communications",
-"13f8  Ad Lib Multimedia Inc",
-"13f9  NTT Advanced Technology Corp.",
-"13fa  Pentland Systems Ltd",
-"13fb  Aydin Corp",
-"13fc  Computer Peripherals International",
-"13fd  Micro Science Inc",
-"13fe  Advantech Co. Ltd",
-"	1240  PCI-1240 4-channel stepper motor controller card",
-"	1600  PCI-1612 4-port RS-232/422/485 PCI communication card",
-"	1733  PCI-1733 32-channel isolated digital input card",
-"	1752  PCI-1752",
-"	1754  PCI-1754",
-"	1756  PCI-1756",
-"13ff  Silicon Spice Inc",
-"1400  Artx Inc",
-"	1401  9432 TX",
-"1401  CR-Systems A/S",
-"1402  Meilhaus Electronic GmbH",
-"1403  Ascor Inc",
-"1404  Fundamental Software Inc",
-"1405  Excalibur Systems Inc",
-"1406  Oce' Printing Systems GmbH",
-"1407  Lava Computer mfg Inc",
-"	0100  Lava Dual Serial",
-"	0101  Lava Quatro A",
-"	0102  Lava Quatro B",
-"	0110  Lava DSerial-PCI Port A",
-"	0111  Lava DSerial-PCI Port B",
-"	0120  Quattro-PCI A",
-"	0121  Quattro-PCI B",
-"	0180  Lava Octo A",
-"	0181  Lava Octo B",
-"	0200  Lava Port Plus",
-"	0201  Lava Quad A",
-"	0202  Lava Quad B",
-"	0220  Lava Quattro PCI Ports A/B",
-"	0221  Lava Quattro PCI Ports C/D",
-"	0500  Lava Single Serial",
-"	0600  Lava Port 650",
-"	8000  Lava Parallel",
-"	8001  Dual parallel port controller A",
-"	8002  Lava Dual Parallel port A",
-"	8003  Lava Dual Parallel port B",
-"	8800  BOCA Research IOPPAR",
-"1408  Aloka Co. Ltd",
-"1409  Timedia Technology Co Ltd",
-"	7168  PCI2S550 (Dual 16550 UART)",
-"140a  DSP Research Inc",
-"140b  Ramix Inc",
-"140c  Elmic Systems Inc",
-"140d  Matsushita Electric Works Ltd",
-"140e  Goepel Electronic GmbH",
-"140f  Salient Systems Corp",
-"1410  Midas lab Inc",
-"1411  Ikos Systems Inc",
-"1412  VIA Technologies Inc.",
-"	1712  ICE1712 [Envy24] PCI Multi-Channel I/O Controller",
-"		1412 1712  Hoontech ST Audio DSP 24",
-"		1412 d630  M-Audio Delta 1010",
-"		1412 d631  M-Audio Delta DiO",
-"		1412 d632  M-Audio Delta 66",
-"		1412 d633  M-Audio Delta 44",
-"		1412 d634  M-Audio Delta Audiophile",
-"		1412 d635  M-Audio Delta TDIF",
-"		1412 d637  M-Audio Delta RBUS",
-"		1412 d638  M-Audio Delta 410",
-"		1412 d63b  M-Audio Delta 1010LT",
-"		1412 d63c  Digigram VX442",
-"		1416 1712  Hoontech ST Audio DSP 24 Media 7.1",
-"		153b 1115  EWS88 MT",
-"		153b 1125  EWS88 MT (Master)",
-"		153b 112b  EWS88 D",
-"		153b 112c  EWS88 D (Master)",
-"		153b 1130  EWX 24/96",
-"		153b 1138  DMX 6fire 24/96",
-"		153b 1151  PHASE88",
-"		16ce 1040  Edirol DA-2496",
-"	1724  VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller",
-"		1412 1724  Albatron PX865PE 7.1",
-"		1412 3630  M-Audio Revolution 7.1",
-"		1412 3631  M-Audio Revolution 5.1",
-"		153b 1145  Aureon 7.1 Space",
-"		153b 1147  Aureon 5.1 Sky",
-"		153b 1153  Aureon 7.1 Universe",
-"		270f f641  ZNF3-150",
-"		270f f645  ZNF3-250",
-"1413  Addonics",
-"1414  Microsoft Corporation",
-"1415  Oxford Semiconductor Ltd",
-"	8403  VScom 011H-EP1 1 port parallel adaptor",
-"	9501  OX16PCI954 (Quad 16950 UART) function 0",
-"		131f 2050  CyberPro (4-port)",
-"		131f 2051  CyberSerial 4S Plus",
-"		15ed 2000  MCCR Serial p0-3 of 8",
-"		15ed 2001  MCCR Serial p0-3 of 16",
-"	950a  EXSYS EX-41092 Dual 16950 Serial adapter",
-"	950b  OXCB950 Cardbus 16950 UART",
-"	9510  OX16PCI954 (Quad 16950 UART) function 1 (Disabled)",
-"	9511  OX16PCI954 (Quad 16950 UART) function 1",
-"		15ed 2000  MCCR Serial p4-7 of 8",
-"		15ed 2001  MCCR Serial p4-15 of 16",
-"	9521  OX16PCI952 (Dual 16950 UART)",
-"	9523  OX16PCI952 Integrated Parallel Port",
-"1416  Multiwave Innovation pte Ltd",
-"1417  Convergenet Technologies Inc",
-"1418  Kyushu electronics systems Inc",
-"1419  Excel Switching Corp",
-"141a  Apache Micro Peripherals Inc",
-"141b  Zoom Telephonics Inc",
-"141d  Digitan Systems Inc",
-"141e  Fanuc Ltd",
-"141f  Visiontech Ltd",
-"1420  Psion Dacom plc",
-"	8002  Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part)",
-"	8003  Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part)",
-"1421  Ads Technologies Inc",
-"1422  Ygrec Systems Co Ltd",
-"1423  Custom Technology Corp.",
-"1424  Videoserver Connections",
-"1425  Chelsio Communications Inc",
-"	000b  T210 Protocol Engine",
-"1426  Storage Technology Corp.",
-"1427  Better On-Line Solutions",
-"1428  Edec Co Ltd",
-"1429  Unex Technology Corp.",
-"142a  Kingmax Technology Inc",
-"142b  Radiolan",
-"142c  Minton Optic Industry Co Ltd",
-"142d  Pix stream Inc",
-"142e  Vitec Multimedia",
-"	4020  VM2-2 [Video Maker 2] MPEG1/2 Encoder",
-"	4337  VM2-2-C7 [Video Maker 2 rev. C7] MPEG1/2 Encoder",
-"142f  Radicom Research Inc",
-"1430  ITT Aerospace/Communications Division",
-"1431  Gilat Satellite Networks",
-"1432  Edimax Computer Co.",
-"	9130  RTL81xx Fast Ethernet",
-"1433  Eltec Elektronik GmbH",
-"1435  RTD Embedded Technologies, Inc.",
-"1436  CIS Technology Inc",
-"1437  Nissin Inc Co",
-"1438  Atmel-dream",
-"1439  Outsource Engineering & Mfg. Inc",
-"143a  Stargate Solutions Inc",
-"143b  Canon Research Center, America",
-"143c  Amlogic Inc",
-"143d  Tamarack Microelectronics Inc",
-"143e  Jones Futurex Inc",
-"143f  Lightwell Co Ltd - Zax Division",
-"1440  ALGOL Corp.",
-"1441  AGIE Ltd",
-"1442  Phoenix Contact GmbH & Co.",
-"1443  Unibrain S.A.",
-"1444  TRW",
-"1445  Logical DO Ltd",
-"1446  Graphin Co Ltd",
-"1447  AIM GmBH",
-"1448  Alesis Studio Electronics",
-"1449  TUT Systems Inc",
-"144a  Adlink Technology",
-"	7296  PCI-7296",
-"	7432  PCI-7432",
-"	7433  PCI-7433",
-"	7434  PCI-7434",
-"	7841  PCI-7841",
-"	8133  PCI-8133",
-"	8164  PCI-8164",
-"	8554  PCI-8554",
-"	9111  PCI-9111",
-"	9113  PCI-9113",
-"	9114  PCI-9114",
-"144b  Loronix Information Systems Inc",
-"144c  Catalina Research Inc",
-"144d  Samsung Electronics Co Ltd",
-"	c00c  P35 laptop",
-"144e  OLITEC",
-"144f  Askey Computer Corp.",
-"1450  Octave Communications Ind.",
-"1451  SP3D Chip Design GmBH",
-"1453  MYCOM Inc",
-"1454  Altiga Networks",
-"1455  Logic Plus Plus Inc",
-"1456  Advanced Hardware Architectures",
-"1457  Nuera Communications Inc",
-"1458  Giga-byte Technology",
-"	0c11  K8NS Pro Mainboard",
-"	e911  GN-WIAG02",
-"1459  DOOIN Electronics",
-"145a  Escalate Networks Inc",
-"145b  PRAIM SRL",
-"145c  Cryptek",
-"145d  Gallant Computer Inc",
-"145e  Aashima Technology B.V.",
-"145f  Baldor Electric Company",
-"	0001  NextMove PCI",
-"1460  DYNARC INC",
-"1461  Avermedia Technologies Inc",
-"	f436  AVerTV Hybrid+FM",
-"1462  Micro-Star International Co., Ltd.",
-"	5501  nVidia NV15DDR [GeForce2 Ti]",
-"	6819  Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G]",
-"	6825  PCI Card wireless 11g [PC54G]",
-"	6834  RaLink RT2500 802.11g [PC54G2]",
-"	7125  K8N motherboard",
-"	8725  NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter",
-"	9000  NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter",
-"	9110  GeFORCE FX5200",
-"	9119  NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter",
-"	9123  NVIDIA NV31 [GeForce FX 5600] FX5600-VTDR128 [MS-8912]",
-"	9591  nVidia Corporation NV36 [GeForce FX 5700LE]",
-"1463  Fast Corporation",
-"1464  Interactive Circuits & Systems Ltd",
-"1465  GN NETTEST Telecom DIV.",
-"1466  Designpro Inc.",
-"1467  DIGICOM SPA",
-"1468  AMBIT Microsystem Corp.",
-"1469  Cleveland Motion Controls",
-"146a  IFR",
-"146b  Parascan Technologies Ltd",
-"146c  Ruby Tech Corp.",
-"	1430  FE-1430TX Fast Ethernet PCI Adapter",
-"146d  Tachyon, INC.",
-"146e  Williams Electronics Games, Inc.",
-"146f  Multi Dimensional Consulting Inc",
-"1470  Bay Networks",
-"1471  Integrated Telecom Express Inc",
-"1472  DAIKIN Industries, Ltd",
-"1473  ZAPEX Technologies Inc",
-"1474  Doug Carson & Associates",
-"1475  PICAZO Communications",
-"1476  MORTARA Instrument Inc",
-"1477  Net Insight",
-"1478  DIATREND Corporation",
-"1479  TORAY Industries Inc",
-"147a  FORMOSA Industrial Computing",
-"147b  ABIT Computer Corp.",
-"147c  AWARE, Inc.",
-"147d  Interworks Computer Products",
-"147e  Matsushita Graphic Communication Systems, Inc.",
-"147f  NIHON UNISYS, Ltd.",
-"1480  SCII Telecom",
-"1481  BIOPAC Systems Inc",
-"1482  ISYTEC - Integrierte Systemtechnik GmBH",
-"1483  LABWAY Corporation",
-"1484  Logic Corporation",
-"1485  ERMA - Electronic GmBH",
-"1486  L3 Communications Telemetry & Instrumentation",
-"1487  MARQUETTE Medical Systems",
-"1488  KONTRON Electronik GmBH",
-"1489  KYE Systems Corporation",
-"148a  OPTO",
-"148b  INNOMEDIALOGIC Inc.",
-"148c  C.P. Technology Co. Ltd",
-"148d  DIGICOM Systems, Inc.",
-"	1003  HCF 56k Data/Fax Modem",
-"148e  OSI Plus Corporation",
-"148f  Plant Equipment, Inc.",
-"1490  Stone Microsystems PTY Ltd.",
-"1491  ZEAL Corporation",
-"1492  Time Logic Corporation",
-"1493  MAKER Communications",
-"1494  WINTOP Technology, Inc.",
-"1495  TOKAI Communications Industry Co. Ltd",
-"1496  JOYTECH Computer Co., Ltd.",
-"1497  SMA Regelsysteme GmBH",
-"	1497  SMA Technologie AG",
-"1498  TEWS Datentechnik GmBH",
-"	0330  TPMC816 2 Channel CAN bus controller.",
-"	0385  TPMC901 Extended CAN bus with 2/4/6 CAN controller",
-"	21cd  TCP461 CompactPCI 8 Channel Serial Interface RS232/RS422",
-"	30c8  TPCI200",
-"1499  EMTEC CO., Ltd",
-"149a  ANDOR Technology Ltd",
-"149b  SEIKO Instruments Inc",
-"149c  OVISLINK Corp.",
-"149d  NEWTEK Inc",
-"	0001  Video Toaster for PC",
-"149e  Mapletree Networks Inc.",
-"149f  LECTRON Co Ltd",
-"14a0  SOFTING GmBH",
-"14a1  Systembase Co Ltd",
-"14a2  Millennium Engineering Inc",
-"14a3  Maverick Networks",
-"14a4  GVC/BCM Advanced Research",
-"14a5  XIONICS Document Technologies Inc",
-"14a6  INOVA Computers GmBH & Co KG",
-"14a7  MYTHOS Systems Inc",
-"14a8  FEATRON Technologies Corporation",
-"14a9  HIVERTEC Inc",
-"14aa  Advanced MOS Technology Inc",
-"14ab  Mentor Graphics Corp.",
-"14ac  Novaweb Technologies Inc",
-"14ad  Time Space Radio AB",
-"14ae  CTI, Inc",
-"14af  Guillemot Corporation",
-"	7102  3D Prophet II MX",
-"14b0  BST Communication Technology Ltd",
-"14b1  Nextcom K.K.",
-"14b2  ENNOVATE Networks Inc",
-"14b3  XPEED Inc",
-"	0000  DSL NIC",
-"14b4  PHILIPS Business Electronics B.V.",
-"14b5  Creamware GmBH",
-"	0200  Scope",
-"	0300  Pulsar",
-"	0400  PulsarSRB",
-"	0600  Pulsar2",
-"	0800  DSP-Board",
-"	0900  DSP-Board",
-"	0a00  DSP-Board",
-"	0b00  DSP-Board",
-"14b6  Quantum Data Corp.",
-"14b7  PROXIM Inc",
-"	0001  Symphony 4110",
-"14b8  Techsoft Technology Co Ltd",
-"14b9  AIRONET Wireless Communications",
-"	0001  PC4800",
-"	0340  PC4800",
-"	0350  PC4800",
-"	4500  PC4500",
-"	4800  Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800",
-"	a504  Cisco Aironet Wireless 802.11b",
-"	a505  Cisco Aironet CB20a 802.11a Wireless LAN Adapter",
-"	a506  Cisco Aironet Mini PCI b/g",
-"14ba  INTERNIX Inc.",
-"14bb  SEMTECH Corporation",
-"14bc  Globespan Semiconductor Inc.",
-"14bd  CARDIO Control N.V.",
-"14be  L3 Communications",
-"14bf  SPIDER Communications Inc.",
-"14c0  COMPAL Electronics Inc",
-"14c1  MYRICOM Inc.",
-"	0008  Myri-10G Dual-Protocol Interconnect",
-"	8043  Myrinet 2000 Scalable Cluster Interconnect",
-"14c2  DTK Computer",
-"14c3  MEDIATEK Corp.",
-"14c4  IWASAKI Information Systems Co Ltd",
-"14c5  Automation Products AB",
-"14c6  Data Race Inc",
-"14c7  Modular Technology Holdings Ltd",
-"14c8  Turbocomm Tech. Inc.",
-"14c9  ODIN Telesystems Inc",
-"14ca  PE Logic Corp.",
-"14cb  Billionton Systems Inc",
-"14cc  NAKAYO Telecommunications Inc",
-"14cd  Universal Scientific Ind.",
-"14ce  Whistle Communications",
-"14cf  TEK Microsystems Inc.",
-"14d0  Ericsson Axe R & D",
-"14d1  Computer Hi-Tech Co Ltd",
-"14d2  Titan Electronics Inc",
-"	8001  VScom 010L 1 port parallel adaptor",
-"	8002  VScom 020L 2 port parallel adaptor",
-"	8010  VScom 100L 1 port serial adaptor",
-"	8011  VScom 110L 1 port serial and 1 port parallel adaptor",
-"	8020  VScom 200L 1 port serial adaptor",
-"	8021  VScom 210L 2 port serial and 1 port parallel adaptor",
-"	8040  VScom 400L 4 port serial adaptor",
-"	8080  VScom 800L 8 port serial adaptor",
-"	a000  VScom 010H 1 port parallel adaptor",
-"	a001  VScom 100H 1 port serial adaptor",
-"	a003  VScom 400H 4 port serial adaptor",
-"	a004  VScom 400HF1 4 port serial adaptor",
-"	a005  VScom 200H 2 port serial adaptor",
-"	e001  VScom 010HV2 1 port parallel adaptor",
-"	e010  VScom 100HV2 1 port serial adaptor",
-"	e020  VScom 200HV2 2 port serial adaptor",
-"14d3  CIRTECH (UK) Ltd",
-"14d4  Panacom Technology Corp",
-"14d5  Nitsuko Corporation",
-"14d6  Accusys Inc",
-"14d7  Hirakawa Hewtech Corp",
-"14d8  HOPF Elektronik GmBH",
-"14d9  Alliance Semiconductor Corporation",
-"	0010  AP1011/SP1011 HyperTransport-PCI Bridge [Sturgeon]",
-"	9000  AS90L10204/10208 HyperTransport to PCI-X Bridge",
-"14da  National Aerospace Laboratories",
-"14db  AFAVLAB Technology Inc",
-"	2120  TK9902",
-"	2182  AFAVLAB Technology Inc. 8-port serial card",
-"14dc  Amplicon Liveline Ltd",
-"	0000  PCI230",
-"	0001  PCI242",
-"	0002  PCI244",
-"	0003  PCI247",
-"	0004  PCI248",
-"	0005  PCI249",
-"	0006  PCI260",
-"	0007  PCI224",
-"	0008  PCI234",
-"	0009  PCI236",
-"	000a  PCI272",
-"	000b  PCI215",
-"14dd  Boulder Design Labs Inc",
-"14de  Applied Integration Corporation",
-"14df  ASIC Communications Corp",
-"14e1  INVERTEX",
-"14e2  INFOLIBRIA",
-"14e3  AMTELCO",
-"14e4  Broadcom Corporation",
-"	0800  Sentry5 Chipcommon I/O Controller",
-"	0804  Sentry5 PCI Bridge",
-"	0805  Sentry5 MIPS32 CPU",
-"	0806  Sentry5 Ethernet Controller",
-"	080b  Sentry5 Crypto Accelerator",
-"	080f  Sentry5 DDR/SDR RAM Controller",
-"	0811  Sentry5 External Interface Core",
-"	0816  BCM3302 Sentry5 MIPS32 CPU",
-"	1600  NetXtreme BCM5752 Gigabit Ethernet PCI Express",
-"	1601  NetXtreme BCM5752M Gigabit Ethernet PCI Express",
-"	1644  NetXtreme BCM5700 Gigabit Ethernet",
-"		1014 0277  Broadcom Vigil B5700 1000Base-T",
-"		1028 00d1  Broadcom BCM5700",
-"		1028 0106  Broadcom BCM5700",
-"		1028 0109  Broadcom BCM5700 1000Base-T",
-"		1028 010a  Broadcom BCM5700 1000BaseTX",
-"		10b7 1000  3C996-T 1000Base-T",
-"		10b7 1001  3C996B-T 1000Base-T",
-"		10b7 1002  3C996C-T 1000Base-T",
-"		10b7 1003  3C997-T 1000Base-T Dual Port",
-"		10b7 1004  3C996-SX 1000Base-SX",
-"		10b7 1005  3C997-SX 1000Base-SX Dual Port",
-"		10b7 1008  3C942 Gigabit LOM (31X31)",
-"		14e4 0002  NetXtreme 1000Base-SX",
-"		14e4 0003  NetXtreme 1000Base-SX",
-"		14e4 0004  NetXtreme 1000Base-T",
-"		14e4 1028  NetXtreme 1000BaseTX",
-"		14e4 1644  BCM5700 1000Base-T",
-"	1645  NetXtreme BCM5701 Gigabit Ethernet",
-"		0e11 007c  NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)",
-"		0e11 007d  NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)",
-"		0e11 0085  NC7780 Gigabit Server Adapter (embedded, WOL)",
-"		0e11 0099  NC7780 Gigabit Server Adapter (embedded, WOL)",
-"		0e11 009a  NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)",
-"		0e11 00c1  NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)",
-"		1028 0121  Broadcom BCM5701 1000Base-T",
-"		103c 128a  1000Base-T (PCI) [A7061A]",
-"		103c 128b  1000Base-SX (PCI) [A7073A]",
-"		103c 12a4  Core Lan 1000Base-T",
-"		103c 12c1  IOX Core Lan 1000Base-T [A7109AX]",
-"		103c 1300  Core LAN/SCSI Combo [A6794A]",
-"		10a9 8010  IO9/IO10 Gigabit Ethernet (Copper)",
-"		10a9 8011  Gigabit Ethernet (Copper)",
-"		10a9 8012  Gigabit Ethernet (Fiber)",
-"		10b7 1004  3C996-SX 1000Base-SX",
-"		10b7 1006  3C996B-T 1000Base-T",
-"		10b7 1007  3C1000-T 1000Base-T",
-"		10b7 1008  3C940-BR01 1000Base-T",
-"		14e4 0001  BCM5701 1000Base-T",
-"		14e4 0005  BCM5701 1000Base-T",
-"		14e4 0006  BCM5701 1000Base-T",
-"		14e4 0007  BCM5701 1000Base-SX",
-"		14e4 0008  BCM5701 1000Base-T",
-"		14e4 8008  BCM5701 1000Base-T",
-"	1646  NetXtreme BCM5702 Gigabit Ethernet",
-"		0e11 00bb  NC7760 1000BaseTX",
-"		1028 0126  Broadcom BCM5702 1000BaseTX",
-"		14e4 8009  BCM5702 1000BaseTX",
-"	1647  NetXtreme BCM5703 Gigabit Ethernet",
-"		0e11 0099  NC7780 1000BaseTX",
-"		0e11 009a  NC7770 1000BaseTX",
-"		10a9 8010  SGI IO9 Gigabit Ethernet (Copper)",
-"		14e4 0009  BCM5703 1000BaseTX",
-"		14e4 000a  BCM5703 1000BaseSX",
-"		14e4 000b  BCM5703 1000BaseTX",
-"		14e4 8009  BCM5703 1000BaseTX",
-"		14e4 800a  BCM5703 1000BaseTX",
-"	1648  NetXtreme BCM5704 Gigabit Ethernet",
-"		0e11 00cf  NC7772 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
-"		0e11 00d0  NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
-"		0e11 00d1  NC7783 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
-"		10b7 2000  3C998-T Dual Port 10/100/1000 PCI-X",
-"		10b7 3000  3C999-T Quad Port 10/100/1000 PCI-X",
-"		1166 1648  NetXtreme CIOB-E 1000Base-T",
-"		1734 100b  Primergy RX300",
-"	164a  NetXtreme II BCM5706 Gigabit Ethernet",
-"		103c 3101  NC370T MultifuNCtion Gigabit Server Adapter",
-"	164c  NetXtreme II BCM5708 Gigabit Ethernet",
-"	164d  NetXtreme BCM5702FE Gigabit Ethernet",
-"	1653  NetXtreme BCM5705 Gigabit Ethernet",
-"		0e11 00e3  NC7761 Gigabit Server Adapter",
-"	1654  NetXtreme BCM5705_2 Gigabit Ethernet",
-"		0e11 00e3  NC7761 Gigabit Server Adapter",
-"		103c 3100  NC1020 HP ProLiant Gigabit Server Adapter 32 PCI",
-"		103c 3226  NC150T 4-port Gigabit Combo Switch & Adapter",
-"	1659  NetXtreme BCM5721 Gigabit Ethernet PCI Express",
-"		1014 02c6  eServer xSeries server mainboard",
-"		103c 7031  NC320T PCIe Gigabit Server Adapter",
-"		103c 7032  NC320i PCIe Gigabit Server Adapter",
-"		1734 1061  Primergy RX300 S2",
-"	165d  NetXtreme BCM5705M Gigabit Ethernet",
-"		1028 865d  Latitude D400",
-"	165e  NetXtreme BCM5705M_2 Gigabit Ethernet",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		103c 099c  NX6110/NC6120",
-"	1668  NetXtreme BCM5714 Gigabit Ethernet",
-"		103c 7039  NC324i PCIe Dual Port Gigabit Server Adapter",
-"	1669  NetXtreme 5714S Gigabit Ethernet",
-"	166a  NetXtreme BCM5780 Gigabit Ethernet",
-"	166b  NetXtreme BCM5780S Gigabit Ethernet",
-"	166e  570x 10/100 Integrated Controller",
-"	1672  NetXtreme BCM5754M Gigabit Ethernet PCI Express",
-"	1673  NetXtreme BCM5755M Gigabit Ethernet PCI Express",
-"	1677  NetXtreme BCM5751 Gigabit Ethernet PCI Express",
-"		1028 0179  Optiplex GX280",
-"		1028 0182  Latitude D610",
-"		1028 0187  Precision M70",
-"		1028 01ad  Optiplex GX620",
-"		103c 3006  DC7100 SFF(DX878AV)",
-"		1734 105d  Scenic W620",
-"	1678  NetXtreme BCM5715 Gigabit Ethernet",
-"	1679  NetXtreme 5715S Gigabit Ethernet",
-"		103c 703c  NC326i PCIe Dual Port Gigabit Server Adapter",
-"	167a  NetXtreme BCM5754 Gigabit Ethernet PCI Express",
-"	167b  NetXtreme BCM5755 Gigabit Ethernet PCI Express",
-"	167d  NetXtreme BCM5751M Gigabit Ethernet PCI Express",
-"	167e  NetXtreme BCM5751F Fast Ethernet PCI Express",
-"	1693  NetLink BCM5787M Gigabit Ethernet PCI Express",
-"	1696  NetXtreme BCM5782 Gigabit Ethernet",
-"		103c 12bc  HP d530 CMT (DG746A)",
-"		14e4 000d  NetXtreme BCM5782 1000Base-T",
-"	169b  NetLink BCM5787 Gigabit Ethernet PCI Express",
-"	169c  NetXtreme BCM5788 Gigabit Ethernet",
-"		103c 308b  MX6125",
-"	169d  NetLink BCM5789 Gigabit Ethernet PCI Express",
-"	16a6  NetXtreme BCM5702X Gigabit Ethernet",
-"		0e11 00bb  NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T)",
-"		1028 0126  BCM5702 1000Base-T",
-"		14e4 000c  BCM5702 1000Base-T",
-"		14e4 8009  BCM5702 1000Base-T",
-"	16a7  NetXtreme BCM5703X Gigabit Ethernet",
-"		0e11 00ca  NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
-"		0e11 00cb  NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
-"		14e4 0009  NetXtreme BCM5703 1000Base-T",
-"		14e4 000a  NetXtreme BCM5703 1000Base-SX",
-"		14e4 000b  NetXtreme BCM5703 1000Base-T",
-"		14e4 800a  NetXtreme BCM5703 1000Base-T",
-"	16a8  NetXtreme BCM5704S Gigabit Ethernet",
-"		10b7 2001  3C998-SX Dual Port 1000-SX PCI-X",
-"	16aa  NetXtreme II BCM5706S Gigabit Ethernet",
-"		103c 3102  NC370F MultifuNCtion Gigabit Server Adapter",
-"	16ac  NetXtreme II BCM5708S Gigabit Ethernet",
-"	16c6  NetXtreme BCM5702A3 Gigabit Ethernet",
-"		10b7 1100  3C1000B-T 10/100/1000 PCI",
-"		14e4 000c  BCM5702 1000Base-T",
-"		14e4 8009  BCM5702 1000Base-T",
-"	16c7  NetXtreme BCM5703 Gigabit Ethernet",
-"		0e11 00ca  NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
-"		0e11 00cb  NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
-"		103c 12c3  Combo FC/GigE-SX [A9782A]",
-"		103c 12ca  Combo FC/GigE-T [A9784A]",
-"		14e4 0009  NetXtreme BCM5703 1000Base-T",
-"		14e4 000a  NetXtreme BCM5703 1000Base-SX",
-"	16dd  NetLink BCM5781 Gigabit Ethernet PCI Express",
-"	16f7  NetXtreme BCM5753 Gigabit Ethernet PCI Express",
-"	16fd  NetXtreme BCM5753M Gigabit Ethernet PCI Express",
-"	16fe  NetXtreme BCM5753F Fast Ethernet PCI Express",
-"	170c  BCM4401-B0 100Base-TX",
-"		1028 0188  Inspiron 6000 laptop",
-"		1028 0196  Inspiron 5160",
-"		103c 099c  NX6110/NC6120",
-"	170d  NetXtreme BCM5901 100Base-TX",
-"		1014 0545  ThinkPad R40e (2684-HVG) builtin ethernet controller",
-"	170e  NetXtreme BCM5901 100Base-TX",
-"	3352  BCM3352",
-"	3360  BCM3360",
-"	4210  BCM4210 iLine10 HomePNA 2.0",
-"	4211  BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem",
-"	4212  BCM4212 v.90 56k modem",
-"	4301  BCM4303 802.11b Wireless LAN Controller",
-"		1028 0407  TrueMobile 1180 Onboard WLAN",
-"		1043 0120  WL-103b Wireless LAN PC Card",
-"	4305  BCM4307 V.90 56k Modem",
-"	4306  BCM4307 Ethernet Controller",
-"	4307  BCM4307 802.11b Wireless LAN Controller",
-"	4310  BCM4310 Chipcommon I/OController",
-"	4312  BCM4310 UART",
-"	4313  BCM4310 Ethernet Controller",
-"	4315  BCM4310 USB Controller",
-"	4318  BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller",
-"		103c 1356  MX6125",
-"		1043 120f  A6U notebook embedded card",
-"		1468 0311  Aspire 3022WLMi, 5024WLMi",
-"		1468 0312  TravelMate 2410",
-"		14e4 0449  Gateway 7510GX",
-"		14e4 4318  WPC54G version 3 [Wireless-G Notebook Adapter] 802.11g Wireless Lan Controller",
-"		16ec 0119  U.S.Robotics Wireless MAXg PC Card",
-"		1737 0048  WPC54G-EU version 3 [Wireless-G Notebook Adapter]",
-"	4319  Dell Wireless 1470 DualBand WLAN",
-"	4320  BCM4306 802.11b/g Wireless LAN Controller",
-"		1028 0001  TrueMobile 1300 WLAN Mini-PCI Card",
-"		1028 0003  Wireless 1350 WLAN Mini-PCI Card",
-"		103c 12f4  NX9500 Built-in Wireless",
-"		103c 12fa  Presario R3000 802.11b/g",
-"		1043 100f  WL-100G",
-"		1057 7025  WN825G",
-"		106b 004e  AirPort Extreme",
-"		1154 0330  Buffalo WLI2-PCI-G54S High Speed Mode Wireless Desktop Adapter",
-"		144f 7050  eMachines M6805 802.11g Built-in Wireless",
-"		14e4 4320  Linksys WMP54G PCI",
-"		1737 4320  WPC54G",
-"		1799 7001  Belkin F5D7001 High-Speed Mode Wireless G Network Card",
-"		1799 7010  Belkin F5D7010 54g Wireless Network card",
-"		185f 1220  TravelMate 290E WLAN Mini-PCI Card",
-"	4321  BCM4306 802.11a Wireless LAN Controller",
-"	4322  BCM4306 UART",
-"	4324  BCM4309 802.11a/b/g",
-"		1028 0001  Truemobile 1400",
-"		1028 0003  Truemobile 1450 MiniPCI",
-"	4325  BCM43xG 802.11b/g",
-"		1414 0003  Wireless Notebook Adapter MN-720",
-"		1414 0004  Wireless PCI Adapter MN-730",
-"	4326  BCM4307 Chipcommon I/O Controller?",
-"	4401  BCM4401 100Base-T",
-"		1043 80a8  A7V8X motherboard",
-"	4402  BCM4402 Integrated 10/100BaseT",
-"	4403  BCM4402 V.90 56k Modem",
-"	4410  BCM4413 iLine32 HomePNA 2.0",
-"	4411  BCM4413 V.90 56k modem",
-"	4412  BCM4412 10/100BaseT",
-"	4430  BCM44xx CardBus iLine32 HomePNA 2.0",
-"	4432  BCM4432 CardBus 10/100BaseT",
-"	4610  BCM4610 Sentry5 PCI to SB Bridge",
-"	4611  BCM4610 Sentry5 iLine32 HomePNA 1.0",
-"	4612  BCM4610 Sentry5 V.90 56k Modem",
-"	4613  BCM4610 Sentry5 Ethernet Controller",
-"	4614  BCM4610 Sentry5 External Interface",
-"	4615  BCM4610 Sentry5 USB Controller",
-"	4704  BCM4704 PCI to SB Bridge",
-"	4705  BCM4704 Sentry5 802.11b Wireless LAN Controller",
-"	4706  BCM4704 Sentry5 Ethernet Controller",
-"	4707  BCM4704 Sentry5 USB Controller",
-"	4708  BCM4704 Crypto Accelerator",
-"	4710  BCM4710 Sentry5 PCI to SB Bridge",
-"	4711  BCM47xx Sentry5 iLine32 HomePNA 2.0",
-"	4712  BCM47xx V.92 56k modem",
-"	4713  Sentry5 Ethernet Controller",
-"	4714  BCM47xx Sentry5 External Interface",
-"	4715  Sentry5 USB Controller",
-"	4716  BCM47xx Sentry5 USB Host Controller",
-"	4717  BCM47xx Sentry5 USB Device Controller",
-"	4718  Sentry5 Crypto Accelerator",
-"	4719  BCM47xx/53xx RoboSwitch Core",
-"	4720  BCM4712 MIPS CPU",
-"	5365  BCM5365P Sentry5 Host Bridge",
-"	5600  BCM5600 StrataSwitch 24+2 Ethernet Switch Controller",
-"	5605  BCM5605 StrataSwitch 24+2 Ethernet Switch Controller",
-"	5615  BCM5615 StrataSwitch 24+2 Ethernet Switch Controller",
-"	5625  BCM5625 StrataSwitch 24+2 Ethernet Switch Controller",
-"	5645  BCM5645 StrataSwitch 24+2 Ethernet Switch Controller",
-"	5670  BCM5670 8-Port 10GE Ethernet Switch Fabric",
-"	5680  BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller",
-"	5690  BCM5690 12-port Multi-Layer Gigabit Ethernet Switch",
-"	5691  BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller",
-"	5692  BCM5692 12-port Multi-Layer Gigabit Ethernet Switch",
-"	5820  BCM5820 Crypto Accelerator",
-"	5821  BCM5821 Crypto Accelerator",
-"	5822  BCM5822 Crypto Accelerator",
-"	5823  BCM5823 Crypto Accelerator",
-"	5824  BCM5824 Crypto Accelerator",
-"	5840  BCM5840 Crypto Accelerator",
-"	5841  BCM5841 Crypto Accelerator",
-"	5850  BCM5850 Crypto Accelerator",
-"14e5  Pixelfusion Ltd",
-"14e6  SHINING Technology Inc",
-"14e7  3CX",
-"14e8  RAYCER Inc",
-"14e9  GARNETS System CO Ltd",
-"14ea  Planex Communications, Inc",
-"	ab06  FNW-3603-TX CardBus Fast Ethernet",
-"	ab07  RTL81xx RealTek Ethernet",
-"	ab08  FNW-3602-TX CardBus Fast Ethernet",
-"14eb  SEIKO EPSON Corp",
-"14ec  ACQIRIS",
-"14ed  DATAKINETICS Ltd",
-"14ee  MASPRO KENKOH Corp",
-"14ef  CARRY Computer ENG. CO Ltd",
-"14f0  CANON RESEACH CENTRE FRANCE",
-"14f1  Conexant",
-"	1002  HCF 56k Modem",
-"	1003  HCF 56k Modem",
-"	1004  HCF 56k Modem",
-"	1005  HCF 56k Modem",
-"	1006  HCF 56k Modem",
-"	1022  HCF 56k Modem",
-"	1023  HCF 56k Modem",
-"	1024  HCF 56k Modem",
-"	1025  HCF 56k Modem",
-"	1026  HCF 56k Modem",
-"	1032  HCF 56k Modem",
-"	1033  HCF 56k Data/Fax Modem",
-"		1033 8077  NEC",
-"		122d 4027  Dell Zeus - MDP3880-W(B) Data Fax Modem",
-"		122d 4030  Dell Mercury - MDP3880-U(B) Data Fax Modem",
-"		122d 4034  Dell Thor - MDP3880-W(U) Data Fax Modem",
-"		13e0 020d  Dell Copper",
-"		13e0 020e  Dell Silver",
-"		13e0 0261  IBM",
-"		13e0 0290  Compaq Goldwing",
-"		13e0 02a0  IBM",
-"		13e0 02b0  IBM",
-"		13e0 02c0  Compaq Scooter",
-"		13e0 02d0  IBM",
-"		144f 1500  IBM P85-DF (1)",
-"		144f 1501  IBM P85-DF (2)",
-"		144f 150a  IBM P85-DF (3)",
-"		144f 150b  IBM P85-DF Low Profile (1)",
-"		144f 1510  IBM P85-DF Low Profile (2)",
-"	1034  HCF 56k Data/Fax/Voice Modem",
-"	1035  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"		10cf 1098  Fujitsu P85-DFSV",
-"	1036  HCF 56k Data/Fax/Voice/Spkp Modem",
-"		104d 8067  HCF 56k Modem",
-"		122d 4029  MDP3880SP-W",
-"		122d 4031  MDP3880SP-U",
-"		13e0 0209  Dell Titanium",
-"		13e0 020a  Dell Graphite",
-"		13e0 0260  Gateway Red Owl",
-"		13e0 0270  Gateway White Horse",
-"	1052  HCF 56k Data/Fax Modem (Worldwide)",
-"	1053  HCF 56k Data/Fax Modem (Worldwide)",
-"	1054  HCF 56k Data/Fax/Voice Modem (Worldwide)",
-"	1055  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide)",
-"	1056  HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)",
-"	1057  HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)",
-"	1059  HCF 56k Data/Fax/Voice Modem (Worldwide)",
-"	1063  HCF 56k Data/Fax Modem",
-"	1064  HCF 56k Data/Fax/Voice Modem",
-"	1065  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"	1066  HCF 56k Data/Fax/Voice/Spkp Modem",
-"		122d 4033  Dell Athena - MDP3900V-U",
-"	1085  HCF V90 56k Data/Fax/Voice/Spkp PCI Modem",
-"	1433  HCF 56k Data/Fax Modem",
-"	1434  HCF 56k Data/Fax/Voice Modem",
-"	1435  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"	1436  HCF 56k Data/Fax Modem",
-"	1453  HCF 56k Data/Fax Modem",
-"		13e0 0240  IBM",
-"		13e0 0250  IBM",
-"		144f 1502  IBM P95-DF (1)",
-"		144f 1503  IBM P95-DF (2)",
-"	1454  HCF 56k Data/Fax/Voice Modem",
-"	1455  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"	1456  HCF 56k Data/Fax/Voice/Spkp Modem",
-"		122d 4035  Dell Europa - MDP3900V-W",
-"		122d 4302  Dell MP3930V-W(C) MiniPCI",
-"	1610  ADSL AccessRunner PCI Arbitration Device",
-"	1611  AccessRunner PCI ADSL Interface Device",
-"	1620  AccessRunner V2 PCI ADSL Arbitration Device",
-"	1621  AccessRunner V2 PCI ADSL Interface Device",
-"	1622  AccessRunner V2 PCI ADSL Yukon WAN Adapter",
-"	1803  HCF 56k Modem",
-"		0e11 0023  623-LAN Grizzly",
-"		0e11 0043  623-LAN Yogi",
-"	1811  Conextant MiniPCI Network Adapter",
-"	1815  HCF 56k Modem",
-"		0e11 0022  Grizzly",
-"		0e11 0042  Yogi",
-"	2003  HSF 56k Data/Fax Modem",
-"	2004  HSF 56k Data/Fax/Voice Modem",
-"	2005  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"	2006  HSF 56k Data/Fax/Voice/Spkp Modem",
-"	2013  HSF 56k Data/Fax Modem",
-"		0e11 b195  Bear",
-"		0e11 b196  Seminole 1",
-"		0e11 b1be  Seminole 2",
-"		1025 8013  Acer",
-"		1033 809d  NEC",
-"		1033 80bc  NEC",
-"		155d 6793  HP",
-"		155d 8850  E Machines",
-"	2014  HSF 56k Data/Fax/Voice Modem",
-"	2015  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
-"	2016  HSF 56k Data/Fax/Voice/Spkp Modem",
-"	2043  HSF 56k Data/Fax Modem (WorldW SmartDAA)",
-"	2044  HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA)",
-"	2045  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA)",
-"		14f1 2045  Generic SoftK56",
-"	2046  HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA)",
-"	2063  HSF 56k Data/Fax Modem (SmartDAA)",
-"	2064  HSF 56k Data/Fax/Voice Modem (SmartDAA)",
-"	2065  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA)",
-"	2066  HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA)",
-"	2093  HSF 56k Modem",
-"		155d 2f07  Legend",
-"	2143  HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA)",
-"	2144  HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA)",
-"	2145  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA)",
-"	2146  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA)",
-"	2163  HSF 56k Data/Fax/Cell Modem (Mob SmartDAA)",
-"	2164  HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA)",
-"	2165  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA)",
-"	2166  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA)",
-"	2343  HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA)",
-"	2344  HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA)",
-"	2345  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA)",
-"	2346  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA)",
-"	2363  HSF 56k Data/Fax CardBus Modem (Mob SmartDAA)",
-"	2364  HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA)",
-"	2365  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA)",
-"	2366  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA)",
-"	2443  HSF 56k Data/Fax Modem (Mob WorldW SmartDAA)",
-"		104d 8075  Modem",
-"		104d 8083  Modem",
-"		104d 8097  Modem",
-"	2444  HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA)",
-"	2445  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA)",
-"	2446  HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA)",
-"	2463  HSF 56k Data/Fax Modem (Mob SmartDAA)",
-"	2464  HSF 56k Data/Fax/Voice Modem (Mob SmartDAA)",
-"	2465  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA)",
-"	2466  HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA)",
-"	2bfa  HDAudio Soft Data Fax Modem with SmartCP",
-"	2f00  HSF 56k HSFi Modem",
-"		13e0 8d84  IBM HSFi V.90",
-"		13e0 8d85  Compaq Stinger",
-"		14f1 2004  Dynalink 56PMi",
-"	2f02  HSF 56k HSFi Data/Fax",
-"	2f11  HSF 56k HSFi Modem",
-"	2f20  HSF 56k Data/Fax Modem",
-"	8234  RS8234 ATM SAR Controller [ServiceSAR Plus]",
-"	8800  CX23880/1/2/3 PCI Video and Audio Decoder",
-"		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models",
-"		0070 3401  Hauppauge WinTV 34xxx models",
-"		0070 9001  Nova-T DVB-T",
-"		0070 9200  Nova-SE2 DVB-S",
-"		0070 9202  Nova-S-Plus DVB-S",
-"		0070 9402  WinTV-HVR1100 DVB-T/Hybrid",
-"		0070 9802  WinTV-HVR1100 DVB-T/Hybrid (Low Profile)",
-"		1002 00f8  ATI TV Wonder Pro",
-"		1002 a101  HDTV Wonder",
-"		1043 4823  ASUS PVR-416",
-"		107d 6613  Leadtek Winfast 2000XP Expert",
-"		107d 6620  Leadtek Winfast DV2000",
-"		107d 663c  Leadtek PVR 2000",
-"		107d 665f  WinFast DTV1000-T",
-"		10fc d003  IODATA GV-VCP3/PCI",
-"		10fc d035  IODATA GV/BCTV7E",
-"		1421 0334  Instant TV DVB-T PCI",
-"		1461 000a  AVerTV 303 (M126)",
-"		1461 000b  AverTV Studio 303 (M126)",
-"		1461 8011  UltraTV Media Center PCI 550",
-"		1462 8606  MSI TV-@nywhere Master",
-"		14c7 0107  GDI Black Gold",
-"		14f1 0187  Conexant DVB-T reference design",
-"		14f1 0342  Digital-Logic MICROSPACE Entertainment Center (MEC)",
-"		153b 1166  Cinergy 1400 DVB-T",
-"		1540 2580  Provideo PV259",
-"		1554 4811  PixelView",
-"		1554 4813  Club 3D  ZAP1000 MCE Edition",
-"		17de 08a1  KWorld/VStream XPert DVB-T with cx22702",
-"		17de 08a6  KWorld/VStream XPert DVB-T",
-"		17de 08b2  KWorld DVB-S 100",
-"		17de a8a6  digitalnow DNTV Live! DVB-T",
-"		1822 0025  digitalnow DNTV Live! DVB-T Pro",
-"		18ac d500  FusionHDTV 5 Gold",
-"		18ac d810  FusionHDTV 3 Gold-Q",
-"		18ac d820  FusionHDTV 3 Gold-T",
-"		18ac db00  FusionHDTV DVB-T1",
-"		18ac db11  FusionHDTV DVB-T Plus",
-"		18ac db50  FusionHDTV DVB-T Dual Digital",
-"		7063 3000  pcHDTV HD3000 HDTV",
-"	8801  CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]",
-"		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models",
-"	8802  CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port]",
-"		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models",
-"		0070 9002  Nova-T DVB-T Model 909",
-"		1043 4823  ASUS PVR-416",
-"		107d 663c  Leadtek PVR 2000",
-"		14f1 0187  Conexant DVB-T reference design",
-"		17de 08a1  XPert DVB-T PCI BDA DVBT 23880 Transport Stream Capture",
-"		17de 08a6  KWorld/VStream XPert DVB-T",
-"		18ac d500  DViCO FusionHDTV5 Gold",
-"		18ac d810  DViCO FusionHDTV3 Gold-Q",
-"		18ac d820  DViCO FusionHDTV3 Gold-T",
-"		18ac db00  DVICO FusionHDTV DVB-T1",
-"		18ac db10  DVICO FusionHDTV DVB-T Plus",
-"		7063 3000  pcHDTV HD3000 HDTV",
-"	8804  CX23880/1/2/3 PCI Video and Audio Decoder [IR Port]",
-"		0070 9002  Nova-T DVB-T Model 909",
-"	8811  CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]",
-"		0070 3401  Hauppauge WinTV 34xxx models",
-"		1462 8606  MSI TV-@nywhere Master",
-"		18ac d500  DViCO FusionHDTV5 Gold",
-"		18ac d810  DViCO FusionHDTV3 Gold-Q",
-"		18ac d820  DViCO FusionHDTV3 Gold-T",
-"		18ac db00  DVICO FusionHDTV DVB-T1",
-"14f2  MOBILITY Electronics",
-"	0120  EV1000 bridge",
-"	0121  EV1000 Parallel port",
-"	0122  EV1000 Serial port",
-"	0123  EV1000 Keyboard controller",
-"	0124  EV1000 Mouse controller",
-"14f3  BroadLogic",
-"	2030  2030 DVB-S Satellite Reciever",
-"	2050  2050 DVB-T Terrestrial (Cable) Reciever",
-"	2060  2060 ATSC Terrestrial (Cable) Reciever",
-"14f4  TOKYO Electronic Industry CO Ltd",
-"14f5  SOPAC Ltd",
-"14f6  COYOTE Technologies LLC",
-"14f7  WOLF Technology Inc",
-"14f8  AUDIOCODES Inc",
-"	2077  TP-240 dual span E1 VoIP PCI card",
-"14f9  AG COMMUNICATIONS",
-"14fa  WANDEL & GOLTERMANN",
-"14fb  TRANSAS MARINE (UK) Ltd",
-"14fc  Quadrics Ltd",
-"	0000  QsNet Elan3 Network Adapter",
-"	0001  QsNetII Elan4 Network Adapter",
-"	0002  QsNetIII Elan5 Network Adapter",
-"14fd  JAPAN Computer Industry Inc",
-"14fe  ARCHTEK TELECOM Corp",
-"14ff  TWINHEAD INTERNATIONAL Corp",
-"1500  DELTA Electronics, Inc",
-"	1360  RTL81xx RealTek Ethernet",
-"1501  BANKSOFT CANADA Ltd",
-"1502  MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd",
-"1503  KAWASAKI LSI USA Inc",
-"1504  KAISER Electronics",
-"1505  ITA INGENIEURBURO FUR TESTAUFGABEN GmbH",
-"1506  CHAMELEON Systems Inc",
-"1507  Motorola ?? / HTEC",
-"	0001  MPC105 [Eagle]",
-"	0002  MPC106 [Grackle]",
-"	0003  MPC8240 [Kahlua]",
-"	0100  MC145575 [HFC-PCI]",
-"	0431  KTI829c 100VG",
-"	4801  Raven",
-"	4802  Falcon",
-"	4803  Hawk",
-"	4806  CPX8216",
-"1508  HONDA CONNECTORS/MHOTRONICS Inc",
-"1509  FIRST INTERNATIONAL Computer Inc",
-"150a  FORVUS RESEARCH Inc",
-"150b  YAMASHITA Systems Corp",
-"150c  KYOPAL CO Ltd",
-"150d  WARPSPPED Inc",
-"150e  C-PORT Corp",
-"150f  INTEC GmbH",
-"1510  BEHAVIOR TECH Computer Corp",
-"1511  CENTILLIUM Technology Corp",
-"1512  ROSUN Technologies Inc",
-"1513  Raychem",
-"1514  TFL LAN Inc",
-"1515  Advent design",
-"1516  MYSON Technology Inc",
-"	0800  MTD-8xx 100/10M Ethernet PCI Adapter",
-"	0803  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter",
-"		1320 10bd  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter",
-"	0891  MTD-8xx 100/10M Ethernet PCI Adapter",
-"1517  ECHOTEK Corp",
-"1518  PEP MODULAR Computers GmbH",
-"1519  TELEFON AKTIEBOLAGET LM Ericsson",
-"151a  Globetek",
-"	1002  PCI-1002",
-"	1004  PCI-1004",
-"	1008  PCI-1008",
-"151b  COMBOX Ltd",
-"151c  DIGITAL AUDIO LABS Inc",
-"	0003  Prodif T 2496",
-"	4000  Prodif 88",
-"151d  Fujitsu Computer Products Of America",
-"151e  MATRIX Corp",
-"151f  TOPIC SEMICONDUCTOR Corp",
-"	0000  TP560 Data/Fax/Voice 56k modem",
-"1520  CHAPLET System Inc",
-"1521  BELL Corp",
-"1522  MainPine Ltd",
-"	0100  PCI <-> IOBus Bridge",
-"		1522 0200  RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem",
-"		1522 0300  RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem",
-"		1522 0400  RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem",
-"		1522 0500  RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem",
-"		1522 0600  RockForce+ 2 Port V.90 Data/Fax/Voice Modem",
-"		1522 0700  RockForce+ 4 Port V.90 Data/Fax/Voice Modem",
-"		1522 0800  RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem",
-"		1522 0c00  RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem",
-"		1522 0d00  RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem",
-"		1522 1d00  RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem",
-"		1522 2000  RockForceD1 1 Port V.90 Data Modem",
-"		1522 2100  RockForceF1 1 Port V.34 Super-G3 Fax Modem",
-"		1522 2200  RockForceD2 2 Port V.90 Data Modem",
-"		1522 2300  RockForceF2 2 Port V.34 Super-G3 Fax Modem",
-"		1522 2400  RockForceD4 4 Port V.90 Data Modem",
-"		1522 2500  RockForceF4 4 Port V.34 Super-G3 Fax Modem",
-"		1522 2600  RockForceD8 8 Port V.90 Data Modem",
-"		1522 2700  RockForceF8 8 Port V.34 Super-G3 Fax Modem",
-"1523  MUSIC Semiconductors",
-"1524  ENE Technology Inc",
-"	0510  CB710 Memory Card Reader Controller",
-"		103c 006a  NX9500",
-"	0520  FLASH memory: ENE Technology Inc:",
-"	0530  ENE PCI Memory Stick Card Reader Controller",
-"	0550  ENE PCI Secure Digital Card Reader Controller",
-"	0610  PCI Smart Card Reader Controller",
-"	1211  CB1211 Cardbus Controller",
-"	1225  CB1225 Cardbus Controller",
-"	1410  CB1410 Cardbus Controller",
-"		1025 003c  CL50 motherboard",
-"		1025 005a  TravelMate 290",
-"	1411  CB-710/2/4 Cardbus Controller",
-"		103c 006a  NX9500",
-"	1412  CB-712/4 Cardbus Controller",
-"	1420  CB1420 Cardbus Controller",
-"	1421  CB-720/2/4 Cardbus Controller",
-"	1422  CB-722/4 Cardbus Controller",
-"1525  IMPACT Technologies",
-"1526  ISS, Inc",
-"1527  SOLECTRON",
-"1528  ACKSYS",
-"1529  AMERICAN MICROSystems Inc",
-"152a  QUICKTURN DESIGN Systems",
-"152b  FLYTECH Technology CO Ltd",
-"152c  MACRAIGOR Systems LLC",
-"152d  QUANTA Computer Inc",
-"152e  MELEC Inc",
-"152f  PHILIPS - CRYPTO",
-"1530  ACQIS Technology Inc",
-"1531  CHRYON Corp",
-"1532  ECHELON Corp",
-"	0020  LonWorks PCLTA-20 PCI LonTalk Adapter",
-"1533  BALTIMORE",
-"1534  ROAD Corp",
-"1535  EVERGREEN Technologies Inc",
-"1537  DATALEX COMMUNCATIONS",
-"1538  ARALION Inc",
-"	0303  ARS106S Ultra ATA 133/100/66 Host Controller",
-"1539  ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A.",
-"153a  ONO SOKKI",
-"153b  TERRATEC Electronic GmbH",
-"	1144  Aureon 5.1",
-"	1147  Aureon 5.1 Sky",
-"	1158  Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV]",
-"153c  ANTAL Electronic",
-"153d  FILANET Corp",
-"153e  TECHWELL Inc",
-"153f  MIPS Technologies, Inc.",
-"	0001  SOC-it 101 System Controller",
-"1540  PROVIDEO MULTIMEDIA Co Ltd",
-"1541  MACHONE Communications",
-"1542  Concurrent Computer Corporation",
-"1543  SILICON Laboratories",
-"	3052  Intel 537 [Winmodem]",
-"	4c22  Si3036 MC'97 DAA",
-"1544  DCM DATA Systems",
-"1545  VISIONTEK",
-"1546  IOI Technology Corp",
-"1547  MITUTOYO Corp",
-"1548  JET PROPULSION Laboratory",
-"1549  INTERCONNECT Systems Solutions",
-"154a  MAX Technologies Inc",
-"154b  COMPUTEX Co Ltd",
-"154c  VISUAL Technology Inc",
-"154d  PAN INTERNATIONAL Industrial Corp",
-"154e  SERVOTEST Ltd",
-"154f  STRATABEAM Technology",
-"1550  OPEN NETWORK Co Ltd",
-"1551  SMART Electronic DEVELOPMENT GmBH",
-"1552  RACAL AIRTECH Ltd",
-"1553  CHICONY Electronics Co Ltd",
-"1554  PROLINK Microsystems Corp",
-"1555  GESYTEC GmBH",
-"1556  PLD APPLICATIONS",
-"1557  MEDIASTAR Co Ltd",
-"1558  CLEVO/KAPOK Computer",
-"1559  SI LOGIC Ltd",
-"155a  INNOMEDIA Inc",
-"155b  PROTAC INTERNATIONAL Corp",
-"155c  Cemax-Icon Inc",
-"155d  Mac System Co Ltd",
-"155e  LP Elektronik GmbH",
-"155f  Perle Systems Ltd",
-"1560  Terayon Communications Systems",
-"1561  Viewgraphics Inc",
-"1562  Symbol Technologies",
-"1563  A-Trend Technology Co Ltd",
-"1564  Yamakatsu Electronics Industry Co Ltd",
-"1565  Biostar Microtech Int'l Corp",
-"1566  Ardent Technologies Inc",
-"1567  Jungsoft",
-"1568  DDK Electronics Inc",
-"1569  Palit Microsystems Inc.",
-"156a  Avtec Systems",
-"156b  2wire Inc",
-"156c  Vidac Electronics GmbH",
-"156d  Alpha-Top Corp",
-"156e  Alfa Inc",
-"156f  M-Systems Flash Disk Pioneers Ltd",
-"1570  Lecroy Corp",
-"1571  Contemporary Controls",
-"	a001  CCSI PCI20-485 ARCnet",
-"	a002  CCSI PCI20-485D ARCnet",
-"	a003  CCSI PCI20-485X ARCnet",
-"	a004  CCSI PCI20-CXB ARCnet",
-"	a005  CCSI PCI20-CXS ARCnet",
-"	a006  CCSI PCI20-FOG-SMA ARCnet",
-"	a007  CCSI PCI20-FOG-ST ARCnet",
-"	a008  CCSI PCI20-TB5 ARCnet",
-"	a009  CCSI PCI20-5-485 5Mbit ARCnet",
-"	a00a  CCSI PCI20-5-485D 5Mbit ARCnet",
-"	a00b  CCSI PCI20-5-485X 5Mbit ARCnet",
-"	a00c  CCSI PCI20-5-FOG-ST 5Mbit ARCnet",
-"	a00d  CCSI PCI20-5-FOG-SMA 5Mbit ARCnet",
-"	a201  CCSI PCI22-485 10Mbit ARCnet",
-"	a202  CCSI PCI22-485D 10Mbit ARCnet",
-"	a203  CCSI PCI22-485X 10Mbit ARCnet",
-"	a204  CCSI PCI22-CHB 10Mbit ARCnet",
-"	a205  CCSI PCI22-FOG_ST 10Mbit ARCnet",
-"	a206  CCSI PCI22-THB 10Mbit ARCnet",
-"1572  Otis Elevator Company",
-"1573  Lattice - Vantis",
-"1574  Fairchild Semiconductor",
-"1575  Voltaire Advanced Data Security Ltd",
-"1576  Viewcast COM",
-"1578  HITT",
-"	5615  VPMK3 [Video Processor Mk III]",
-"1579  Dual Technology Corp",
-"157a  Japan Elecronics Ind Inc",
-"157b  Star Multimedia Corp",
-"157c  Eurosoft (UK)",
-"	8001  Fix2000 PCI Y2K Compliance Card",
-"157d  Gemflex Networks",
-"157e  Transition Networks",
-"157f  PX Instruments Technology Ltd",
-"1580  Primex Aerospace Co",
-"1581  SEH Computertechnik GmbH",
-"1582  Cytec Corp",
-"1583  Inet Technologies Inc",
-"1584  Uniwill Computer Corp",
-"1585  Logitron",
-"1586  Lancast Inc",
-"1587  Konica Corp",
-"1588  Solidum Systems Corp",
-"1589  Atlantek Microsystems Pty Ltd",
-"158a  Digalog Systems Inc",
-"158b  Allied Data Technologies",
-"158c  Hitachi Semiconductor & Devices Sales Co Ltd",
-"158d  Point Multimedia Systems",
-"158e  Lara Technology Inc",
-"158f  Ditect Coop",
-"1590  3pardata Inc",
-"1591  ARN",
-"1592  Syba Tech Ltd",
-"	0781  Multi-IO Card",
-"	0782  Parallel Port Card 2xEPP",
-"	0783  Multi-IO Card",
-"	0785  Multi-IO Card",
-"	0786  Multi-IO Card",
-"	0787  Multi-IO Card",
-"	0788  Multi-IO Card",
-"	078a  Multi-IO Card",
-"1593  Bops Inc",
-"1594  Netgame Ltd",
-"1595  Diva Systems Corp",
-"1596  Folsom Research Inc",
-"1597  Memec Design Services",
-"1598  Granite Microsystems",
-"1599  Delta Electronics Inc",
-"159a  General Instrument",
-"159b  Faraday Technology Corp",
-"159c  Stratus Computer Systems",
-"159d  Ningbo Harrison Electronics Co Ltd",
-"159e  A-Max Technology Co Ltd",
-"159f  Galea Network Security",
-"15a0  Compumaster SRL",
-"15a1  Geocast Network Systems",
-"15a2  Catalyst Enterprises Inc",
-"	0001  TA700 PCI Bus Analyzer/Exerciser",
-"15a3  Italtel",
-"15a4  X-Net OY",
-"15a5  Toyota Macs Inc",
-"15a6  Sunlight Ultrasound Technologies Ltd",
-"15a7  SSE Telecom Inc",
-"15a8  Shanghai Communications Technologies Center",
-"15aa  Moreton Bay",
-"15ab  Bluesteel Networks Inc",
-"15ac  North Atlantic Instruments",
-"15ad  VMware Inc",
-"	0405  [VMware SVGA II] PCI Display Adapter",
-"	0710  Virtual SVGA",
-"	0720  VMware High-Speed Virtual NIC [vmxnet]",
-"15ae  Amersham Pharmacia Biotech",
-"15b0  Zoltrix International Ltd",
-"15b1  Source Technology Inc",
-"15b2  Mosaid Technologies Inc",
-"15b3  Mellanox Technologies",
-"	5274  MT21108 InfiniBridge",
-"	5a44  MT23108 InfiniHost",
-"	5a45  MT23108 [Infinihost HCA Flash Recovery]",
-"	5a46  MT23108 PCI Bridge",
-"	5e8d  MT25204 [InfiniHost III Lx HCA Flash Recovery]",
-"	6274  MT25204 [InfiniHost III Lx HCA]",
-"	6278  MT25208 InfiniHost III Ex (Tavor compatibility mode)",
-"	6279  MT25208 [InfiniHost III Ex HCA Flash Recovery]",
-"	6282  MT25208 InfiniHost III Ex",
-"15b4  CCI/TRIAD",
-"15b5  Cimetrics Inc",
-"15b6  Texas Memory Systems Inc",
-"15b7  Sandisk Corp",
-"15b8  ADDI-DATA GmbH",
-"15b9  Maestro Digital Communications",
-"15ba  Impacct Technology Corp",
-"15bb  Portwell Inc",
-"15bc  Agilent Technologies",
-"	1100  E8001-66442 PCI Express CIC",
-"	2922  64 Bit, 133MHz PCI-X Exerciser & Protocol Checker",
-"	2928  64 Bit, 66MHz PCI Exerciser & Analyzer",
-"	2929  64 Bit, 133MHz PCI-X Analyzer & Exerciser",
-"15bd  DFI Inc",
-"15be  Sola Electronics",
-"15bf  High Tech Computer Corp (HTC)",
-"15c0  BVM Ltd",
-"15c1  Quantel",
-"15c2  Newer Technology Inc",
-"15c3  Taiwan Mycomp Co Ltd",
-"15c4  EVSX Inc",
-"15c5  Procomp Informatics Ltd",
-"	8010  1394b - 1394 Firewire 3-Port Host Adapter Card",
-"15c6  Technical University of Budapest",
-"15c7  Tateyama System Laboratory Co Ltd",
-"	0349  Tateyama C-PCI PLC/NC card Rev.01A",
-"15c8  Penta Media Co Ltd",
-"15c9  Serome Technology Inc",
-"15ca  Bitboys OY",
-"15cb  AG Electronics Ltd",
-"15cc  Hotrail Inc",
-"15cd  Dreamtech Co Ltd",
-"15ce  Genrad Inc",
-"15cf  Hilscher GmbH",
-"15d1  Infineon Technologies AG",
-"15d2  FIC (First International Computer Inc)",
-"15d3  NDS Technologies Israel Ltd",
-"15d4  Iwill Corp",
-"15d5  Tatung Co",
-"15d6  Entridia Corp",
-"15d7  Rockwell-Collins Inc",
-"15d8  Cybernetics Technology Co Ltd",
-"15d9  Super Micro Computer Inc",
-"15da  Cyberfirm Inc",
-"15db  Applied Computing Systems Inc",
-"15dc  Litronic Inc",
-"	0001  Argus 300 PCI Cryptography Module",
-"15dd  Sigmatel Inc",
-"15de  Malleable Technologies Inc",
-"15df  Infinilink Corp",
-"15e0  Cacheflow Inc",
-"15e1  Voice Technologies Group Inc",
-"15e2  Quicknet Technologies Inc",
-"15e3  Networth Technologies Inc",
-"15e4  VSN Systemen BV",
-"15e5  Valley technologies Inc",
-"15e6  Agere Inc",
-"15e7  Get Engineering Corp",
-"15e8  National Datacomm Corp",
-"	0130  Wireless PCI Card",
-"15e9  Pacific Digital Corp",
-"	1841  ADMA-100 DiscStaQ ATA Controller",
-"15ea  Tokyo Denshi Sekei K.K.",
-"15eb  Drsearch GmbH",
-"15ec  Beckhoff GmbH",
-"	3101  FC3101 Profibus DP 1 Channel PCI",
-"	5102  FC5102",
-"15ed  Macrolink Inc",
-"15ee  In Win Development Inc",
-"15ef  Intelligent Paradigm Inc",
-"15f0  B-Tree Systems Inc",
-"15f1  Times N Systems Inc",
-"15f2  Diagnostic Instruments Inc",
-"15f3  Digitmedia Corp",
-"15f4  Valuesoft",
-"15f5  Power Micro Research",
-"15f6  Extreme Packet Device Inc",
-"15f7  Banctec",
-"15f8  Koga Electronics Co",
-"15f9  Zenith Electronics Corp",
-"15fa  J.P. Axzam Corp",
-"15fb  Zilog Inc",
-"15fc  Techsan Electronics Co Ltd",
-"15fd  N-CUBED.NET",
-"15fe  Kinpo Electronics Inc",
-"15ff  Fastpoint Technologies Inc",
-"1600  Northrop Grumman - Canada Ltd",
-"1601  Tenta Technology",
-"1602  Prosys-tec Inc",
-"1603  Nokia Wireless Communications",
-"1604  Central System Research Co Ltd",
-"1605  Pairgain Technologies",
-"1606  Europop AG",
-"1607  Lava Semiconductor Manufacturing Inc",
-"1608  Automated Wagering International",
-"1609  Scimetric Instruments Inc",
-"1612  Telesynergy Research Inc.",
-"1619  FarSite Communications Ltd",
-"	0400  FarSync T2P (2 port X.21/V.35/V.24)",
-"	0440  FarSync T4P (4 port X.21/V.35/V.24)",
-"	0610  FarSync T1U (1 port X.21/V.35/V.24)",
-"	0620  FarSync T2U (2 port X.21/V.35/V.24)",
-"	0640  FarSync T4U (4 port X.21/V.35/V.24)",
-"	1610  FarSync TE1 (T1,E1)",
-"	2610  FarSync DSL-S1 (SHDSL)",
-"161f  Rioworks",
-"1626  TDK Semiconductor Corp.",
-"	8410  RTL81xx Fast Ethernet",
-"1629  Kongsberg Spacetec AS",
-"	1003  Format synchronizer v3.0",
-"	2002  Fast Universal Data Output",
-"1637  Linksys",
-"	3874  Linksys 802.11b WMP11 PCI Wireless card",
-"1638  Standard Microsystems Corp [SMC]",
-"	1100  SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000",
-"163c  Smart Link Ltd.",
-"	3052  SmartLink SmartPCI562 56K Modem",
-"	5449  SmartPCI561 Modem",
-"1657  Brocade Communications Systems, Inc.",
-"165a  Epix Inc",
-"	c100  PIXCI(R) CL1 Camera Link Video Capture Board [custom QL5232]",
-"	d200  PIXCI(R) D2X Digital Video Capture Board [custom QL5232]",
-"	d300  PIXCI(R) D3X Digital Video Capture Board [custom QL5232]",
-"165d  Hsing Tech. Enterprise Co., Ltd.",
-"165f  Linux Media Labs, LLC",
-"	1020  LMLM4 MPEG-4 encoder",
-"1661  Worldspace Corp.",
-"1668  Actiontec Electronics Inc",
-"	0100  Mini-PCI bridge",
-"166d  Broadcom Corporation",
-"	0001  SiByte BCM1125/1125H/1250 System-on-a-Chip PCI",
-"	0002  SiByte BCM1125H/1250 System-on-a-Chip HyperTransport",
-"1677  Bernecker + Rainer",
-"	104e  5LS172.6 B&R Dual CAN Interface Card",
-"	12d7  5LS172.61 B&R Dual CAN Interface Card",
-"167b  ZyDAS Technology Corp.",
-"	2102  ZyDAS ZD1202",
-"		187e 3406  ZyAIR B-122 CardBus 11Mbs Wireless LAN Card",
-"1681  Hercules",
-"	0010  Hercules 3d Prophet II Ultra 64MB (350 MHz NV15BR core)",
-"1682  XFX Pine Group Inc.",
-"1688  CastleNet Technology Inc.",
-"	1170  WLAN 802.11b card",
-"168c  Atheros Communications, Inc.",
-"	0007  AR5000 802.11a Wireless Adapter",
-"	0011  AR5210 802.11a NIC",
-"	0012  AR5211 802.11ab NIC",
-"	0013  AR5212 802.11abg NIC",
-"		1113 d301  Philips CPWNA100 Wireless CardBus adapter",
-"		1186 3202  D-link DWL-G650 (Rev B3,B5) Wireless cardbus adapter",
-"		1186 3203  DWL-G520 Wireless PCI Adapter",
-"		1186 3a12  D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)",
-"		1186 3a13  D-Link AirPlus DWL-G520 Wireless PCI Adapter(rev.B)",
-"		1186 3a14  D-Link AirPremier DWL-AG530 Wireless PCI Adapter",
-"		1186 3a17  D-Link AirPremier DWL-G680 Wireless Cardbus Adapter",
-"		1186 3a18  D-Link AirPremier DWL-G550 Wireless PCI Adapter",
-"		1186 3a63  D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter",
-"		1186 3a94  C54C Wireless 801.11g cardbus",
-"		1186 3ab0  Allnet ALL0281 Wireless PCI Card",
-"		1385 4d00  Netgear WG311T Wireless PCI Adapter",
-"		1458 e911  Gigabyte GN-WIAG02",
-"		14b7 0a60  8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter",
-"		168c 0013  AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter",
-"		168c 1025  DWL-G650B2 Wireless CardBus Adapter",
-"		168c 1027  Netgate NL-3054CB ARIES b/g CardBus Adapter",
-"		168c 2026  Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter",
-"		168c 2041  Netgate 5354MP Plus ARIES2 b/g MiniPCI Adapter",
-"		168c 2042  Netgate 5354MP Plus ARIES2 a/b/g MiniPCI Adapter",
-"		16ab 7302  Trust Speedshare Turbo Pro Wireless PCI Adapter",
-"		185f 2012  Wistron NeWeb WLAN a+b+g model CB9",
-"	001a  AR5005G 802.11abg NIC",
-"		1113 ee20  SMC Wireless CardBus Adapter 802.11g (SMCWCB-G EU)",
-"		1113 ee24  SMC Wireless PCI Card WPCI-G",
-"		1186 3a15  D-Link AirPlus G DWL-G630 Wireless Cardbus Adapter(rev.D)",
-"		1186 3a16  D-Link AirPlus G DWL-G510 Wireless PCI Adapter(rev.B)",
-"		1186 3a23  D-Link AirPlus G DWL-G520+A Wireless PCI Adapter",
-"		1186 3a24  D-Link AirPlus G DWL-G650+A Wireless Cardbus Adapter",
-"		168c 1052  TP-Link TL-WN510G Wireless CardBus Adapter",
-"	001b  AR5006X 802.11abg NIC",
-"		1186 3a19  D-Link AirPremier AG DWL-AG660 Wireless Cardbus Adapter",
-"		1186 3a22  D-Link AirPremier AG DWL-AG530 Wireless PCI Adapter",
-"		168c 2062  EnGenius EMP-8602 (400mw)",
-"		168c 2063  EnGenius EMP-8602 (400mw)",
-"	0020  AR5005VL 802.11bg Wireless NIC",
-"	1014  AR5212 802.11abg NIC",
-"1695  EPoX Computer Co., Ltd.",
-"169c  Netcell Corporation",
-"	0044  Revolution Storage Processing Card",
-"16a5  Tekram Technology Co.,Ltd.",
-"16ab  Global Sun Technology Inc",
-"	1100  GL24110P",
-"	1101  PLX9052 PCMCIA-to-PCI Wireless LAN",
-"	1102  PCMCIA-to-PCI Wireless Network Bridge",
-"	8501  WL-8305 Wireless LAN PCI Adapter",
-"16ae  Safenet Inc",
-"	1141  SafeXcel-1141",
-"16af  SparkLAN Communications, Inc.",
-"16b4  Aspex Semiconductor Ltd",
-"16b8  Sonnet Technologies, Inc.",
-"16be  Creatix Polymedia GmbH",
-"16c6  Micrel-Kendin",
-"	8695  Centaur KS8695 ARM processor",
-"16c8  Octasic Inc.",
-"16c9  EONIC B.V. The Netherlands",
-"16ca  CENATEK Inc",
-"	0001  Rocket Drive DL",
-"16cd  Densitron Technologies",
-"16ce  Roland Corp.",
-"16d5  Acromag, Inc.",
-"	4d4e  PMC482, APC482, AcPC482 Counter Timer Board",
-"16df  PIKA Technologies Inc.",
-"16e3  European Space Agency",
-"	1e0f  LEON2FT Processor",
-"16ec  U.S. Robotics",
-"	00ff  USR997900 10/100 Mbps PCI Network Card",
-"	0116  USR997902 10/100/1000 Mbps PCI Network Card",
-"	3685  Wireless Access PCI Adapter Model 022415",
-"16ed  Sycron N. V.",
-"	1001  UMIO communication card",
-"16f3  Jetway Information Co., Ltd.",
-"16f4  Vweb Corp",
-"	8000  VW2010",
-"16f6  VideoTele.com, Inc.",
-"1702  Internet Machines Corporation (IMC)",
-"1705  Digital First, Inc.",
-"170b  NetOctave",
-"	0100  NSP2000-SSL crypto accelerator",
-"170c  YottaYotta Inc.",
-"1725  Vitesse Semiconductor",
-"	7174  VSC7174 PCI/PCI-X Serial ATA Host Bus Controller",
-"172a  Accelerated Encryption",
-"	13c8  AEP SureWare Runner 1000V3",
-"1734  Fujitsu Siemens Computer GmbH",
-"	1078  Amilo Pro v2010",
-"1737  Linksys",
-"	0013  WMP54G Wireless Pci Card",
-"	0015  WMP54GS Wireless Pci Card",
-"	1032  Gigabit Network Adapter",
-"		1737 0015  EG1032 v2 Instant Gigabit Network Adapter",
-"		1737 0024  EG1032 v3 Instant Gigabit Network Adapter",
-"	1064  Gigabit Network Adapter",
-"		1737 0016  EG1064 v2 Instant Gigabit Network Adapter",
-"	ab08  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"	ab09  21x4x DEC-Tulip compatible 10/100 Ethernet",
-"173b  Altima (nee Broadcom)",
-"	03e8  AC1000 Gigabit Ethernet",
-"	03e9  AC1001 Gigabit Ethernet",
-"	03ea  AC9100 Gigabit Ethernet",
-"		173b 0001  AC1002",
-"	03eb  AC1003 Gigabit Ethernet",
-"1743  Peppercon AG",
-"	8139  ROL/F-100 Fast Ethernet Adapter with ROL",
-"1749  RLX Technologies",
-"174b  PC Partner Limited",
-"174d  WellX Telecom SA",
-"175c  AudioScience Inc",
-"175e  Sanera Systems, Inc.",
-"1775  SBS Technologies",
-"1787  Hightech Information System Ltd.",
-"1796  Research Centre Juelich",
-"	0001  SIS1100 [Gigabit link]",
-"	0002  HOTlink",
-"	0003  Counter Timer",
-"	0004  CAMAC Controller",
-"	0005  PROFIBUS",
-"	0006  AMCC HOTlink",
-"1797  JumpTec h, GMBH",
-"1799  Belkin",
-"	6001  Wireless PCI Card - F5D6001",
-"	6020  Wireless PCMCIA Card - F5D6020",
-"	6060  Wireless PDA Card - F5D6060",
-"	7000  Wireless PCI Card - F5D7000",
-"	7010  BCM4306 802.11b/g Wireless Lan Controller F5D7010",
-"179c  Data Patterns",
-"	0557  DP-PCI-557 [PCI 1553B]",
-"	0566  DP-PCI-566 [Intelligent PCI 1553B]",
-"	5031  DP-CPCI-5031-Synchro Module",
-"	5121  DP-CPCI-5121-IP Carrier",
-"	5211  DP-CPCI-5211-IP Carrier",
-"	5679  AGE Display Module",
-"17a0  Genesys Logic, Inc",
-"	8033  GL880S USB 1.1 controller",
-"	8034  GL880S USB 2.0 controller",
-"17aa  Lenovo",
-"17af  Hightech Information System Ltd.",
-"17b3  Hawking Technologies",
-"	ab08  PN672TX 10/100 Ethernet",
-"17b4  Indra Networks, Inc.",
-"	0011  WebEnhance 100 GZIP Compression Card",
-"17c0  Wistron Corp.",
-"17c2  Newisys, Inc.",
-"17cb  Airgo Networks Inc",
-"17cc  NetChip Technology, Inc",
-"	2280  USB 2.0",
-"17cf  Z-Com, Inc.",
-"17d3  Areca Technology Corp.",
-"	1110  ARC-1110 4-Port PCI-X to SATA RAID Controller",
-"	1120  ARC-1120 8-Port PCI-X to SATA RAID Controller",
-"	1130  ARC-1130 12-Port PCI-X to SATA RAID Controller",
-"	1160  ARC-1160 16-Port PCI-X to SATA RAID Controller",
-"	1210  ARC-1210 4-Port PCI-Express to SATA RAID Controller",
-"	1220  ARC-1220 8-Port PCI-Express to SATA RAID Controller",
-"	1230  ARC-1230 12-Port PCI-Express to SATA RAID Controller",
-"	1260  ARC-1260 16-Port PCI-Express to SATA RAID Controller",
-"17d5  S2io Inc.",
-"	5831  Xframe 10 Gigabit Ethernet PCI-X",
-"		103c 12d5  HP PCI-X 133MHz 10GbE SR Fiber",
-"	5832  Xframe II 10Gbps Ethernet",
-"17de  KWorld Computer Co. Ltd.",
-"17ee  Connect Components Ltd",
-"17f2  Albatron Corp.",
-"17fe  Linksys, A Division of Cisco Systems",
-"	2120  WMP11v4 802.11b PCI card",
-"	2220  [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01)",
-"		17fe 2220  WPC54G ver. 4",
-"17ff  Benq Corporation",
-"1809  Lumanate, Inc.",
-"1813  Ambient Technologies Inc",
-"	4000  HaM controllerless modem",
-"		16be 0001  V9x HAM Data Fax Modem",
-"	4100  HaM plus Data Fax Modem",
-"		16be 0002  V9x HAM 1394",
-"1814  RaLink",
-"	0101  Wireless PCI Adapter RT2400 / RT2460",
-"		1043 0127  WiFi-b add-on Card",
-"		1462 6828  PC11B2 (MS-6828) Wireless 11b PCI Card",
-"	0200  RT2500 802.11g PCI [PC54G2]",
-"	0201  RT2500 802.11g Cardbus/mini-PCI",
-"		1043 130f  WL-130g",
-"		1371 001e  CWC-854 Wireless-G CardBus Adapter",
-"		1371 001f  CWM-854 Wireless-G Mini PCI Adapter",
-"		1371 0020  CWP-854 Wireless-G PCI Adapter",
-"		1458 e381  GN-WMKG 802.11b/g Wireless CardBus Adapter",
-"		1458 e931  GN-WIKG 802.11b/g mini-PCI Adapter",
-"		1462 6835  Wireless 11G CardBus CB54G2",
-"		1737 0032  WMP54G 2.0 PCI Adapter",
-"		1799 700a  F5D7000 Wireless G Desktop Network Card",
-"		1799 701a  F5D7010 Wireless G Notebook Network Card",
-"		185f 22a0  CN-WF513 Wireless Cardbus Adapter",
-"	0301  RT2561/RT61 802.11g PCI",
-"		1186 3c08  DWL-G630 Rev E",
-"		1186 3c09  DWL-G510 Rev C",
-"	0302  RT2561/RT61 rev B 802.11g",
-"		1186 3c08  DWL-G630 Rev E",
-"		1186 3c09  DWL-G510 Rev C",
-"	0401  Ralink RT2600 802.11 MIMO",
-"1820  InfiniCon Systems Inc.",
-"1822  Twinhan Technology Co. Ltd",
-"	4e35  Mantis DTV PCI Bridge Controller [Ver 1.0]",
-"182d  SiteCom Europe BV",
-"	3069  ISDN PCI DC-105V2",
-"	9790  WL-121 Wireless Network Adapter 100g+ [Ver.3]",
-"1830  Credence Systems Corporation",
-"183b  MikroM GmbH",
-"	08a7  MVC100 DVI",
-"	08a8  MVC101 SDI",
-"	08a9  MVC102 DVI+Audio",
-"1849  ASRock Incorporation",
-"1851  Microtune, Inc.",
-"1852  Anritsu Corp.",
-"1853  SMSC Automotive Infotainment System Group",
-"1854  LG Electronics, Inc.",
-"185b  Compro Technology, Inc.",
-"185f  Wistron NeWeb Corp.",
-"1864  SilverBack",
-"	2110  ISNAP 2110",
-"1867  Topspin Communications",
-"	5a44  MT23108 InfiniHost HCA",
-"	5a45  MT23108 InfiniHost HCA flash recovery",
-"	5a46  MT23108 InfiniHost HCA bridge",
-"	6278  MT25208 InfiniHost III Ex (Tavor compatibility mode)",
-"	6282  MT25208 InfiniHost III Ex",
-"187e  ZyXEL Communication Corporation",
-"	3403  ZyAir G-110 802.11g",
-"	340e  M-302 802.11g XtremeMIMO",
-"1888  Varisys Ltd",
-"	0301  VMFX1 FPGA PMC module",
-"	0601  VSM2 dual PMC carrier",
-"	0710  VS14x series PowerPC PCI board",
-"	0720  VS24x series PowerPC PCI board",
-"188a  Ample Communications, Inc",
-"1890  Egenera, Inc.",
-"1894  KNC One",
-"1896  B&B Electronics Manufacturing Company, Inc.",
-"18a1  Astute Networks Inc.",
-"18ac  DViCO Corporation",
-"	d500  FusionHDTV 5",
-"	d810  FusionHDTV 3 Gold",
-"	d820  FusionHDTV 3 Gold-T",
-"18b8  Ammasso",
-"	b001  AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor",
-"18bc  Info-Tek Corp.",
-"18c3  Micronas Semiconductor Holding AG",
-"18c8  Cray Inc",
-"18c9  ARVOO Engineering BV",
-"18ca  XGI - Xabre Graphics Inc",
-"	0020  Volari Z7",
-"	0040  Volari V3XT/V5/V8",
-"18d2  Sitecom",
-"	3069  DC-105v2 ISDN controller",
-"18dd  Artimi Inc",
-"	4c6f  Artimi RTMI-100 UWB adapter",
-"18e6  MPL AG",
-"	0001  OSCI [Octal Serial Communication Interface]",
-"18ec  Cesnet, z.s.p.o.",
-"	c006  COMBO6",
-"		18ec d001  COMBO-4MTX",
-"		18ec d002  COMBO-4SFP",
-"		18ec d003  COMBO-4SFPRO",
-"		18ec d004  COMBO-2XFP",
-"	c045  COMBO6E",
-"	c050  COMBO-PTM",
-"	c058  COMBO6X",
-"		18ec d001  COMBO-4MTX",
-"		18ec d002  COMBO-4SFP",
-"		18ec d003  COMBO-4SFPRO",
-"		18ec d004  COMBO-2XFP",
-"18f7  Commtech, Inc.",
-"	0001  Fastcom ESCC-PCI-335",
-"	0002  Fastcom 422/4-PCI-335",
-"	0004  Fastcom 422/2-PCI-335",
-"	0005  Fastcom IGESCC-PCI-ISO/1",
-"	000a  Fastcom 232/4-PCI-335",
-"18fb  Resilience Corporation",
-"1904  Hangzhou Silan Microelectronics Co., Ltd.",
-"1923  Sangoma Technologies Corp.",
-"	0100  A104d QUAD T1/E1 AFT card",
-"	0400  A104u Quad T1/E1 AFT",
-"1924  Level 5 Networks Inc.",
-"192e  TransDimension",
-"1931  Option N.V.",
-"	000c  Qualcomm MSM6275 UMTS chip",
-"1942  ClearSpeed Technology plc",
-"	e511  CSX600 Advance Accelerator Board",
-"1957  Freescale Semiconductor Inc",
-"	0080  MPC8349E",
-"	0081  MPC8349",
-"	0082  MPC8347E TBGA",
-"	0083  MPC8347 TBGA",
-"	0084  MPC8347E PBGA",
-"	0085  MPC8347 PBGA",
-"	0086  MPC8343E",
-"	0087  MPC8343",
-"1958  Faster Technology, LLC.",
-"1966  Orad Hi-Tec Systems",
-"	1975  DVG64 family",
-"196a  Sensory Networks Inc.",
-"	0101  NodalCore C-1000 Content Classification Accelerator",
-"	0102  NodalCore C-2000 Content Classification Accelerator",
-"197b  JMicron Technologies, Inc.",
-"	2360  JMicron 20360/20363 AHCI Controller",
-"	2361  JMB361 AHCI/IDE",
-"	2363  JMicron 20360/20363 AHCI Controller",
-"	2365  JMB365 AHCI/IDE",
-"	2366  JMB366 AHCI/IDE",
-"1989  Montilio Inc.",
-"	0001  RapidFile Bridge",
-"	8001  RapidFile",
-"1993  Innominate Security Technologies AG",
-"199a  Pulse-LINK, Inc.",
-"19a8  DAQDATA GmbH",
-"19ac  Kasten Chase Applied Research",
-"	0001  ACA2400 Crypto Accelerator",
-"19ae  Progeny Systems Corporation",
-"	0520  4135 HFT Interface Controller",
-"19d4  Quixant Limited",
-"19e2  Vector Informatik GmbH",
-"1a03  ASPEED Technology, Inc.",
-"	2000  AST2000",
-"1a08  Sierra semiconductor",
-"	0000  SC15064",
-"1a1d  GFaI e.V.",
-"1a29  Fortinet, Inc.",
-"1b13  Jaton Corp",
-"1c1c  Symphony",
-"	0001  82C101",
-"1d44  DPT",
-"	a400  PM2x24/PM3224",
-"1de1  Tekram Technology Co.,Ltd.",
-"	0391  TRM-S1040",
-"	2020  DC-390",
-"	690c  690c",
-"	dc29  DC290",
-"1fc0  Tumsan Oy",
-"	0300  E2200 Dual E1/Rawpipe Card",
-"1fc1  PathScale, Inc",
-"	000d  InfiniPath HT-400",
-"	0010  InfiniPath PE-800",
-"1fce  Cognio Inc.",
-"	0001  Spectrum Analyzer PC Card (SAgE)",
-"2000  Smart Link Ltd.",
-"2001  Temporal Research Ltd",
-"2003  Smart Link Ltd.",
-"2004  Smart Link Ltd.",
-"21c3  21st Century Computer Corp.",
-"22b8  Motorola, Inc.",
-"2348  Racore",
-"	2010  8142 100VG/AnyLAN",
-"2646  Kingston Technologies",
-"270b  Xantel Corporation",
-"270f  Chaintech Computer Co. Ltd",
-"2711  AVID Technology Inc.",
-"2a15  3D Vision(???)",
-"3000  Hansol Electronics Inc.",
-"3142  Post Impression Systems.",
-"3388  Hint Corp",
-"	0013  HiNT HC4 PCI to ISDN bridge, Multimedia audio controller",
-"	0014  HiNT HC4 PCI to ISDN bridge, Network controller",
-"	0020  HB6 Universal PCI-PCI bridge (transparent mode)",
-"	0021  HB6 Universal PCI-PCI bridge (non-transparent mode)",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1080  CT8 mainboard",
-"		4c53 1090  Cx9 mainboard",
-"		4c53 10a0  CA3/CR3 mainboard",
-"		4c53 3010  PPCI mezzanine (32-bit PMC)",
-"		4c53 3011  PPCI mezzanine (64-bit PMC)",
-"		4c53 4000  PMCCARR1 carrier board",
-"	0022  HiNT HB4 PCI-PCI Bridge (PCI6150)",
-"	0026  HB2 PCI-PCI Bridge",
-"	101a  E.Band [AudioTrak Inca88]",
-"	101b  E.Band [AudioTrak Inca88]",
-"	8011  VXPro II Chipset",
-"		3388 8011  VXPro II Chipset CPU to PCI Bridge",
-"	8012  VXPro II Chipset",
-"		3388 8012  VXPro II Chipset PCI to ISA Bridge",
-"	8013  VXPro II IDE",
-"		3388 8013  VXPro II Chipset EIDE Controller",
-"3411  Quantum Designs (H.K.) Inc",
-"3513  ARCOM Control Systems Ltd",
-"3842  eVga.com. Corp.",
-"	c370  e-GeFORCE 6600 256 DDR PCI-e",
-"38ef  4Links",
-"3d3d  3DLabs",
-"	0001  GLINT 300SX",
-"	0002  GLINT 500TX",
-"		0000 0000  GLoria L",
-"	0003  GLINT Delta",
-"		0000 0000  GLoria XL",
-"	0004  Permedia",
-"	0005  Permedia",
-"	0006  GLINT MX",
-"		0000 0000  GLoria XL",
-"		1048 0a42  GLoria XXL",
-"	0007  3D Extreme",
-"	0008  GLINT Gamma G1",
-"		1048 0a42  GLoria XXL",
-"	0009  Permedia II 2D+3D",
-"		1040 0011  AccelStar II",
-"		1048 0a42  GLoria XXL",
-"		13e9 1000  6221L-4U",
-"		3d3d 0100  AccelStar II 3D Accelerator",
-"		3d3d 0111  Permedia 3:16",
-"		3d3d 0114  Santa Ana",
-"		3d3d 0116  Oxygen GVX1",
-"		3d3d 0119  Scirocco",
-"		3d3d 0120  Santa Ana PCL",
-"		3d3d 0125  Oxygen VX1",
-"		3d3d 0127  Permedia3 Create!",
-"	000a  GLINT R3",
-"		3d3d 0121  Oxygen VX1",
-"	000c  GLINT R3 [Oxygen VX1]",
-"		3d3d 0144  Oxygen VX1-4X AGP [Permedia 4]",
-"	000d  GLint R4 rev A",
-"	0011  GLint R4 rev B",
-"	0012  GLint R5 rev A",
-"	0013  GLint R5 rev B",
-"	0020  VP10 visual processor",
-"	0022  VP10 visual processor",
-"	0024  VP9 visual processor",
-"	0100  Permedia II 2D+3D",
-"	07a1  Wildcat III 6210",
-"	07a2  Sun XVR-500 Graphics Accelerator",
-"	07a3  Wildcat IV 7210",
-"	1004  Permedia",
-"	3d04  Permedia",
-"	ffff  Glint VGA",
-"4005  Avance Logic Inc.",
-"	0300  ALS300 PCI Audio Device",
-"	0308  ALS300+ PCI Audio Device",
-"	0309  PCI Input Controller",
-"	1064  ALG-2064",
-"	2064  ALG-2064i",
-"	2128  ALG-2364A GUI Accelerator",
-"	2301  ALG-2301",
-"	2302  ALG-2302",
-"	2303  AVG-2302 GUI Accelerator",
-"	2364  ALG-2364A",
-"	2464  ALG-2464",
-"	2501  ALG-2564A/25128A",
-"	4000  ALS4000 Audio Chipset",
-"		4005 4000  ALS4000 Audio Chipset",
-"	4710  ALC200/200P",
-"4033  Addtron Technology Co, Inc.",
-"	1360  RTL8139 Ethernet",
-"4143  Digital Equipment Corp",
-"4144  Alpha Data",
-"	0044  ADM-XRCIIPro",
-"416c  Aladdin Knowledge Systems",
-"	0100  AladdinCARD",
-"	0200  CPC",
-"4321  Tata Power Strategic Electronics Division",
-"4444  Internext Compression Inc",
-"	0016  iTVC16 (CX23416) MPEG-2 Encoder",
-"		0070 0003  WinTV PVR 250",
-"		0070 0009  WinTV PVR 150",
-"		0070 0801  WinTV PVR 150",
-"		0070 0807  WinTV PVR 150",
-"		0070 4001  WinTV PVR 250",
-"		0070 4009  WinTV PVR 250",
-"		0070 4801  WinTV PVR 250",
-"		0070 4803  WinTV PVR 250",
-"		0070 8003  WinTV PVR 150",
-"		0070 8801  WinTV PVR 150",
-"		0070 c801  WinTV PVR 150",
-"		0070 e807  WinTV PVR 500 (1st unit)",
-"		0070 e817  WinTV PVR 500 (2nd unit)",
-"		0070 ff92  WiNTV PVR-550",
-"		0270 0801  WinTV PVR 150",
-"		12ab fff3  MPG600",
-"		12ab ffff  MPG600",
-"		9005 0092  VideOh! AVC-2010",
-"		9005 0093  VideOh! AVC-2410",
-"	0803  iTVC15 MPEG-2 Encoder",
-"		0070 4000  WinTV PVR-350",
-"		0070 4001  WinTV PVR-250",
-"		0070 4800  WinTV PVR-350 (V1)",
-"		12ab 0000  MPG160",
-"		1461 a3ce  M179",
-"		1461 a3cf  M179",
-"4468  Bridgeport machines",
-"4594  Cogetec Informatique Inc",
-"45fb  Baldor Electric Company",
-"4680  Umax Computer Corp",
-"4843  Hercules Computer Technology Inc",
-"4916  RedCreek Communications Inc",
-"	1960  RedCreek PCI adapter",
-"4943  Growth Networks",
-"494f  ACCES I/O Products, Inc.",
-"	10e8  LPCI-COM-8SM",
-"4978  Axil Computer Inc",
-"4a14  NetVin",
-"	5000  NV5000SC",
-"		4a14 5000  RT8029-Based Ethernet Adapter",
-"4b10  Buslogic Inc.",
-"4c48  LUNG HWA Electronics",
-"4c53  SBS Technologies",
-"	0000  PLUSTEST device",
-"		4c53 3000  PLUSTEST card (PC104+)",
-"		4c53 3001  PLUSTEST card (PMC)",
-"	0001  PLUSTEST-MM device",
-"		4c53 3002  PLUSTEST-MM card (PMC)",
-"4ca1  Seanix Technology Inc",
-"4d51  MediaQ Inc.",
-"	0200  MQ-200",
-"4d54  Microtechnica Co Ltd",
-"4ddc  ILC Data Device Corp",
-"	0100  DD-42924I5-300 (ARINC 429 Data Bus)",
-"	0801  BU-65570I1 MIL-STD-1553 Test and Simulation",
-"	0802  BU-65570I2 MIL-STD-1553 Test and Simulation",
-"	0811  BU-65572I1 MIL-STD-1553 Test and Simulation",
-"	0812  BU-65572I2 MIL-STD-1553 Test and Simulation",
-"	0881  BU-65570T1 MIL-STD-1553 Test and Simulation",
-"	0882  BU-65570T2 MIL-STD-1553 Test and Simulation",
-"	0891  BU-65572T1 MIL-STD-1553 Test and Simulation",
-"	0892  BU-65572T2 MIL-STD-1553 Test and Simulation",
-"	0901  BU-65565C1 MIL-STD-1553 Data Bus",
-"	0902  BU-65565C2 MIL-STD-1553 Data Bus",
-"	0903  BU-65565C3 MIL-STD-1553 Data Bus",
-"	0904  BU-65565C4 MIL-STD-1553 Data Bus",
-"	0b01  BU-65569I1 MIL-STD-1553 Data Bus",
-"	0b02  BU-65569I2 MIL-STD-1553 Data Bus",
-"	0b03  BU-65569I3 MIL-STD-1553 Data Bus",
-"	0b04  BU-65569I4 MIL-STD-1553 Data Bus",
-"5046  GemTek Technology Corporation",
-"	1001  PCI Radio",
-"5053  Voyetra Technologies",
-"	2010  Daytona Audio Adapter",
-"5136  S S Technologies",
-"5143  Qualcomm Inc",
-"5145  Ensoniq (Old)",
-"	3031  Concert AudioPCI",
-"5168  Animation Technologies Inc.",
-"	0300  FlyDVB-S",
-"	0301  FlyDVB-T",
-"5301  Alliance Semiconductor Corp.",
-"	0001  ProMotion aT3D",
-"5333  S3 Inc.",
-"	0551  Plato/PX (system)",
-"	5631  86c325 [ViRGE]",
-"	8800  86c866 [Vision 866]",
-"	8801  86c964 [Vision 964]",
-"	8810  86c764_0 [Trio 32 vers 0]",
-"	8811  86c764/765 [Trio32/64/64V+]",
-"	8812  86cM65 [Aurora64V+]",
-"	8813  86c764_3 [Trio 32/64 vers 3]",
-"	8814  86c767 [Trio 64UV+]",
-"	8815  86cM65 [Aurora 128]",
-"	883d  86c988 [ViRGE/VX]",
-"	8870  FireGL",
-"	8880  86c868 [Vision 868 VRAM] vers 0",
-"	8881  86c868 [Vision 868 VRAM] vers 1",
-"	8882  86c868 [Vision 868 VRAM] vers 2",
-"	8883  86c868 [Vision 868 VRAM] vers 3",
-"	88b0  86c928 [Vision 928 VRAM] vers 0",
-"	88b1  86c928 [Vision 928 VRAM] vers 1",
-"	88b2  86c928 [Vision 928 VRAM] vers 2",
-"	88b3  86c928 [Vision 928 VRAM] vers 3",
-"	88c0  86c864 [Vision 864 DRAM] vers 0",
-"	88c1  86c864 [Vision 864 DRAM] vers 1",
-"	88c2  86c864 [Vision 864-P DRAM] vers 2",
-"	88c3  86c864 [Vision 864-P DRAM] vers 3",
-"	88d0  86c964 [Vision 964 VRAM] vers 0",
-"	88d1  86c964 [Vision 964 VRAM] vers 1",
-"	88d2  86c964 [Vision 964-P VRAM] vers 2",
-"	88d3  86c964 [Vision 964-P VRAM] vers 3",
-"	88f0  86c968 [Vision 968 VRAM] rev 0",
-"	88f1  86c968 [Vision 968 VRAM] rev 1",
-"	88f2  86c968 [Vision 968 VRAM] rev 2",
-"	88f3  86c968 [Vision 968 VRAM] rev 3",
-"	8900  86c755 [Trio 64V2/DX]",
-"		5333 8900  86C775 Trio64V2/DX",
-"	8901  86c775/86c785 [Trio 64V2/DX or /GX]",
-"		5333 8901  86C775 Trio64V2/DX, 86C785 Trio64V2/GX",
-"	8902  Plato/PX",
-"	8903  Trio 3D business multimedia",
-"	8904  Trio 64 3D",
-"		1014 00db  Integrated Trio3D",
-"		5333 8904  86C365 Trio3D AGP",
-"	8905  Trio 64V+ family",
-"	8906  Trio 64V+ family",
-"	8907  Trio 64V+ family",
-"	8908  Trio 64V+ family",
-"	8909  Trio 64V+ family",
-"	890a  Trio 64V+ family",
-"	890b  Trio 64V+ family",
-"	890c  Trio 64V+ family",
-"	890d  Trio 64V+ family",
-"	890e  Trio 64V+ family",
-"	890f  Trio 64V+ family",
-"	8a01  ViRGE/DX or /GX",
-"		0e11 b032  ViRGE/GX",
-"		10b4 1617  Nitro 3D",
-"		10b4 1717  Nitro 3D",
-"		5333 8a01  ViRGE/DX",
-"	8a10  ViRGE/GX2",
-"		1092 8a10  Stealth 3D 4000",
-"	8a13  86c368 [Trio 3D/2X]",
-"		5333 8a13  Trio3D/2X",
-"	8a20  86c794 [Savage 3D]",
-"		5333 8a20  86C391 Savage3D",
-"	8a21  86c390 [Savage 3D/MV]",
-"		5333 8a21  86C390 Savage3D/MV",
-"	8a22  Savage 4",
-"		1033 8068  Savage 4",
-"		1033 8069  Savage 4",
-"		1033 8110  Savage 4 LT",
-"		105d 0018  SR9 8Mb SDRAM",
-"		105d 002a  SR9 Pro 16Mb SDRAM",
-"		105d 003a  SR9 Pro 32Mb SDRAM",
-"		105d 092f  SR9 Pro+ 16Mb SGRAM",
-"		1092 4207  Stealth III S540",
-"		1092 4800  Stealth III S540",
-"		1092 4807  SpeedStar A90",
-"		1092 4808  Stealth III S540",
-"		1092 4809  Stealth III S540",
-"		1092 480e  Stealth III S540",
-"		1092 4904  Stealth III S520",
-"		1092 4905  SpeedStar A200",
-"		1092 4a09  Stealth III S540",
-"		1092 4a0b  Stealth III S540 Xtreme",
-"		1092 4a0f  Stealth III S540",
-"		1092 4e01  Stealth III S540",
-"		1102 101d  3d Blaster Savage 4",
-"		1102 101e  3d Blaster Savage 4",
-"		5333 8100  86C394-397 Savage4 SDRAM 100",
-"		5333 8110  86C394-397 Savage4 SDRAM 110",
-"		5333 8125  86C394-397 Savage4 SDRAM 125",
-"		5333 8143  86C394-397 Savage4 SDRAM 143",
-"		5333 8a22  86C394-397 Savage4",
-"		5333 8a2e  86C394-397 Savage4 32bit",
-"		5333 9125  86C394-397 Savage4 SGRAM 125",
-"		5333 9143  86C394-397 Savage4 SGRAM 143",
-"	8a23  Savage 4",
-"	8a25  ProSavage PM133",
-"	8a26  ProSavage KM133",
-"	8c00  ViRGE/M3",
-"	8c01  ViRGE/MX",
-"		1179 0001  ViRGE/MX",
-"	8c02  ViRGE/MX+",
-"	8c03  ViRGE/MX+MV",
-"	8c10  86C270-294 Savage/MX-MV",
-"	8c11  82C270-294 Savage/MX",
-"	8c12  86C270-294 Savage/IX-MV",
-"		1014 017f  Thinkpad T20/T22",
-"		1179 0001  86C584 SuperSavage/IXC Toshiba",
-"	8c13  86C270-294 Savage/IX",
-"		1179 0001  Magnia Z310",
-"	8c22  SuperSavage MX/128",
-"	8c24  SuperSavage MX/64",
-"	8c26  SuperSavage MX/64C",
-"	8c2a  SuperSavage IX/128 SDR",
-"	8c2b  SuperSavage IX/128 DDR",
-"	8c2c  SuperSavage IX/64 SDR",
-"	8c2d  SuperSavage IX/64 DDR",
-"	8c2e  SuperSavage IX/C SDR",
-"		1014 01fc  ThinkPad T23 (2647-4MG)",
-"	8c2f  SuperSavage IX/C DDR",
-"	8d01  86C380 [ProSavageDDR K4M266]",
-"	8d02  VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK)",
-"	8d03  VT8751 [ProSavageDDR P4M266]",
-"	8d04  VT8375 [ProSavage8 KM266/KL266]",
-"	9102  86C410 Savage 2000",
-"		1092 5932  Viper II Z200",
-"		1092 5934  Viper II Z200",
-"		1092 5952  Viper II Z200",
-"		1092 5954  Viper II Z200",
-"		1092 5a35  Viper II Z200",
-"		1092 5a37  Viper II Z200",
-"		1092 5a55  Viper II Z200",
-"		1092 5a57  Viper II Z200",
-"	ca00  SonicVibes",
-"544c  Teralogic Inc",
-"	0350  TL880-based HDTV/ATSC tuner",
-"5455  Technische University Berlin",
-"	4458  S5933",
-"5519  Cnet Technologies, Inc.",
-"5544  Dunord Technologies",
-"	0001  I-30xx Scanner Interface",
-"5555  Genroco, Inc",
-"	0003  TURBOstor HFP-832 [HiPPI NIC]",
-"5654  VoiceTronix Pty Ltd",
-"	3132  OpenSwitch12",
-"5700  Netpower",
-"5851  Exacq Technologies",
-"6356  UltraStor",
-"6374  c't Magazin fuer Computertechnik",
-"	6773  GPPCI",
-"6409  Logitec Corp.",
-"6666  Decision Computer International Co.",
-"	0001  PCCOM4",
-"	0002  PCCOM8",
-"	0004  PCCOM2",
-"	0101  PCI 8255/8254 I/O Card",
-"7063  pcHDTV",
-"	2000  HD-2000",
-"	3000  HD-3000",
-"7604  O.N. Electronic Co Ltd.",
-"7bde  MIDAC Corporation",
-"7fed  PowerTV",
-"8008  Quancom Electronic GmbH",
-"	0010  WDOG1 [PCI-Watchdog 1]",
-"	0011  PWDOG2 [PCI-Watchdog 2]",
-"807d  Asustek Computer, Inc.",
-"8086  Intel Corporation",
-"	0007  82379AB",
-"	0008  Extended Express System Support Controller",
-"	0039  21145 Fast Ethernet",
-"	0122  82437FX",
-"	0309  80303 I/O Processor PCI-to-PCI Bridge",
-"	030d  80312 I/O Companion Chip PCI-to-PCI Bridge",
-"	0326  6700/6702PXH I/OxAPIC Interrupt Controller A",
-"	0327  6700PXH I/OxAPIC Interrupt Controller B",
-"	0329  6700PXH PCI Express-to-PCI Bridge A",
-"	032a  6700PXH PCI Express-to-PCI Bridge B",
-"	032c  6702PXH PCI Express-to-PCI Bridge A",
-"	0330  80332 [Dobson] I/O processor (A-Segment Bridge)",
-"	0331  80332 [Dobson] I/O processor (A-Segment IOAPIC)",
-"	0332  80332 [Dobson] I/O processor (B-Segment Bridge)",
-"	0333  80332 [Dobson] I/O processor (B-Segment IOAPIC)",
-"	0334  80332 [Dobson] I/O processor (ATU)",
-"	0335  80331 [Lindsay] I/O processor (PCI-X Bridge)",
-"	0336  80331 [Lindsay] I/O processor (ATU)",
-"	0340  41210 [Lanai] Serial to Parallel PCI Bridge (A-Segment Bridge)",
-"	0341  41210 [Lanai] Serial to Parallel PCI Bridge (B-Segment Bridge)",
-"	0370  80333 Segment-A PCI Express-to-PCI Express Bridge",
-"	0371  80333 A-Bus IOAPIC",
-"	0372  80333 Segment-B PCI Express-to-PCI Express Bridge",
-"	0373  80333 B-Bus IOAPIC",
-"	0374  80333 Address Translation Unit",
-"	0482  82375EB/SB PCI to EISA Bridge",
-"	0483  82424TX/ZX [Saturn] CPU to PCI bridge",
-"	0484  82378ZB/IB, 82379AB (SIO, SIO.A) PCI to ISA Bridge",
-"	0486  82425EX/ZX [Aries] PCIset with ISA bridge",
-"	04a3  82434LX/NX [Mercury/Neptune] Processor to PCI bridge",
-"	04d0  82437FX [Triton FX]",
-"	0500  E8870 Processor bus control",
-"	0501  E8870 Memory controller",
-"	0502  E8870 Scalability Port 0",
-"	0503  E8870 Scalability Port 1",
-"	0510  E8870IO Hub Interface Port 0 registers (8-bit compatibility port)",
-"	0511  E8870IO Hub Interface Port 1 registers",
-"	0512  E8870IO Hub Interface Port 2 registers",
-"	0513  E8870IO Hub Interface Port 3 registers",
-"	0514  E8870IO Hub Interface Port 4 registers",
-"	0515  E8870IO General SIOH registers",
-"	0516  E8870IO RAS registers",
-"	0530  E8870SP Scalability Port 0 registers",
-"	0531  E8870SP Scalability Port 1 registers",
-"	0532  E8870SP Scalability Port 2 registers",
-"	0533  E8870SP Scalability Port 3 registers",
-"	0534  E8870SP Scalability Port 4 registers",
-"	0535  E8870SP Scalability Port 5 registers",
-"	0536  E8870SP Interleave registers 0 and 1",
-"	0537  E8870SP Interleave registers 2 and 3",
-"	0600  RAID Controller",
-"		8086 01af  SRCZCR",
-"		8086 01c1  ICP Vortex GDT8546RZ",
-"		8086 01f7  SCRU32",
-"	061f  80303 I/O Processor",
-"	0960  80960RP [i960 RP Microprocessor/Bridge]",
-"	0962  80960RM [i960RM Bridge]",
-"	0964  80960RP [i960 RP Microprocessor/Bridge]",
-"	1000  82542 Gigabit Ethernet Controller",
-"		0e11 b0df  NC1632 Gigabit Ethernet Adapter (1000-SX)",
-"		0e11 b0e0  NC1633 Gigabit Ethernet Adapter (1000-LX)",
-"		0e11 b123  NC1634 Gigabit Ethernet Adapter (1000-SX)",
-"		1014 0119  Netfinity Gigabit Ethernet SX Adapter",
-"		8086 1000  PRO/1000 Gigabit Server Adapter",
-"	1001  82543GC Gigabit Ethernet Controller (Fiber)",
-"		0e11 004a  NC6136 Gigabit Server Adapter",
-"		1014 01ea  Netfinity Gigabit Ethernet SX Adapter",
-"		8086 1002  PRO/1000 F Server Adapter",
-"		8086 1003  PRO/1000 F Server Adapter",
-"	1002  Pro 100 LAN+Modem 56 Cardbus II",
-"		8086 200e  Pro 100 LAN+Modem 56 Cardbus II",
-"		8086 2013  Pro 100 SR Mobile Combo Adapter",
-"		8086 2017  Pro 100 S Combo Mobile Adapter",
-"	1004  82543GC Gigabit Ethernet Controller (Copper)",
-"		0e11 0049  NC7132 Gigabit Upgrade Module",
-"		0e11 b1a4  NC7131 Gigabit Server Adapter",
-"		1014 10f2  Gigabit Ethernet Server Adapter",
-"		8086 1004  PRO/1000 T Server Adapter",
-"		8086 2004  PRO/1000 T Server Adapter",
-"	1008  82544EI Gigabit Ethernet Controller (Copper)",
-"		1014 0269  iSeries 1000/100/10 Ethernet Adapter",
-"		1028 011c  PRO/1000 XT Network Connection",
-"		8086 1107  PRO/1000 XT Server Adapter",
-"		8086 2107  PRO/1000 XT Server Adapter",
-"		8086 2110  PRO/1000 XT Server Adapter",
-"		8086 3108  PRO/1000 XT Network Connection",
-"	1009  82544EI Gigabit Ethernet Controller (Fiber)",
-"		1014 0268  iSeries Gigabit Ethernet Adapter",
-"		8086 1109  PRO/1000 XF Server Adapter",
-"		8086 2109  PRO/1000 XF Server Adapter",
-"	100a  82540EM Gigabit Ethernet Controller",
-"	100c  82544GC Gigabit Ethernet Controller (Copper)",
-"		8086 1112  PRO/1000 T Desktop Adapter",
-"		8086 2112  PRO/1000 T Desktop Adapter",
-"	100d  82544GC Gigabit Ethernet Controller (LOM)",
-"		1028 0123  PRO/1000 XT Network Connection",
-"		1079 891f  82544GC Based Network Connection",
-"		4c53 1080  CT8 mainboard",
-"		8086 110d  82544GC Based Network Connection",
-"	100e  82540EM Gigabit Ethernet Controller",
-"		1014 0265  PRO/1000 MT Network Connection",
-"		1014 0267  PRO/1000 MT Network Connection",
-"		1014 026a  PRO/1000 MT Network Connection",
-"		1024 0134  Poweredge SC600",
-"		1028 002e  Optiplex GX260",
-"		1028 0151  PRO/1000 MT Network Connection",
-"		107b 8920  PRO/1000 MT Desktop Adapter",
-"		8086 001e  PRO/1000 MT Desktop Adapter",
-"		8086 002e  PRO/1000 MT Desktop Adapter",
-"		8086 1376  PRO/1000 GT Desktop Adapter",
-"		8086 1476  PRO/1000 GT Desktop Adapter",
-"	100f  82545EM Gigabit Ethernet Controller (Copper)",
-"		1014 0269  iSeries 1000/100/10 Ethernet Adapter",
-"		1014 028e  PRO/1000 MT Network Connection",
-"		8086 1000  PRO/1000 MT Network Connection",
-"		8086 1001  PRO/1000 MT Server Adapter",
-"	1010  82546EB Gigabit Ethernet Controller (Copper)",
-"		0e11 00db  NC7170 Gigabit Server Adapter",
-"		1014 027c  PRO/1000 MT Dual Port Network Adapter",
-"		18fb 7872  RESlink-X",
-"		1fc1 0026  Niagara 2260 Bypass Card",
-"		4c53 1080  CT8 mainboard",
-"		4c53 10a0  CA3/CR3 mainboard",
-"		8086 1011  PRO/1000 MT Dual Port Server Adapter",
-"		8086 1012  Primergy RX300",
-"		8086 101a  PRO/1000 MT Dual Port Network Adapter",
-"		8086 3424  SE7501HG2 Mainboard",
-"	1011  82545EM Gigabit Ethernet Controller (Fiber)",
-"		1014 0268  iSeries Gigabit Ethernet Adapter",
-"		8086 1002  PRO/1000 MF Server Adapter",
-"		8086 1003  PRO/1000 MF Server Adapter (LX)",
-"	1012  82546EB Gigabit Ethernet Controller (Fiber)",
-"		0e11 00dc  NC6170 Gigabit Server Adapter",
-"		8086 1012  PRO/1000 MF Dual Port Server Adapter",
-"	1013  82541EI Gigabit Ethernet Controller (Copper)",
-"		8086 0013  PRO/1000 MT Network Connection",
-"		8086 1013  IBM ThinkCentre Network Card",
-"		8086 1113  PRO/1000 MT Desktop Adapter",
-"	1014  82541ER Gigabit Ethernet Controller",
-"	1015  82540EM Gigabit Ethernet Controller (LOM)",
-"	1016  82540EP Gigabit Ethernet Controller (LOM)",
-"		1014 052c  PRO/1000 MT Mobile Connection",
-"		1179 0001  PRO/1000 MT Mobile Connection",
-"		8086 1016  PRO/1000 MT Mobile Connection",
-"	1017  82540EP Gigabit Ethernet Controller (LOM)",
-"		8086 1017  PR0/1000 MT Desktop Connection",
-"	1018  82541EI Gigabit Ethernet Controller",
-"		8086 1018  PRO/1000 MT Desktop Adapter",
-"	1019  82547EI Gigabit Ethernet Controller (LOM)",
-"		1458 1019  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1458 e000  Intel Gigabit Ethernet (Kenai II)",
-"		8086 1019  PRO/1000 CT Desktop Connection",
-"		8086 301f  D865PERL mainboard",
-"		8086 302c  Intel 82865G Mainboard (D865GBF)",
-"		8086 3427  S875WP1-E mainboard",
-"	101a  82547EI Gigabit Ethernet Controller (Mobile)",
-"	101d  82546EB Gigabit Ethernet Controller",
-"		8086 1000  PRO/1000 MT Quad Port Server Adapter",
-"	101e  82540EP Gigabit Ethernet Controller (Mobile)",
-"		1014 0549  PRO/1000 MT Mobile Connection",
-"		1179 0001  PRO/1000 MT Mobile Connection",
-"		8086 101e  PRO/1000 MT Mobile Connection",
-"	1026  82545GM Gigabit Ethernet Controller",
-"		1028 0169  Precision 470",
-"		8086 1000  PRO/1000 MT Server Connection",
-"		8086 1001  PRO/1000 MT Server Adapter",
-"		8086 1002  PRO/1000 MT Server Adapter",
-"		8086 1026  PRO/1000 MT Server Connection",
-"	1027  82545GM Gigabit Ethernet Controller",
-"		103c 3103  NC310F PCI-X Gigabit Server Adapter",
-"		8086 1001  PRO/1000 MF Server Adapter(LX)",
-"		8086 1002  PRO/1000 MF Server Adapter(LX)",
-"		8086 1003  PRO/1000 MF Server Adapter(LX)",
-"		8086 1027  PRO/1000 MF Server Adapter",
-"	1028  82545GM Gigabit Ethernet Controller",
-"		8086 1028  PRO/1000 MB Server Adapter",
-"	1029  82559 Ethernet Controller",
-"	1030  82559 InBusiness 10/100",
-"	1031  82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller",
-"		1014 0209  ThinkPad A/T/X Series",
-"		104d 80e7  Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		104d 813c  Vaio PCG-GRV616G",
-"		107b 5350  EtherExpress PRO/100 VE",
-"		1179 0001  EtherExpress PRO/100 VE",
-"		144d c000  EtherExpress PRO/100 VE",
-"		144d c001  EtherExpress PRO/100 VE",
-"		144d c003  EtherExpress PRO/100 VE",
-"		144d c006  vpr Matrix 170B4",
-"	1032  82801CAM (ICH3) PRO/100 VE Ethernet Controller",
-"	1033  82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller",
-"	1034  82801CAM (ICH3) PRO/100 VM Ethernet Controller",
-"	1035  82801CAM (ICH3)/82562EH (LOM)  Ethernet Controller",
-"	1036  82801CAM (ICH3) 82562EH Ethernet Controller",
-"	1037  82801CAM (ICH3) Chipset Ethernet Controller",
-"	1038  82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller",
-"		0e11 0098  Evo N600c",
-"	1039  82801DB PRO/100 VE (LOM) Ethernet Controller",
-"		1014 0267  NetVista A30p",
-"	103a  82801DB PRO/100 VE (CNR) Ethernet Controller",
-"	103b  82801DB PRO/100 VM (LOM) Ethernet Controller",
-"	103c  82801DB PRO/100 VM (CNR) Ethernet Controller",
-"	103d  82801DB PRO/100 VE (MOB) Ethernet Controller",
-"	103e  82801DB PRO/100 VM (MOB) Ethernet Controller",
-"	1040  536EP Data Fax Modem",
-"		16be 1040  V.9X DSP Data Fax Modem",
-"	1043  PRO/Wireless LAN 2100 3B Mini PCI Adapter",
-"		8086 2527  MIM2000/Centrino",
-"	1048  PRO/10GbE LR Server Adapter",
-"		8086 a01f  PRO/10GbE LR Server Adapter",
-"		8086 a11f  PRO/10GbE LR Server Adapter",
-"	104b  Ethernet Controller",
-"	1050  82562EZ 10/100 Ethernet Controller",
-"		1462 728c  865PE Neo2 (MS-6728)",
-"		1462 758c  MS-6758 (875P Neo)",
-"		8086 3020  D865PERL mainboard",
-"		8086 302f  Desktop Board D865GBF",
-"		8086 3427  S875WP1-E mainboard",
-"	1051  82801EB/ER (ICH5/ICH5R) integrated LAN Controller",
-"	1052  PRO/100 VM Network Connection",
-"	1053  PRO/100 VM Network Connection",
-"	1059  82551QM Ethernet Controller",
-"	105e  82571EB Gigabit Ethernet Controller",
-"		1775 6003  Telum GE-QT",
-"	105f  82571EB Gigabit Ethernet Controller",
-"	1060  82571EB Gigabit Ethernet Controller",
-"	1064  82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller",
-"		1043 80f8  P5GD1-VW Mainboard",
-"	1065  82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller",
-"	1066  82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller",
-"	1067  82562 EM/EX/GX - PRO/100 VM Ethernet Controller",
-"	1068  82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile",
-"	1069  82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile",
-"	106a  82562G - PRO/100 VE (LOM) Ethernet Controller",
-"	106b  82562G - PRO/100 VE Ethernet Controller Mobile",
-"	1075  82547GI Gigabit Ethernet Controller",
-"		1028 0165  PowerEdge 750",
-"		8086 0075  PRO/1000 CT Network Connection",
-"		8086 1075  PRO/1000 CT Network Connection",
-"	1076  82541GI/PI Gigabit Ethernet Controller",
-"		1028 0165  PowerEdge 750",
-"		1028 019a  PowerEdge SC1425",
-"		8086 0076  PRO/1000 MT Network Connection",
-"		8086 1076  PRO/1000 MT Network Connection",
-"		8086 1176  PRO/1000 MT Desktop Adapter",
-"		8086 1276  PRO/1000 MT Desktop Adapter",
-"	1077  82541GI Gigabit Ethernet Controller",
-"		1179 0001  PRO/1000 MT Mobile Connection",
-"		8086 0077  PRO/1000 MT Mobile Connection",
-"		8086 1077  PRO/1000 MT Mobile Connection",
-"	1078  82541EI Gigabit Ethernet Controller",
-"		8086 1078  PRO/1000 MT Network Connection",
-"	1079  82546GB Gigabit Ethernet Controller",
-"		103c 12a6  HP Dual Port 1000Base-T [A9900A]",
-"		103c 12cf  HP Core Dual Port 1000Base-T [AB352A]",
-"		1fc1 0027  Niagara 2261 Failover NIC",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"		4c53 10b0  CL9 mainboard",
-"		8086 0079  PRO/1000 MT Dual Port Network Connection",
-"		8086 1079  PRO/1000 MT Dual Port Network Connection",
-"		8086 1179  PRO/1000 MT Dual Port Network Connection",
-"		8086 117a  PRO/1000 MT Dual Port Server Adapter",
-"	107a  82546GB Gigabit Ethernet Controller",
-"		103c 12a8  HP Dual Port 1000base-SX [A9899A]",
-"		8086 107a  PRO/1000 MF Dual Port Server Adapter",
-"		8086 127a  PRO/1000 MF Dual Port Server Adapter",
-"	107b  82546GB Gigabit Ethernet Controller",
-"		8086 007b  PRO/1000 MB Dual Port Server Connection",
-"		8086 107b  PRO/1000 MB Dual Port Server Connection",
-"	107c  82541PI Gigabit Ethernet Controller",
-"	107d  82572EI Gigabit Ethernet Controller",
-"	107e  82572EI Gigabit Ethernet Controller",
-"	107f  82572EI Gigabit Ethernet Controller",
-"	1080  FA82537EP 56K V.92 Data/Fax Modem PCI",
-"	1081  Enterprise Southbridge LAN Copper",
-"	1082  Enterprise Southbridge LAN fiber",
-"	1083  Enterprise Southbridge LAN SERDES",
-"	1084  Enterprise Southbridge IDE Redirection",
-"	1085  Enterprise Southbridge Serial Port Redirection",
-"	1086  Enterprise Southbridge IPMI/KCS0",
-"	1087  Enterprise Southbridge UHCI Redirection",
-"	1089  Enterprise Southbridge BT",
-"	108a  82546EB Gigabit Ethernet Controller",
-"	108b  82573V Gigabit Ethernet Controller (Copper)",
-"	108c  82573E Gigabit Ethernet Controller (Copper)",
-"	108e  82573E KCS (Active Management)",
-"	108f  Intel(R) Active Management Technology - SOL",
-"	1092  Intel(R) PRO/100 VE Network Connection",
-"	1096  PRO/1000 EB Network Connection with I/O Acceleration",
-"	1097  Enterprise Southbridge DPT LAN fiber",
-"	1098  PRO/1000 EB Backplane Connection with I/O Acceleration",
-"	1099  82546GB Quad Port Server Adapter",
-"	109a  82573L Gigabit Ethernet Controller",
-"		17aa 207e  Thinkpad X60s",
-"	109b  82546GB PRO/1000 GF Quad Port Server Adapter",
-"	10a0  82571EB PRO/1000 AT Quad Port Bypass Adapter",
-"	10a1  82571EB PRO/1000 AF Quad Port Bypass Adapter",
-"	10b0  82573L PRO/1000 PL Network Connection",
-"	10b2  82573V PRO/1000 PM Network Connection",
-"	10b3  82573E PRO/1000 PM Network Connection",
-"	10b4  82573L PRO/1000 PL Network Connection",
-"	10b5  82546GB PRO/1000 GT Quad Port Server Adapter",
-"		103c 3109  NC340T PCI-X Quad-port Gigabit Server Adapter",
-"	1107  PRO/1000 MF Server Adapter (LX)",
-"	1130  82815 815 Chipset Host Bridge and Memory Controller Hub",
-"		1025 1016  Travelmate 612 TX",
-"		1043 8027  TUSL2-C Mainboard",
-"		104d 80df  Vaio PCG-FX403",
-"		8086 4532  D815EEA2 mainboard",
-"		8086 4557  D815EGEW Mainboard",
-"	1131  82815 815 Chipset AGP Bridge",
-"	1132  82815 CGC [Chipset Graphics Controller]",
-"		1025 1016  Travelmate 612 TX",
-"		104d 80df  Vaio PCG-FX403",
-"		8086 4532  D815EEA2 Mainboard",
-"		8086 4541  D815EEA Motherboard",
-"		8086 4557  D815EGEW Mainboard",
-"	1161  82806AA PCI64 Hub Advanced Programmable Interrupt Controller",
-"		8086 1161  82806AA PCI64 Hub APIC",
-"	1162  Xscale 80200 Big Endian Companion Chip",
-"	1200  Intel IXP1200 Network Processor",
-"		172a 0000  AEP SSL Accelerator",
-"	1209  8255xER/82551IT Fast Ethernet Controller",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1051  CE7 mainboard",
-"		4c53 1070  PC6 mainboard",
-"	1221  82092AA PCI to PCMCIA Bridge",
-"	1222  82092AA IDE Controller",
-"	1223  SAA7116",
-"	1225  82452KX/GX [Orion]",
-"	1226  82596 PRO/10 PCI",
-"	1227  82865 EtherExpress PRO/100A",
-"	1228  82556 EtherExpress PRO/100 Smart",
-"	1229  82557/8/9 [Ethernet Pro 100]",
-"		0e11 3001  82559 Fast Ethernet LOM with Alert on LAN*",
-"		0e11 3002  82559 Fast Ethernet LOM with Alert on LAN*",
-"		0e11 3003  82559 Fast Ethernet LOM with Alert on LAN*",
-"		0e11 3004  82559 Fast Ethernet LOM with Alert on LAN*",
-"		0e11 3005  82559 Fast Ethernet LOM with Alert on LAN*",
-"		0e11 3006  82559 Fast Ethernet LOM with Alert on LAN*",
-"		0e11 3007  82559 Fast Ethernet LOM with Alert on LAN*",
-"		0e11 b01e  NC3120 Fast Ethernet NIC",
-"		0e11 b01f  NC3122 Fast Ethernet NIC (dual port)",
-"		0e11 b02f  NC1120 Ethernet NIC",
-"		0e11 b04a  Netelligent 10/100TX NIC with Wake on LAN",
-"		0e11 b0c6  NC3161 Fast Ethernet NIC (embedded, WOL)",
-"		0e11 b0c7  NC3160 Fast Ethernet NIC (embedded)",
-"		0e11 b0d7  NC3121 Fast Ethernet NIC (WOL)",
-"		0e11 b0dd  NC3131 Fast Ethernet NIC (dual port)",
-"		0e11 b0de  NC3132 Fast Ethernet Module (dual port)",
-"		0e11 b0e1  NC3133 Fast Ethernet Module (100-FX)",
-"		0e11 b134  NC3163 Fast Ethernet NIC (embedded, WOL)",
-"		0e11 b13c  NC3162 Fast Ethernet NIC (embedded)",
-"		0e11 b144  NC3123 Fast Ethernet NIC (WOL)",
-"		0e11 b163  NC3134 Fast Ethernet NIC (dual port)",
-"		0e11 b164  NC3135 Fast Ethernet Upgrade Module (dual port)",
-"		0e11 b1a4  NC7131 Gigabit Server Adapter",
-"		1014 005c  82558B Ethernet Pro 10/100",
-"		1014 01bc  82559 Fast Ethernet LAN On Motherboard",
-"		1014 01f1  10/100 Ethernet Server Adapter",
-"		1014 01f2  10/100 Ethernet Server Adapter",
-"		1014 0207  Ethernet Pro/100 S",
-"		1014 0232  10/100 Dual Port Server Adapter",
-"		1014 023a  ThinkPad R30",
-"		1014 105c  Netfinity 10/100",
-"		1014 2205  ThinkPad A22p",
-"		1014 305c  10/100 EtherJet Management Adapter",
-"		1014 405c  10/100 EtherJet Adapter with Alert on LAN",
-"		1014 505c  10/100 EtherJet Secure Management Adapter",
-"		1014 605c  10/100 EtherJet Secure Management Adapter",
-"		1014 705c  10/100 Netfinity 10/100 Ethernet Security Adapter",
-"		1014 805c  10/100 Netfinity 10/100 Ethernet Security Adapter",
-"		1028 009b  PowerEdge 2500/2550",
-"		1028 00ce  PowerEdge 1400",
-"		1033 8000  PC-9821X-B06",
-"		1033 8016  PK-UG-X006",
-"		1033 801f  PK-UG-X006",
-"		1033 8026  PK-UG-X006",
-"		1033 8063  82559-based Fast Ethernet Adapter",
-"		1033 8064  82559-based Fast Ethernet Adapter",
-"		103c 10c0  NetServer 10/100TX",
-"		103c 10c3  NetServer 10/100TX",
-"		103c 10ca  NetServer 10/100TX",
-"		103c 10cb  NetServer 10/100TX",
-"		103c 10e3  NetServer 10/100TX",
-"		103c 10e4  NetServer 10/100TX",
-"		103c 1200  NetServer 10/100TX",
-"		108e 10cf  EtherExpress PRO/100(B)",
-"		10c3 1100  SmartEther100 SC1100",
-"		10cf 1115  8255x-based Ethernet Adapter (10/100)",
-"		10cf 1143  8255x-based Ethernet Adapter (10/100)",
-"		110a 008b  82551QM Fast Ethernet Multifuction PCI/CardBus Controller",
-"		1179 0001  8255x-based Ethernet Adapter (10/100)",
-"		1179 0002  PCI FastEther LAN on Docker",
-"		1179 0003  8255x-based Fast Ethernet",
-"		1259 2560  AT-2560 100",
-"		1259 2561  AT-2560 100 FX Ethernet Adapter",
-"		1266 0001  NE10/100 Adapter",
-"		13e9 1000  6221L-4U",
-"		144d 2501  SEM-2000 MiniPCI LAN Adapter",
-"		144d 2502  SEM-2100IL MiniPCI LAN Adapter",
-"		1668 1100  EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)",
-"		4c53 1080  CT8 mainboard",
-"		4c53 10e0  PSL09 PrPMC",
-"		8086 0001  EtherExpress PRO/100B (TX)",
-"		8086 0002  EtherExpress PRO/100B (T4)",
-"		8086 0003  EtherExpress PRO/10+",
-"		8086 0004  EtherExpress PRO/100 WfM",
-"		8086 0005  82557 10/100",
-"		8086 0006  82557 10/100 with Wake on LAN",
-"		8086 0007  82558 10/100 Adapter",
-"		8086 0008  82558 10/100 with Wake on LAN",
-"		8086 000a  EtherExpress PRO/100+ Management Adapter",
-"		8086 000b  EtherExpress PRO/100+",
-"		8086 000c  EtherExpress PRO/100+ Management Adapter",
-"		8086 000d  EtherExpress PRO/100+ Alert On LAN II* Adapter",
-"		8086 000e  EtherExpress PRO/100+ Management Adapter with Alert On LAN*",
-"		8086 000f  EtherExpress PRO/100 Desktop Adapter",
-"		8086 0010  EtherExpress PRO/100 S Management Adapter",
-"		8086 0011  EtherExpress PRO/100 S Management Adapter",
-"		8086 0012  EtherExpress PRO/100 S Advanced Management Adapter (D)",
-"		8086 0013  EtherExpress PRO/100 S Advanced Management Adapter (E)",
-"		8086 0030  EtherExpress PRO/100  Management Adapter with Alert On LAN* GC",
-"		8086 0031  EtherExpress PRO/100 Desktop Adapter",
-"		8086 0040  EtherExpress PRO/100 S Desktop Adapter",
-"		8086 0041  EtherExpress PRO/100 S Desktop Adapter",
-"		8086 0042  EtherExpress PRO/100 Desktop Adapter",
-"		8086 0050  EtherExpress PRO/100 S Desktop Adapter",
-"		8086 1009  EtherExpress PRO/100+ Server Adapter",
-"		8086 100c  EtherExpress PRO/100+ Server Adapter (PILA8470B)",
-"		8086 1012  EtherExpress PRO/100 S Server Adapter (D)",
-"		8086 1013  EtherExpress PRO/100 S Server Adapter (E)",
-"		8086 1015  EtherExpress PRO/100 S Dual Port Server Adapter",
-"		8086 1017  EtherExpress PRO/100+ Dual Port Server Adapter",
-"		8086 1030  EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server",
-"		8086 1040  EtherExpress PRO/100 S Server Adapter",
-"		8086 1041  EtherExpress PRO/100 S Server Adapter",
-"		8086 1042  EtherExpress PRO/100 Server Adapter",
-"		8086 1050  EtherExpress PRO/100 S Server Adapter",
-"		8086 1051  EtherExpress PRO/100 Server Adapter",
-"		8086 1052  EtherExpress PRO/100 Server Adapter",
-"		8086 10f0  EtherExpress PRO/100+ Dual Port Adapter",
-"		8086 2009  EtherExpress PRO/100 S Mobile Adapter",
-"		8086 200d  EtherExpress PRO/100 Cardbus",
-"		8086 200e  EtherExpress PRO/100 LAN+V90 Cardbus Modem",
-"		8086 200f  EtherExpress PRO/100 SR Mobile Adapter",
-"		8086 2010  EtherExpress PRO/100 S Mobile Combo Adapter",
-"		8086 2013  EtherExpress PRO/100 SR Mobile Combo Adapter",
-"		8086 2016  EtherExpress PRO/100 S Mobile Adapter",
-"		8086 2017  EtherExpress PRO/100 S Combo Mobile Adapter",
-"		8086 2018  EtherExpress PRO/100 SR Mobile Adapter",
-"		8086 2019  EtherExpress PRO/100 SR Combo Mobile Adapter",
-"		8086 2101  EtherExpress PRO/100 P Mobile Adapter",
-"		8086 2102  EtherExpress PRO/100 SP Mobile Adapter",
-"		8086 2103  EtherExpress PRO/100 SP Mobile Adapter",
-"		8086 2104  EtherExpress PRO/100 SP Mobile Adapter",
-"		8086 2105  EtherExpress PRO/100 SP Mobile Adapter",
-"		8086 2106  EtherExpress PRO/100 P Mobile Adapter",
-"		8086 2107  EtherExpress PRO/100 Network Connection",
-"		8086 2108  EtherExpress PRO/100 Network Connection",
-"		8086 2200  EtherExpress PRO/100 P Mobile Combo Adapter",
-"		8086 2201  EtherExpress PRO/100 P Mobile Combo Adapter",
-"		8086 2202  EtherExpress PRO/100 SP Mobile Combo Adapter",
-"		8086 2203  EtherExpress PRO/100+ MiniPCI",
-"		8086 2204  EtherExpress PRO/100+ MiniPCI",
-"		8086 2205  EtherExpress PRO/100 SP Mobile Combo Adapter",
-"		8086 2206  EtherExpress PRO/100 SP Mobile Combo Adapter",
-"		8086 2207  EtherExpress PRO/100 SP Mobile Combo Adapter",
-"		8086 2208  EtherExpress PRO/100 P Mobile Combo Adapter",
-"		8086 2402  EtherExpress PRO/100+ MiniPCI",
-"		8086 2407  EtherExpress PRO/100+ MiniPCI",
-"		8086 2408  EtherExpress PRO/100+ MiniPCI",
-"		8086 2409  EtherExpress PRO/100+ MiniPCI",
-"		8086 240f  EtherExpress PRO/100+ MiniPCI",
-"		8086 2410  EtherExpress PRO/100+ MiniPCI",
-"		8086 2411  EtherExpress PRO/100+ MiniPCI",
-"		8086 2412  EtherExpress PRO/100+ MiniPCI",
-"		8086 2413  EtherExpress PRO/100+ MiniPCI",
-"		8086 3000  82559 Fast Ethernet LAN on Motherboard",
-"		8086 3001  82559 Fast Ethernet LOM with Basic Alert on LAN*",
-"		8086 3002  82559 Fast Ethernet LOM with Alert on LAN II*",
-"		8086 3006  EtherExpress PRO/100 S Network Connection",
-"		8086 3007  EtherExpress PRO/100 S Network Connection",
-"		8086 3008  EtherExpress PRO/100 Network Connection",
-"		8086 3010  EtherExpress PRO/100 S Network Connection",
-"		8086 3011  EtherExpress PRO/100 S Network Connection",
-"		8086 3012  EtherExpress PRO/100 Network Connection",
-"		8086 3411  SDS2 Mainboard",
-"	122d  430FX - 82437FX TSC [Triton I]",
-"	122e  82371FB PIIX ISA [Triton I]",
-"	1230  82371FB PIIX IDE [Triton I]",
-"	1231  DSVD Modem",
-"	1234  430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)",
-"	1235  430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP)",
-"	1237  440FX - 82441FX PMC [Natoma]",
-"	1239  82371FB PIIX IDE Interface",
-"	123b  82380PB PCI to PCI Docking Bridge",
-"	123c  82380AB (MISA) Mobile PCI-to-ISA Bridge",
-"	123d  683053 Programmable Interrupt Device",
-"	123e  82466GX (IHPC) Integrated Hot-Plug Controller",
-"	123f  82466GX Integrated Hot-Plug Controller (IHPC)",
-"	1240  82752 (752) AGP Graphics Accelerator",
-"	124b  82380FB (MPCI2) Mobile Docking Controller",
-"	1250  430HX - 82439HX TXC [Triton II]",
-"	1360  82806AA PCI64 Hub PCI Bridge",
-"	1361  82806AA PCI64 Hub Controller (HRes)",
-"		8086 1361  82806AA PCI64 Hub Controller (HRes)",
-"		8086 8000  82806AA PCI64 Hub Controller (HRes)",
-"	1460  82870P2 P64H2 Hub PCI Bridge",
-"	1461  82870P2 P64H2 I/OxAPIC",
-"		15d9 3480  P4DP6",
-"		4c53 1090  Cx9/Vx9 mainboard",
-"	1462  82870P2 P64H2 Hot Plug Controller",
-"	1960  80960RP [i960RP Microprocessor]",
-"		101e 0431  MegaRAID 431 RAID Controller",
-"		101e 0438  MegaRAID 438 Ultra2 LVD RAID Controller",
-"		101e 0466  MegaRAID 466 Express Plus RAID Controller",
-"		101e 0467  MegaRAID 467 Enterprise 1500 RAID Controller",
-"		101e 0490  MegaRAID 490 Express 300 RAID Controller",
-"		101e 0762  MegaRAID 762 Express RAID Controller",
-"		101e 09a0  PowerEdge Expandable RAID Controller 2/SC",
-"		1028 0467  PowerEdge Expandable RAID Controller 2/DC",
-"		1028 1111  PowerEdge Expandable RAID Controller 2/SC",
-"		103c 03a2  MegaRAID",
-"		103c 10c6  MegaRAID 438, HP NetRAID-3Si",
-"		103c 10c7  MegaRAID T5, Integrated HP NetRAID",
-"		103c 10cc  MegaRAID, Integrated HP NetRAID",
-"		103c 10cd  HP NetRAID-1Si",
-"		105a 0000  SuperTrak",
-"		105a 2168  SuperTrak Pro",
-"		105a 5168  SuperTrak66/100",
-"		1111 1111  MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC",
-"		1111 1112  PowerEdge Expandable RAID Controller 2/SC",
-"		113c 03a2  MegaRAID",
-"		e4bf 1010  CG1-RADIO",
-"		e4bf 1020  CU2-QUARTET",
-"		e4bf 1040  CU1-CHORUS",
-"		e4bf 3100  CX1-BAND",
-"	1962  80960RM [i960RM Microprocessor]",
-"		105a 0000  SuperTrak SX6000 I2O CPU",
-"	1a21  82840 840 (Carmel) Chipset Host Bridge (Hub A)",
-"	1a23  82840 840 (Carmel) Chipset AGP Bridge",
-"	1a24  82840 840 (Carmel) Chipset PCI Bridge (Hub B)",
-"	1a30  82845 845 (Brookdale) Chipset Host Bridge",
-"		1028 010e  Optiplex GX240",
-"	1a31  82845 845 (Brookdale) Chipset AGP Bridge",
-"	1a38  Server DMA Engine",
-"	1a48  PRO/10GbE SR Server Adapter",
-"	2410  82801AA ISA Bridge (LPC)",
-"	2411  82801AA IDE",
-"	2412  82801AA USB",
-"	2413  82801AA SMBus",
-"	2415  82801AA AC'97 Audio",
-"		1028 0095  Precision Workstation 220 Integrated Digital Audio",
-"		110a 0051  Activy 2xx",
-"		11d4 0040  SoundMAX Integrated Digital Audio",
-"		11d4 0048  SoundMAX Integrated Digital Audio",
-"		11d4 5340  SoundMAX Integrated Digital Audio",
-"		1734 1025  Activy 3xx",
-"	2416  82801AA AC'97 Modem",
-"	2418  82801AA PCI Bridge",
-"	2420  82801AB ISA Bridge (LPC)",
-"	2421  82801AB IDE",
-"	2422  82801AB USB",
-"	2423  82801AB SMBus",
-"	2425  82801AB AC'97 Audio",
-"		11d4 0040  SoundMAX Integrated Digital Audio",
-"		11d4 0048  SoundMAX Integrated Digital Audio",
-"	2426  82801AB AC'97 Modem",
-"	2428  82801AB PCI Bridge",
-"	2440  82801BA ISA Bridge (LPC)",
-"	2442  82801BA/BAM USB (Hub #1)",
-"		1014 01c6  Netvista A40/A40p",
-"		1025 1016  Travelmate 612 TX",
-"		1028 010e  Optiplex GX240",
-"		1043 8027  TUSL2-C Mainboard",
-"		104d 80df  Vaio PCG-FX403",
-"		147b 0507  TH7II-RAID",
-"		8086 4532  D815EEA2 mainboard",
-"		8086 4557  D815EGEW Mainboard",
-"	2443  82801BA/BAM SMBus",
-"		1014 01c6  Netvista A40/A40p",
-"		1025 1016  Travelmate 612 TX",
-"		1028 010e  Optiplex GX240",
-"		1043 8027  TUSL2-C Mainboard",
-"		104d 80df  Vaio PCG-FX403",
-"		147b 0507  TH7II-RAID",
-"		8086 4532  D815EEA2 mainboard",
-"		8086 4557  D815EGEW Mainboard",
-"	2444  82801BA/BAM USB (Hub #2)",
-"		1025 1016  Travelmate 612 TX",
-"		1028 010e  Optiplex GX240",
-"		1043 8027  TUSL2-C Mainboard",
-"		104d 80df  Vaio PCG-FX403",
-"		147b 0507  TH7II-RAID",
-"		8086 4532  D815EEA2 mainboard",
-"	2445  82801BA/BAM AC'97 Audio",
-"		0e11 0088  Evo D500",
-"		1014 01c6  Netvista A40/A40p",
-"		1025 1016  Travelmate 612 TX",
-"		104d 80df  Vaio PCG-FX403",
-"		1462 3370  STAC9721 AC",
-"		147b 0507  TH7II-RAID",
-"		8086 4557  D815EGEW Mainboard",
-"	2446  82801BA/BAM AC'97 Modem",
-"		1025 1016  Travelmate 612 TX",
-"		104d 80df  Vaio PCG-FX403",
-"	2448  82801 Mobile PCI Bridge",
-"		103c 099c  NX6110/NC6120",
-"		1734 1055  Amilo M1420",
-"	2449  82801BA/BAM/CA/CAM Ethernet Controller",
-"		0e11 0012  EtherExpress PRO/100 VM",
-"		0e11 0091  EtherExpress PRO/100 VE",
-"		1014 01ce  EtherExpress PRO/100 VE",
-"		1014 01dc  EtherExpress PRO/100 VE",
-"		1014 01eb  EtherExpress PRO/100 VE",
-"		1014 01ec  EtherExpress PRO/100 VE",
-"		1014 0202  EtherExpress PRO/100 VE",
-"		1014 0205  EtherExpress PRO/100 VE",
-"		1014 0217  EtherExpress PRO/100 VE",
-"		1014 0234  EtherExpress PRO/100 VE",
-"		1014 023d  EtherExpress PRO/100 VE",
-"		1014 0244  EtherExpress PRO/100 VE",
-"		1014 0245  EtherExpress PRO/100 VE",
-"		1014 0265  PRO/100 VE Desktop Connection",
-"		1014 0267  PRO/100 VE Desktop Connection",
-"		1014 026a  PRO/100 VE Desktop Connection",
-"		109f 315d  EtherExpress PRO/100 VE",
-"		109f 3181  EtherExpress PRO/100 VE",
-"		1179 ff01  PRO/100 VE Network Connection",
-"		1186 7801  EtherExpress PRO/100 VE",
-"		144d 2602  HomePNA 1M CNR",
-"		8086 3010  EtherExpress PRO/100 VE",
-"		8086 3011  EtherExpress PRO/100 VM",
-"		8086 3012  82562EH based Phoneline",
-"		8086 3013  EtherExpress PRO/100 VE",
-"		8086 3014  EtherExpress PRO/100 VM",
-"		8086 3015  82562EH based Phoneline",
-"		8086 3016  EtherExpress PRO/100 P Mobile Combo",
-"		8086 3017  EtherExpress PRO/100 P Mobile",
-"		8086 3018  EtherExpress PRO/100",
-"	244a  82801BAM IDE U100",
-"		1025 1016  Travelmate 612TX",
-"		104d 80df  Vaio PCG-FX403",
-"	244b  82801BA IDE U100",
-"		1014 01c6  Netvista A40/A40p",
-"		1028 010e  Optiplex GX240",
-"		1043 8027  TUSL2-C Mainboard",
-"		147b 0507  TH7II-RAID",
-"		8086 4532  D815EEA2 mainboard",
-"		8086 4557  D815EGEW Mainboard",
-"	244c  82801BAM ISA Bridge (LPC)",
-"	244e  82801 PCI Bridge",
-"		1014 0267  NetVista A30p",
-"	2450  82801E ISA Bridge (LPC)",
-"	2452  82801E USB",
-"	2453  82801E SMBus",
-"	2459  82801E Ethernet Controller 0",
-"	245b  82801E IDE U100",
-"	245d  82801E Ethernet Controller 1",
-"	245e  82801E PCI Bridge",
-"	2480  82801CA LPC Interface Controller",
-"	2482  82801CA/CAM USB (Hub #1)",
-"		0e11 0030  Evo N600c",
-"		1014 0220  ThinkPad A/T/X Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		15d9 3480  P4DP6",
-"		8086 1958  vpr Matrix 170B4",
-"		8086 3424  SE7501HG2 Mainboard",
-"		8086 4541  Latitude C640",
-"	2483  82801CA/CAM SMBus Controller",
-"		1014 0220  ThinkPad A/T/X Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		15d9 3480  P4DP6",
-"		8086 1958  vpr Matrix 170B4",
-"	2484  82801CA/CAM USB (Hub #2)",
-"		0e11 0030  Evo N600c",
-"		1014 0220  ThinkPad A/T/X Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		15d9 3480  P4DP6",
-"		8086 1958  vpr Matrix 170B4",
-"	2485  82801CA/CAM AC'97 Audio Controller",
-"		1013 5959  Crystal WMD Audio Codec",
-"		1014 0222  ThinkPad T23 (2647-4MG) or A30/A30p (2652/2653)",
-"		1014 0508  ThinkPad T30",
-"		1014 051c  ThinkPad A/T/X Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		144d c006  vpr Matrix 170B4",
-"	2486  82801CA/CAM AC'97 Modem Controller",
-"		1014 0223  ThinkPad A/T/X Series",
-"		1014 0503  ThinkPad R31 2656BBG",
-"		1014 051a  ThinkPad A/T/X Series",
-"		101f 1025  620 Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		134d 4c21  Dell Inspiron 2100 internal modem",
-"		144d 2115  vpr Matrix 170B4 internal modem",
-"		14f1 5421  MD56ORD V.92 MDC Modem",
-"	2487  82801CA/CAM USB (Hub #3)",
-"		0e11 0030  Evo N600c",
-"		1014 0220  ThinkPad A/T/X Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		15d9 3480  P4DP6",
-"		8086 1958  vpr Matrix 170B4",
-"	248a  82801CAM IDE U100",
-"		0e11 0030  Evo N600c",
-"		1014 0220  ThinkPad A/T/X Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"		8086 1958  vpr Matrix 170B4",
-"		8086 4541  Latitude C640",
-"	248b  82801CA Ultra ATA Storage Controller",
-"		15d9 3480  P4DP6",
-"	248c  82801CAM ISA Bridge (LPC)",
-"	24c0  82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge",
-"		1014 0267  NetVista A30p",
-"		1462 5800  845PE Max (MS-6580)",
-"	24c1  82801DBL (ICH4-L) IDE Controller",
-"	24c2  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1",
-"		1014 0267  NetVista A30p",
-"		1025 005a  TravelMate 290",
-"		1028 0126  Optiplex GX260",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"		1462 5800  845PE Max (MS-6580)",
-"		1509 2990  Averatec 5110H laptop",
-"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
-"		1734 1055  Amilo M1420",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"		8086 4541  Latitude D400",
-"	24c3  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller",
-"		1014 0267  NetVista A30p",
-"		1025 005a  TravelMate 290",
-"		1028 0126  Optiplex GX260",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"		1458 24c2  GA-8PE667 Ultra",
-"		1462 5800  845PE Max (MS-6580)",
-"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
-"		1734 1055  Amilo M1420",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"	24c4  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2",
-"		1014 0267  NetVista A30p",
-"		1025 005a  TravelMate 290",
-"		1028 0126  Optiplex GX260",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"		1462 5800  845PE Max (MS-6580)",
-"		1509 2990  Averatec 5110H",
-"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"		8086 4541  Latitude D400",
-"	24c5  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller",
-"		0e11 00b8  Analog Devices Inc. codec [SoundMAX]",
-"		1014 0267  NetVista A30p",
-"		1025 005a  TravelMate 290",
-"		1028 0139  Latitude D400",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"		1458 a002  GA-8PE667 Ultra",
-"		1462 5800  845PE Max (MS-6580)",
-"		1734 1005  D1451 (SCENIC N300, i845GV) Sigmatel STAC9750T",
-"		1734 1055  Amilo M1420",
-"	24c6  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller",
-"		1025 003c  Aspire 2001WLCi (Compal CL50 motherboard) implementation",
-"		1025 005a  TravelMate 290",
-"		1028 0196  Inspiron 5160",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"	24c7  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3",
-"		1014 0267  NetVista A30p",
-"		1025 005a  TravelMate 290",
-"		1028 0126  Optiplex GX260",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"		1462 5800  845PE Max (MS-6580)",
-"		1509 2990  Averatec 5110H",
-"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"		8086 4541  Latitude D400",
-"	24ca  82801DBM (ICH4-M) IDE Controller",
-"		1025 005a  TravelMate 290",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"		1734 1055  Amilo M1420",
-"		8086 4541  Latitude D400",
-"	24cb  82801DB (ICH4) IDE Controller",
-"		1014 0267  NetVista A30p",
-"		1028 0126  Optiplex GX260",
-"		1458 24c2  GA-8PE667 Ultra",
-"		1462 5800  845PE Max (MS-6580)",
-"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"	24cc  82801DBM (ICH4-M) LPC Interface Bridge",
-"		1734 1055  Amilo M1420",
-"	24cd  82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller",
-"		1014 0267  NetVista A30p",
-"		1025 005a  TravelMate 290",
-"		1028 011d  Latitude D600",
-"		1028 0126  Optiplex GX260",
-"		1028 0139  Latitude D400",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"		1071 8160  MIM2000",
-"		1462 3981  845PE Max (MS-6580)",
-"		1509 1968  Averatec 5110H",
-"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
-"		1734 1055  Amilo M1420",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"	24d0  82801EB/ER (ICH5/ICH5R) LPC Interface Bridge",
-"	24d1  82801EB (ICH5) SATA Controller",
-"		1028 0169  Precision 470",
-"		1028 019a  PowerEdge SC1425",
-"		103c 12bc  d530 CMT (DG746A)",
-"		1043 80a6  P4P800 SE Mainboard",
-"		1458 24d1  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		15d9 4580  P4SCE Mainboard",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24d2  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1",
-"		1014 02ed  xSeries server mainboard",
-"		1028 0169  Precision 470",
-"		1028 0183  PowerEdge 1800",
-"		1028 019a  PowerEdge SC1425",
-"		103c 006a  NX9500",
-"		103c 12bc  d530 CMT (DG746A)",
-"		1043 80a6  P5P800-MX Mainboard",
-"		1458 24d2  GA-8IPE1000/8KNXP motherboard",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		15d9 4580  P4SCE Mainboard",
-"		1734 101c  Primergy RX300 S2",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24d3  82801EB/ER (ICH5/ICH5R) SMBus Controller",
-"		1014 02ed  xSeries server mainboard",
-"		1028 0156  Precision 360",
-"		1028 0169  Precision 470",
-"		1043 80a6  P4P800 Mainboard",
-"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		15d9 4580  P4SCE Mainboard",
-"		1734 101c  Primergy RX300 S2",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24d4  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2",
-"		1014 02ed  xSeries server mainboard",
-"		1028 0169  Precision 470",
-"		1028 0183  PowerEdge 1800",
-"		1028 019a  PowerEdge SC1425",
-"		103c 006a  NX9500",
-"		103c 12bc  d530 CMT (DG746A)",
-"		1043 80a6  P5P800-MX Mainboard",
-"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		15d9 4580  P4SCE Mainboard",
-"		1734 101c  Primergy RX300 S2",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24d5  82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller",
-"		1028 0169  Precision 470",
-"		103c 006a  NX9500",
-"		103c 12bc  d330 uT",
-"		1043 80f3  P4P800 Mainboard",
-"		1043 810f  P5P800-MX Mainboard",
-"		1458 a002  GA-8IPE1000/8KNXP motherboard",
-"		1462 0080  65PE Neo2-V (MS-6788) mainboard",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		8086 a000  D865PERL mainboard",
-"		8086 e000  D865PERL mainboard",
-"		8086 e001  Desktop Board D865GBF",
-"	24d6  82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller",
-"		103c 006a  NX9500",
-"	24d7  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3",
-"		1014 02ed  xSeries server mainboard",
-"		1028 0169  Precision 470",
-"		1028 0183  PowerEdge 1800",
-"		103c 006a  NX9500",
-"		103c 12bc  d530 CMT (DG746A)",
-"		1043 80a6  P5P800-MX Mainboard",
-"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		15d9 4580  P4SCE Mainboard",
-"		1734 101c  Primergy RX300 S2",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24db  82801EB/ER (ICH5/ICH5R) IDE Controller",
-"		1014 02ed  xSeries server mainboard",
-"		1028 0169  Precision 470",
-"		1028 019a  PowerEdge SC1425",
-"		103c 006a  NX9500",
-"		103c 12bc  d530 CMT (DG746A)",
-"		1043 80a6  P5P800-MX Mainboard",
-"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		1462 7580  MSI 875P",
-"		15d9 4580  P4SCE Mainboard",
-"		1734 101c  Primergy RX300 S2",
-"		8086 24db  P4C800 Mainboard",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24dc  82801EB (ICH5) LPC Interface Bridge",
-"	24dd  82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller",
-"		1014 02ed  xSeries server mainboard",
-"		1028 0169  Precision 470",
-"		1028 0183  PowerEdge 1800",
-"		1028 019a  PowerEdge SC1425",
-"		103c 006a  NX9500",
-"		103c 12bc  d530 CMT (DG746A)",
-"		1043 80a6  P5P800-MX Mainboard",
-"		1458 5006  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24de  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4",
-"		1014 02ed  xSeries server mainboard",
-"		1028 0169  Precision 470",
-"		1043 80a6  P5P800-MX Mainboard",
-"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
-"		1462 7280  865PE Neo2 (MS-6728)",
-"		15d9 4580  P4SCE Mainboard",
-"		1734 101c  Primergy RX300 S2",
-"		8086 3427  S875WP1-E mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"		8086 524c  D865PERL mainboard",
-"	24df  82801ER (ICH5R) SATA Controller",
-"	2500  82820 820 (Camino) Chipset Host Bridge (MCH)",
-"		1028 0095  Precision Workstation 220 Chipset",
-"		1043 801c  P3C-2000 system chipset",
-"	2501  82820 820 (Camino) Chipset Host Bridge (MCH)",
-"		1043 801c  P3C-2000 system chipset",
-"	250b  82820 820 (Camino) Chipset Host Bridge",
-"	250f  82820 820 (Camino) Chipset AGP Bridge",
-"	2520  82805AA MTH Memory Translator Hub",
-"	2521  82804AA MRH-S Memory Repeater Hub for SDRAM",
-"	2530  82850 850 (Tehama) Chipset Host Bridge (MCH)",
-"		147b 0507  TH7II-RAID",
-"	2531  82860 860 (Wombat) Chipset Host Bridge (MCH)",
-"	2532  82850 850 (Tehama) Chipset AGP Bridge",
-"	2533  82860 860 (Wombat) Chipset AGP Bridge",
-"	2534  82860 860 (Wombat) Chipset PCI Bridge",
-"	2540  E7500 Memory Controller Hub",
-"		15d9 3480  P4DP6",
-"	2541  E7500/E7501 Host RASUM Controller",
-"		15d9 3480  P4DP6",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"		8086 3424  SE7501HG2 Mainboard",
-"	2543  E7500/E7501 Hub Interface B PCI-to-PCI Bridge",
-"	2544  E7500/E7501 Hub Interface B RASUM Controller",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"	2545  E7500/E7501 Hub Interface C PCI-to-PCI Bridge",
-"	2546  E7500/E7501 Hub Interface C RASUM Controller",
-"	2547  E7500/E7501 Hub Interface D PCI-to-PCI Bridge",
-"	2548  E7500/E7501 Hub Interface D RASUM Controller",
-"	254c  E7501 Memory Controller Hub",
-"		4c53 1090  Cx9 / Vx9 mainboard",
-"		8086 3424  SE7501HG2 Mainboard",
-"	2550  E7505 Memory Controller Hub",
-"	2551  E7505/E7205 Series RAS Controller",
-"	2552  E7505/E7205 PCI-to-AGP Bridge",
-"	2553  E7505 Hub Interface B PCI-to-PCI Bridge",
-"	2554  E7505 Hub Interface B PCI-to-PCI Bridge RAS Controller",
-"	255d  E7205 Memory Controller Hub",
-"	2560  82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface",
-"		1028 0126  Optiplex GX260",
-"		1458 2560  GA-8PE667 Ultra",
-"		1462 5800  845PE Max (MS-6580)",
-"	2561  82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge",
-"	2562  82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device",
-"		0e11 00b9  Evo D510 SFF",
-"		1014 0267  NetVista A30p",
-"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
-"	2570  82865G/PE/P DRAM Controller/Host-Hub Interface",
-"		103c 006a  NX9500",
-"		1043 80f2  P5P800-MX Mainboard",
-"		1458 2570  GA-8IPE1000 Pro2 motherboard (865PE)",
-"	2571  82865G/PE/P PCI to AGP Controller",
-"	2572  82865G Integrated Graphics Controller",
-"		1028 019d  Dimension 3000",
-"		103c 12bc  D530 sff(dc578av)",
-"		1043 80a5  P5P800-MX Mainboard",
-"		8086 4246  Desktop Board D865GBF",
-"	2573  82865G/PE/P PCI to CSA Bridge",
-"	2576  82865G/PE/P Processor to I/O Memory Interface",
-"	2578  82875P/E7210 Memory Controller Hub",
-"		1458 2578  GA-8KNXP motherboard (875P)",
-"		1462 7580  MS-6758 (875P Neo)",
-"		15d9 4580  P4SCE Motherboard",
-"	2579  82875P Processor to AGP Controller",
-"	257b  82875P/E7210 Processor to PCI to CSA Bridge",
-"	257e  82875P/E7210 Processor to I/O Memory Interface",
-"	2580  915G/P/GV/GL/PL/910GL Express Memory Controller Hub",
-"		1458 2580  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105b  Scenic W620",
-"	2581  915G/P/GV/GL/PL/910GL Express PCI Express Root Port",
-"	2582  82915G/GV/910GL Express Chipset Family Graphics Controller",
-"		1028 1079  Optiplex GX280",
-"		103c 3006  DC7100 SFF(DX878AV)",
-"		1043 2582  P5GD1-VW Mainboard",
-"		1458 2582  GA-8I915ME-G Mainboard",
-"		1734 105b  Scenic W620",
-"	2584  925X/XE Express Memory Controller Hub",
-"	2585  925X/XE Express PCI Express Root Port",
-"	2588  E7220/E7221 Memory Controller Hub",
-"	2589  E7220/E7221 PCI Express Root Port",
-"	258a  E7221 Integrated Graphics Controller",
-"	2590  Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller",
-"		1028 0182  Dell Latidude C610",
-"		103c 099c  NX6110/NC6120",
-"		a304 81b7  Vaio VGN-S3XP",
-"	2591  Mobile 915GM/PM Express PCI Express Root Port",
-"	2592  Mobile 915GM/GMS/910GML Express Graphics Controller",
-"		103c 099c  NX6110/NC6120",
-"		103c 308a  NC6220",
-"		1043 1881  GMA 900 915GM Integrated Graphics",
-"	25a1  6300ESB LPC Interface Controller",
-"	25a2  6300ESB PATA Storage Controller",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10e0  PSL09 PrPMC",
-"	25a3  6300ESB SATA Storage Controller",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"		4c53 10e0  PSL09 PrPMC",
-"	25a4  6300ESB SMBus Controller",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"		4c53 10e0  PSL09 PrPMC",
-"	25a6  6300ESB AC'97 Audio Controller",
-"		4c53 10b0  CL9 mainboard",
-"	25a7  6300ESB AC'97 Modem Controller",
-"	25a9  6300ESB USB Universal Host Controller",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"		4c53 10e0  PSL09 PrPMC",
-"	25aa  6300ESB USB Universal Host Controller",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10e0  PSL09 PrPMC",
-"	25ab  6300ESB Watchdog Timer",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"		4c53 10e0  PSL09 PrPMC",
-"	25ac  6300ESB I/O Advanced Programmable Interrupt Controller",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"		4c53 10e0  PSL09 PrPMC",
-"	25ad  6300ESB USB2 Enhanced Host Controller",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"		4c53 10e0  PSL09 PrPMC",
-"	25ae  6300ESB 64-bit PCI-X Bridge",
-"	25b0  6300ESB SATA RAID Controller",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"		4c53 10e0  PSL09 PrPMC",
-"	25c0  Workstation Memory Controller Hub",
-"	25d0  Server Memory Controller Hub",
-"	25d4  Server Memory Contoller Hub",
-"	25d8  Server Memory Controller Hub",
-"	25e2  Server PCI Express x4 Port 2",
-"	25e3  Server PCI Express x4 Port 3",
-"	25e4  Server PCI Express x4 Port 4",
-"	25e5  Server PCI Express x4 Port 5",
-"	25e6  Server PCI Express x4 Port 6",
-"	25e7  Server PCI Express x4 Port 7",
-"	25e8  Server AMB Memory Mapped Registers",
-"	25f0  Server Error Reporting Registers",
-"	25f1  Reserved Registers",
-"	25f3  Reserved Registers",
-"	25f5  Server FBD Registers",
-"	25f6  Server FBD Registers",
-"	25f7  Server PCI Express x8 Port 2-3",
-"	25f8  Server PCI Express x8 Port 4-5",
-"	25f9  Server PCI Express x8 Port 6-7",
-"	25fa  Server PCI Express x16 Port 4-7",
-"	2600  E8500/E8501 Hub Interface 1.5",
-"	2601  E8500/E8501 PCI Express x4 Port D",
-"	2602  E8500/E8501 PCI Express x4 Port C0",
-"	2603  E8500/E8501 PCI Express x4 Port C1",
-"	2604  E8500/E8501 PCI Express x4 Port B0",
-"	2605  E8500/E8501 PCI Express x4 Port B1",
-"	2606  E8500/E8501 PCI Express x4 Port A0",
-"	2607  E8500/E8501 PCI Express x4 Port A1",
-"	2608  E8500/E8501 PCI Express x8 Port C",
-"	2609  E8500/E8501 PCI Express x8 Port B",
-"	260a  E8500/E8501 PCI Express x8 Port A",
-"	260c  E8500/E8501 IMI Registers",
-"	2610  E8500/E8501 Front Side Bus, Boot, and Interrupt Registers",
-"	2611  E8500/E8501 Address Mapping Registers",
-"	2612  E8500/E8501 RAS Registers",
-"	2613  E8500/E8501 Reserved Registers",
-"	2614  E8500/E8501 Reserved Registers",
-"	2615  E8500/E8501 Miscellaneous Registers",
-"	2617  E8500/E8501 Reserved Registers",
-"	2618  E8500/E8501 Reserved Registers",
-"	2619  E8500/E8501 Reserved Registers",
-"	261a  E8500/E8501 Reserved Registers",
-"	261b  E8500/E8501 Reserved Registers",
-"	261c  E8500/E8501 Reserved Registers",
-"	261d  E8500/E8501 Reserved Registers",
-"	261e  E8500/E8501 Reserved Registers",
-"	2620  E8500/E8501 eXternal Memory Bridge",
-"	2621  E8500/E8501 XMB Miscellaneous Registers",
-"	2622  E8500/E8501 XMB Memory Interleaving Registers",
-"	2623  E8500/E8501 XMB DDR Initialization and Calibration",
-"	2624  E8500/E8501 XMB Reserved Registers",
-"	2625  E8500/E8501 XMB Reserved Registers",
-"	2626  E8500/E8501 XMB Reserved Registers",
-"	2627  E8500/E8501 XMB Reserved Registers",
-"	2640  82801FB/FR (ICH6/ICH6R) LPC Interface Bridge",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	2641  82801FBM (ICH6M) LPC Interface Bridge",
-"		103c 099c  NX6110/NC6120",
-"	2642  82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge",
-"	2651  82801FB/FW (ICH6/ICH6W) SATA Controller",
-"		1028 0179  Optiplex GX280",
-"		1043 2601  P5GD1-VW Mainboard",
-"		1734 105c  Scenic W620",
-"		8086 4147  D915GAG Motherboard",
-"	2652  82801FR/FRW (ICH6R/ICH6RW) SATA Controller",
-"		1462 7028  915P/G Neo2",
-"	2653  82801FBM (ICH6M) SATA Controller",
-"	2658  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1",
-"		1028 0179  Optiplex GX280",
-"		103c 099c  NX6110/NC6120",
-"		1043 80a6  P5GD1-VW Mainboard",
-"		1458 2558  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	2659  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2",
-"		1028 0179  Optiplex GX280",
-"		103c 099c  NX6110/NC6120",
-"		1043 80a6  P5GD1-VW Mainboard",
-"		1458 2659  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	265a  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3",
-"		1028 0179  Optiplex GX280",
-"		103c 099c  NX6110/NC6120",
-"		1043 80a6  P5GD1-VW Mainboard",
-"		1458 265a  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	265b  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4",
-"		1028 0179  Optiplex GX280",
-"		103c 099c  NX6110/NC6120",
-"		1043 80a6  P5GD1-VW Mainboard",
-"		1458 265a  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	265c  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller",
-"		1028 0179  Optiplex GX280",
-"		103c 099c  NX6110/NC6120",
-"		1043 80a6  P5GD1-VW Mainboard",
-"		1458 5006  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	2660  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1",
-"		103c 099c  NX6110/NC6120",
-"	2662  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2",
-"	2664  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3",
-"	2666  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4",
-"	2668  82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller",
-"		1043 814e  P5GD1-VW Mainboard",
-"	266a  82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller",
-"		1028 0179  Optiplex GX280",
-"		1043 80a6  P5GD1-VW Mainboard",
-"		1458 266a  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	266c  82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller",
-"	266d  82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller",
-"		1025 006a  Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop)",
-"		103c 099c  NX6110/NC6120",
-"	266e  82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller",
-"		1025 006a  Realtek ALC 655 codec (in Acer TravelMate 2410 serie laptop)",
-"		1028 0179  Optiplex GX280",
-"		1028 0182  Latitude D610 Laptop",
-"		1028 0188  Inspiron 6000 laptop",
-"		103c 0944  Compaq NC6220",
-"		103c 099c  NX6110/NC6120",
-"		103c 3006  DC7100 SFF(DX878AV)",
-"		1458 a002  GA-8I915ME-G Mainboard",
-"		152d 0745  Packard Bell A8550 Laptop",
-"		1734 105a  Scenic W620",
-"	266f  82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller",
-"		103c 099c  NX6110/NC6120",
-"		1043 80a6  P5GD1-VW Mainboard",
-"		1458 266f  GA-8I915ME-G Mainboard",
-"		1462 7028  915P/G Neo2",
-"		1734 105c  Scenic W620",
-"	2670  Enterprise Southbridge LPC",
-"	2680  Enterprise Southbridge SATA IDE",
-"	2681  Enterprise Southbridge SATA AHCI",
-"	2682  Enterprise Southbridge SATA RAID",
-"	2683  Enterprise Southbridge SATA RAID",
-"	2688  Enterprise Southbridge UHCI USB #1",
-"	2689  Enterprise Southbridge UHCI USB #2",
-"	268a  Enterprise Southbridge UHCI USB #3",
-"	268b  Enterprise Southbridge UHCI USB #4",
-"	268c  Enterprise Southbridge EHCI USB",
-"	2690  Enterprise Southbridge PCI Express Root Port 1",
-"	2692  Enterprise Southbridge PCI Express Root Port 2",
-"	2694  Enterprise Southbridge PCI Express Root Port 3",
-"	2696  Enterprise Southbridge PCI Express Root Port 4",
-"	2698  Enterprise Southbridge AC '97 Audio",
-"	2699  Enterprise Southbridge AC '97 Modem",
-"	269a  Enterprise Southbridge High Definition Audio",
-"	269b  Enterprise Southbridge SMBus",
-"	269e  Enterprise Southbridge PATA",
-"	2770  945G/GZ/P/PL Express Memory Controller Hub",
-"		8086 544e  DeskTop Board D945GTP",
-"	2771  945G/GZ/P/PL Express PCI Express Root Port",
-"	2772  945G/GZ Express Integrated Graphics Controller",
-"		8086 544e  DeskTop Board D945GTP",
-"	2774  955X Express Memory Controller Hub",
-"	2775  955X Express PCI Express Root Port",
-"	2776  945G/GZ Express Integrated Graphics Controller",
-"	2778  E7230 Memory Controller Hub",
-"	2779  E7230 PCI Express Root Port",
-"	277a  975X Express PCI Express Root Port",
-"	277c  975X Express Memory Controller Hub",
-"	277d  975X Express PCI Express Root Port",
-"	2782  82915G Express Chipset Family Graphics Controller",
-"		1043 2582  P5GD1-VW Mainboard",
-"		1734 105b  Scenic W620",
-"	2792  Mobile 915GM/GMS/910GML Express Graphics Controller",
-"		103c 099c  NX6110/NC6120",
-"		1043 1881  GMA 900 915GM Integrated Graphics",
-"	27a0  Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub",
-"	27a1  Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port",
-"	27a2  Mobile 945GM/GMS/940GML Express Integrated Graphics Controller",
-"	27a6  Mobile 945GM/GMS/940GML Express Integrated Graphics Controller",
-"	27b0  82801GH (ICH7DH) LPC Interface Bridge",
-"	27b8  82801GB/GR (ICH7 Family) LPC Interface Bridge",
-"		8086 544e  DeskTop Board D945GTP",
-"	27b9  82801GBM (ICH7-M) LPC Interface Bridge",
-"	27bd  82801GHM (ICH7-M DH) LPC Interface Bridge",
-"	27c0  82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller IDE",
-"		8086 544e  DeskTop Board D945GTP",
-"	27c1  82801GR/GH (ICH7 Family) Serial ATA Storage Controller AHCI",
-"	27c3  82801GR/GH (ICH7 Family) Serial ATA Storage Controller RAID",
-"	27c4  82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller IDE",
-"	27c5  82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller AHCI",
-"	27c6  82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID",
-"	27c8  82801G (ICH7 Family) USB UHCI #1",
-"		8086 544e  DeskTop Board D945GTP",
-"	27c9  82801G (ICH7 Family) USB UHCI #2",
-"		8086 544e  DeskTop Board D945GTP",
-"	27ca  82801G (ICH7 Family) USB UHCI #3",
-"		8086 544e  DeskTop Board D945GTP",
-"	27cb  82801G (ICH7 Family) USB UHCI #4",
-"		8086 544e  DeskTop Board D945GTP",
-"	27cc  82801G (ICH7 Family) USB2 EHCI Controller",
-"		8086 544e  DeskTop Board D945GTP",
-"	27d0  82801G (ICH7 Family) PCI Express Port 1",
-"	27d2  82801G (ICH7 Family) PCI Express Port 2",
-"	27d4  82801G (ICH7 Family) PCI Express Port 3",
-"	27d6  82801G (ICH7 Family) PCI Express Port 4",
-"	27d8  82801G (ICH7 Family) High Definition Audio Controller",
-"	27da  82801G (ICH7 Family) SMBus Controller",
-"		8086 544e  DeskTop Board D945GTP",
-"	27dc  82801G (ICH7 Family) LAN Controller",
-"		8086 308d  DeskTop Board D945GTP",
-"	27dd  82801G (ICH7 Family) AC'97 Modem Controller",
-"	27de  82801G (ICH7 Family) AC'97 Audio Controller",
-"	27df  82801G (ICH7 Family) IDE Controller",
-"		8086 544e  DeskTop Board D945GTP",
-"	27e0  82801GR/GH/GHM (ICH7 Family) PCI Express Port 5",
-"	27e2  82801GR/GH/GHM (ICH7 Family) PCI Express Port 6",
-"	2810  LPC Interface Controller",
-"	2811  Mobile LPC Interface Controller",
-"	2812  LPC Interface Controller",
-"	2814  LPC Interface Controller",
-"	2815  Mobile LPC Interface Controller",
-"	2820  SATA Controller 1 IDE",
-"	2821  SATA Controller AHCI",
-"	2822  SATA Controller RAID",
-"	2824  SATA Controller AHCI",
-"	2825  SATA Controller 2 IDE",
-"	2828  Mobile SATA Controller IDE",
-"	2829  Mobile SATA Controller AHCI",
-"	282a  Mobile SATA Controller RAID",
-"	2830  USB UHCI Controller #1",
-"	2831  USB UHCI Controller #2",
-"	2832  USB UHCI Controller #3",
-"	2834  USB UHCI Controller #4",
-"	2835  USB UHCI Controller #5",
-"	2836  USB2 EHCI Controller #1",
-"	283a  USB2 EHCI Controller #2",
-"	283e  SMBus Controller",
-"	283f  PCI Express Port 1",
-"	2841  PCI Express Port 2",
-"	2843  PCI Express Port 3",
-"	2845  PCI Express Port 4",
-"	2847  PCI Express Port 5",
-"	2849  PCI Express Port 6",
-"	284b  HD Audio Controller",
-"	284f  Thermal Subsystem",
-"	2850  Mobile IDE Controller",
-"	2970  Memory Controller Hub",
-"	2971  PCI Express Root Port",
-"	2972  Integrated Graphics Controller",
-"	2973  Integrated Graphics Controller",
-"	2974  HECI Controller",
-"	2976  PT IDER Controller",
-"	2977  KT Controller",
-"	2990  Memory Controller Hub",
-"	2991  PCI Express Root Port",
-"	2992  Integrated Graphics Controller",
-"	2993  Integrated Graphics Controller",
-"	2994  HECI Controller",
-"	2995  HECI Controller",
-"	2996  PT IDER Controller",
-"	2997  KT Controller",
-"	29a0  Memory Controller Hub",
-"	29a1  PCI Express Root Port",
-"	29a2  Integrated Graphics Controller",
-"	29a3  Integrated Graphics Controller",
-"	29a4  HECI Controller",
-"	29a5  HECI Controller",
-"	29a6  PT IDER Controller",
-"	29a7  KT Controller",
-"	2a00  Mobile Memory Controller Hub",
-"	2a01  Mobile PCI Express Root Port",
-"	2a02  Mobile Integrated Graphics Controller",
-"	2a03  Mobile Integrated Graphics Controller",
-"	3092  Integrated RAID",
-"	3200  GD31244 PCI-X SATA HBA",
-"	3340  82855PM Processor to I/O Controller",
-"		1025 005a  TravelMate 290",
-"		103c 088c  NC8000 laptop",
-"		103c 0890  NC6000 laptop",
-"	3341  82855PM Processor to AGP Controller",
-"	3500  Enterprise Southbridge PCI Express Upstream Port",
-"	3501  Enterprise Southbridge PCI Express Upstream Port",
-"	3504  Enterprise Southbridge IOxAPIC",
-"	3505  Enterprise Southbridge IOxAPIC",
-"	350c  Enterprise Southbridge PCI Express to PCI-X Bridge",
-"	350d  Enterprise Southbridge PCI Express to PCI-X Bridge",
-"	3510  Enterprise Southbridge PCI Express Downstream Port E1",
-"	3511  Enterprise Southbridge PCI Express Downstream Port E1",
-"	3514  Enterprise Southbridge PCI Express Downstream Port E2",
-"	3515  Enterprise Southbridge PCI Express Downstream Port E2",
-"	3518  Enterprise Southbridge PCI Express Downstream Port E3",
-"	3519  Enterprise Southbridge PCI Express Downstream Port E3",
-"	3575  82830 830 Chipset Host Bridge",
-"		0e11 0030  Evo N600c",
-"		1014 021d  ThinkPad A/T/X Series",
-"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
-"	3576  82830 830 Chipset AGP Bridge",
-"	3577  82830 CGC [Chipset Graphics Controller]",
-"		1014 0513  ThinkPad A/T/X Series",
-"	3578  82830 830 Chipset Host Bridge",
-"	3580  82852/82855 GM/GME/PM/GMV Processor to I/O Controller",
-"		1028 0139  Latitude D400",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		1734 1055  Amilo M1420",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10e0  PSL09 PrPMC",
-"	3581  82852/82855 GM/GME/PM/GMV Processor to AGP Controller",
-"		1734 1055  Amilo M1420",
-"	3582  82852/855GM Integrated Graphics Device",
-"		1028 0139  Latitude D400",
-"		1028 0163  Latitude D505",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10e0  PSL09 PrPMC",
-"	3584  82852/82855 GM/GME/PM/GMV Processor to I/O Controller",
-"		1028 0139  Latitude D400",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		1734 1055  Amilo M1420",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10e0  PSL09 PrPMC",
-"	3585  82852/82855 GM/GME/PM/GMV Processor to I/O Controller",
-"		1028 0139  Latitude D400",
-"		1028 0163  Latitude D505",
-"		1028 0196  Inspiron 5160",
-"		1734 1055  Amilo M1420",
-"		4c53 10b0  CL9 mainboard",
-"		4c53 10e0  PSL09 PrPMC",
-"	3590  E7520 Memory Controller Hub",
-"		1028 019a  PowerEdge SC1425",
-"		1734 103e  Primergy RX300 S2",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"	3591  E7525/E7520 Error Reporting Registers",
-"		1028 0169  Precision 470",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"	3592  E7320 Memory Controller Hub",
-"	3593  E7320 Error Reporting Registers",
-"	3594  E7520 DMA Controller",
-"		4c53 10d0  Telum ASLP10 Processor AMC",
-"	3595  E7525/E7520/E7320 PCI Express Port A",
-"	3596  E7525/E7520/E7320 PCI Express Port A1",
-"	3597  E7525/E7520 PCI Express Port B",
-"	3598  E7520 PCI Express Port B1",
-"	3599  E7520 PCI Express Port C",
-"	359a  E7520 PCI Express Port C1",
-"	359b  E7525/E7520/E7320 Extended Configuration Registers",
-"	359e  E7525 Memory Controller Hub",
-"		1028 0169  Precision 470",
-"	4220  PRO/Wireless 2200BG Network Connection",
-"	4222  PRO/Wireless 3945ABG Network Connection",
-"		8086 1005  PRO/Wireless 3945BG Network Connection",
-"		8086 1034  PRO/Wireless 3945BG Network Connection",
-"		8086 1044  PRO/Wireless 3945BG Network Connection",
-"	4223  PRO/Wireless 2915ABG Network Connection",
-"		1351 103c  Compaq NC6220",
-"	4224  PRO/Wireless 2915ABG Network Connection",
-"	4227  PRO/Wireless 3945ABG Network Connection",
-"		8086 1011  Thinkpad X60s",
-"		8086 1014  PRO/Wireless 3945BG Network Connection",
-"	5200  EtherExpress PRO/100 Intelligent Server",
-"	5201  EtherExpress PRO/100 Intelligent Server",
-"		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter",
-"	530d  80310 IOP [IO Processor]",
-"	7000  82371SB PIIX3 ISA [Natoma/Triton II]",
-"	7010  82371SB PIIX3 IDE [Natoma/Triton II]",
-"	7020  82371SB PIIX3 USB [Natoma/Triton II]",
-"	7030  430VX - 82437VX TVX [Triton VX]",
-"	7050  Intercast Video Capture Card",
-"	7051  PB 642365-003 (Business Video Conferencing Card)",
-"	7100  430TX - 82439TX MTXC",
-"	7110  82371AB/EB/MB PIIX4 ISA",
-"		15ad 1976  virtualHW v3",
-"	7111  82371AB/EB/MB PIIX4 IDE",
-"		15ad 1976  virtualHW v3",
-"	7112  82371AB/EB/MB PIIX4 USB",
-"		15ad 1976  virtualHW v3",
-"	7113  82371AB/EB/MB PIIX4 ACPI",
-"		15ad 1976  virtualHW v3",
-"	7120  82810 GMCH [Graphics Memory Controller Hub]",
-"		4c53 1040  CL7 mainboard",
-"		4c53 1060  PC7 mainboard",
-"	7121  82810 CGC [Chipset Graphics Controller]",
-"		4c53 1040  CL7 mainboard",
-"		4c53 1060  PC7 mainboard",
-"		8086 4341  Cayman (CA810) Mainboard",
-"	7122  82810 DC-100 GMCH [Graphics Memory Controller Hub]",
-"	7123  82810 DC-100 CGC [Chipset Graphics Controller]",
-"	7124  82810E DC-133 GMCH [Graphics Memory Controller Hub]",
-"	7125  82810E DC-133 CGC [Chipset Graphics Controller]",
-"	7126  82810 DC-133 System and Graphics Controller",
-"	7128  82810-M DC-100 System and Graphics Controller",
-"	712a  82810-M DC-133 System and Graphics Controller",
-"	7180  440LX/EX - 82443LX/EX Host bridge",
-"	7181  440LX/EX - 82443LX/EX AGP bridge",
-"	7190  440BX/ZX/DX - 82443BX/ZX/DX Host bridge",
-"		0e11 0500  Armada 1750 Laptop System Chipset",
-"		0e11 b110  Armada M700/E500",
-"		1028 008e  PowerEdge 1300 mainboard",
-"		1179 0001  Toshiba Tecra 8100 Laptop System Chipset",
-"		15ad 1976  virtualHW v3",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1051  CE7 mainboard",
-"	7191  440BX/ZX/DX - 82443BX/ZX/DX AGP bridge",
-"		1028 008e  PowerEdge 1300 mainboard",
-"	7192  440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled)",
-"		0e11 0460  Armada 1700 Laptop System Chipset",
-"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
-"	7194  82440MX Host Bridge",
-"		1033 0000  Versa Note Vxi",
-"		4c53 10a0  CA3/CR3 mainboard",
-"	7195  82440MX AC'97 Audio Controller",
-"		1033 80cc  Versa Note VXi",
-"		10cf 1099  QSound_SigmaTel Stac97 PCI Audio",
-"		11d4 0040  SoundMAX Integrated Digital Audio",
-"		11d4 0048  SoundMAX Integrated Digital Audio",
-"	7196  82440MX AC'97 Modem Controller",
-"	7198  82440MX ISA Bridge",
-"	7199  82440MX EIDE Controller",
-"	719a  82440MX USB Universal Host Controller",
-"	719b  82440MX Power Management Controller",
-"	71a0  440GX - 82443GX Host bridge",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1051  CE7 mainboard",
-"	71a1  440GX - 82443GX AGP bridge",
-"	71a2  440GX - 82443GX Host bridge (AGP disabled)",
-"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
-"	7600  82372FB PIIX5 ISA",
-"	7601  82372FB PIIX5 IDE",
-"	7602  82372FB PIIX5 USB",
-"	7603  82372FB PIIX5 SMBus",
-"	7800  82740 (i740) AGP Graphics Accelerator",
-"		003d 0008  Starfighter AGP",
-"		003d 000b  Starfighter AGP",
-"		1092 0100  Stealth II G460",
-"		10b4 201a  Lightspeed 740",
-"		10b4 202f  Lightspeed 740",
-"		8086 0000  Terminator 2x/i",
-"		8086 0100  Intel740 Graphics Accelerator",
-"	84c4  450KX/GX [Orion] - 82454KX/GX PCI bridge",
-"	84c5  450KX/GX [Orion] - 82453KX/GX Memory controller",
-"	84ca  450NX - 82451NX Memory & I/O Controller",
-"	84cb  450NX - 82454NX/84460GX PCI Expander Bridge",
-"	84e0  460GX - 84460GX System Address Controller (SAC)",
-"	84e1  460GX - 84460GX System Data Controller (SDC)",
-"	84e2  460GX - 84460GX AGP Bridge (GXB function 2)",
-"	84e3  460GX - 84460GX Memory Address Controller (MAC)",
-"	84e4  460GX - 84460GX Memory Data Controller (MDC)",
-"	84e6  460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB)",
-"	84ea  460GX - 84460GX AGP Bridge (GXB function 1)",
-"	8500  IXP4XX Intel Network Processor (IXP420/421/422/425/IXC1100)",
-"		1993 0ded  mGuard-PCI AV#2",
-"		1993 0dee  mGuard-PCI AV#1",
-"		1993 0def  mGuard-PCI AV#0",
-"	9000  IXP2000 Family Network Processor",
-"	9001  IXP2400 Network Processor",
-"	9002  IXP2300 Network Processor",
-"	9004  IXP2800 Network Processor",
-"	9621  Integrated RAID",
-"	9622  Integrated RAID",
-"	9641  Integrated RAID",
-"	96a1  Integrated RAID",
-"	b152  21152 PCI-to-PCI Bridge",
-"	b154  21154 PCI-to-PCI Bridge",
-"	b555  21555 Non transparent PCI-to-PCI Bridge",
-"		12d9 000a  PCI VoIP Gateway",
-"		4c53 1050  CT7 mainboard",
-"		4c53 1051  CE7 mainboard",
-"		e4bf 1000  CC8-1-BLUES",
-"8401  TRENDware International Inc.",
-"8800  Trigem Computer Inc.",
-"	2008  Video assistent component",
-"8866  T-Square Design Inc.",
-"8888  Silicon Magic",
-"8912  TRX",
-"8c4a  Winbond",
-"	1980  W89C940 misprogrammed [ne2k]",
-"8e0e  Computone Corporation",
-"8e2e  KTI",
-"	3000  ET32P2",
-"9004  Adaptec",
-"	0078  AHA-2940U_CN",
-"	1078  AIC-7810",
-"	1160  AIC-1160 [Family Fibre Channel Adapter]",
-"	2178  AIC-7821",
-"	3860  AHA-2930CU",
-"	3b78  AHA-4844W/4844UW",
-"	5075  AIC-755x",
-"	5078  AHA-7850",
-"		9004 7850  AHA-2904/Integrated AIC-7850",
-"	5175  AIC-755x",
-"	5178  AIC-7851",
-"	5275  AIC-755x",
-"	5278  AIC-7852",
-"	5375  AIC-755x",
-"	5378  AIC-7850",
-"	5475  AIC-755x",
-"	5478  AIC-7850",
-"	5575  AVA-2930",
-"	5578  AIC-7855",
-"	5647  ANA-7711 TCP Offload Engine",
-"		9004 7710  ANA-7711F TCP Offload Engine - Optical",
-"		9004 7711  ANA-7711LP TCP Offload Engine - Copper",
-"	5675  AIC-755x",
-"	5678  AIC-7856",
-"	5775  AIC-755x",
-"	5778  AIC-7850",
-"	5800  AIC-5800",
-"	5900  ANA-5910/5930/5940 ATM155 & 25 LAN Adapter",
-"	5905  ANA-5910A/5930A/5940A ATM Adapter",
-"	6038  AIC-3860",
-"	6075  AIC-1480 / APA-1480",
-"		9004 7560  AIC-1480 / APA-1480 Cardbus",
-"	6078  AIC-7860",
-"	6178  AIC-7861",
-"		9004 7861  AHA-2940AU Single",
-"	6278  AIC-7860",
-"	6378  AIC-7860",
-"	6478  AIC-786x",
-"	6578  AIC-786x",
-"	6678  AIC-786x",
-"	6778  AIC-786x",
-"	6915  ANA620xx/ANA69011A",
-"		9004 0008  ANA69011A/TX 10/100",
-"		9004 0009  ANA69011A/TX 10/100",
-"		9004 0010  ANA62022 2-port 10/100",
-"		9004 0018  ANA62044 4-port 10/100",
-"		9004 0019  ANA62044 4-port 10/100",
-"		9004 0020  ANA62022 2-port 10/100",
-"		9004 0028  ANA69011A/TX 10/100",
-"		9004 8008  ANA69011A/TX 64 bit 10/100",
-"		9004 8009  ANA69011A/TX 64 bit 10/100",
-"		9004 8010  ANA62022 2-port 64 bit 10/100",
-"		9004 8018  ANA62044 4-port 64 bit 10/100",
-"		9004 8019  ANA62044 4-port 64 bit 10/100",
-"		9004 8020  ANA62022 2-port 64 bit 10/100",
-"		9004 8028  ANA69011A/TX 64 bit 10/100",
-"	7078  AHA-294x / AIC-7870",
-"	7178  AHA-2940/2940W / AIC-7871",
-"	7278  AHA-3940/3940W / AIC-7872",
-"	7378  AHA-3985 / AIC-7873",
-"	7478  AHA-2944/2944W / AIC-7874",
-"	7578  AHA-3944/3944W / AIC-7875",
-"	7678  AHA-4944W/UW / AIC-7876",
-"	7710  ANA-7711F Network Accelerator Card (NAC) - Optical",
-"	7711  ANA-7711C Network Accelerator Card (NAC) - Copper",
-"	7778  AIC-787x",
-"	7810  AIC-7810",
-"	7815  AIC-7815 RAID+Memory Controller IC",
-"		9004 7815  ARO-1130U2 RAID Controller",
-"		9004 7840  AIC-7815 RAID+Memory Controller IC",
-"	7850  AIC-7850",
-"	7855  AHA-2930",
-"	7860  AIC-7860",
-"	7870  AIC-7870",
-"	7871  AHA-2940",
-"	7872  AHA-3940",
-"	7873  AHA-3980",
-"	7874  AHA-2944",
-"	7880  AIC-7880P",
-"	7890  AIC-7890",
-"	7891  AIC-789x",
-"	7892  AIC-789x",
-"	7893  AIC-789x",
-"	7894  AIC-789x",
-"	7895  AHA-2940U/UW / AHA-39xx / AIC-7895",
-"		9004 7890  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
-"		9004 7891  AHA-2940U/2940UW Dual",
-"		9004 7892  AHA-3940AU/AUW/AUWD/UWD",
-"		9004 7894  AHA-3944AUWD",
-"		9004 7895  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
-"		9004 7896  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
-"		9004 7897  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
-"	7896  AIC-789x",
-"	7897  AIC-789x",
-"	8078  AIC-7880U",
-"		9004 7880  AIC-7880P Ultra/Ultra Wide SCSI Chipset",
-"	8178  AHA-2940U/UW/D / AIC-7881U",
-"		9004 7881  AHA-2940UW SCSI Host Adapter",
-"	8278  AHA-3940U/UW/UWD / AIC-7882U",
-"	8378  AHA-3940U/UW / AIC-7883U",
-"	8478  AHA-2944UW / AIC-7884U",
-"	8578  AHA-3944U/UWD / AIC-7885",
-"	8678  AHA-4944UW / AIC-7886",
-"	8778  AHA-2940UW Pro / AIC-788x",
-"		9004 7887  2940UW Pro Ultra-Wide SCSI Controller",
-"	8878  AHA-2930UW / AIC-7888",
-"		9004 7888  AHA-2930UW SCSI Controller",
-"	8b78  ABA-1030",
-"	ec78  AHA-4944W/UW",
-"9005  Adaptec",
-"	0010  AHA-2940U2/U2W",
-"		9005 2180  AHA-2940U2 SCSI Controller",
-"		9005 8100  AHA-2940U2B SCSI Controller",
-"		9005 a100  AHA-2940U2B SCSI Controller",
-"		9005 a180  AHA-2940U2W SCSI Controller",
-"		9005 e100  AHA-2950U2B SCSI Controller",
-"	0011  AHA-2930U2",
-"	0013  78902",
-"		9005 0003  AAA-131U2 Array1000 1 Channel RAID Controller",
-"		9005 000f  AIC7890_ARO",
-"	001f  AHA-2940U2/U2W / 7890/7891",
-"		9005 000f  2940U2W SCSI Controller",
-"		9005 a180  2940U2W SCSI Controller",
-"	0020  AIC-7890",
-"	002f  AIC-7890",
-"	0030  AIC-7890",
-"	003f  AIC-7890",
-"	0050  AHA-3940U2x/395U2x",
-"		9005 f500  AHA-3950U2B",
-"		9005 ffff  AHA-3950U2B",
-"	0051  AHA-3950U2D",
-"		9005 b500  AHA-3950U2D",
-"	0053  AIC-7896 SCSI Controller",
-"		9005 ffff  AIC-7896 SCSI Controller mainboard implementation",
-"	005f  AIC-7896U2/7897U2",
-"	0080  AIC-7892A U160/m",
-"		0e11 e2a0  Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter",
-"		9005 6220  AHA-29160C",
-"		9005 62a0  29160N Ultra160 SCSI Controller",
-"		9005 e220  29160LP Low Profile Ultra160 SCSI Controller",
-"		9005 e2a0  29160 Ultra160 SCSI Controller",
-"	0081  AIC-7892B U160/m",
-"		9005 62a1  19160 Ultra160 SCSI Controller",
-"	0083  AIC-7892D U160/m",
-"	008f  AIC-7892P U160/m",
-"		1179 0001  Magnia Z310",
-"		15d9 9005  Onboard SCSI Host Adapter",
-"	00c0  AHA-3960D / AIC-7899A U160/m",
-"		0e11 f620  Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter",
-"		9005 f620  AHA-3960D U160/m",
-"	00c1  AIC-7899B U160/m",
-"	00c3  AIC-7899D U160/m",
-"	00c5  RAID subsystem HBA",
-"		1028 00c5  PowerEdge 2400,2500,2550,4400",
-"	00cf  AIC-7899P U160/m",
-"		1028 00ce  PowerEdge 1400",
-"		1028 00d1  PowerEdge 2550",
-"		1028 00d9  PowerEdge 2500",
-"		10f1 2462  Thunder K7 S2462",
-"		15d9 9005  Onboard SCSI Host Adapter",
-"		8086 3411  SDS2 Mainboard",
-"	0241  Serial ATA II RAID 1420SA",
-"	0250  ServeRAID Controller",
-"		1014 0279  ServeRAID-xx",
-"		1014 028c  ServeRAID-xx",
-"	0279  ServeRAID 6M",
-"	0283  AAC-RAID",
-"		9005 0283  Catapult",
-"	0284  AAC-RAID",
-"		9005 0284  Tomcat",
-"	0285  AAC-RAID",
-"		0e11 0295  SATA 6Ch (Bearcat)",
-"		1014 02f2  ServeRAID 8i",
-"		1028 0287  PowerEdge Expandable RAID Controller 320/DC",
-"		1028 0291  CERC SATA RAID 2 PCI SATA 6ch (DellCorsair)",
-"		103c 3227  AAR-2610SA",
-"		17aa 0286  Legend S220 (Legend Crusader)",
-"		17aa 0287  Legend S230 (Legend Vulcan)",
-"		9005 0285  2200S (Vulcan)",
-"		9005 0286  2120S (Crusader)",
-"		9005 0287  2200S (Vulcan-2m)",
-"		9005 0288  3230S (Harrier)",
-"		9005 0289  3240S (Tornado)",
-"		9005 028a  ASR-2020ZCR",
-"		9005 028b  ASR-2025ZCR (Terminator)",
-"		9005 028e  ASR-2020SA (Skyhawk)",
-"		9005 028f  ASR-2025SA",
-"		9005 0290  AAR-2410SA PCI SATA 4ch (Jaguar II)",
-"		9005 0292  AAR-2810SA PCI SATA 8ch (Corsair-8)",
-"		9005 0293  AAR-21610SA PCI SATA 16ch (Corsair-16)",
-"		9005 0294  ESD SO-DIMM PCI-X SATA ZCR (Prowler)",
-"		9005 0296  ASR-2240S",
-"		9005 0297  ASR-4005SAS",
-"		9005 0298  ASR-4000SAS",
-"		9005 0299  ASR-4800SAS",
-"		9005 029a  4805SAS",
-"	0286  AAC-RAID (Rocket)",
-"		1014 9540  ServeRAID 8k/8k-l4",
-"		1014 9580  ServeRAID 8k/8k-l8",
-"		9005 028c  ASR-2230S + ASR-2230SLP PCI-X (Lancer)",
-"		9005 028d  ASR-2130S",
-"		9005 029b  ASR-2820SA",
-"		9005 029c  ASR-2620SA",
-"		9005 029d  ASR-2420SA",
-"		9005 029e  ICP ICP9024R0",
-"		9005 029f  ICP ICP9014R0",
-"		9005 02a0  ICP ICP9047MA",
-"		9005 02a1  ICP ICP9087MA",
-"		9005 02a2  3800SAS",
-"		9005 02a3  ICP ICP5445AU",
-"		9005 02a4  ICP ICP5085LI",
-"		9005 02a5  ICP ICP5085BR",
-"		9005 02a6  ICP9067MA",
-"		9005 02a7  AAR-2830SA",
-"		9005 02a8  AAR-2430SA",
-"		9005 02a9  ICP5087AU",
-"		9005 02aa  ICP5047AU",
-"		9005 0800  Callisto",
-"	0500  Obsidian chipset SCSI controller",
-"		1014 02c1  PCI-X DDR 3Gb SAS Adapter (572A/572C)",
-"		1014 02c2  PCI-X DDR 3Gb SAS RAID Adapter (572B/572D)",
-"	0503  Scamp chipset SCSI controller",
-"		1014 02bf  Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571E)",
-"		1014 02d5  Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571F)",
-"	0910  AUA-3100B",
-"	091e  AUA-3100B",
-"	8000  ASC-29320A U320",
-"	800f  AIC-7901 U320",
-"	8010  ASC-39320 U320",
-"	8011  ASC-39320D",
-"		0e11 00ac  ASC-39320D U320",
-"		9005 0041  ASC-39320D U320",
-"	8012  ASC-29320 U320",
-"	8013  ASC-29320B U320",
-"	8014  ASC-29320LP U320",
-"	8015  ASC-39320B U320",
-"	8016  ASC-39320A U320",
-"	8017  ASC-29320ALP U320",
-"	801c  ASC-39320D U320",
-"	801d  AIC-7902B U320",
-"	801e  AIC-7901A U320",
-"	801f  AIC-7902 U320",
-"		1734 1011  Primergy RX300",
-"	8080  ASC-29320A U320 w/HostRAID",
-"	808f  AIC-7901 U320 w/HostRAID",
-"	8090  ASC-39320 U320 w/HostRAID",
-"	8091  ASC-39320D U320 w/HostRAID",
-"	8092  ASC-29320 U320 w/HostRAID",
-"	8093  ASC-29320B U320 w/HostRAID",
-"	8094  ASC-29320LP U320 w/HostRAID",
-"	8095  ASC-39320(B) U320 w/HostRAID",
-"	8096  ASC-39320A U320 w/HostRAID",
-"	8097  ASC-29320ALP U320 w/HostRAID",
-"	809c  ASC-39320D(B) U320 w/HostRAID",
-"	809d  AIC-7902(B) U320 w/HostRAID",
-"	809e  AIC-7901A U320 w/HostRAID",
-"	809f  AIC-7902 U320 w/HostRAID",
-"907f  Atronics",
-"	2015  IDE-2015PL",
-"919a  Gigapixel Corp",
-"9412  Holtek",
-"	6565  6565",
-"9699  Omni Media Technology Inc",
-"	6565  6565",
-"9710  NetMos Technology",
-"	7780  USB IRDA-port",
-"	9805  PCI 1 port parallel adapter",
-"	9815  PCI 9815 Multi-I/O Controller",
-"		1000 0020  2P0S (2 port parallel adaptor)",
-"	9835  PCI 9835 Multi-I/O Controller",
-"		1000 0002  2S (16C550 UART)",
-"		1000 0012  1P2S",
-"	9845  PCI 9845 Multi-I/O Controller",
-"		1000 0004  0P4S (4 port 16550A serial card)",
-"		1000 0006  0P6S (6 port 16550a serial card)",
-"	9855  PCI 9855 Multi-I/O Controller",
-"		1000 0014  1P4S",
-"9902  Stargen Inc.",
-"	0001  SG2010 PCI over Starfabric Bridge",
-"	0002  SG2010 PCI to Starfabric Gateway",
-"	0003  SG1010 Starfabric Switch and PCI Bridge",
-"a0a0  AOPEN Inc.",
-"a0f1  UNISYS Corporation",
-"a200  NEC Corporation",
-"a259  Hewlett Packard",
-"a25b  Hewlett Packard GmbH PL24-MKT",
-"a304  Sony",
-"a727  3Com Corporation",
-"	0013  3CRPAG175 Wireless PC Card",
-"aa42  Scitex Digital Video",
-"ac1e  Digital Receiver Technology Inc",
-"ac3d  Actuality Systems",
-"aecb  Adrienne Electronics Corporation",
-"	6250  VITC/LTC Timecode Reader card [PCI-VLTC/RDR]",
-"affe  Sirrix AG security technologies",
-"	dead  Sirrix.PCI4S0 4-port ISDN S0 interface",
-"b1b3  Shiva Europe Limited",
-"bd11  Pinnacle Systems, Inc. (Wrong ID)",
-"c001  TSI Telsys",
-"c0a9  Micron/Crucial Technology",
-"c0de  Motorola",
-"c0fe  Motion Engineering, Inc.",
-"ca50  Varian Australia Pty Ltd",
-"cafe  Chrysalis-ITS",
-"	0003  Luna K3 Hardware Security Module",
-"cccc  Catapult Communications",
-"cddd  Tyzx, Inc.",
-"	0101  DeepSea 1 High Speed Stereo Vision Frame Grabber",
-"	0200  DeepSea 2 High Speed Stereo Vision Frame Grabber",
-"d161  Digium, Inc.",
-"	0205  Wildcard TE205P",
-"	0210  Wildcard TE210P",
-"	0405  Wildcard TE405P Quad-Span togglable E1/T1/J1 card 5.0v",
-"	0406  Wildcard TE406P Quad-Span togglable E1/T1/J1 echo cancellation card 5.0v",
-"	0410  Wildcard TE410P Quad-Span togglable E1/T1/J1 card 3.3v",
-"	0411  Wildcard TE411P Quad-Span togglable E1/T1/J1 echo cancellation card 3.3v",
-"	2400  Wildcard TDM2400P",
-"d4d4  Dy4 Systems Inc",
-"	0601  PCI Mezzanine Card",
-"d531  I+ME ACTIA GmbH",
-"d84d  Exsys",
-"dead  Indigita Corporation",
-"deaf  Middle Digital Inc.",
-"	9050  PC Weasel Virtual VGA",
-"	9051  PC Weasel Serial Port",
-"	9052  PC Weasel Watchdog Timer",
-"e000  Winbond",
-"	e000  W89C940",
-"e159  Tiger Jet Network Inc.",
-"	0001  Tiger3XX Modem/ISDN interface",
-"		0059 0001  128k ISDN-S/T Adapter",
-"		0059 0003  128k ISDN-U Adapter",
-"		00a7 0001  TELES.S0/PCI 2.x ISDN Adapter",
-"		8086 0003  Digium X100P/X101P analogue PSTN FXO interface",
-"	0002  Tiger100APC ISDN chipset",
-"e4bf  EKF Elektronik GmbH",
-"e55e  Essence Technology, Inc.",
-"ea01  Eagle Technology",
-"	000a  PCI-773 Temperature Card",
-"	0032  PCI-730 & PC104P-30 Card",
-"	003e  PCI-762 Opto-Isolator Card",
-"	0041  PCI-763 Reed Relay Card",
-"	0043  PCI-769 Opto-Isolator Reed Relay Combo Card",
-"	0046  PCI-766 Analog Output Card",
-"	0052  PCI-703 Analog I/O Card",
-"	0800  PCI-800 Digital I/O Card",
-"ea60  RME",
-"	9896  Digi32",
-"	9897  Digi32 Pro",
-"	9898  Digi32/8",
-"eabb  Aashima Technology B.V.",
-"eace  Endace Measurement Systems, Ltd",
-"	3100  DAG 3.10 OC-3/OC-12",
-"	3200  DAG 3.2x OC-3/OC-12",
-"	320e  DAG 3.2E Fast Ethernet",
-"	340e  DAG 3.4E Fast Ethernet",
-"	341e  DAG 3.41E Fast Ethernet",
-"	3500  DAG 3.5 OC-3/OC-12",
-"	351c  DAG 3.5ECM Fast Ethernet",
-"	4100  DAG 4.10 OC-48",
-"	4110  DAG 4.11 OC-48",
-"	4220  DAG 4.2 OC-48",
-"	422e  DAG 4.2E Dual Gigabit Ethernet",
-"ec80  Belkin Corporation",
-"	ec00  F5D6000",
-"ecc0  Echo Digital Audio Corporation",
-"edd8  ARK Logic Inc",
-"	a091  1000PV [Stingray]",
-"	a099  2000PV [Stingray]",
-"	a0a1  2000MT",
-"	a0a9  2000MI",
-"f1d0  AJA Video",
-"	c0fe  Xena HS/HD-R",
-"	c0ff  Kona/Xena 2",
-"	cafe  Kona SD",
-"	cfee  Xena LS/SD-22-DA/SD-DA",
-"	dcaf  Kona HD",
-"	dfee  Xena HD-DA",
-"	efac  Xena SD-MM/SD-22-MM",
-"	facd  Xena HD-MM",
-"fa57  Interagon AS",
-"	0001  PMC [Pattern Matching Chip]",
-"fab7  Fabric7 Systems, Inc.",
-"febd  Ultraview Corp.",
-"feda  Broadcom Inc",
-"	a0fa  BCM4210 iLine10 HomePNA 2.0",
-"	a10e  BCM4230 iLine10 HomePNA 2.0",
-"fede  Fedetec Inc.",
-"	0003  TABIC PCI v3",
-"fffd  XenSource, Inc.",
-"	0101  PCI Event Channel Controller",
-"fffe  VMWare Inc",
-"	0405  Virtual SVGA 4.0",
-"	0710  Virtual SVGA",
-"ffff  Illegal Vendor ID",
-"C 00  Unclassified device",
-"	00  Non-VGA unclassified device",
-"	01  VGA compatible unclassified device",
-"C 01  Mass storage controller",
-"	00  SCSI storage controller",
-"	01  IDE interface",
-"	02  Floppy disk controller",
-"	03  IPI bus controller",
-"	04  RAID bus controller",
-"	05  ATA controller",
-"		20  ADMA single stepping",
-"		40  ADMA continuous operation",
-"	06  SATA controller",
-"		00  Vendor specific",
-"		01  AHCI 1.0",
-"	07  Serial Attached SCSI controller",
-"	80  Mass storage controller",
-"C 02  Network controller",
-"	00  Ethernet controller",
-"	01  Token ring network controller",
-"	02  FDDI network controller",
-"	03  ATM network controller",
-"	04  ISDN controller",
-"	80  Network controller",
-"C 03  Display controller",
-"	00  VGA compatible controller",
-"		00  VGA",
-"		01  8514",
-"	01  XGA compatible controller",
-"	02  3D controller",
-"	80  Display controller",
-"C 04  Multimedia controller",
-"	00  Multimedia video controller",
-"	01  Multimedia audio controller",
-"	02  Computer telephony device",
-"	03  Audio device",
-"	80  Multimedia controller",
-"C 05  Memory controller",
-"	00  RAM memory",
-"	01  FLASH memory",
-"	80  Memory controller",
-"C 06  Bridge",
-"	00  Host bridge",
-"	01  ISA bridge",
-"	02  EISA bridge",
-"	03  MicroChannel bridge",
-"	04  PCI bridge",
-"		00  Normal decode",
-"		01  Subtractive decode",
-"	05  PCMCIA bridge",
-"	06  NuBus bridge",
-"	07  CardBus bridge",
-"	08  RACEway bridge",
-"		00  Transparent mode",
-"		01  Endpoint mode",
-"	09  Semi-transparent PCI-to-PCI bridge",
-"		40  Primary bus towards host CPU",
-"		80  Secondary bus towards host CPU",
-"	0a  InfiniBand to PCI host bridge",
-"	80  Bridge",
-"C 07  Communication controller",
-"	00  Serial controller",
-"		00  8250",
-"		01  16450",
-"		02  16550",
-"		03  16650",
-"		04  16750",
-"		05  16850",
-"		06  16950",
-"	01  Parallel controller",
-"		00  SPP",
-"		01  BiDir",
-"		02  ECP",
-"		03  IEEE1284",
-"		fe  IEEE1284 Target",
-"	02  Multiport serial controller",
-"	03  Modem",
-"		00  Generic",
-"		01  Hayes/16450",
-"		02  Hayes/16550",
-"		03  Hayes/16650",
-"		04  Hayes/16750",
-"	80  Communication controller",
-"C 08  Generic system peripheral",
-"	00  PIC",
-"		00  8259",
-"		01  ISA PIC",
-"		02  EISA PIC",
-"		10  IO-APIC",
-"		20  IO(X)-APIC",
-"	01  DMA controller",
-"		00  8237",
-"		01  ISA DMA",
-"		02  EISA DMA",
-"	02  Timer",
-"		00  8254",
-"		01  ISA Timer",
-"		02  EISA Timers",
-"	03  RTC",
-"		00  Generic",
-"		01  ISA RTC",
-"	04  PCI Hot-plug controller",
-"	80  System peripheral",
-"C 09  Input device controller",
-"	00  Keyboard controller",
-"	01  Digitizer Pen",
-"	02  Mouse controller",
-"	03  Scanner controller",
-"	04  Gameport controller",
-"		00  Generic",
-"		10  Extended",
-"	80  Input device controller",
-"C 0a  Docking station",
-"	00  Generic Docking Station",
-"	80  Docking Station",
-"C 0b  Processor",
-"	00  386",
-"	01  486",
-"	02  Pentium",
-"	10  Alpha",
-"	20  Power PC",
-"	30  MIPS",
-"	40  Co-processor",
-"C 0c  Serial bus controller",
-"	00  FireWire (IEEE 1394)",
-"		00  Generic",
-"		10  OHCI",
-"	01  ACCESS Bus",
-"	02  SSA",
-"	03  USB Controller",
-"		00  UHCI",
-"		10  OHCI",
-"		20  EHCI",
-"		80  Unspecified",
-"		fe  USB Device",
-"	04  Fibre Channel",
-"	05  SMBus",
-"	06  InfiniBand",
-"C 0d  Wireless controller",
-"	00  IRDA controller",
-"	01  Consumer IR controller",
-"	10  RF controller",
-"	80  Wireless controller",
-"C 0e  Intelligent controller",
-"	00  I2O",
-"C 0f  Satellite communications controller",
-"	00  Satellite TV controller",
-"	01  Satellite audio communication controller",
-"	03  Satellite voice communication controller",
-"	04  Satellite data communication controller",
-"C 10  Encryption controller",
-"	00  Network and computing encryption device",
-"	10  Entertainment encryption device",
-"	80  Encryption controller",
-"C 11  Signal processing controller",
-"	00  DPIO module",
-"	01  Performance counters",
-"	10  Communication synchronizer",
-"	80  Signal processing controller",
-""
-};
Index: pace/pci/libpci/sysdep.h
===================================================================
--- uspace/pci/libpci/sysdep.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,26 +1,0 @@
-/*
- *	The PCI Library -- System-Dependent Stuff
- *
- *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#ifdef __GNUC__
-#define UNUSED __attribute__((unused))
-#define NONRET __attribute__((noreturn))
-#else
-#define UNUSED
-#define NONRET
-#define inline
-#endif
-
-typedef u8 byte;
-typedef u16 word;
-
-#define cpu_to_le16(x) (x)
-#define cpu_to_le32(x) (x)
-#define le16_to_cpu(x) (x)
-#define le32_to_cpu(x) (x)
Index: pace/pci/libpci/types.h
===================================================================
--- uspace/pci/libpci/types.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- *	The PCI Library -- Types and Format Strings
- *
- *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
- *
- *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
- *
- *	Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#include <types.h>
-
-#ifndef PCI_HAVE_Uxx_TYPES
-
-typedef uint8_t u8;
-typedef uint16_t u16;
-typedef uint32_t u32;
-
-#ifdef PCI_HAVE_64BIT_ADDRESS
-#include <limits.h>
-#if ULONG_MAX > 0xffffffff
-typedef unsigned long u64;
-#define PCI_U64_FMT "l"
-#else
-typedef unsigned long long u64;
-#define PCI_U64_FMT "ll"
-#endif
-#endif
-
-#endif				/* PCI_HAVE_Uxx_TYPES */
-
-#ifdef PCI_HAVE_64BIT_ADDRESS
-typedef u64 pciaddr_t;
-#define PCIADDR_T_FMT "%08" PCI_U64_FMT "x"
-#define PCIADDR_PORT_FMT "%04" PCI_U64_FMT "x"
-#else
-typedef u32 pciaddr_t;
-#define PCIADDR_T_FMT "%08x"
-#define PCIADDR_PORT_FMT "%04x"
-#endif
-
-#ifdef PCI_ARCH_SPARC64
-/* On sparc64 Linux the kernel reports remapped port addresses and IRQ numbers */
-#undef PCIADDR_PORT_FMT
-#define PCIADDR_PORT_FMT PCIADDR_T_FMT
-#define PCIIRQ_FMT "%08x"
-#else
-#define PCIIRQ_FMT "%d"
-#endif
Index: pace/pci/pci.c
===================================================================
--- uspace/pci/pci.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,88 +1,0 @@
-/*
- * HelenOS PCI driver.
- *
- * (Based on public domain libpci example.c written by Martin Mares.)
- * Copyright (c) 2006 Jakub Jermar
- *
- * Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-/**
- * @addtogroup pci
- * @{
- */
-
-#include <stdio.h>
-#include <ddi.h>
-#include <task.h>
-#include <stdlib.h>
-#include <ipc/ipc.h>
-#include <ipc/services.h>
-#include <errno.h>
-
-#include "libpci/pci.h"
-
-#define PCI_CONF1	0xcf8
-#define PCI_CONF1_SIZE	8
-
-#define NAME		"PCI"
-
-static struct pci_access *pacc;
-
-int main(int argc, char *argv[])
-{
-	struct pci_dev *dev;
-	unsigned int c;
-	char buf[80];
-	ipcarg_t ns_in_phone_hash;
-
-	printf("%s: HelenOS PCI driver\n", NAME);
-
-	/*
-	 * Gain control over PCI configuration ports.
-	 */
-	iospace_enable(task_get_id(), (void *) PCI_CONF1, PCI_CONF1_SIZE);
-
-	pacc = pci_alloc();           /* Get the pci_access structure */
-	pci_init(pacc);               /* Initialize the PCI library */
-	pci_scan_bus(pacc);           /* We want to get the list of devices */
-	for(dev=pacc->devices; dev; dev=dev->next) {   /* Iterate over all devices */
-		pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_IRQ);
-		c = pci_read_word(dev, PCI_CLASS_DEVICE); /* Read config register directly */
-		printf("%02x:%02x.%d vendor=%04x device=%04x class=%04x irq=%d base0=%lx\n",
-			dev->bus, dev->dev, dev->func, dev->vendor_id, dev->device_id,
-			c, dev->irq, dev->base_addr[0]);
-		printf("\t%s\n", pci_lookup_name(pacc, buf, sizeof(buf), PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
-			dev->vendor_id, dev->device_id));
-	}
-
-	printf("%s: registering at naming service.\n", NAME);
-	if (ipc_connect_to_me(PHONE_NS, SERVICE_PCI, 0, &ns_in_phone_hash) != 0) {
-		printf("Failed to register %s at naming service.\n", NAME);
-		return -1;
-	}
-
-	printf("%s: accepting connections\n", NAME);
-	while (1) {		
-		ipc_call_t call;
-		ipc_callid_t callid;
-
-		callid = ipc_wait_for_call(&call);
-		switch(IPC_GET_METHOD(call)) {
-		case IPC_M_CONNECT_ME_TO:
-			IPC_SET_RETVAL(call, 0);
-			break;
-		}
-		if (! (callid & IPC_CALLID_NOTIFICATION)) {
-			ipc_answer(callid, &call);
-		}
-		printf("%s: received call from %lX\n", NAME, call.in_phone_hash);
-	}
-
-	pci_cleanup(pacc);
-	return 0;
-}
-
-/**
- * @}
- */
Index: pace/pci/update-ids
===================================================================
--- uspace/pci/update-ids	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,16 +1,0 @@
-#! /bin/bash
-
-wget http://pciids.sourceforge.net/v2.2/pci.ids
-
-cat >pci_ids.h <<EOF
-/* DO NOT EDIT, THIS FILE IS AUTOMATICALLY GENERATED */
-char *pci_ids[] = {
-EOF
-
-cat pci.ids | grep -v '^#.*' | grep -v '^$' | tr \" \' | sed -n 's/\(.*\)/"\1",/p' >>pci_ids.h
-
-cat >>pci_ids.h <<EOF
-""
-};
-EOF
-
Index: pace/rd/Makefile
===================================================================
--- uspace/rd/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,72 +1,0 @@
-#
-# Copyright (c) 2006 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = rd
-SOURCES = \
-	rd.c
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/rd/rd.c
===================================================================
--- uspace/rd/rd.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,228 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Konopa
- * Copyright (c) 2007 Martin Jelen
- * Copyright (c) 2007 Peter Majer
- * Copyright (c) 2007 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup rd
- * @{
- */ 
-
-/**
- * @file	rd.c
- * @brief	Initial RAM disk for HelenOS.
- */
-
-#include <ipc/ipc.h>
-#include <ipc/services.h>
-#include <ipc/ns.h>
-#include <sysinfo.h>
-#include <as.h>
-#include <ddi.h>
-#include <align.h>
-#include <bool.h>
-#include <errno.h>
-#include <async.h>
-#include <align.h>
-#include <async.h>
-#include <futex.h>
-#include "rd.h"
-
-/** Pointer to the ramdisk's image. */
-static void *rd_addr;
-/** Size of the ramdisk. */
-static size_t rd_size;
-
-/**
- * This futex protects the ramdisk's data.
- * If we were to serve multiple requests (read + write or several writes)
- * concurrently (i.e. from two or more threads), each read and write needs to be
- * protected by this futex.
- */ 
-atomic_t rd_futex = FUTEX_INITIALIZER;
-
-/** Handle one connection to ramdisk.
- *
- * @param iid		Hash of the request that opened the connection.
- * @param icall		Call data of the request that opened the connection.
- */
-static void rd_connection(ipc_callid_t iid, ipc_call_t *icall)
-{
-	ipc_callid_t callid;
-	ipc_call_t call;
-	int retval;
-	void *fs_va = NULL;
-	ipcarg_t offset;
-
-	/*
-	 * We allocate VA for communication per connection.
-	 * This allows us to potentionally have more clients and work
-	 * concurrently.
-	 */
-	fs_va = as_get_mappable_page(ALIGN_UP(BLOCK_SIZE, PAGE_SIZE));
-	if (!fs_va) {
-		/*
-		 * Hang up the phone if we cannot proceed any further.
-		 * This is the answer to the call that opened the connection.
-		 */
-		ipc_answer_fast(iid, EHANGUP, 0, 0);
-		return;
-	} else {
-		/*
-		 * Answer the first IPC_M_CONNECT_ME_TO call.
-		 * Return supported block size as ARG1.
-		 */
-		ipc_answer_fast(iid, EOK, BLOCK_SIZE, 0);
-	}
-
-	/*
-	 * Now we wait for the client to send us its communication as_area.
-	 */
-	callid = async_get_call(&call);
-	if (IPC_GET_METHOD(call) == IPC_M_AS_AREA_SEND) {
-		if (IPC_GET_ARG1(call) >= (ipcarg_t) BLOCK_SIZE) {
-			/*
-			 * The client sends an as_area that can absorb the whole
-			 * block.
-			 */
-			ipc_answer_fast(callid, EOK, (uintptr_t) fs_va, 0);
-		} else {
-			/*
-			 * The client offered as_area too small.
-			 * Close the connection.
-			 */
-			ipc_answer_fast(callid, EHANGUP, 0, 0);
-			return;		
-		}
-	} else {
-		/*
-		 * The client doesn't speak the same protocol.
-		 * At this point we can't handle protocol variations.
-		 * Close the connection.
-		 */
-		ipc_answer_fast(callid, EHANGUP, 0, 0);
-		return;
-	}
-	
-	while (1) {
-		callid = async_get_call(&call);
-		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
-			/*
-			 * The other side has hung up.
-			 * Answer the message and exit the pseudo thread.
-			 */
-			ipc_answer_fast(callid, EOK, 0, 0);
-			return;
-		case RD_READ_BLOCK:
-			offset = IPC_GET_ARG1(call);
-			if (offset * BLOCK_SIZE > rd_size - BLOCK_SIZE) {
-				/*
-				 * Reading past the end of the device.
-				 */
-				retval = ELIMIT;
-				break;
-			}
-			futex_down(&rd_futex);
-			memcpy(fs_va, rd_addr + offset, BLOCK_SIZE);
-			futex_up(&rd_futex);
-			retval = EOK;
-			break;
-		case RD_WRITE_BLOCK:
-			offset = IPC_GET_ARG1(call);
-			if (offset * BLOCK_SIZE > rd_size - BLOCK_SIZE) {
-				/*
-				 * Writing past the end of the device.
-				 */
-				retval = ELIMIT;
-				break;
-			}
-			futex_up(&rd_futex);
-			memcpy(rd_addr + offset, fs_va, BLOCK_SIZE);
-			futex_down(&rd_futex);
-			retval = EOK;
-			break;
-		default:
-			/*
-			 * The client doesn't speak the same protocol.
-			 * Instead of closing the connection, we just ignore
-			 * the call. This can be useful if the client uses a
-			 * newer version of the protocol.
-			 */
-			retval = EINVAL;
-			break;
-		}
-		ipc_answer_fast(callid, retval, 0, 0);
-	}
-}
-
-/** Prepare the ramdisk image for operation. */
-static bool rd_init(void)
-{
-	int retval, flags;
-
-	rd_size = sysinfo_value("rd.size");
-	void *rd_ph_addr = (void *) sysinfo_value("rd.address.physical");
-	
-	if (rd_size == 0)
-		return false;
-	
-	rd_addr = as_get_mappable_page(rd_size);
-	
-	flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
-	retval = physmem_map(rd_ph_addr, rd_addr,
-	    ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);
-
-	if (retval < 0)
-		return false;
-	return true;
-}
-
-int main(int argc, char **argv)
-{
-	if (rd_init()) {
-		ipcarg_t phonead;
-		
-		async_set_client_connection(rd_connection);
-		
-		/* Register service at nameserver */
-		if (ipc_connect_to_me(PHONE_NS, SERVICE_RD, 0, &phonead) != 0)
-			return -1;
-		
-		async_manager();
-		
-		/* Never reached */
-		return 0;
-	}
-	
-	return -1;
-}
-
-/**
- * @}
- */ 
Index: pace/rd/rd.h
===================================================================
--- uspace/rd/rd.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/*
- * Copyright (c) 2007 Michal Konopa
- * Copyright (c) 2007 Martin Jelen
- * Copyright (c) 2007 Peter Majer
- * Copyright (c) 2007 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup rd
- * @{
- */
-
-/**
- * @file	rd.h
- * @brief	Initial RAM disk for HelenOS - header
- */
-
-/* Basic constants. */
-
-#ifndef RD_RD_H_
-#define RD_RD_H_
-
-#define BLOCK_SIZE	1024	/**< Working block size */
-
-#define RD_BASE		1024
-#define	RD_READ_BLOCK	(RD_BASE + 1)	/**< Method for reading block. */
-#define RD_WRITE_BLOCK	(RD_BASE + 2)	/**< Method for writing block. */
-
-#endif
Index: pace/softfloat/Makefile
===================================================================
--- uspace/softfloat/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,81 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Common compiler flags
-#
-
-LIBC_PREFIX = ../libc
-## Setup toolchain
-#
-
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-CFLAGS +=-Iinclude -Iarch/$(ARCH)/include/
-
-## Sources
-#
-
-GENERIC_SOURCES =		\
-	generic/add.c		\
-	generic/common.c	\
-	generic/comparison.c	\
-	generic/conversion.c	\
-	generic/div.c		\
-	generic/mul.c		\
-	generic/other.c		\
-	generic/softfloat.c	\
-	generic/sub.c
-
-ARCH_SOURCES =
-
-GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
-
-.PHONY: all clean depend
-
-all: libsoftfloat.a
-
--include Makefile.depend
-
-clean:
-	-rm -f libsoftfloat.a Makefile.depend
-	find generic/ -name '*.o' -follow -exec rm \{\} \;
-
-depend:
-	-makedepend $(DEFS) $(CFLAGS) -f - $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
-
-libsoftfloat.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
-	$(AR) rc libsoftfloat.a $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/softfloat/arch/amd64/include/functions.h
===================================================================
--- uspace/softfloat/arch/amd64/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloatamd64 amd64	
- * @ingroup sfl 
- * @brief softfloat architecture dependent definitions 
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int64(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int64(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint64(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint64(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int64_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int64_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint64_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint64_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-
-/** @}
- */
-
Index: pace/softfloat/arch/arm32/include/functions.h
===================================================================
--- uspace/softfloat/arch/arm32/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloatarm32 arm32	
- * @ingroup sfl
- * @brief Softfloat architecture dependent definitions.
- * @{
- */
-/** @file 
- *  @brief Softfloat architecture dependent definitions.
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int32(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int32(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint32(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint32(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int32_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int32_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint32_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint32_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-/** @}
- */
Index: pace/softfloat/arch/ia32/include/functions.h
===================================================================
--- uspace/softfloat/arch/ia32/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,75 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloatia32 ia32	
- * @ingroup sfl
- * @brief softfloat architecture dependent definitions 
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int32(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int32(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint32(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint32(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int32_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int32_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint32_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint32_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-/** @}
- */
Index: pace/softfloat/arch/ia64/include/functions.h
===================================================================
--- uspace/softfloat/arch/ia64/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloatia64 ia64
- * @ingroup sfl 
- * @brief softfloat architecture dependent definitions 
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int64(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int64(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint64(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint64(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int64_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int64_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint64_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint64_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/arch/mips32/include/functions.h
===================================================================
--- uspace/softfloat/arch/mips32/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloatmips32 mips32	
- * @ingroup sfl
- * @brief softfloat architecture dependent definitions 
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int32(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int32(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint32(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint32(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int32_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int32_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint32_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint32_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/arch/mips32eb/include/functions.h
===================================================================
--- uspace/softfloat/arch/mips32eb/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloatmipseb32 mipseb32	
- * @ingroup sfl
- * @brief softfloat architecture dependent definitions 
- * * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int32(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int32(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint32(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint32(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int32_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int32_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint32_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint32_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/arch/ppc32/include/functions.h
===================================================================
--- uspace/softfloat/arch/ppc32/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloatppc32 ppc32	
- * @ingroup sfl
- * @brief softfloat architecture dependent definitions 
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int32(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int32(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint32(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint32(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int32_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int32_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint32_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint32_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/arch/ppc64/include/functions.h
===================================================================
--- uspace/softfloat/arch/ppc64/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloatppc64 ppc64	
- * @ingroup sfl
- * @brief softfloat architecture dependent definitions 
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int64(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int64(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint64(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint64(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int64_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int64_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint64_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint64_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
- /** @}
- */
-
Index: pace/softfloat/arch/sparc64/include/functions.h
===================================================================
--- uspace/softfloat/arch/sparc64/include/functions.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloatsparc64 sparc64	
- * @ingroup sfl
- * @brief softfloat architecture dependent definitions 
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_FUNCTIONS_H__
-#define __SOFTFLOAT_FUNCTIONS_H__
-
-#define float32_to_int(X) float32_to_int32(X);
-#define float32_to_long(X) float32_to_int64(X);
-#define float32_to_longlong(X) float32_to_int64(X);
-
-#define float64_to_int(X) float64_to_int32(X);
-#define float64_to_long(X) float64_to_int64(X);
-#define float64_to_longlong(X) float64_to_int64(X);
-
-#define float32_to_uint(X) float32_to_uint32(X);
-#define float32_to_ulong(X) float32_to_uint64(X);
-#define float32_to_ulonglong(X) float32_to_uint64(X);
-
-#define float64_to_uint(X) float64_to_uint32(X);
-#define float64_to_ulong(X) float64_to_uint64(X);
-#define float64_to_ulonglong(X) float64_to_uint64(X);
-
-#define int_to_float32(X) int32_to_float32(X);
-#define long_to_float32(X) int64_to_float32(X);
-#define longlong_to_float32(X) int64_to_float32(X);
-
-#define int_to_float64(X) int32_to_float64(X);
-#define long_to_float64(X) int64_to_float64(X);
-#define longlong_to_float64(X) int64_to_float64(X);
-
-#define uint_to_float32(X) uint32_to_float32(X);
-#define ulong_to_float32(X) uint64_to_float32(X);
-#define ulonglong_to_float32(X) uint64_to_float32(X);
-
-#define uint_to_float64(X) uint32_to_float64(X);
-#define ulong_to_float64(X) uint64_to_float64(X);
-#define ulonglong_to_float64(X) uint64_to_float64(X);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/generic/add.c
===================================================================
--- uspace/softfloat/generic/add.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,259 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#include<sftypes.h>
-#include<add.h>
-#include<comparison.h>
-
-/** Add two Float32 numbers with same signs
- */
-float32 addFloat32(float32 a, float32 b)
-{
-	int expdiff;
-	uint32_t exp1, exp2,frac1, frac2;
-	
-	expdiff = a.parts.exp - b.parts.exp;
-	if (expdiff < 0) {
-		if (isFloat32NaN(b)) {
-			/* TODO: fix SigNaN */
-			if (isFloat32SigNaN(b)) {
-			};
-
-			return b;
-		};
-		
-		if (b.parts.exp == FLOAT32_MAX_EXPONENT) { 
-			return b;
-		}
-		
-		frac1 = b.parts.fraction;
-		exp1 = b.parts.exp;
-		frac2 = a.parts.fraction;
-		exp2 = a.parts.exp;
-		expdiff *= -1;
-	} else {
-		if ((isFloat32NaN(a)) || (isFloat32NaN(b))) {
-			/* TODO: fix SigNaN */
-			if (isFloat32SigNaN(a) || isFloat32SigNaN(b)) {
-			};
-			return (isFloat32NaN(a)?a:b);
-		};
-		
-		if (a.parts.exp == FLOAT32_MAX_EXPONENT) { 
-			return a;
-		}
-		
-		frac1 = a.parts.fraction;
-		exp1 = a.parts.exp;
-		frac2 = b.parts.fraction;
-		exp2 = b.parts.exp;
-	};
-	
-	if (exp1 == 0) {
-		/* both are denormalized */
-		frac1 += frac2;
-		if (frac1 & FLOAT32_HIDDEN_BIT_MASK ) {
-			/* result is not denormalized */
-			a.parts.exp = 1;
-		};
-		a.parts.fraction = frac1;
-		return a;
-	};
-	
-	frac1 |= FLOAT32_HIDDEN_BIT_MASK; /* add hidden bit */
-
-	if (exp2 == 0) {
-		/* second operand is denormalized */
-		--expdiff;
-	} else {
-		/* add hidden bit to second operand */
-		frac2 |= FLOAT32_HIDDEN_BIT_MASK; 
-	};
-	
-	/* create some space for rounding */
-	frac1 <<= 6;
-	frac2 <<= 6;
-	
-	if (expdiff < (FLOAT32_FRACTION_SIZE + 2) ) {
-		frac2 >>= expdiff;
-		frac1 += frac2;
-	} else {
-		a.parts.exp = exp1;
-		a.parts.fraction = (frac1 >> 6) & (~(FLOAT32_HIDDEN_BIT_MASK));
-		return a;
-	}
-	
-	if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7) ) {
-		++exp1;
-		frac1 >>= 1;
-	};
-	
-	/* rounding - if first bit after fraction is set then round up */
-	frac1 += (0x1 << 5);
-	
-	if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) { 
-		/* rounding overflow */
-		++exp1;
-		frac1 >>= 1;
-	};
-	
-	
-	if ((exp1 == FLOAT32_MAX_EXPONENT ) || (exp2 > exp1)) {
-			/* overflow - set infinity as result */
-			a.parts.exp = FLOAT32_MAX_EXPONENT;
-			a.parts.fraction = 0;
-			return a;
-			}
-	
-	a.parts.exp = exp1;
-	
-	/*Clear hidden bit and shift */
-	a.parts.fraction = ((frac1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)) ; 
-	return a;
-}
-
-
-/** Add two Float64 numbers with same signs
- */
-float64 addFloat64(float64 a, float64 b)
-{
-	int expdiff;
-	uint32_t exp1, exp2;
-	uint64_t frac1, frac2;
-	
-	expdiff = ((int )a.parts.exp) - b.parts.exp;
-	if (expdiff < 0) {
-		if (isFloat64NaN(b)) {
-			/* TODO: fix SigNaN */
-			if (isFloat64SigNaN(b)) {
-			};
-
-			return b;
-		};
-		
-		/* b is infinity and a not */	
-		if (b.parts.exp == FLOAT64_MAX_EXPONENT ) { 
-			return b;
-		}
-		
-		frac1 = b.parts.fraction;
-		exp1 = b.parts.exp;
-		frac2 = a.parts.fraction;
-		exp2 = a.parts.exp;
-		expdiff *= -1;
-	} else {
-		if (isFloat64NaN(a)) {
-			/* TODO: fix SigNaN */
-			if (isFloat64SigNaN(a) || isFloat64SigNaN(b)) {
-			};
-			return a;
-		};
-		
-		/* a is infinity and b not */
-		if (a.parts.exp == FLOAT64_MAX_EXPONENT ) { 
-			return a;
-		}
-		
-		frac1 = a.parts.fraction;
-		exp1 = a.parts.exp;
-		frac2 = b.parts.fraction;
-		exp2 = b.parts.exp;
-	};
-	
-	if (exp1 == 0) {
-		/* both are denormalized */
-		frac1 += frac2;
-		if (frac1 & FLOAT64_HIDDEN_BIT_MASK) { 
-			/* result is not denormalized */
-			a.parts.exp = 1;
-		};
-		a.parts.fraction = frac1;
-		return a;
-	};
-	
-	/* add hidden bit - frac1 is sure not denormalized */
-	frac1 |= FLOAT64_HIDDEN_BIT_MASK;
-
-	/* second operand ... */
-	if (exp2 == 0) {
-		/* ... is denormalized */
-		--expdiff;	
-	} else {
-		/* is not denormalized */
-		frac2 |= FLOAT64_HIDDEN_BIT_MASK;
-	};
-	
-	/* create some space for rounding */
-	frac1 <<= 6;
-	frac2 <<= 6;
-	
-	if (expdiff < (FLOAT64_FRACTION_SIZE + 2) ) {
-		frac2 >>= expdiff;
-		frac1 += frac2;
-	} else {
-		a.parts.exp = exp1;
-		a.parts.fraction = (frac1 >> 6) & (~(FLOAT64_HIDDEN_BIT_MASK));
-		return a;
-	}
-	
-	if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7) ) {
-		++exp1;
-		frac1 >>= 1;
-	};
-	
-	/* rounding - if first bit after fraction is set then round up */
-	frac1 += (0x1 << 5); 
-	
-	if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) { 
-		/* rounding overflow */
-		++exp1;
-		frac1 >>= 1;
-	};
-	
-	if ((exp1 == FLOAT64_MAX_EXPONENT ) || (exp2 > exp1)) {
-			/* overflow - set infinity as result */
-			a.parts.exp = FLOAT64_MAX_EXPONENT;
-			a.parts.fraction = 0;
-			return a;
-			}
-	
-	a.parts.exp = exp1;
-	/*Clear hidden bit and shift */
-	a.parts.fraction = ( (frac1 >> 6 ) & (~FLOAT64_HIDDEN_BIT_MASK));
-	
-	return a;
-}
-
-/** @}
- */
Index: pace/softfloat/generic/common.c
===================================================================
--- uspace/softfloat/generic/common.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,215 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#include<sftypes.h>
-#include<common.h>
-
-/* Table for fast leading zeroes counting */
-char zeroTable[256] = {
-	8, 7, 7, 6, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, \
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, \
-	2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \
-	2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-
-/** Take fraction shifted by 10 bits to left, round it, normalize it and detect exceptions
- * @param cexp exponent with bias
- * @param cfrac fraction shifted 10 places left with added hidden bit
- * @param sign
- * @return valied float64
- */
-float64 finishFloat64(int32_t cexp, uint64_t cfrac, char sign)
-{
-	float64 result;
-
-	result.parts.sign = sign;
-
-	/* find first nonzero digit and shift result and detect possibly underflow */
-	while ((cexp > 0) && (cfrac) && (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1 ) )))) {
-		cexp--; 
-		cfrac <<= 1;
-			/* TODO: fix underflow */
-	};
-	
-	if ((cexp < 0) || ( cexp == 0 && (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1)))))) {
-		/* FIXME: underflow */
-		result.parts.exp = 0;
-		if ((cexp + FLOAT64_FRACTION_SIZE + 1) < 0) { /* +1 is place for rounding */
-			result.parts.fraction = 0;
-			return result;
-		}
-		
-		while (cexp < 0) {
-			cexp++;
-			cfrac >>= 1;
-		}
-	
-		cfrac += (0x1 << (64 - FLOAT64_FRACTION_SIZE - 3)); 
-		
-		if (!(cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1)))) {
-			
-			result.parts.fraction = ((cfrac >>(64 - FLOAT64_FRACTION_SIZE - 2) ) & (~FLOAT64_HIDDEN_BIT_MASK)); 
-			return result;
-		}	
-	} else {
-		cfrac += (0x1 << (64 - FLOAT64_FRACTION_SIZE - 3)); 
-	}
-	
-	++cexp;
-
-	if (cfrac & (FLOAT64_HIDDEN_BIT_MASK << (64 - FLOAT64_FRACTION_SIZE - 1 ))) {
-		++cexp;
-		cfrac >>= 1;
-	}	
-
-	/* check overflow */
-	if (cexp >= FLOAT64_MAX_EXPONENT ) {
-		/* FIXME: overflow, return infinity */
-		result.parts.exp = FLOAT64_MAX_EXPONENT;
-		result.parts.fraction = 0;
-		return result;
-	}
-
-	result.parts.exp = (uint32_t)cexp;
-	
-	result.parts.fraction = ((cfrac >>(64 - FLOAT64_FRACTION_SIZE - 2 ) ) & (~FLOAT64_HIDDEN_BIT_MASK)); 
-	
-	return result;	
-}
-
-/** Counts leading zeroes in 64bit unsigned integer
- * @param i 
- */
-int countZeroes64(uint64_t i)
-{
-	int j;
-	for (j =0; j < 64; j += 8) {
-		if ( i & (0xFFll << (56 - j))) {
-			return (j + countZeroes8(i >> (56 - j)));
-		}
-	}
-
-	return 64;
-}
-
-/** Counts leading zeroes in 32bit unsigned integer
- * @param i 
- */
-int countZeroes32(uint32_t i)
-{
-	int j;
-	for (j =0; j < 32; j += 8) {
-		if ( i & (0xFF << (24 - j))) {
-			return (j + countZeroes8(i >> (24 - j)));
-		}
-	}
-
-	return 32;
-}
-
-/** Counts leading zeroes in byte
- * @param i 
- */
-int countZeroes8(uint8_t i)
-{
-	return zeroTable[i];
-}
-
-/** Round and normalize number expressed by exponent and fraction with first bit (equal to hidden bit) at 30. bit
- * @param exp exponent 
- * @param fraction part with hidden bit shifted to 30. bit
- */
-void roundFloat32(int32_t *exp, uint32_t *fraction)
-{
-	/* rounding - if first bit after fraction is set then round up */
-	(*fraction) += (0x1 << 6);
-	
-	if ((*fraction) & (FLOAT32_HIDDEN_BIT_MASK << 8)) { 
-		/* rounding overflow */
-		++(*exp);
-		(*fraction) >>= 1;
-	};
-	
-	if (((*exp) >= FLOAT32_MAX_EXPONENT ) || ((*exp) < 0)) {
-		/* overflow - set infinity as result */
-		(*exp) = FLOAT32_MAX_EXPONENT;
-		(*fraction) = 0;
-		return;
-	}
-
-	return;
-}
-
-/** Round and normalize number expressed by exponent and fraction with first bit (equal to hidden bit) at 62. bit
- * @param exp exponent 
- * @param fraction part with hidden bit shifted to 62. bit
- */
-void roundFloat64(int32_t *exp, uint64_t *fraction)
-{
-	/* rounding - if first bit after fraction is set then round up */
-	(*fraction) += (0x1 << 9);
-	
-	if ((*fraction) & (FLOAT64_HIDDEN_BIT_MASK << 11)) { 
-		/* rounding overflow */
-		++(*exp);
-		(*fraction) >>= 1;
-	};
-	
-	if (((*exp) >= FLOAT64_MAX_EXPONENT ) || ((*exp) < 0)) {
-		/* overflow - set infinity as result */
-		(*exp) = FLOAT64_MAX_EXPONENT;
-		(*fraction) = 0;
-		return;
-	}
-
-	return;
-}
-
-/** @}
- */
-
Index: pace/softfloat/generic/comparison.c
===================================================================
--- uspace/softfloat/generic/comparison.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,129 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#include<sftypes.h>
-#include<comparison.h>
-
-inline int isFloat32NaN(float32 f)
-{	/* NaN : exp = 0xff and nonzero fraction */
-	return ((f.parts.exp==0xFF)&&(f.parts.fraction));
-}
-
-inline int isFloat64NaN(float64 d)
-{	/* NaN : exp = 0x7ff and nonzero fraction */
-	return ((d.parts.exp==0x7FF)&&(d.parts.fraction));
-}
-
-inline int isFloat32SigNaN(float32 f)
-{	/* SigNaN : exp = 0xff fraction = 0xxxxx..x (binary), where at least one x is nonzero */
-	return ((f.parts.exp==0xFF)&&(f.parts.fraction<0x400000)&&(f.parts.fraction));
-}
-
-inline int isFloat64SigNaN(float64 d)
-{	/* SigNaN : exp = 0x7ff fraction = 0xxxxx..x (binary), where at least one x is nonzero */
-	return ((d.parts.exp==0x7FF)&&(d.parts.fraction)&&(d.parts.fraction<0x8000000000000ll));
-}
-
-inline int isFloat32Infinity(float32 f) 
-{
-	return ((f.parts.exp==0xFF)&&(f.parts.fraction==0x0));
-}
-
-inline int isFloat64Infinity(float64 d) 
-{
-	return ((d.parts.exp==0x7FF)&&(d.parts.fraction==0x0));
-}
-
-inline int isFloat32Zero(float32 f)
-{
-	return (((f.binary) & 0x7FFFFFFF) == 0);
-}
-
-inline int isFloat64Zero(float64 d)
-{
-	return (((d.binary) & 0x7FFFFFFFFFFFFFFFll) == 0);
-}
-
-/**
- * @return 1, if both floats are equal - but NaNs are not recognized 
- */
-inline int isFloat32eq(float32 a, float32 b)
-{
-	return ((a.binary==b.binary)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
-}
-
-/**
- * @return 1, if a<b - but NaNs are not recognized 
- */
-inline int isFloat32lt(float32 a, float32 b) 
-{
-	if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
-		return 0; /* +- zeroes */
-	};
-	
-	if ((a.parts.sign)&&(b.parts.sign)) {
-		/*if both are negative, smaller is that with greater binary value*/
-		return (a.binary>b.binary);
-		};
-	
-	/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
-	a.parts.sign=!a.parts.sign;
-	b.parts.sign=!b.parts.sign;
-	return (a.binary<b.binary);
-			
-}
-
-/**
- * @return 1, if a>b - but NaNs are not recognized 
- */
-inline int isFloat32gt(float32 a, float32 b) 
-{
-	if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
-		return 0; /* zeroes are equal with any sign */
-	};
-	
-	if ((a.parts.sign)&&(b.parts.sign)) {
-		/*if both are negative, greater is that with smaller binary value*/
-		return (a.binary<b.binary);
-		};
-	
-	/* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
-	a.parts.sign=!a.parts.sign;
-	b.parts.sign=!b.parts.sign;
-	return (a.binary>b.binary);
-			
-}
-
-/** @}
- */
Index: pace/softfloat/generic/conversion.c
===================================================================
--- uspace/softfloat/generic/conversion.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,593 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#include "sftypes.h"
-#include "conversion.h"
-#include "comparison.h"
-#include "common.h"
-
-float64 convertFloat32ToFloat64(float32 a) 
-{
-	float64 result;
-	uint64_t frac;
-	
-	result.parts.sign = a.parts.sign;
-	result.parts.fraction = a.parts.fraction;
-	result.parts.fraction <<= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE );
-	
-	if ((isFloat32Infinity(a))||(isFloat32NaN(a))) {
-		result.parts.exp = 0x7FF;
-		/* TODO; check if its correct for SigNaNs*/
-		return result;
-	};
-	
-	result.parts.exp = a.parts.exp + ( (int)FLOAT64_BIAS - FLOAT32_BIAS );
-	if (a.parts.exp == 0) {
-		/* normalize denormalized numbers */
-
-		if (result.parts.fraction == 0ll) { /* fix zero */
-			result.parts.exp = 0ll;
-			return result;
-		}
-			
-		frac = result.parts.fraction;
-		
-		while (!(frac & (0x10000000000000ll))) {
-			frac <<= 1;
-			--result.parts.exp;
-		};
-		
-		++result.parts.exp;
-		result.parts.fraction = frac;
-	};
-	
-	return result;
-	
-}
-
-float32 convertFloat64ToFloat32(float64 a) 
-{
-	float32 result;
-	int32_t exp;
-	uint64_t frac;
-	
-	result.parts.sign = a.parts.sign;
-	
-	if (isFloat64NaN(a)) {
-		
-		result.parts.exp = 0xFF;
-		
-		if (isFloat64SigNaN(a)) {
-			result.parts.fraction = 0x400000; /* set first bit of fraction nonzero */
-			return result;
-		}
-	
-		result.parts.fraction = 0x1; /* fraction nonzero but its first bit is zero */
-		return result;
-	};
-
-	if (isFloat64Infinity(a)) {
-		result.parts.fraction = 0;
-		result.parts.exp = 0xFF;
-		return result;
-	};
-
-	exp = (int)a.parts.exp - FLOAT64_BIAS + FLOAT32_BIAS;
-	
-	if (exp >= 0xFF) {
-		/*FIXME: overflow*/
-		result.parts.fraction = 0;
-		result.parts.exp = 0xFF;
-		return result;
-		
-	} else if (exp <= 0 ) {
-		
-		/* underflow or denormalized */
-		
-		result.parts.exp = 0;
-		
-		exp *= -1;	
-		if (exp > FLOAT32_FRACTION_SIZE ) {
-			/* FIXME: underflow */
-			result.parts.fraction = 0;
-			return result;
-		};
-		
-		/* denormalized */
-		
-		frac = a.parts.fraction; 
-		frac |= 0x10000000000000ll; /* denormalize and set hidden bit */
-		
-		frac >>= (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE + 1);
-		
-		while (exp > 0) {
-			--exp;
-			frac >>= 1;
-		};
-		result.parts.fraction = frac;
-		
-		return result;
-	};
-
-	result.parts.exp = exp;
-	result.parts.fraction = a.parts.fraction >> (FLOAT64_FRACTION_SIZE - FLOAT32_FRACTION_SIZE);
-	return result;
-}
-
-
-/** Helping procedure for converting float32 to uint32
- * @param a floating point number in normalized form (no NaNs or Inf are checked )
- * @return unsigned integer
- */
-static uint32_t _float32_to_uint32_helper(float32 a)
-{
-	uint32_t frac;
-	
-	if (a.parts.exp < FLOAT32_BIAS) {
-		/*TODO: rounding*/
-		return 0;
-	}
-	
-	frac = a.parts.fraction;
-	
-	frac |= FLOAT32_HIDDEN_BIT_MASK;
-	/* shift fraction to left so hidden bit will be the most significant bit */
-	frac <<= 32 - FLOAT32_FRACTION_SIZE - 1; 
-
-	frac >>= 32 - (a.parts.exp - FLOAT32_BIAS) - 1;
-	if ((a.parts.sign == 1) && (frac != 0)) {
-		frac = ~frac;
-		++frac;
-	}
-	
-	return frac;
-}
-
-/* Convert float to unsigned int32
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-uint32_t float32_to_uint32(float32 a)
-{
-	if (isFloat32NaN(a)) {
-		return MAX_UINT32;
-	}
-	
-	if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS)))  {
-		if (a.parts.sign) {
-			return MIN_UINT32;
-		}
-		return MAX_UINT32;
-	}
-	
-	return _float32_to_uint32_helper(a);	
-}
-
-/* Convert float to signed int32
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-int32_t float32_to_int32(float32 a)
-{
-	if (isFloat32NaN(a)) {
-		return MAX_INT32;
-	}
-	
-	if (isFloat32Infinity(a) || (a.parts.exp >= (32 + FLOAT32_BIAS)))  {
-		if (a.parts.sign) {
-			return MIN_INT32;
-		}
-		return MAX_INT32;
-	}
-	return _float32_to_uint32_helper(a);
-}	
-
-
-/** Helping procedure for converting float64 to uint64
- * @param a floating point number in normalized form (no NaNs or Inf are checked )
- * @return unsigned integer
- */
-static uint64_t _float64_to_uint64_helper(float64 a)
-{
-	uint64_t frac;
-	
-	if (a.parts.exp < FLOAT64_BIAS) {
-		/*TODO: rounding*/
-		return 0;
-	}
-	
-	frac = a.parts.fraction;
-	
-	frac |= FLOAT64_HIDDEN_BIT_MASK;
-	/* shift fraction to left so hidden bit will be the most significant bit */
-	frac <<= 64 - FLOAT64_FRACTION_SIZE - 1; 
-
-	frac >>= 64 - (a.parts.exp - FLOAT64_BIAS) - 1;
-	if ((a.parts.sign == 1) && (frac != 0)) {
-		frac = ~frac;
-		++frac;
-	}
-	
-	return frac;
-}
-
-/* Convert float to unsigned int64
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-uint64_t float64_to_uint64(float64 a)
-{
-	if (isFloat64NaN(a)) {
-		return MAX_UINT64;
-	}
-	
-	if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS)))  {
-		if (a.parts.sign) {
-			return MIN_UINT64;
-		}
-		return MAX_UINT64;
-	}
-	
-	return _float64_to_uint64_helper(a);	
-}
-
-/* Convert float to signed int64
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-int64_t float64_to_int64(float64 a)
-{
-	if (isFloat64NaN(a)) {
-		return MAX_INT64;
-	}
-	
-	if (isFloat64Infinity(a) || (a.parts.exp >= (64 + FLOAT64_BIAS)))  {
-		if (a.parts.sign) {
-			return MIN_INT64;
-		}
-		return MAX_INT64;
-	}
-	return _float64_to_uint64_helper(a);
-}	
-
-
-
-
-
-/** Helping procedure for converting float32 to uint64
- * @param a floating point number in normalized form (no NaNs or Inf are checked )
- * @return unsigned integer
- */
-static uint64_t _float32_to_uint64_helper(float32 a)
-{
-	uint64_t frac;
-	
-	if (a.parts.exp < FLOAT32_BIAS) {
-		/*TODO: rounding*/
-		return 0;
-	}
-	
-	frac = a.parts.fraction;
-	
-	frac |= FLOAT32_HIDDEN_BIT_MASK;
-	/* shift fraction to left so hidden bit will be the most significant bit */
-	frac <<= 64 - FLOAT32_FRACTION_SIZE - 1; 
-
-	frac >>= 64 - (a.parts.exp - FLOAT32_BIAS) - 1;
-	if ((a.parts.sign == 1) && (frac != 0)) {
-		frac = ~frac;
-		++frac;
-	}
-	
-	return frac;
-}
-
-/* Convert float to unsigned int64
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-uint64_t float32_to_uint64(float32 a)
-{
-	if (isFloat32NaN(a)) {
-		return MAX_UINT64;
-	}
-	
-	if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS)))  {
-		if (a.parts.sign) {
-			return MIN_UINT64;
-		}
-		return MAX_UINT64;
-	}
-	
-	return _float32_to_uint64_helper(a);	
-}
-
-/* Convert float to signed int64
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-int64_t float32_to_int64(float32 a)
-{
-	if (isFloat32NaN(a)) {
-		return MAX_INT64;
-	}
-	
-	if (isFloat32Infinity(a) || (a.parts.exp >= (64 + FLOAT32_BIAS)))  {
-		if (a.parts.sign) {
-			return (MIN_INT64);
-		}
-		return MAX_INT64;
-	}
-	return _float32_to_uint64_helper(a);
-}	
-
-
-/* Convert float64 to unsigned int32
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-uint32_t float64_to_uint32(float64 a)
-{
-	if (isFloat64NaN(a)) {
-		return MAX_UINT32;
-	}
-	
-	if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS)))  {
-		if (a.parts.sign) {
-			return MIN_UINT32;
-		}
-		return MAX_UINT32;
-	}
-	
-	return (uint32_t)_float64_to_uint64_helper(a);	
-}
-
-/* Convert float64 to signed int32
- * FIXME: Im not sure what to return if overflow/underflow happens 
- * 	- now its the biggest or the smallest int
- */ 
-int32_t float64_to_int32(float64 a)
-{
-	if (isFloat64NaN(a)) {
-		return MAX_INT32;
-	}
-	
-	if (isFloat64Infinity(a) || (a.parts.exp >= (32 + FLOAT64_BIAS)))  {
-		if (a.parts.sign) {
-			return MIN_INT32;
-		}
-		return MAX_INT32;
-	}
-	return (int32_t)_float64_to_uint64_helper(a);
-}	
-
-/** Convert unsigned integer to float32
- *
- *
- */
-float32 uint32_to_float32(uint32_t i)
-{
-	int counter;
-	int32_t exp;
-	float32 result;
-	
-	result.parts.sign = 0;
-	result.parts.fraction = 0;
-
-	counter = countZeroes32(i);
-
-	exp = FLOAT32_BIAS + 32 - counter - 1;
-	
-	if (counter == 32) {
-		result.binary = 0;
-		return result;
-	}
-	
-	if (counter > 0) {
-		i <<= counter - 1;
-	} else {
-		i >>= 1;
-	}
-
-	roundFloat32(&exp, &i);
-
-	result.parts.fraction = i >> 7;
-	result.parts.exp = exp;
-
-	return result;
-}
-
-float32 int32_to_float32(int32_t i) 
-{
-	float32 result;
-
-	if (i < 0) {
-		result = uint32_to_float32((uint32_t)(-i));
-	} else {
-		result = uint32_to_float32((uint32_t)i);
-	}
-	
-	result.parts.sign = i < 0;
-
- 	return result;
-}
-
-
-float32 uint64_to_float32(uint64_t i) 
-{
-	int counter;
-	int32_t exp;
-	uint32_t j;
-	float32 result;
-	
-	result.parts.sign = 0;
-	result.parts.fraction = 0;
-
-	counter = countZeroes64(i);
-
-	exp = FLOAT32_BIAS + 64 - counter - 1;
-	
-	if (counter == 64) {
-		result.binary = 0;
-		return result;
-	}
-	
-	/* Shift all to the first 31 bits (31. will be hidden 1)*/
-	if (counter > 33) {
-		i <<= counter - 1 - 32;
-	} else {
-		i >>= 1 + 32 - counter;
-	}
-	
-	j = (uint32_t)i;
-	roundFloat32(&exp, &j);
-
-	result.parts.fraction = j >> 7;
-	result.parts.exp = exp;
-	return result;
-}
-
-float32 int64_to_float32(int64_t i) 
-{
-	float32 result;
-
-	if (i < 0) {
-		result = uint64_to_float32((uint64_t)(-i));
-	} else {
-		result = uint64_to_float32((uint64_t)i);
-	}
-	
-	result.parts.sign = i < 0;
-
- 	return result;
-}
-
-/** Convert unsigned integer to float64
- *
- *
- */
-float64 uint32_to_float64(uint32_t i)
-{
-	int counter;
-	int32_t exp;
-	float64 result;
-	uint64_t frac;
-	
-	result.parts.sign = 0;
-	result.parts.fraction = 0;
-
-	counter = countZeroes32(i);
-
-	exp = FLOAT64_BIAS + 32 - counter - 1;
-	
-	if (counter == 32) {
-		result.binary = 0;
-		return result;
-	}
-	
-	frac = i;
-	frac <<= counter + 32 - 1; 
-
-	roundFloat64(&exp, &frac);
-
-	result.parts.fraction = frac >> 10;
-	result.parts.exp = exp;
-
-	return result;
-}
-
-float64 int32_to_float64(int32_t i) 
-{
-	float64 result;
-
-	if (i < 0) {
-		result = uint32_to_float64((uint32_t)(-i));
-	} else {
-		result = uint32_to_float64((uint32_t)i);
-	}
-	
-	result.parts.sign = i < 0;
-
- 	return result;
-}
-
-
-float64 uint64_to_float64(uint64_t i) 
-{
-	int counter;
-	int32_t exp;
-	float64 result;
-	
-	result.parts.sign = 0;
-	result.parts.fraction = 0;
-
-	counter = countZeroes64(i);
-
-	exp = FLOAT64_BIAS + 64 - counter - 1;
-	
-	if (counter == 64) {
-		result.binary = 0;
-		return result;
-	}
-	
-	if (counter > 0) {
-		i <<= counter - 1;
-	} else {
-		i >>= 1;
-	}
-
-	roundFloat64(&exp, &i);
-
-	result.parts.fraction = i >> 10;
-	result.parts.exp = exp;
-	return result;
-}
-
-float64 int64_to_float64(int64_t i) 
-{
-	float64 result;
-
-	if (i < 0) {
-		result = uint64_to_float64((uint64_t)(-i));
-	} else {
-		result = uint64_to_float64((uint64_t)i);
-	}
-	
-	result.parts.sign = i < 0;
-
- 	return result;
-}
-
-/** @}
- */
Index: pace/softfloat/generic/div.c
===================================================================
--- uspace/softfloat/generic/div.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,364 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#include<sftypes.h>
-#include<add.h>
-#include<div.h>
-#include<comparison.h>
-#include<mul.h>
-#include<common.h>
-
-
-float32 divFloat32(float32 a, float32 b) 
-{
-	float32 result;
-	int32_t aexp, bexp, cexp;
-	uint64_t afrac, bfrac, cfrac;
-	
-	result.parts.sign = a.parts.sign ^ b.parts.sign;
-	
-	if (isFloat32NaN(a)) {
-		if (isFloat32SigNaN(a)) {
-			/*FIXME: SigNaN*/
-		}
-		/*NaN*/
-		return a;
-	}
-	
-	if (isFloat32NaN(b)) {
-		if (isFloat32SigNaN(b)) {
-			/*FIXME: SigNaN*/
-		}
-		/*NaN*/
-		return b;
-	}
-	
-	if (isFloat32Infinity(a)) {
-		if (isFloat32Infinity(b)) {
-			/*FIXME: inf / inf */
-			result.binary = FLOAT32_NAN;
-			return result;
-		}
-		/* inf / num */
-		result.parts.exp = a.parts.exp;
-		result.parts.fraction = a.parts.fraction;
-		return result;
-	}
-
-	if (isFloat32Infinity(b)) {
-		if (isFloat32Zero(a)) {
-			/* FIXME 0 / inf */
-			result.parts.exp = 0;
-			result.parts.fraction = 0;
-			return result;
-		}
-		/* FIXME: num / inf*/
-		result.parts.exp = 0;
-		result.parts.fraction = 0;
-		return result;
-	}
-	
-	if (isFloat32Zero(b)) {
-		if (isFloat32Zero(a)) {
-			/*FIXME: 0 / 0*/
-			result.binary = FLOAT32_NAN;
-			return result;
-		}
-		/* FIXME: division by zero */
-		result.parts.exp = 0;
-		result.parts.fraction = 0;
-		return result;
-	}
-
-	
-	afrac = a.parts.fraction;
-	aexp = a.parts.exp;
-	bfrac = b.parts.fraction;
-	bexp = b.parts.exp;
-	
-	/* denormalized numbers */
-	if (aexp == 0) {
-		if (afrac == 0) {
-		result.parts.exp = 0;
-		result.parts.fraction = 0;
-		return result;
-		}
-		/* normalize it*/
-		
-		afrac <<= 1;
-			/* afrac is nonzero => it must stop */	
-		while (! (afrac & FLOAT32_HIDDEN_BIT_MASK) ) {
-			afrac <<= 1;
-			aexp--;
-		}
-	}
-
-	if (bexp == 0) {
-		bfrac <<= 1;
-			/* bfrac is nonzero => it must stop */	
-		while (! (bfrac & FLOAT32_HIDDEN_BIT_MASK) ) {
-			bfrac <<= 1;
-			bexp--;
-		}
-	}
-
-	afrac =	(afrac | FLOAT32_HIDDEN_BIT_MASK ) << (32 - FLOAT32_FRACTION_SIZE - 1 );
-	bfrac =	(bfrac | FLOAT32_HIDDEN_BIT_MASK ) << (32 - FLOAT32_FRACTION_SIZE );
-
-	if ( bfrac <= (afrac << 1) ) {
-		afrac >>= 1;
-		aexp++;
-	}
-	
-	cexp = aexp - bexp + FLOAT32_BIAS - 2;
-	
-	cfrac = (afrac << 32) / bfrac;
-	if ((  cfrac & 0x3F ) == 0) { 
-		cfrac |= ( bfrac * cfrac != afrac << 32 );
-	}
-	
-	/* pack and round */
-	
-	/* find first nonzero digit and shift result and detect possibly underflow */
-	while ((cexp > 0) && (cfrac) && (!(cfrac & (FLOAT32_HIDDEN_BIT_MASK << 7 )))) {
-		cexp--;
-		cfrac <<= 1;
-			/* TODO: fix underflow */
-	};
-	
-	cfrac += (0x1 << 6); /* FIXME: 7 is not sure*/
-	
-	if (cfrac & (FLOAT32_HIDDEN_BIT_MASK << 7)) {
-		++cexp;
-		cfrac >>= 1;
-		}	
-
-	/* check overflow */
-	if (cexp >= FLOAT32_MAX_EXPONENT ) {
-		/* FIXME: overflow, return infinity */
-		result.parts.exp = FLOAT32_MAX_EXPONENT;
-		result.parts.fraction = 0;
-		return result;
-	}
-
-	if (cexp < 0) {
-		/* FIXME: underflow */
-		result.parts.exp = 0;
-		if ((cexp + FLOAT32_FRACTION_SIZE) < 0) {
-			result.parts.fraction = 0;
-			return result;
-		}
-		cfrac >>= 1;
-		while (cexp < 0) {
-			cexp ++;
-			cfrac >>= 1;
-		}
-		
-	} else {
-		result.parts.exp = (uint32_t)cexp;
-	}
-	
-	result.parts.fraction = ((cfrac >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)); 
-	
-	return result;	
-}
-
-float64 divFloat64(float64 a, float64 b) 
-{
-	float64 result;
-	int64_t aexp, bexp, cexp;
-	uint64_t afrac, bfrac, cfrac; 
-	uint64_t remlo, remhi;
-	
-	result.parts.sign = a.parts.sign ^ b.parts.sign;
-	
-	if (isFloat64NaN(a)) {
-		
-		if (isFloat64SigNaN(b)) {
-			/*FIXME: SigNaN*/
-			return b;
-		}
-		
-		if (isFloat64SigNaN(a)) {
-			/*FIXME: SigNaN*/
-		}
-		/*NaN*/
-		return a;
-	}
-	
-	if (isFloat64NaN(b)) {
-		if (isFloat64SigNaN(b)) {
-			/*FIXME: SigNaN*/
-		}
-		/*NaN*/
-		return b;
-	}
-	
-	if (isFloat64Infinity(a)) {
-		if (isFloat64Infinity(b) || isFloat64Zero(b)) {
-			/*FIXME: inf / inf */
-			result.binary = FLOAT64_NAN;
-			return result;
-		}
-		/* inf / num */
-		result.parts.exp = a.parts.exp;
-		result.parts.fraction = a.parts.fraction;
-		return result;
-	}
-
-	if (isFloat64Infinity(b)) {
-		if (isFloat64Zero(a)) {
-			/* FIXME 0 / inf */
-			result.parts.exp = 0;
-			result.parts.fraction = 0;
-			return result;
-		}
-		/* FIXME: num / inf*/
-		result.parts.exp = 0;
-		result.parts.fraction = 0;
-		return result;
-	}
-	
-	if (isFloat64Zero(b)) {
-		if (isFloat64Zero(a)) {
-			/*FIXME: 0 / 0*/
-			result.binary = FLOAT64_NAN;
-			return result;
-		}
-		/* FIXME: division by zero */
-		result.parts.exp = 0;
-		result.parts.fraction = 0;
-		return result;
-	}
-
-	
-	afrac = a.parts.fraction;
-	aexp = a.parts.exp;
-	bfrac = b.parts.fraction;
-	bexp = b.parts.exp;
-	
-	/* denormalized numbers */
-	if (aexp == 0) {
-		if (afrac == 0) {
-			result.parts.exp = 0;
-			result.parts.fraction = 0;
-			return result;
-		}
-		/* normalize it*/
-		
-		aexp++;
-			/* afrac is nonzero => it must stop */	
-		while (! (afrac & FLOAT64_HIDDEN_BIT_MASK) ) {
-			afrac <<= 1;
-			aexp--;
-		}
-	}
-
-	if (bexp == 0) {
-		bexp++;
-			/* bfrac is nonzero => it must stop */	
-		while (! (bfrac & FLOAT64_HIDDEN_BIT_MASK) ) {
-			bfrac <<= 1;
-			bexp--;
-		}
-	}
-
-	afrac =	(afrac | FLOAT64_HIDDEN_BIT_MASK ) << (64 - FLOAT64_FRACTION_SIZE - 2 );
-	bfrac =	(bfrac | FLOAT64_HIDDEN_BIT_MASK ) << (64 - FLOAT64_FRACTION_SIZE - 1);
-
-	if ( bfrac <= (afrac << 1) ) {
-		afrac >>= 1;
-		aexp++;
-	}
-	
-	cexp = aexp - bexp + FLOAT64_BIAS - 2; 
-	
-	cfrac = divFloat64estim(afrac, bfrac);
-	
-	if ((  cfrac & 0x1FF ) <= 2) { /*FIXME:?? */
-		mul64integers( bfrac, cfrac, &remlo, &remhi);
-		/* (__u128)afrac << 64 - ( ((__u128)remhi<<64) + (__u128)remlo )*/	
-		remhi = afrac - remhi - ( remlo > 0);
-		remlo = - remlo;
-		
-		while ((int64_t) remhi < 0) {
-			cfrac--;
-			remlo += bfrac;
-			remhi += ( remlo < bfrac );
-		}
-		cfrac |= ( remlo != 0 );
-	}
-	
-	/* round and shift */
-	result = finishFloat64(cexp, cfrac, result.parts.sign);
-	return result;
-
-}
-
-uint64_t divFloat64estim(uint64_t a, uint64_t b)
-{
-	uint64_t bhi;
-	uint64_t remhi, remlo;
-	uint64_t result;
-	
-	if ( b <= a ) {
-		return 0xFFFFFFFFFFFFFFFFull;
-	}
-	
-	bhi = b >> 32;
-	result = ((bhi << 32) <= a) ?( 0xFFFFFFFFull << 32) : ( a / bhi) << 32;
-	mul64integers(b, result, &remlo, &remhi);
-	
-	remhi = a - remhi - (remlo > 0);
-	remlo = - remlo;
-
-	b <<= 32;
-	while ( (int64_t) remhi < 0 ) {
-			result -= 0x1ll << 32;	
-			remlo += b;
-			remhi += bhi + ( remlo < b );
-		}
-	remhi = (remhi << 32) | (remlo >> 32);
-	if (( bhi << 32) <= remhi) {
-		result |= 0xFFFFFFFF;
-	} else {
-		result |= remhi / bhi;
-	}
-	
-	
-	return result;
-}
-
-/** @}
- */
Index: pace/softfloat/generic/mul.c
===================================================================
--- uspace/softfloat/generic/mul.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,294 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#include<sftypes.h>
-#include<mul.h>
-#include<comparison.h>
-#include<common.h>
-
-/** Multiply two 32 bit float numbers
- *
- */
-float32 mulFloat32(float32 a, float32 b)
-{
-	float32 result;
-	uint64_t frac1, frac2;
-	int32_t exp;
-
-	result.parts.sign = a.parts.sign ^ b.parts.sign;
-	
-	if (isFloat32NaN(a) || isFloat32NaN(b) ) {
-		/* TODO: fix SigNaNs */
-		if (isFloat32SigNaN(a)) {
-			result.parts.fraction = a.parts.fraction;
-			result.parts.exp = a.parts.exp;
-			return result;
-		};
-		if (isFloat32SigNaN(b)) { /* TODO: fix SigNaN */
-			result.parts.fraction = b.parts.fraction;
-			result.parts.exp = b.parts.exp;
-			return result;
-		};
-		/* set NaN as result */
-		result.binary = FLOAT32_NAN;
-		return result;
-	};
-		
-	if (isFloat32Infinity(a)) { 
-		if (isFloat32Zero(b)) {
-			/* FIXME: zero * infinity */
-			result.binary = FLOAT32_NAN;
-			return result;
-		}
-		result.parts.fraction = a.parts.fraction;
-		result.parts.exp = a.parts.exp;
-		return result;
-	}
-
-	if (isFloat32Infinity(b)) { 
-		if (isFloat32Zero(a)) {
-			/* FIXME: zero * infinity */
-			result.binary = FLOAT32_NAN;
-			return result;
-		}
-		result.parts.fraction = b.parts.fraction;
-		result.parts.exp = b.parts.exp;
-		return result;
-	}
-
-	/* exp is signed so we can easy detect underflow */
-	exp = a.parts.exp + b.parts.exp;
-	exp -= FLOAT32_BIAS;
-	
-	if (exp >= FLOAT32_MAX_EXPONENT) {
-		/* FIXME: overflow */
-		/* set infinity as result */
-		result.binary = FLOAT32_INF;
-		result.parts.sign = a.parts.sign ^ b.parts.sign;
-		return result;
-	};
-	
-	if (exp < 0) { 
-		/* FIXME: underflow */
-		/* return signed zero */
-		result.parts.fraction = 0x0;
-		result.parts.exp = 0x0;
-		return result;
-	};
-	
-	frac1 = a.parts.fraction;
-	if (a.parts.exp > 0) {
-		frac1 |= FLOAT32_HIDDEN_BIT_MASK;
-	} else {
-		++exp;
-	};
-	
-	frac2 = b.parts.fraction;
-
-	if (b.parts.exp > 0) {
-		frac2 |= FLOAT32_HIDDEN_BIT_MASK;
-	} else {
-		++exp;
-	};
-
-	frac1 <<= 1; /* one bit space for rounding */
-
-	frac1 = frac1 * frac2;
-/* round and return */
-	
-	while ((exp < FLOAT32_MAX_EXPONENT) && (frac1 >= ( 1 << (FLOAT32_FRACTION_SIZE + 2)))) { 
-		/* 23 bits of fraction + one more for hidden bit (all shifted 1 bit left)*/
-		++exp;
-		frac1 >>= 1;
-	};
-
-	/* rounding */
-	/* ++frac1; FIXME: not works - without it is ok */
-	frac1 >>= 1; /* shift off rounding space */
-	
-	if ((exp < FLOAT32_MAX_EXPONENT) && (frac1 >= (1 << (FLOAT32_FRACTION_SIZE + 1)))) {
-		++exp;
-		frac1 >>= 1;
-	};
-
-	if (exp >= FLOAT32_MAX_EXPONENT ) {	
-		/* TODO: fix overflow */
-		/* return infinity*/
-		result.parts.exp = FLOAT32_MAX_EXPONENT;
-		result.parts.fraction = 0x0;
-		return result;
-	}
-	
-	exp -= FLOAT32_FRACTION_SIZE;
-
-	if (exp <= FLOAT32_FRACTION_SIZE) { 
-		/* denormalized number */
-		frac1 >>= 1; /* denormalize */
-		while ((frac1 > 0) && (exp < 0)) {
-			frac1 >>= 1;
-			++exp;
-		};
-		if (frac1 == 0) {
-			/* FIXME : underflow */
-		result.parts.exp = 0;
-		result.parts.fraction = 0;
-		return result;
-		};
-	};
-	result.parts.exp = exp; 
-	result.parts.fraction = frac1 & ( (1 << FLOAT32_FRACTION_SIZE) - 1);
-	
-	return result;	
-	
-}
-
-/** Multiply two 64 bit float numbers
- *
- */
-float64 mulFloat64(float64 a, float64 b)
-{
-	float64 result;
-	uint64_t frac1, frac2;
-	int32_t exp;
-
-	result.parts.sign = a.parts.sign ^ b.parts.sign;
-	
-	if (isFloat64NaN(a) || isFloat64NaN(b) ) {
-		/* TODO: fix SigNaNs */
-		if (isFloat64SigNaN(a)) {
-			result.parts.fraction = a.parts.fraction;
-			result.parts.exp = a.parts.exp;
-			return result;
-		};
-		if (isFloat64SigNaN(b)) { /* TODO: fix SigNaN */
-			result.parts.fraction = b.parts.fraction;
-			result.parts.exp = b.parts.exp;
-			return result;
-		};
-		/* set NaN as result */
-		result.binary = FLOAT64_NAN;
-		return result;
-	};
-		
-	if (isFloat64Infinity(a)) { 
-		if (isFloat64Zero(b)) {
-			/* FIXME: zero * infinity */
-			result.binary = FLOAT64_NAN;
-			return result;
-		}
-		result.parts.fraction = a.parts.fraction;
-		result.parts.exp = a.parts.exp;
-		return result;
-	}
-
-	if (isFloat64Infinity(b)) { 
-		if (isFloat64Zero(a)) {
-			/* FIXME: zero * infinity */
-			result.binary = FLOAT64_NAN;
-			return result;
-		}
-		result.parts.fraction = b.parts.fraction;
-		result.parts.exp = b.parts.exp;
-		return result;
-	}
-
-	/* exp is signed so we can easy detect underflow */
-	exp = a.parts.exp + b.parts.exp - FLOAT64_BIAS;
-	
-	frac1 = a.parts.fraction;
-
-	if (a.parts.exp > 0) {
-		frac1 |= FLOAT64_HIDDEN_BIT_MASK;
-	} else {
-		++exp;
-	};
-	
-	frac2 = b.parts.fraction;
-
-	if (b.parts.exp > 0) {
-		frac2 |= FLOAT64_HIDDEN_BIT_MASK;
-	} else {
-		++exp;
-	};
-
-	frac1 <<= (64 - FLOAT64_FRACTION_SIZE - 1);
-	frac2 <<= (64 - FLOAT64_FRACTION_SIZE - 2);
-
-	mul64integers(frac1, frac2, &frac1, &frac2);
-
-	frac2 |= (frac1 != 0);
-	if (frac2 & (0x1ll << 62)) {
-		frac2 <<= 1;
-		exp--;
-	}
-
-	result = finishFloat64(exp, frac2, result.parts.sign);
-	return result;
-}
-
-/** Multiply two 64 bit numbers and return result in two parts
- * @param a first operand
- * @param b second operand
- * @param lo lower part from result
- * @param hi higher part of result
- */
-void mul64integers(uint64_t a,uint64_t b, uint64_t *lo, uint64_t *hi)
-{
-	uint64_t low, high, middle1, middle2;
-	uint32_t alow, blow;
-
-	alow = a & 0xFFFFFFFF;
-	blow = b & 0xFFFFFFFF;
-	
-	a >>= 32;
-	b >>= 32;
-	
-	low = ((uint64_t)alow) * blow;
-	middle1 = a * blow;
-	middle2 = alow * b;
-	high = a * b;
-
-	middle1 += middle2;
-	high += (((uint64_t)(middle1 < middle2)) << 32) + (middle1 >> 32);
-	middle1 <<= 32;
-	low += middle1;
-	high += (low < middle1);
-	*lo = low;
-	*hi = high;
-	
-	return;
-}
-
-/** @}
- */
Index: pace/softfloat/generic/other.c
===================================================================
--- uspace/softfloat/generic/other.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,37 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-
-/** @}
- */
Index: pace/softfloat/generic/softfloat.c
===================================================================
--- uspace/softfloat/generic/softfloat.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,499 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softfloat generic
- * @ingroup sfl
- * @brief Architecture independent parts of FPU software emulation library.
- * @{
- */
-/** @file
- */
-
-#include<softfloat.h>
-#include<sftypes.h>
-
-#include<add.h>
-#include<sub.h>
-#include<mul.h>
-#include<div.h>
-
-#include<conversion.h>
-#include<comparison.h>
-#include<other.h>
-
-#include<functions.h>
-
-/* Arithmetic functions */
-
-float __addsf3(float a, float b)
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if (fa.parts.sign != fb.parts.sign) {
-		if (fa.parts.sign) {
-			fa.parts.sign = 0;
-			return subFloat32(fb, fa).f;
-		};
-		fb.parts.sign = 0;
-		return subFloat32(fa, fb).f;
-	}
-	return addFloat32(fa, fb).f;
-}
-
-double __adddf3(double a, double b)
-{
-	float64 da, db;
-	da.d = a;
-	db.d = b;
-	if (da.parts.sign != db.parts.sign) {
-		if (da.parts.sign) {
-			da.parts.sign = 0;
-			return subFloat64(db, da).d;
-		};
-		db.parts.sign = 0;
-		return subFloat64(da, db).d;
-	}
-	return addFloat64(da, db).d;
-}
-
-float __subsf3(float a, float b)
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if (fa.parts.sign != fb.parts.sign) {
-		fb.parts.sign = !fb.parts.sign;
-		return addFloat32(fa, fb).f;
-	}
-	return subFloat32(fa, fb).f;
-}
-
-double __subdf3(double a, double b)
-{
-	float64 da, db;
-	da.d = a;
-	db.d = b;
-	if (da.parts.sign != db.parts.sign) {
-		db.parts.sign = !db.parts.sign;
-		return addFloat64(da, db).d;
-	}
-	return subFloat64(da, db).d;
-}
-
-float __mulsf3(float a, float b) 
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	return 	mulFloat32(fa, fb).f;
-}
-
-double __muldf3(double a, double b) 
-{
-	float64 da, db;
-	da.d = a;
-	db.d = b;
-	return 	mulFloat64(da, db).d;
-}
-
-float __divsf3(float a, float b) 
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	return 	divFloat32(fa, fb).f;
-}
-
-double __divdf3(double a, double b) 
-{
-	float64 da, db;
-	da.d = a;
-	db.d = b;
-	return 	divFloat64(da, db).d;
-}
-
-float __negsf2(float a)
-{
-	float32 fa;
-	fa.f = a;
-	fa.parts.sign = !fa.parts.sign;
-	return fa.f;
-}
-
-double __negdf2(double a)
-{
-	float64 fa;
-	fa.d = a;
-	fa.parts.sign = !fa.parts.sign;
-	return fa.d;
-}
-
-/* Conversion functions */
-
-double __extendsfdf2(float a) 
-{
-	float32 fa;
-	fa.f = a;
-	return convertFloat32ToFloat64(fa).d;
-}
-
-float __truncdfsf2(double a) 
-{
-	float64 da;
-	da.d = a;
-	return convertFloat64ToFloat32(da).f;
-}
-
-int __fixsfsi(float a)
-{
-	float32 fa;
-	fa.f = a;
-	
-	return float32_to_int(fa);
-}
-int __fixdfsi(double a)
-{
-	float64 da;
-	da.d = a;
-	
-	return float64_to_int(da);
-}
- 
-long __fixsfdi(float a)
-{
-	float32 fa;
-	fa.f = a;
-	
-	return float32_to_long(fa);
-}
-long __fixdfdi(double a)
-{
-	float64 da;
-	da.d = a;
-	
-	return float64_to_long(da);
-}
- 
-long long __fixsfti(float a)
-{
-	float32 fa;
-	fa.f = a;
-	
-	return float32_to_longlong(fa);
-}
-long long __fixdfti(double a)
-{
-	float64 da;
-	da.d = a;
-	
-	return float64_to_longlong(da);
-}
-
-unsigned int __fixunssfsi(float a)
-{
-	float32 fa;
-	fa.f = a;
-	
-	return float32_to_uint(fa);
-}
-unsigned int __fixunsdfsi(double a)
-{
-	float64 da;
-	da.d = a;
-	
-	return float64_to_uint(da);
-}
- 
-unsigned long __fixunssfdi(float a)
-{
-	float32 fa;
-	fa.f = a;
-	
-	return float32_to_ulong(fa);
-}
-unsigned long __fixunsdfdi(double a)
-{
-	float64 da;
-	da.d = a;
-	
-	return float64_to_ulong(da);
-}
- 
-unsigned long long __fixunssfti(float a)
-{
-	float32 fa;
-	fa.f = a;
-	
-	return float32_to_ulonglong(fa);
-}
-unsigned long long __fixunsdfti(double a)
-{
-	float64 da;
-	da.d = a;
-	
-	return float64_to_ulonglong(da);
-}
- 
-float __floatsisf(int i)
-{
-	float32 fa;
-	
-	fa = int_to_float32(i);
-	return fa.f;
-}
-double __floatsidf(int i)
-{
-	float64 da;
-	
-	da = int_to_float64(i);
-	return da.d;
-}
- 
-float __floatdisf(long i)
-{
-	float32 fa;
-	
-	fa = long_to_float32(i);
-	return fa.f;
-}
-double __floatdidf(long i)
-{
-	float64 da;
-	
-	da = long_to_float64(i);
-	return da.d;
-}
- 
-float __floattisf(long long i)
-{
-	float32 fa;
-	
-	fa = longlong_to_float32(i);
-	return fa.f;
-}
-double __floattidf(long long i)
-{
-	float64 da;
-	
-	da = longlong_to_float64(i);
-	return da.d;
-}
-
-float __floatunsisf(unsigned int i)
-{
-	float32 fa;
-	
-	fa = uint_to_float32(i);
-	return fa.f;
-}
-double __floatunsidf(unsigned int i)
-{
-	float64 da;
-	
-	da = uint_to_float64(i);
-	return da.d;
-}
- 
-float __floatundisf(unsigned long i)
-{
-	float32 fa;
-	
-	fa = ulong_to_float32(i);
-	return fa.f;
-}
-double __floatundidf(unsigned long i)
-{
-	float64 da;
-	
-	da = ulong_to_float64(i);
-	return da.d;
-}
- 
-float __floatuntisf(unsigned long long i)
-{
-	float32 fa;
-	
-	fa = ulonglong_to_float32(i);
-	return fa.f;
-}
-double __floatuntidf(unsigned long long i)
-{
-	float64 da;
-	
-	da = ulonglong_to_float64(i);
-	return da.d;
-}
-
-/* Comparison functions */
-/* Comparison functions */
-
-/* a<b .. -1
- * a=b ..  0
- * a>b ..  1
- * */
-
-int __cmpsf2(float a, float b) 
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
-		return 1; /* no special constant for unordered - maybe signaled? */
-	};
-
-	
-	if (isFloat32eq(fa, fb)) {
-		return 0;
-	};
-	
-	if (isFloat32lt(fa, fb)) {
-		return -1;
-		};
-	return 1;
-}
-
-int __unordsf2(float a, float b) 
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	return ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) );
-}
-
-/** 
- * @return zero, if neither argument is a NaN and are equal
- * */
-int __eqsf2(float a, float b) 
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
-		/* TODO: sigNaNs*/
-		return 1;
-		};
-	return isFloat32eq(fa, fb) - 1;
-}
-
-/* strange behavior, but it was in gcc documentation */
-int __nesf2(float a, float b) 
-{
-	return __eqsf2(a, b);
-}
-
-/* return value >= 0 if a>=b and neither is NaN */
-int __gesf2(float a, float b)
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
-		/* TODO: sigNaNs*/
-		return -1;
-		};
-	
-	if (isFloat32eq(fa, fb)) {
-		return 0;
-	};
-	
-	if (isFloat32gt(fa, fb)) {
-		return 1;
-		};
-	
-	return -1;
-}
-
-/** Return negative value, if a<b and neither is NaN*/
-int __ltsf2(float a, float b)
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
-		/* TODO: sigNaNs*/
-		return 1;
-		};
-	if (isFloat32lt(fa, fb)) {
-		return -1;
-		};
-	return 0;
-}
-
-/* return value <= 0 if a<=b and neither is NaN */
-int __lesf2(float a, float b)
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
-		/* TODO: sigNaNs*/
-		return 1;
-		};
-	
-	if (isFloat32eq(fa, fb)) {
-		return 0;
-	};
-	
-	if (isFloat32lt(fa, fb)) {
-		return -1;
-		};
-	
-	return 1;
-}
-
-/** Return positive value, if a>b and neither is NaN*/
-int __gtsf2(float a, float b)
-{
-	float32 fa, fb;
-	fa.f = a;
-	fb.f = b;
-	if ( (isFloat32NaN(fa)) || (isFloat32NaN(fb)) ) {
-		/* TODO: sigNaNs*/
-		return -1;
-		};
-	if (isFloat32gt(fa, fb)) {
-		return 1;
-		};
-	return 0;
-}
-
-/* Other functions */
-
-float __powisf2(float a, int b)
-{
-/* TODO: */
-	float32 fa;
-	fa.binary = FLOAT32_NAN;
-	return fa.f;
-}
-
-
-/** @}
- */
-
Index: pace/softfloat/generic/sub.c
===================================================================
--- uspace/softfloat/generic/sub.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,265 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#include<sftypes.h>
-#include<sub.h>
-#include<comparison.h>
-
-/** Subtract two float32 numbers with same signs
- */
-float32 subFloat32(float32 a, float32 b)
-{
-	int expdiff;
-	uint32_t exp1, exp2, frac1, frac2;
-	float32 result;
-
-	result.f = 0;
-	
-	expdiff = a.parts.exp - b.parts.exp;
-	if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts.fraction < b.parts.fraction))) {
-		if (isFloat32NaN(b)) {
-			/* TODO: fix SigNaN */
-			if (isFloat32SigNaN(b)) {
-			};
-			return b;
-		};
-		
-		if (b.parts.exp == FLOAT32_MAX_EXPONENT) { 
-			b.parts.sign = !b.parts.sign; /* num -(+-inf) = -+inf */
-			return b;
-		}
-		
-		result.parts.sign = !a.parts.sign; 
-		
-		frac1 = b.parts.fraction;
-		exp1 = b.parts.exp;
-		frac2 = a.parts.fraction;
-		exp2 = a.parts.exp;
-		expdiff *= -1;
-	} else {
-		if (isFloat32NaN(a)) {
-			/* TODO: fix SigNaN */
-			if (isFloat32SigNaN(a) || isFloat32SigNaN(b)) {
-			};
-			return a;
-		};
-		
-		if (a.parts.exp == FLOAT32_MAX_EXPONENT) { 
-			if (b.parts.exp == FLOAT32_MAX_EXPONENT) {
-				/* inf - inf => nan */
-				/* TODO: fix exception */
-				result.binary = FLOAT32_NAN;
-				return result;
-			};
-			return a;
-		}
-		
-		result.parts.sign = a.parts.sign;
-		
-		frac1 = a.parts.fraction;
-		exp1 = a.parts.exp;
-		frac2 = b.parts.fraction;
-		exp2 = b.parts.exp;	
-	};
-	
-	if (exp1 == 0) {
-		/* both are denormalized */
-		result.parts.fraction = frac1-frac2;
-		if (result.parts.fraction > frac1) {
-			/* TODO: underflow exception */
-			return result;
-		};
-		result.parts.exp = 0;
-		return result;
-	};
-
-	/* add hidden bit */
-	frac1 |= FLOAT32_HIDDEN_BIT_MASK; 
-	
-	if (exp2 == 0) {
-		/* denormalized */
-		--expdiff;	
-	} else {
-		/* normalized */
-		frac2 |= FLOAT32_HIDDEN_BIT_MASK;
-	};
-	
-	/* create some space for rounding */
-	frac1 <<= 6;
-	frac2 <<= 6;
-	
-	if (expdiff > FLOAT32_FRACTION_SIZE + 1) {
-	     goto done;	
-	     };
-	
-	frac1 = frac1 - (frac2 >> expdiff);
-done:
-	/* TODO: find first nonzero digit and shift result and detect possibly underflow */
-	while ((exp1 > 0) && (!(frac1 & (FLOAT32_HIDDEN_BIT_MASK << 6 )))) {
-		--exp1;
-		frac1 <<= 1;
-			/* TODO: fix underflow - frac1 == 0 does not necessary means underflow... */
-	};
-	
-	/* rounding - if first bit after fraction is set then round up */
-	frac1 += 0x20;
-
-	if (frac1 & (FLOAT32_HIDDEN_BIT_MASK << 7)) {
-		++exp1;
-		frac1 >>= 1;
-	};
-	
-	/*Clear hidden bit and shift */
-	result.parts.fraction = ((frac1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)); 
-	result.parts.exp = exp1;
-	
-	return result;
-}
-
-/** Subtract two float64 numbers with same signs
- */
-float64 subFloat64(float64 a, float64 b)
-{
-	int expdiff;
-	uint32_t exp1, exp2;
-	uint64_t frac1, frac2;
-	float64 result;
-
-	result.d = 0;
-	
-	expdiff = a.parts.exp - b.parts.exp;
-	if ((expdiff < 0 ) || ((expdiff == 0) && (a.parts.fraction < b.parts.fraction))) {
-		if (isFloat64NaN(b)) {
-			/* TODO: fix SigNaN */
-			if (isFloat64SigNaN(b)) {
-			};
-			return b;
-		};
-		
-		if (b.parts.exp == FLOAT64_MAX_EXPONENT) { 
-			b.parts.sign = !b.parts.sign; /* num -(+-inf) = -+inf */
-			return b;
-		}
-		
-		result.parts.sign = !a.parts.sign; 
-		
-		frac1 = b.parts.fraction;
-		exp1 = b.parts.exp;
-		frac2 = a.parts.fraction;
-		exp2 = a.parts.exp;
-		expdiff *= -1;
-	} else {
-		if (isFloat64NaN(a)) {
-			/* TODO: fix SigNaN */
-			if (isFloat64SigNaN(a) || isFloat64SigNaN(b)) {
-			};
-			return a;
-		};
-		
-		if (a.parts.exp == FLOAT64_MAX_EXPONENT) { 
-			if (b.parts.exp == FLOAT64_MAX_EXPONENT) {
-				/* inf - inf => nan */
-				/* TODO: fix exception */
-				result.binary = FLOAT64_NAN;
-				return result;
-			};
-			return a;
-		}
-		
-		result.parts.sign = a.parts.sign;
-		
-		frac1 = a.parts.fraction;
-		exp1 = a.parts.exp;
-		frac2 = b.parts.fraction;
-		exp2 = b.parts.exp;	
-	};
-	
-	if (exp1 == 0) {
-		/* both are denormalized */
-		result.parts.fraction = frac1 - frac2;
-		if (result.parts.fraction > frac1) {
-			/* TODO: underflow exception */
-			return result;
-		};
-		result.parts.exp = 0;
-		return result;
-	};
-
-	/* add hidden bit */
-	frac1 |= FLOAT64_HIDDEN_BIT_MASK; 
-	
-	if (exp2 == 0) {
-		/* denormalized */
-		--expdiff;	
-	} else {
-		/* normalized */
-		frac2 |= FLOAT64_HIDDEN_BIT_MASK;
-	};
-	
-	/* create some space for rounding */
-	frac1 <<= 6;
-	frac2 <<= 6;
-	
-	if (expdiff > FLOAT64_FRACTION_SIZE + 1) {
-	     goto done;	
-	     };
-	
-	frac1 = frac1 - (frac2 >> expdiff);
-done:
-	/* TODO: find first nonzero digit and shift result and detect possibly underflow */
-	while ((exp1 > 0) && (!(frac1 & (FLOAT64_HIDDEN_BIT_MASK << 6 )))) {
-		--exp1;
-		frac1 <<= 1;
-			/* TODO: fix underflow - frac1 == 0 does not necessary means underflow... */
-	};
-	
-	/* rounding - if first bit after fraction is set then round up */
-	frac1 += 0x20;
-
-	if (frac1 & (FLOAT64_HIDDEN_BIT_MASK << 7)) {
-		++exp1;
-		frac1 >>= 1;
-	};
-	
-	/*Clear hidden bit and shift */
-	result.parts.fraction = ((frac1 >> 6) & (~FLOAT64_HIDDEN_BIT_MASK)); 
-	result.parts.exp = exp1;
-	
-	return result;
-}
-
-
- /** @}
- */
-
Index: pace/softfloat/include/add.h
===================================================================
--- uspace/softfloat/include/add.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __ADD_H__
-#define __ADD_H__
-
-float32 addFloat32(float32 a, float32 b);
-
-float64 addFloat64(float64 a, float64 b);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/common.h
===================================================================
--- uspace/softfloat/include/common.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,53 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __COMMON_H__
-#define __COMMON_H__
-
-#include<sftypes.h>
-
-float64 finishFloat64(int32_t cexp, uint64_t cfrac, char sign);
-
-int countZeroes64(uint64_t i);
-int countZeroes32(uint32_t i);
-int countZeroes8(uint8_t i);
-
-void roundFloat32(int32_t *exp, uint32_t *fraction);
-void roundFloat64(int32_t *exp, uint64_t *fraction);
-
-#endif
-
- /** @}
- */
-
Index: pace/softfloat/include/comparison.h
===================================================================
--- uspace/softfloat/include/comparison.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __COMPARISON_H__
-#define __COMPARISON_H__
-
-inline int isFloat32NaN(float32 f);
-inline int isFloat32SigNaN(float32 f);
-
-inline int isFloat32Infinity(float32 f);
-inline int isFloat32Zero(float32 f);
-
-inline int isFloat64NaN(float64 d);
-inline int isFloat64SigNaN(float64 d);
-
-inline int isFloat64Infinity(float64 d);
-inline int isFloat64Zero(float64 d);
-
-inline int isFloat32eq(float32 a, float32 b);
-inline int isFloat32lt(float32 a, float32 b);
-inline int isFloat32gt(float32 a, float32 b);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/conversion.h
===================================================================
--- uspace/softfloat/include/conversion.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,71 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __CONVERSION_H__
-#define __CONVERSION_H__
-
-float64 convertFloat32ToFloat64(float32 a);
-
-float32 convertFloat64ToFloat32(float64 a);
-
-uint32_t float32_to_uint32(float32 a);
-int32_t float32_to_int32(float32 a);
-
-uint64_t float32_to_uint64(float32 a);
-int64_t float32_to_int64(float32 a);
-
-uint64_t float64_to_uint64(float64 a);
-int64_t float64_to_int64(float64 a);
-
-uint32_t float64_to_uint32(float64 a);
-int32_t float64_to_int32(float64 a);
-
-float32 uint32_to_float32(uint32_t i);
-float32 int32_to_float32(int32_t i);
-
-float32 uint64_to_float32(uint64_t i);
-float32 int64_to_float32(int64_t i);
-
-float64 uint32_to_float64(uint32_t i);
-float64 int32_to_float64(int32_t i);
-
-float64 uint64_to_float64(uint64_t i);
-float64 int64_to_float64(int64_t i);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/div.h
===================================================================
--- uspace/softfloat/include/div.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __DIV_H__
-#define __DIV_H__
-
-float32 divFloat32(float32 a, float32 b);
-float64 divFloat64(float64 a, float64 b);
-
-uint64_t divFloat64estim(uint64_t a, uint64_t b);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/mul.h
===================================================================
--- uspace/softfloat/include/mul.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __MUL_H__
-#define __MUL_H__
-
-float32 mulFloat32(float32 a, float32 b);
-
-float64 mulFloat64(float64 a, float64 b);
-
-void mul64integers(uint64_t a,uint64_t b, uint64_t *lo, uint64_t *hi);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/other.h
===================================================================
--- uspace/softfloat/include/other.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __OTHER_H__
-#define __OTHER_H__
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/sftypes.h
===================================================================
--- uspace/softfloat/include/sftypes.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,112 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __SFTYPES_H__
-#define __SFTYPES_H__
-
-#include <endian.h>
-#include <stdint.h>
-
-typedef union {
-	float f;
-	uint32_t binary;
-
-	struct 	{
-		#if __BYTE_ORDER == __BIG_ENDIAN
-		uint32_t sign:1;
-		uint32_t exp:8;
-		uint32_t fraction:23;
-		#elif __BYTE_ORDER == __LITTLE_ENDIAN
-		uint32_t fraction:23;
-		uint32_t exp:8;
-		uint32_t sign:1;
-		#else 
-			#error "Unknown endians."
-		#endif
-		} parts __attribute__ ((packed));
- 	} float32;
-	
-typedef union {
-	double d;
-	uint64_t binary;
-	
-	struct	{
-		#if __BYTE_ORDER == __BIG_ENDIAN
-		uint64_t sign:1;
-		uint64_t exp:11;
-		uint64_t fraction:52;
-		#elif __BYTE_ORDER == __LITTLE_ENDIAN
-		uint64_t fraction:52;
-		uint64_t exp:11;
-		uint64_t sign:1;
-		#else 
-			#error "Unknown endians."
-		#endif
-		} parts __attribute__ ((packed));
-	} float64;
-
-#define FLOAT32_MAX 0x7f800000
-#define FLOAT32_MIN 0xff800000
-#define FLOAT64_MAX
-#define FLOAT64_MIN
-
-/* For recognizing NaNs or infinity use isFloat32NaN and is Float32Inf, comparing with this constants is not sufficient */
-#define FLOAT32_NAN 0x7FC00001
-#define FLOAT32_SIGNAN 0x7F800001
-#define FLOAT32_INF 0x7F800000
-
-#define FLOAT64_NAN 0x7FF8000000000001ll
-#define FLOAT64_SIGNAN 0x7FF0000000000001ll
-#define FLOAT64_INF 0x7FF0000000000000ll
-
-#define FLOAT32_FRACTION_SIZE 23
-#define FLOAT64_FRACTION_SIZE 52
-
-#define FLOAT32_HIDDEN_BIT_MASK 0x800000
-#define FLOAT64_HIDDEN_BIT_MASK 0x10000000000000ll
-
-#define FLOAT32_MAX_EXPONENT 0xFF
-#define FLOAT64_MAX_EXPONENT 0x7FF
-
-#define FLOAT32_BIAS 0x7F
-#define FLOAT64_BIAS 0x3FF
-#define FLOAT80_BIAS 0x3FFF
-
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/softfloat.h
===================================================================
--- uspace/softfloat/include/softfloat.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,174 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __SOFTFLOAT_H__
-#define __SOFTFLOAT_H__
-
-float __addsf3(float a, float b);
-double __adddf3(double a, double b);
-long double __addtf3(long double a, long double b);
-long double __addxf3(long double a, long double b);
- 
-float __subsf3(float a, float b);
-double __subdf3(double a, double b);
-long double __subtf3(long double a, long double b);
-long double __subxf3(long double a, long double b);
- 
-float __mulsf3(float a, float b);
-double __muldf3(double a, double b);
-long double __multf3(long double a, long double b);
-long double __mulxf3(long double a, long double b);
- 
-float __divsf3(float a, float b);
-double __divdf3(double a, double b);
-long double __divtf3(long double a, long double b);
-long double __divxf3(long double a, long double b);
- 
-float __negsf2(float a);
-double __negdf2(double a);
-long double __negtf2(long double a);
-long double __negxf2(long double a);
- 
-double __extendsfdf2(float a);
-long double __extendsftf2(float a);
-long double __extendsfxf2(float a);
-long double __extenddftf2(double a);
-long double __extenddfxf2(double a);
- 
-double __truncxfdf2(long double a);
-double __trunctfdf2(long double a);
-float __truncxfsf2(long double a);
-float __trunctfsf2(long double a);
-float __truncdfsf2(double a);
- 
-int __fixsfsi(float a);
-int __fixdfsi(double a);
-int __fixtfsi(long double a);
-int __fixxfsi(long double a);
- 
-long __fixsfdi(float a);
-long __fixdfdi(double a);
-long __fixtfdi(long double a);
-long __fixxfdi(long double a);
- 
-long long __fixsfti(float a);
-long long __fixdfti(double a);
-long long __fixtfti(long double a);
-long long __fixxfti(long double a);
- 
-unsigned int __fixunssfsi(float a);
-unsigned int __fixunsdfsi(double a);
-unsigned int __fixunstfsi(long double a);
-unsigned int __fixunsxfsi(long double a);
- 
-unsigned long __fixunssfdi(float a);
-unsigned long __fixunsdfdi(double a);
-unsigned long __fixunstfdi(long double a);
-unsigned long __fixunsxfdi(long double a);
- 
-unsigned long long __fixunssfti(float a);
-unsigned long long __fixunsdfti(double a);
-unsigned long long __fixunstfti(long double a);
-unsigned long long __fixunsxfti(long double a);
- 
-float __floatsisf(int i);
-double __floatsidf(int i);
-long double __floatsitf(int i);
-long double __floatsixf(int i);
- 
-float __floatdisf(long i);
-double __floatdidf(long i);
-long double __floatditf(long i);
-long double __floatdixf(long i);
- 
-float __floattisf(long long i);
-double __floattidf(long long i);
-long double __floattitf(long long i);
-long double __floattixf(long long i);
- 
-float __floatunsisf(unsigned int i);
-double __floatunsidf(unsigned int i);
-long double __floatunsitf(unsigned int i);
-long double __floatunsixf(unsigned int i);
- 
-float __floatundisf(unsigned long i);
-double __floatundidf(unsigned long i);
-long double __floatunditf(unsigned long i);
-long double __floatundixf(unsigned long i);
- 
-float __floatuntisf(unsigned long long i);
-double __floatuntidf(unsigned long long i);
-long double __floatuntitf(unsigned long long i);
-long double __floatuntixf(unsigned long long i);
- 
-int __cmpsf2(float a, float b);
-int __cmpdf2(double a, double b);
-int __cmptf2(long double a, long double b);
- 
-int __unordsf2(float a, float b);
-int __unorddf2(double a, double b);
-int __unordtf2(long double a, long double b);
- 
-int __eqsf2(float a, float b);
-int __eqdf2(double a, double b);
-int __eqtf2(long double a, long double b);
- 
-int __nesf2(float a, float b);
-int __nedf2(double a, double b);
-int __netf2(long double a, long double b);
- 
-int __gesf2(float a, float b);
-int __gedf2(double a, double b);
-int __getf2(long double a, long double b);
- 
-int __ltsf2(float a, float b);
-int __ltdf2(double a, double b);
-int __lttf2(long double a, long double b);
-int __lesf2(float a, float b);
-int __ledf2(double a, double b);
-int __letf2(long double a, long double b);
- 
-int __gtsf2(float a, float b);
-int __gtdf2(double a, double b);
-int __gttf2(long double a, long double b);
- 
-/* Not implemented yet*/ 
-float __powisf2(float a, int b);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softfloat/include/sub.h
===================================================================
--- uspace/softfloat/include/sub.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
- /** @addtogroup softfloat	
- * @{
- */
-/** @file
- */
-
-#ifndef __SUB_H__
-#define __SUB_H__
-
-float32 subFloat32(float32 a, float32 b);
-
-float64 subFloat64(float64 a, float64 b);
-
-#endif
-
-
- /** @}
- */
-
Index: pace/softint/Makefile
===================================================================
--- uspace/softint/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,73 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Common compiler flags
-#
-
-LIBC_PREFIX = ../libc
-## Setup toolchain
-#
-
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-CFLAGS += -Iinclude
-
-## Sources
-#
-
-ARCH_SOURCES =
-
-GENERIC_SOURCES = \
-	generic/division.c
-
-GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
-
-.PHONY: all clean depend
-
-all: libsoftint.a
-
--include Makefile.depend
-
-clean:
-	-rm -f libsoftint.a Makefile.depend
-	find generic/ -name '*.o' -follow -exec rm \{\} \;
-
-depend:
-	-makedepend $(DEFS) $(CFLAGS) -f - $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
-
-libsoftint.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
-	$(AR) rc libsoftint.a $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/softint/generic/division.c
===================================================================
--- uspace/softint/generic/division.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,197 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softint
- * @{
- */ 
-/**
- * @file
- * SW implementation of 32 and 64 bit division and modulo.
- */
-
-#include <division.h>
-
-#define ABSVAL(x) ( (x) > 0 ? (x) : -(x))
-#define SGN(x) ( (x) >= 0 ? 1 : 0 )
-				      
-static unsigned int divandmod32(unsigned int a, unsigned int b, unsigned int *remainder)
-{
-	unsigned int result;
-	int steps = sizeof(unsigned int) * 8; 
-	
-	*remainder = 0;
-	result = 0;
-	
-	if (b == 0) {
-		/* FIXME: division by zero */
-		return 0;
-	}
-	
-	if ( a < b) {
-		*remainder = a;
-		return 0;
-	}
-
-	for ( ; steps > 0; steps--) {
-		/* shift one bit to remainder */
-		*remainder = ( (*remainder) << 1) | (( a >> 31) & 0x1);
-		result <<= 1;
-		
-		if (*remainder >= b) {
-				*remainder -= b;
-				result |= 0x1;
-		}
-		a <<= 1;
-	}
-
-	return result;
-}
-
-
-static unsigned long long divandmod64(unsigned long long a, unsigned long long b, unsigned long long *remainder)
-{
-	unsigned long long result;
-	int steps = sizeof(unsigned long long) * 8; 
-	
-	*remainder = 0;
-	result = 0;
-	
-	if (b == 0) {
-		/* FIXME: division by zero */
-		return 0;
-	}
-	
-	if ( a < b) {
-		*remainder = a;
-		return 0;
-	}
-
-	for ( ; steps > 0; steps--) {
-		/* shift one bit to remainder */
-		*remainder = ( (*remainder) << 1) | ((a >> 63) & 0x1);
-		result <<= 1;
-		
-		if (*remainder >= b) {
-				*remainder -= b;
-				result |= 0x1;
-		}
-		a <<= 1;
-	}
-
-	return result;
-}
-
-/* 32bit integer division */
-int __divsi3(int a, int b) 
-{
-	unsigned int rem;
-	int result;
-	
-	result = (int)divandmod32(ABSVAL(a), ABSVAL(b), &rem);
-
-	if ( SGN(a) == SGN(b)) return result;
-	return -result;
-}
-
-/* 64bit integer division */
-long long __divdi3(long long a, long long b) 
-{
-	unsigned long long rem;
-	long long result;
-	
-	result = (long long)divandmod64(ABSVAL(a), ABSVAL(b), &rem);
-
-	if ( SGN(a) == SGN(b)) return result;
-	return -result;
-}
-
-/* 32bit unsigned integer division */
-unsigned int __udivsi3(unsigned int a, unsigned int b)
-{
-	unsigned int rem;
-	return divandmod32(a, b, &rem);
-}
-
-/* 64bit unsigned integer division */
-unsigned long long __udivdi3(unsigned long long a, unsigned long long b)
-{
-	unsigned long long  rem;
-	return divandmod64(a, b, &rem);
-}
-
-/* 32bit remainder of the signed division */
-int __modsi3(int a, int b)
-{
-	unsigned int rem;
-	divandmod32(a, b, &rem);
-	
-	/* if divident is negative, remainder must be too */
-	if (!(SGN(a))) {
-		return -((int)rem);
-	}
-	
-	return (int)rem;
-}
-
-/* 64bit remainder of the signed division */
-long long __moddi3(long long a,long  long b)
-{
-	unsigned long long rem;
-	divandmod64(a, b, &rem);
-	
-	/* if divident is negative, remainder must be too */
-	if (!(SGN(a))) {
-		return -((long long)rem);
-	}
-	
-	return (long long)rem;
-}
-
-/* 32bit remainder of the unsigned division */
-unsigned int __umodsi3(unsigned int a, unsigned int b)
-{
-	unsigned int rem;
-	divandmod32(a, b, &rem);
-	return rem;
-}
-
-/* 64bit remainder of the unsigned division */
-unsigned long long __umoddi3(unsigned long long a, unsigned long long b)
-{
-	unsigned long long rem;
-	divandmod64(a, b, &rem);
-	return rem;
-}
-
-unsigned long long __udivmoddi3(unsigned long long a, unsigned long long b, unsigned long long *c)
-{
-	return divandmod64(a, b, c);
-}
-
-/** @}
- */
Index: pace/softint/include/division.h
===================================================================
--- uspace/softint/include/division.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/*
- * Copyright (c) 2006 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup softint
- * @{
- */ 
-/**
- * @file
- */
-
-#ifndef __SOFTINT_DIVISION_H__
-#define __SOFTINT_DIVISION_H__
-
-
-/* 32bit integer division */
-int __divsi3(int a, int b);
-
-/* 64bit integer division */
-long long __divdi3(long long a, long long b);
-
-/* 32bit unsigned integer division */
-unsigned int __udivsi3(unsigned int a, unsigned int b);
-
-/* 64bit unsigned integer division */
-unsigned long long __udivdi3(unsigned long long a, unsigned long long b);
-
-/* 32bit remainder of the signed division */
-int __modsi3(int a, int b);
-
-/* 64bit remainder of the signed division */
-long long __moddi3(long long a, long long b);
-
-/* 32bit remainder of the unsigned division */
-unsigned int __umodsi3(unsigned int a, unsigned int b);
-
-/* 64bit remainder of the unsigned division */
-unsigned long long __umoddi3(unsigned long long a, unsigned long long b);
-
-unsigned long long __udivmoddi3(unsigned long long a, unsigned long long b, unsigned long long *c); 
-
-#endif
-
-/** @}
- */
-
Index: uspace/srv/console/Makefile
===================================================================
--- uspace/srv/console/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,88 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain 
+
+CFLAGS += -I. -I../kbd/include -I../fb
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = console
+GENERIC_SOURCES = \
+	console.c \
+	screenbuffer.c \
+	../kbd/generic/key_buffer.c \
+	gcons.c
+
+IMAGES = helenos.ppm nameic.ppm cons_selected.ppm cons_idle.ppm \
+	cons_has_data.ppm cons_kernel.ppm anim_1.ppm anim_2.ppm anim_3.ppm \
+	anim_4.ppm
+
+ARCH_SOURCES = 
+
+GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES))) \
+			$(addsuffix .o,$(basename $(IMAGES)))	
+ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(ARCH_OBJECTS) $(GENERIC_OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(GENERIC_OBJECTS) $(ARCH_OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
+
+%.o: %.ppm
+	$(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) $< $@
Index: uspace/srv/console/anim_1.ppm
===================================================================
--- uspace/srv/console/anim_1.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/anim_1.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,23 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööããããããöööþþþÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
+
+
+¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
+
+
+ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
+
+
+ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
+
+
+ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
+
+
+²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
+
+
+   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/anim_2.ppm
===================================================================
--- uspace/srv/console/anim_2.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/anim_2.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,23 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿöööããããããöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
+
+
+¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
+
+
+ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
+
+
+ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
+
+
+ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
+
+
+²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
+
+
+   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/anim_3.ppm
===================================================================
--- uspace/srv/console/anim_3.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/anim_3.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,23 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
+
+
+¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
+
+
+ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
+
+
+ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
+
+
+ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
+
+
+²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
+
+
+   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööããããããöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/anim_4.ppm
===================================================================
--- uspace/srv/console/anim_4.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/anim_4.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,23 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
+
+
+¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
+
+
+ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
+
+
+ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
+
+
+ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
+
+
+²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
+
+
+   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ääääää÷÷÷ÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeeee½½½öööÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããeeedddãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö½½½eeeddd½½½öööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööããããããöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/cons_has_data.ppm
===================================================================
--- uspace/srv/console/cons_has_data.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/cons_has_data.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,5 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþúúþúúþúúþúúþûûþûûþûûþûûþûûþûûþüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþùùþøøþõõþêêþèèþèèþééþêêþëëþììþííþîîþîîþððþøøþúúþûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþ÷÷þññþááþÞÞþÞÞþÜÜþÞÞþßßþááþããþääþååþææþççþèèþééþëëþêêþììþ÷÷þúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþõõþîîþ××þÒÒþÏÏþÑÑþÒÒþÕÕþ××þÚÚþÜÜþÞÞþààþââþããþääþääþååþååþääþääþååþèèþõõþùùþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþííþÏÏþÇÇþÃÃþÃÃþÅÅþÈÈþËËþÎÎþÑÑþÕÕþØØþÛÛþÝÝþßßþààþááþââþââþââþââþááþßßþÞÞþßßþââþôôþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþììþÇÇþ¸¸þ··þ¸¸þ»»þ¾¾þÂÂþÆÆþÊÊþÎÎþÒÒþÖÖþÙÙþÜÜþÞÞþààþááþââþââþââþââþààþßßþÜÜþÙÙþ××þÝÝþòòþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþêêþÃÃþ±±þ¯¯þ°°þ²²þ¶¶þººþ¾¾þÃÃþÈÈþÍÍþÒÒþÖÖþÚÚþÝÝþßßþááþââþããþääþääþããþááþààþÝÝþÚÚþÖÖþÔÔþÚÚþòòþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþëëþÁÁþ­­þ©©þ©©þ««þ¯¯þ³³þ¹¹þ¾¾þÄÄþÊÊþÏÏþÔÔþØØþÜÜþßßþââþääþååþææþççþççþææþääþââþààþÜÜþÙÙþÔÔþÑÑþØØþððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþììþÃÃþ­­þ§§þ¦¦þ§§þªªþ®®þ´´þººþÁÁþÇÇþÍÍþÓÓþØØþÜÜþààþããþææþèèþééþêêþêêþêêþêêþèèþææþääþààþÝÝþØØþÓÓþÏÏþ××þððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþííþÇÇþ±±þ©©þ¦¦þ¦¦þ¨¨þ¬¬þ±±þ··þ¾¾þÅÅþÌÌþÒÒþØØþÝÝþââþååþèèþêêþììþííþîîþîîþîîþîîþììþëëþèèþææþââþÞÞþØØþÓÓþÎÎþÕÕþððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþööþÏÏþ¸¸þ¯¯þ©©þ§§þ¨¨þ««þ°°þ¶¶þ½½þÄÄþËËþÒÒþÙÙþÞÞþããþççþêêþííþïïþððþññþòòþòòþòòþòòþññþïïþííþëëþççþããþßßþÙÙþÓÓþÎÎþ××þ÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþîîþÇÇþ··þ°°þ««þªªþ¬¬þ°°þ¶¶þ½½þÄÄþÌÌþÓÓþÙÙþßßþååþééþììþïïþññþóóþôôþõõþõõþööþööþõõþõõþóóþòòþïïþííþééþååþààþÚÚþÔÔþÔÔþððþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ÷÷þØØþÂÂþ¸¸þ²²þ¯¯þ®®þ±±þ¶¶þ¼¼þÄÄþËËþÓÓþÚÚþààþææþëëþîîþññþóóþõõþööþ÷÷þøøþøøþùùþùùþøøþøøþ÷÷þõõþôôþññþïïþëëþççþááþÛÛþÕÕþÜÜþøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþòòþÒÒþÃÃþ»»þµµþ³³þ´´þ··þ½½þÄÄþËËþÓÓþÚÚþááþççþììþððþóóþõõþ÷÷þøøþùùþúúþúúþûûþûûþûûþûûþúúþúúþùùþ÷÷þööþóóþððþììþèèþââþÜÜþÛÛþóóþýýþþþÿÿÿÿÿÿÿÿÿÿÿÿþùùþààþÏÏþÅÅþ¾¾þººþ¹¹þººþ¾¾þÄÄþÌÌþÓÓþÚÚþááþèèþííþññþôôþööþøøþùùþúúþûûþüüþüüþüüþýýþýýþüüþüüþûûþûûþúúþøøþ÷÷þôôþññþííþèèþããþÞÞþããþùùþþþÿÿÿÿÿÿÿÿÿÿÿÿþøøþÝÝþÐÐþÈÈþÂÂþ¾¾þ¾¾þÁÁþÅÅþËËþÓÓþÚÚþááþèèþííþññþôôþ÷÷þùùþúúþûûþüüþüüþýýÿýýÿýýÿþþÿþþÿýýÿýýþýýþüüþüüþûûþùùþøøþõõþòòþîîþééþääþääþùùþþþÿÿÿÿÿÿÿÿÿþþþþõõþÞÞþÒÒþËËþÆÆþÃÃþÄÄþÇÇþÌÌþÒÒþÙÙþààþççþííþññþõõþ÷÷þùùþûûþüüþýýþýýÿýýÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿýýþýýþüüþûûþúúþøøþõõþòòþîîþêêþééþ÷÷þþþþþþÿÿÿÿÿÿþûûþééþÜÜþÕÕþÎÎþÊÊþÈÈþÊÊþÍÍþÒÒþÙÙþßßþææþììþññþôôþ÷÷þùùþûûþüüþýýÿýýÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿýýþýýþûûþúúþøøþööþóóþïïþììþîîþûûþþþÿÿÿÿÿÿþúúþèèþÝÝþ××þÑÑþÎÎþÍÍþÏÏþÓÓþØØþÞÞþååþëëþððþôôþ÷÷þùùþûûþüüþýýÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿýýþýýþüüþúúþùùþööþôôþððþððþûûþþþÿÿÿÿÿÿþúúþééþßßþÙÙþÔÔþÒÒþÒÒþÔÔþØØþÝÝþããþééþîîþóóþööþùùþûûþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýþýýþüüþúúþùùþ÷÷þôôþôôþüüþþþÿÿÿÿÿÿþûûþêêþááþÜÜþ××þÖÖþÖÖþØØþÜÜþââþççþììþññþõõþøøþúúþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýþýýþüüþûûþùùþøøþ÷÷þýýþþþÿÿÿÿÿÿþûûþëëþããþÞÞþÚÚþÙÙþÚÚþÜÜþààþååþêêþïïþóóþ÷÷þùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýþýýþüüþûûþúúþúúþýýþþþÿÿÿÿÿÿþûûþëëþääþààþÝÝþÜÜþÝÝþßßþããþèèþííþññþõõþøøþúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýþüüþüüþûûþþþþþþÿÿÿÿÿÿþûûþììþååþââþßßþÞÞþßßþââþææþêêþïïþóóþööþùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿýýþýýþýýþþþþþþÿÿÿÿÿÿþûûþííþææþããþààþààþááþääþèèþììþððþôôþ÷÷þúúþüüþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿþûûþííþççþääþááþááþââþååþééþííþññþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿþûûþîîþççþääþââþââþããþææþêêþîîþòòþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüüþððþèèþääþââþââþääþææþêêþîîþòòþööþùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþøøþêêþääþââþââþääþææþêêþîîþòòþööþùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþúúþêêþääþââþââþããþææþééþîîþòòþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûûþííþääþááþààþááþääþèèþììþññþõõþøøþúúþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþööþååþßßþÞÞþßßþââþææþëëþïïþóóþ÷÷þùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþúúþèèþÞÞþÜÜþÝÝþààþääþèèþííþòòþööþùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþõõþßßþÙÙþÚÚþÜÜþààþææþëëþððþôôþ÷÷þúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþøøþââþ××þÖÖþÙÙþÝÝþââþèèþííþòòþööþùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþôôþÝÝþÓÓþÔÔþØØþÞÞþããþééþïïþóóþ÷÷þùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýýþòòþÚÚþÐÐþÓÓþØØþßßþååþëëþððþôôþøøþúúþûûþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþññþØØþÏÏþÓÓþÙÙþààþççþììþññþõõþøøþúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþññþ××þÎÎþÓÓþÚÚþááþèèþííþòòþõõþøøþúúþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþððþÕÕþÎÎþÓÓþÛÛþââþèèþîîþòòþööþùùþûûþüüþýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþððþÖÖþÔÔþÕÕþÛÛþããþééþîîþóóþööþùùþûûþüüþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿýýÿüüÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþüüþööþððþÜÜþÛÛþÞÞþããþêêþïïþôôþ÷÷þùùþûûþüüÿýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿýýÿýýÿýýÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþüüþ÷÷þòòþããþääþééþììþððþôôþ÷÷þúúþüüþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþýýþùùþùùþ÷÷þîîþððþôôþ÷÷þùùþûûþýýÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþýýþûûþûûþüüþüüþýýþýýþþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþÿþþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/cons_idle.ppm
===================================================================
--- uspace/srv/console/cons_idle.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/cons_idle.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,5 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùàààÏÏÏÅÅÅ¾¾¾ººº¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝÐÐÐÈÈÈÂÂÂ¾¾¾¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒËËËÆÆÆÃÃÃÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÎÎÎÊÊÊÈÈÈÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑÎÎÎÍÍÍÏÏÏÓÓÓØØØÞÞÞåååëëëðððôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýýýýüüüúúúùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔÒÒÒÒÒÒÔÔÔØØØÝÝÝãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüúúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××ÖÖÖÖÖÖØØØÜÜÜâââçççìììñññõõõøøøúúúûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚÙÙÙÚÚÚÜÜÜàààåååêêêïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝÜÜÜÝÝÝßßßãããèèèíííñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßßÞÞÞßßßâââæææêêêïïïóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããààààààáááäääèèèìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííçççäääááááááâââåååéééíííñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/cons_kernel.ppm
===================================================================
--- uspace/srv/console/cons_kernel.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/cons_kernel.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,23 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúúúúúúúúúúûûûûûûûûûûûûûûûûûûüüüþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùøøøõõõêêêèèèèèèéééêêêëëëìììíííîîîîîîðððøøøúúúûûûþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷÷÷ñññáááÞÞÞÞÞÞÜÜÜÞÞÞßßßáááãããäääåååæææçççèèèéééëëëêêêììì÷÷÷úúúþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýõõõîîî×××ÒÒÒÏÏÏÑÑÑÒÒÒÕÕÕ×××ÚÚÚÜÜÜÞÞÞàààâââãããääääääååååååääääääåååèèèõõõùùùýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÏÏÏÇÇÇÃÃÃÃÃÃÅÅÅÈÈÈËËËÎÎÎÑÑÑÕÕÕØØØÛÛÛÝÝÝßßßàààáááââââââââââââáááßßßÞÞÞßßßâââôôôýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüìììÇÇÇ¸¸¸···¸¸¸»»»¾¾¾ÂÂÂÆÆÆÊÊÊÎÎÎÒÒÒÖÖÖÙÙÙÜÜÜÞÞÞàààáááââââââââââââàààßßßÜÜÜÙÙÙ×××ÝÝÝòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüêêêÃÃÃ±±±¯¯¯°°°²²²¶¶¶ººº¾¾¾ÃÃÃÈÈÈÍÍÍÒÒÒÖÖÖÚÚÚÝÝÝßßßáááâââãããääääääãããáááàààÝÝÝÚÚÚÖÖÖÔÔÔÚÚÚòòòýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëëëÁÁÁ­­­©©©©©©«««¯¯¯³³³¹¹¹¾¾¾ÄÄÄÊÊÊÏÏÏÔÔÔØØØÜÜÜßßßâââäääåååæææççççççæææäääâââàààÜÜÜÙÙÙÔÔÔÑÑÑØØØðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýìììÃÃÃ­­­§§§¦¦¦§§§ªªª®®®´´´ºººÁÁÁÇÇÇÍÍÍÓÓÓØØØÜÜÜàààãããæææèèèéééêêêêêêêêêêêêèèèæææäääàààÝÝÝØØØÓÓÓÏÏÏ×××ðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýíííÇÇÇ±±±©©©¦¦¦¦¦¦¨¨¨¬¬¬±±±···¾¾¾ÅÅÅÌÌÌÒÒÒØØØÝÝÝâââåååèèèêêêìììíííîîîîîîîîîîîîìììëëëèèèæææâââÞÞÞØØØÓÓÓÎÎÎÕÕÕðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÏÏÏ¸¸¸¯¯¯©©©§§§¨¨¨«««°°°¶¶¶½½½ÄÄÄËËËÒÒÒÙÙÙÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòòòòñññïïïíííëëëçççãããßßßÙÙÙÓÓÓÎÎÎ×××÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýîîîÇÇÇ···°°°«««ªªª¬¬¬°°°¶¶¶½½½ÄÄÄÌÌÌÓÓÓÙÙÙßßßåååéééìììïïïñññóóóôôôõõõõõõööööööõõõõõõóóóòòòïïïíííéééåååàààÚÚÚÔÔÔÔÔÔðððýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ØØØÂÂÂ¸¸¸²²²¯¯¯®®®±±±¶¶¶¼¼¼ÄÄÄËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøùùùùùùøøøøøø÷÷÷õõõôôôñññïïïëëëçççáááÛÛÛÕÕÕÜÜÜøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýòòòÒÒÒÃÃÃ»»»µµµ³³³´´´···½½½ÄÄÄËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúûûûûûûûûûûûûúúúúúúùùù÷÷÷öööóóóðððìììèèèâââÜÜÜÛÛÛóóóýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿùùùààà···yyyEEE777¹¹¹ººº¾¾¾ÄÄÄÌÌÌÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûüüüüüüüüüýýýýýýüüüüüüûûûûûûúúúøøø÷÷÷ôôôñññíííèèèãããÞÞÞãããùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿøøøÝÝÝºººccc   
+
+
+¾¾¾ÁÁÁÅÅÅËËËÓÓÓÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûüüüüüüýýýýýýýýýþþþþþþýýýýýýýýýüüüüüüûûûùùùøøøõõõòòòîîîéééääääääùùùþþþÿÿÿÿÿÿÿÿÿþþþõõõÞÞÞÒÒÒÅÅÅ   
+
+
+ÄÄÄÇÇÇÌÌÌÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýþþþþþþþþþþþþþþþþþþþþþþþþýýýýýýüüüûûûúúúøøøõõõòòòîîîêêêééé÷÷÷þþþþþþÿÿÿÿÿÿûûûéééÜÜÜÕÕÕÍÍÍ   ÊÊÊÍÍÍÒÒÒÙÙÙßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýþþþþþþþþþþþþþþþÿÿÿÿÿÿþþþþþþþþþþþþþþþýýýýýýûûûúúúøøøöööóóóïïïìììîîîûûûþþþÿÿÿÿÿÿúúúèèèÝÝÝ×××ÑÑÑ   ÏÏÏÆÆÆDDD   ZZZáááôôô¯¯¯666MMM666VVVäääþþþþþþ···999GGG???KKKÔÔÔÿÿÿ      '''ÐÐÐZZZªªªùùùöööôôôððððððûûûþþþÿÿÿÿÿÿúúúéééßßßÙÙÙÔÔÔ      ÔÔÔ×××^^^eeeâââîîîóóó¸¸¸üüüööö666þþþÂÂÂÿÿÿþþþXXXâââþþþÆÆÆ   
+
+
+ùùùííí			úúúùùù÷÷÷ôôôôôôüüüþþþÿÿÿÿÿÿûûûêêêáááÜÜÜ×××   !!!ÕÕÕSSS^^^çççìììñññõõõ???ñññüüüýýýCCC   ÿÿÿEEEñññÿÿÿÿÿÿÊÊÊ   qqqÿÿÿþþþ   $$$ÿÿÿþþþþþþ%%%   üüüûûûùùùøøø÷÷÷ýýýþþþÿÿÿÿÿÿûûûëëëãããÞÞÞÚÚÚ   NNNÙÙÙïïïóóó÷÷÷   üüüýýýþþþûûûúúúÿÿÿ
+
+
+ÿÿÿÿÿÿÿÿÿôôô   333ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿþþþ'''   ýýýüüüûûûúúúúúúýýýþþþÿÿÿÿÿÿûûûëëëäääàààÝÝÝ   
+
+
+²²²¨¨¨   UUUñññõõõøøø			ýýýþþþþþþþþþÿÿÿÿÿÿ			   ÿÿÿÿÿÿÿÿÿùùù   111ÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   ýýýýýýüüüüüüûûûþþþþþþÿÿÿÿÿÿûûûìììåååâââßßß   """âââæææ___   ¨¨¨öööùùù>>>èèèþþþþþþÿÿÿöööÿÿÿ>>>ôôôÿÿÿÿÿÿÔÔÔ   gggÿÿÿÿÿÿ   '''ÿÿÿÿÿÿÿÿÿ'''   þþþþþþýýýýýýýýýþþþþþþÿÿÿÿÿÿûûûíííæææãããÖÖÖ   ãããèèèßßßÖÖÖúúú½½½___ûûûÿÿÿîîîUUUôôô¾¾¾ÿÿÿþþþhhhÜÜÜÿÿÿôôô   ÿÿÿÿÿÿÿÿÿ
+
+
+   õõõþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûíííççç···BBB      UUUÎÎÎ   üüü»»»:::///^^^jjjâââÿÿÿÿÿÿ¾¾¾>>>KKKEEEJJJÓÓÓÿÿÿÍÍÍKKK      rrrÿÿÿqqq      NNNÍÍÍþþþþþþþþþþþþþþþÿÿÿÿÿÿûûûîîîçççäääââââââãããæææêêêîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüðððèèèäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøêêêäääââââââäääæææêêêîîîòòòöööùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúêêêäääââââââãããæææéééîîîòòòõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûíííäääáááàààáááäääèèèìììñññõõõøøøúúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööåååßßßÞÞÞßßßâââæææëëëïïïóóó÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúèèèÞÞÞÜÜÜÝÝÝàààäääèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþõõõßßßÙÙÙÚÚÚÜÜÜàààæææëëëðððôôô÷÷÷úúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþøøøâââ×××ÖÖÖÙÙÙÝÝÝâââèèèíííòòòöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýôôôÝÝÝÓÓÓÔÔÔØØØÞÞÞãããéééïïïóóó÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýòòòÚÚÚÐÐÐÓÓÓØØØßßßåååëëëðððôôôøøøúúúûûûýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññØØØÏÏÏÓÓÓÙÙÙàààçççìììñññõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüñññ×××ÎÎÎÓÓÓÚÚÚáááèèèíííòòòõõõøøøúúúüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÕÕÕÎÎÎÓÓÓÛÛÛâââèèèîîîòòòöööùùùûûûüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüðððÖÖÖÔÔÔÕÕÕÛÛÛãããéééîîîóóóöööùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýüüüýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööðððÜÜÜÛÛÛÞÞÞãããêêêïïïôôô÷÷÷ùùùûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþüüü÷÷÷òòòãããäääéééìììðððôôô÷÷÷úúúüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùùùù÷÷÷îîîðððôôô÷÷÷ùùùûûûýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþýýýûûûûûûüüüüüüýýýýýýþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/cons_selected.ppm
===================================================================
--- uspace/srv/console/cons_selected.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/cons_selected.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,29 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûû÷÷÷ïïïæææÝÝÝ×××ÓÓÓÓÓÓ×××ÝÝÝæææïïï÷÷÷ûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûôôôåååÓÓÓÂÂÂ©©©tttaaaVVVVVVaaattt©©©ÁÁÁÒÒÒåååôôôûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûðððÙÙÙººº]]]LLL___zzz¬¬¬¸¸¸¹¹¹¯¯¯eee```]]]ºººÙÙÙðððûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüôôôÛÛÛ¬¬¬oooFFFfff   ³³³½½½ÈÈÈÒÒÒÛÛÛàààáááÞÞÞØØØÑÑÑÈÈÈÀÀÀ­­­tttdddnnn¬¬¬ÚÚÚôôôüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýúúúèèèºººxxx@@@jjj···ËËËÑÑÑÔÔÔ×××ÚÚÚÜÜÜÞÞÞßßßáááâââââââââáááÝÝÝËËË²²²~~~kkkwww¹¹¹èèèúúúüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüøøøÜÜÜ555NNN¯¯¯ÀÀÀÅÅÅÉÉÉÌÌÌÏÏÏÓÓÓ×××ÙÙÙÜÜÜÞÞÞßßßàààááááááàààßßßÞÞÞÚÚÚÊÊÊªªªggggggÛÛÛ÷÷÷üüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüöööÐÐÐ
+
+
+333www²²²¸¸¸¼¼¼ÀÀÀÅÅÅÉÉÉÍÍÍÑÑÑÔÔÔØØØÛÛÛÝÝÝßßßàààáááááááááàààßßßÜÜÜÚÚÚÓÓÓ½½½uuu
+
+
+ÏÏÏõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüöööËËËxxx000{{{¥¥¥¬¬¬°°°³³³¸¸¸½½½ÂÂÂÇÇÇÌÌÌÑÑÑÕÕÕØØØÜÜÜÞÞÞàààáááâââãããâââáááàààÞÞÞÜÜÜ×××ÔÔÔÉÉÉ{{{xxxËËËõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýøøøÐÐÐxxx///{{{   ¦¦¦¨¨¨¬¬¬²²²···½½½ÃÃÃÈÈÈÎÎÎÓÓÓ×××ÛÛÛÞÞÞáááãããååååååæææååååååãããáááÞÞÞÛÛÛÖÖÖÒÒÒÈÈÈ}}}xxxÐÐÐ÷÷÷üüüýýýýýýýýýýýýýýýýýýýýýýýýúúúÛÛÛ
+
+
+000{{{£££¤¤¤¨¨¨­­­²²²¹¹¹¿¿¿ÆÆÆÌÌÌÒÒÒ×××ÜÜÜàààãããåååçççéééêêêêêêêêêéééçççåååãããàààÜÜÜ×××ÑÑÑÆÆÆ{{{
+
+
+ÛÛÛúúúüüüýýýýýýýýýýýýýýýýýýüüüèèè333{{{   ££££££¦¦¦ªªª¯¯¯¶¶¶½½½ÄÄÄËËËÒÒÒ×××ÝÝÝáááåååèèèêêêìììíííîîîîîîîîîíííìììêêêèèèåååáááÝÝÝØØØÑÑÑÅÅÅuuuèèèûûûüüüýýýýýýýýýýýýýýýôôôººº555www¥¥¥¦¦¦¤¤¤¦¦¦©©©®®®´´´¼¼¼ÃÃÃËËËÒÒÒØØØÞÞÞãããçççêêêíííïïïðððñññòòòòòòòòòñññðððïïïíííêêêçççãããÞÞÞØØØÑÑÑÃÃÃgggºººôôôüüüýýýýýýýýýýýýûûûÚÚÚwwwNNN­­­¨¨¨¨¨¨ªªª®®®´´´»»»ÃÃÃËËËÒÒÒÙÙÙßßßäääéééìììïïïñññóóóôôôõõõõõõõõõõõõõõõôôôóóóñññïïïìììéééäääßßßÙÙÙÑÑÑµµµwwwÚÚÚúúúüüüýýýýýýýýýñññ¬¬¬@@@²²²¯¯¯¬¬¬­­­¯¯¯´´´»»»ÃÃÃËËËÓÓÓÚÚÚàààæææëëëîîîñññóóóõõõööö÷÷÷øøøøøøøøøøøøøøø÷÷÷öööõõõóóóñññîîîëëëæææáááÙÙÙÎÎÎjjj¬¬¬ðððüüüýýýýýýûûûÙÙÙooojjj¯¯¯¸¸¸³³³²²²²²²¶¶¶¼¼¼ÃÃÃËËËÓÓÓÚÚÚáááçççìììðððóóóõõõ÷÷÷øøøùùùúúúúúúúúúúúúúúúúúúúúúùùùøøø÷÷÷õõõóóóðððìììçççâââÚÚÚÃÃÃoooÙÙÙûûûüüüýýýõõõºººFFFÀÀÀ¼¼¼¸¸¸···¹¹¹½½½ÃÃÃËËËÓÓÓÚÚÚáááèèèíííñññôôôöööøøøùùùúúúûûûûûûûûûüüüüüüüüüûûûûûûûûûúúúùùùøøøöööôôôñññíííèèèâââÙÙÙ¦¦¦eeeºººôôôüüüüüüåååeee¶¶¶ÆÆÆÀÀÀ½½½½½½¿¿¿ÄÄÄËËËÒÒÒÚÚÚáááèèèíííñññôôô÷÷÷ùùùúúúûûûûûûüüüüüüýýýýýýýýýýýýýýýüüüüüüûûûûûûúúúùùù÷÷÷õõõñññîîîéééâââÆÆÆåååüüüüüüÓÓÓ]]]ËËËÉÉÉÅÅÅÂÂÂÃÃÃÆÆÆËËËÒÒÒÙÙÙàààçççíííñññõõõ÷÷÷ùùùúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúùùù÷÷÷õõõòòòîîîéééßßßÃÃÃ]]]ÒÒÒûûû÷÷÷ÂÂÂKKK³³³ÒÒÒÌÌÌÉÉÉÇÇÇÈÈÈÌÌÌÒÒÒØØØßßßæææìììñññôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûùùùøøøõõõòòòïïïééé¿¿¿___ÂÂÂ÷÷÷ïïïªªª^^^½½½ÕÕÕÏÏÏÍÍÍÌÌÌÎÎÎÒÒÒ×××ÞÞÞäääëëëðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúøøøöööóóóïïïÍÍÍvvvªªªïïïæææzzzÈÈÈ×××ÓÓÓÑÑÑÐÐÐÓÓÓ×××ÝÝÝãããéééîîîóóóöööùùùúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúøøøöööôôôÜÜÜæææÞÞÞtttÓÓÓÙÙÙÖÖÖÔÔÔÕÕÕ×××ÜÜÜáááçççìììñññõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúùùù÷÷÷èèè­­­tttÞÞÞ×××aaa«««ÚÚÚÜÜÜÙÙÙØØØØØØÛÛÛßßßåååêêêïïïóóó÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûúúúùùùòòòÁÁÁaaa×××ÔÔÔWWW¸¸¸àààÞÞÞÜÜÜÚÚÚÜÜÜÞÞÞãããèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûûûûøøøÍÍÍWWWÔÔÔÔÔÔWWW¹¹¹áááßßßÞÞÞÝÝÝÞÞÞáááåååêêêïïïóóóöööùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüùùùÍÍÍWWWÔÔÔ×××aaa¯¯¯ßßßáááßßßßßßàààãããçççìììðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý÷÷÷ÂÂÂaaa×××ÞÞÞtttÙÙÙáááààààààáááäääèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýððð­­­tttÞÞÞæææÐÐÐâââááááááâââåååéééíííòòòõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýèèèæææïïï©©©eeeÇÇÇâââááááááãããæææéééîîîòòòõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýßßßvvv©©©ïïï÷÷÷ÁÁÁ___¿¿¿âââàààáááâââåååéééíííòòòõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüÖÖÖ___ÁÁÁöööüüüÒÒÒ]]]­­­ÜÜÜßßßàààáááäääèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýøøøÄÄÄ]]]ÒÒÒûûûüüüåååtttËËËÞÞÞßßßàààãããçççìììðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýæææåååüüüüüüôôô¹¹¹eee²²²ÚÚÚÜÜÜÞÞÞáááåååêêêïïïóóóöööùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýúúúÐÐÐeee¹¹¹óóóüüüýýýûûûÙÙÙooo~~~ËËËÙÙÙÜÜÜÞÞÞãããèèèíííñññõõõøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüêêêoooÙÙÙûûûüüüýýýüüüððð«««jjjªªªÔÔÔ×××ÛÛÛßßßåååêêêïïïóóó÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüü÷÷÷ÎÎÎjjj«««ïïïüüüüüüýýýýýýûûûÚÚÚwwwfff¾¾¾ÔÔÔÖÖÖÜÜÜáááçççìììñññõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüúúúäääwwwÚÚÚúúúüüüýýýýýýýýýüüüôôôºººgggÈÈÈÒÒÒ×××ÝÝÝãããéééîîîóóóöööùùùúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûóóóÀÀÀgggºººóóóüüüüüüýýýýýýýýýýýýüüüèèèuuuÈÈÈÑÑÑ×××ÞÞÞäääëëëðððôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûôôôÌÌÌuuuçççûûûüüüýýýýýýýýýýýýýýýüüüùùùÛÛÛ
+
+
+{{{ÆÆÆÑÑÑØØØßßßæææìììñññõõõ÷÷÷ùùùûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûõõõÐÐÐ{{{
+
+
+ÛÛÛùùùüüüüüüýýýýýýýýýýýýýýýýýýüüü÷÷÷ÏÏÏxxx}}}ÅÅÅÑÑÑÙÙÙáááçççíííñññõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûôôôÐÐÐ}}}xxxÏÏÏ÷÷÷üüüüüüýýýýýýýýýýýýýýýýýýýýýýýýüüüõõõËËËxxx{{{ÄÄÄÑÑÑÙÙÙâââèèèîîîòòòõõõøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüúúúóóóÌÌÌ{{{xxxËËËõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüõõõÐÐÐ
+
+
+uuuµµµÏÏÏÚÚÚâââéééîîîòòòöööøøøúúúûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýüüü÷÷÷äääÁÁÁuuu
+
+
+ÏÏÏõõõûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüü÷÷÷ÛÛÛgggÂÂÂÙÙÙâââéééïïïóóóöööøøøúúúûûûýýýýýýýýýýýýýýýýýýýýýýýýúúúêêêÎÎÎgggÚÚÚöööûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüùùùèèèºººxxxkkk¥¥¥ÅÅÅßßßéééïïïôôô÷÷÷ùùùûûûüüüýýýýýýýýýýýýüüüøøøæææÏÏÏkkkwww¹¹¹çççùùùüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûóóóÚÚÚ¬¬¬ooodddÄÄÄ½½½ÍÍÍÛÛÛèèèòòòøøøùùù÷÷÷ðððçççÞÞÞÖÖÖÄÄÄdddnnn«««ÙÙÙóóóûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüúúúðððÙÙÙººº]]]```vvv­­­ÂÂÂÍÍÍÍÍÍÂÂÂ­­­vvv```]]]ºººÙÙÙðððúúúüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûûôôôåååÓÓÓÂÂÂ©©©tttaaaVVVVVVaaattt©©©ÁÁÁÒÒÒåååôôôúúúüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûöööîîîæææÝÝÝ×××ÓÓÓÓÓÓ×××ÝÝÝåååîîîöööûûûûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý
Index: uspace/srv/console/console.c
===================================================================
--- uspace/srv/console/console.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/console.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,562 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup console
+ * @{ 
+ */
+/** @file
+ */
+
+/* TODO: remove */
+#include <stdio.h>
+
+#include <fb.h>
+#include <ipc/ipc.h>
+#include <keys.h>
+#include <ipc/fb.h>
+#include <ipc/services.h>
+#include <errno.h>
+#include <key_buffer.h>
+#include <console.h>
+#include <unistd.h>
+#include <async.h>
+#include <libadt/fifo.h>
+#include <screenbuffer.h>
+#include <sys/mman.h>
+
+#include "gcons.h"
+
+#define MAX_KEYREQUESTS_BUFFERED 32
+
+#define NAME "CONSOLE"
+
+/** Index of currently used virtual console.
+ */
+int active_console = 0;
+
+/** Information about framebuffer
+ */
+struct {
+	int phone;		/**< Framebuffer phone */
+	ipcarg_t rows;		/**< Framebuffer rows */
+	ipcarg_t cols;		/**< Framebuffer columns */
+} fb_info;
+
+
+typedef struct {
+	keybuffer_t keybuffer;		/**< Buffer for incoming keys. */
+	/** Buffer for unsatisfied request for keys. */
+	FIFO_CREATE_STATIC(keyrequests, ipc_callid_t,
+		MAX_KEYREQUESTS_BUFFERED);	
+	int keyrequest_counter;		/**< Number of requests in buffer. */
+	int client_phone;		/**< Phone to connected client. */
+	int used;			/**< 1 if this virtual console is
+					 * connected to some client.*/
+	screenbuffer_t screenbuffer;	/**< Screenbuffer for saving screen
+					 * contents and related settings. */
+} connection_t;
+
+static connection_t connections[CONSOLE_COUNT];	/**< Array of data for virtual
+						 * consoles */
+static keyfield_t *interbuffer = NULL;		/**< Pointer to memory shared
+						 * with framebufer used for
+						 * faster virtual console
+						 * switching */
+
+static int kernel_pixmap = -1;	/**< Number of fb pixmap, where kernel
+				 * console is stored */
+
+
+/** Find unused virtual console.
+ *
+ */
+static int find_free_connection(void) 
+{
+	int i;
+	
+	for (i = 0; i < CONSOLE_COUNT; i++) {
+		if (!connections[i].used)
+			return i;
+	}
+	return -1;
+}
+
+static void clrscr(void)
+{
+	async_msg(fb_info.phone, FB_CLEAR, 0);
+}
+
+static void curs_visibility(int v)
+{
+	async_msg(fb_info.phone, FB_CURSOR_VISIBILITY, v); 
+}
+
+static void curs_goto(int row, int col)
+{
+	async_msg_2(fb_info.phone, FB_CURSOR_GOTO, row, col); 
+}
+
+static void set_style(style_t *style)
+{
+	async_msg_2(fb_info.phone, FB_SET_STYLE, style->fg_color,
+		style->bg_color); 
+}
+
+static void set_style_col(int fgcolor, int bgcolor)
+{
+	async_msg_2(fb_info.phone, FB_SET_STYLE, fgcolor, bgcolor); 
+}
+
+static void prtchr(char c, int row, int col)
+{
+	async_msg_3(fb_info.phone, FB_PUTCHAR, c, row, col);
+}
+
+/** Check key and process special keys. 
+ *
+ * */
+static void write_char(int console, char key)
+{
+	screenbuffer_t *scr = &(connections[console].screenbuffer);
+	
+	switch (key) {
+	case '\n':
+		scr->position_y++;
+		scr->position_x = 0;
+		break;
+	case '\r':
+		break;
+	case '\t':
+		scr->position_x += 8;
+		scr->position_x -= scr->position_x % 8; 
+		break;
+	case '\b':
+		if (scr->position_x == 0) 
+			break;
+		scr->position_x--;
+		if (console == active_console)
+			prtchr(' ', scr->position_y, scr->position_x);
+		screenbuffer_putchar(scr, ' ');
+		break;
+	default:	
+		if (console == active_console)
+			prtchr(key, scr->position_y, scr->position_x);
+
+		screenbuffer_putchar(scr, key);
+		scr->position_x++;
+	}
+	
+	scr->position_y += (scr->position_x >= scr->size_x);
+	
+	if (scr->position_y >= scr->size_y) {
+		scr->position_y = scr->size_y - 1;
+		screenbuffer_clear_line(scr, scr->top_line);
+		scr->top_line = (scr->top_line + 1) % scr->size_y;
+		if (console == active_console)
+			async_msg(fb_info.phone, FB_SCROLL, 1);
+	}
+	
+	scr->position_x = scr->position_x % scr->size_x;
+	
+	if (console == active_console)
+		curs_goto(scr->position_y, scr->position_x);
+	
+}
+
+/** Save current screen to pixmap, draw old pixmap
+ *
+ * @param oldpixmap Old pixmap
+ * @return ID of pixmap of current screen
+ */
+static int switch_screens(int oldpixmap)
+{
+	int newpmap;
+       
+	/* Save screen */
+	newpmap = async_req(fb_info.phone, FB_VP2PIXMAP, 0, NULL);
+	if (newpmap < 0)
+		return -1;
+
+	if (oldpixmap != -1) {
+		/* Show old screen */
+		async_msg_2(fb_info.phone, FB_VP_DRAW_PIXMAP, 0, oldpixmap);
+		/* Drop old pixmap */
+		async_msg(fb_info.phone, FB_DROP_PIXMAP, oldpixmap);
+	}
+	
+	return newpmap;
+}
+
+/** Switch to new console */
+static void change_console(int newcons)
+{
+	connection_t *conn;
+	static int console_pixmap = -1;
+	int i, j, rc;
+	keyfield_t *field;
+	style_t *style;
+
+	if (newcons == active_console)
+		return;
+
+	if (newcons == KERNEL_CONSOLE) {
+		if (active_console == KERNEL_CONSOLE)
+			return;
+		active_console = KERNEL_CONSOLE;
+		curs_visibility(0);
+
+		async_serialize_start();
+		if (kernel_pixmap == -1) { 
+			/* store/restore unsupported */
+			set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND);
+			clrscr();
+		} else {
+			gcons_in_kernel();
+			console_pixmap = switch_screens(kernel_pixmap);
+			kernel_pixmap = -1;
+		}
+		async_serialize_end();
+
+		__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
+		return;
+	} 
+	
+	async_serialize_start();
+
+	if (console_pixmap != -1) {
+		kernel_pixmap = switch_screens(console_pixmap);
+		console_pixmap = -1;
+	}
+	active_console = newcons;
+	gcons_change_console(newcons);
+	conn = &connections[active_console];
+
+	set_style(&conn->screenbuffer.style);
+	curs_visibility(0);
+	if (interbuffer) {
+		for (i = 0; i < conn->screenbuffer.size_x; i++)
+			for (j = 0; j < conn->screenbuffer.size_y; j++) 
+				interbuffer[i + j * conn->screenbuffer.size_x] =
+					*get_field_at(&(conn->screenbuffer),
+					i, j);
+		/* This call can preempt, but we are already at the end */
+		rc = async_req_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL,
+			NULL);		
+	};
+	
+	if ((!interbuffer) || (rc != 0)) {
+		set_style(&conn->screenbuffer.style);
+		clrscr();
+		style = &conn->screenbuffer.style;
+
+		for (j = 0; j < conn->screenbuffer.size_y; j++) 
+			for (i = 0; i < conn->screenbuffer.size_x; i++) {
+				field = get_field_at(&(conn->screenbuffer), i,
+					j);
+				if (!style_same(*style, field->style))
+					set_style(&field->style);
+				style = &field->style;
+				if ((field->character == ' ') &&
+					(style_same(field->style,
+					conn->screenbuffer.style)))
+					continue;
+
+				prtchr(field->character, j, i);
+			}
+	}
+	
+	curs_goto(conn->screenbuffer.position_y,
+		conn->screenbuffer.position_x);
+	curs_visibility(conn->screenbuffer.is_cursor_visible);
+
+	async_serialize_end();
+}
+
+/** Handler for keyboard */
+static void keyboard_events(ipc_callid_t iid, ipc_call_t *icall)
+{
+	ipc_callid_t callid;
+	ipc_call_t call;
+	int retval;
+	int c;
+	connection_t *conn;
+	int newcon;
+	
+	/* Ignore parameters, the connection is alread opened */
+	while (1) {
+		callid = async_get_call(&call);
+		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			/* TODO: Handle hangup */
+			return;
+		case KBD_MS_LEFT:
+			newcon = gcons_mouse_btn(IPC_GET_ARG1(call));
+			if (newcon != -1)
+				change_console(newcon);
+			retval = 0;
+			break;
+		case KBD_MS_MOVE:
+			gcons_mouse_move(IPC_GET_ARG1(call),
+				IPC_GET_ARG2(call));
+			retval = 0;
+			break;
+		case KBD_PUSHCHAR:
+			/* got key from keyboard driver */
+			
+			retval = 0;
+			c = IPC_GET_ARG1(call);
+			/* switch to another virtual console */
+			
+			conn = &connections[active_console];
+/*
+ *			if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 +
+ *				CONSOLE_COUNT)) {
+ */
+			if ((c >= 0x101) && (c < 0x101 + CONSOLE_COUNT)) {
+				if (c == 0x112)
+					change_console(KERNEL_CONSOLE);
+				else
+					change_console(c - 0x101);
+				break;
+			}
+			
+			/* if client is awaiting key, send it */
+			if (conn->keyrequest_counter > 0) {		
+				conn->keyrequest_counter--;
+				ipc_answer_fast(fifo_pop(conn->keyrequests), 0,
+					c, 0);
+				break;
+			}
+			
+			keybuffer_push(&conn->keybuffer, c);
+			retval = 0;
+			
+			break;
+		default:
+			retval = ENOENT;
+		}
+		ipc_answer_fast(callid, retval, 0, 0);
+	}
+}
+
+/** Default thread for new connections */
+static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	ipc_callid_t callid;
+	ipc_call_t call;
+	int consnum;
+	ipcarg_t arg1, arg2;
+	connection_t *conn;
+
+	if ((consnum = find_free_connection()) == -1) {
+		ipc_answer_fast(iid,ELIMIT,0,0);
+		return;
+	}
+	conn = &connections[consnum];
+	conn->used = 1;
+	
+	async_serialize_start();
+	gcons_notify_connect(consnum);
+	conn->client_phone = IPC_GET_ARG3(call);
+	screenbuffer_clear(&conn->screenbuffer);
+	
+	/* Accept the connection */
+	ipc_answer_fast(iid, 0, 0, 0);
+
+	while (1) {
+		async_serialize_end();
+		callid = async_get_call(&call);
+		async_serialize_start();
+
+		arg1 = arg2 = 0;
+		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			gcons_notify_disconnect(consnum);
+			
+			/* Answer all pending requests */
+			while (conn->keyrequest_counter > 0) {		
+				conn->keyrequest_counter--;
+				ipc_answer_fast(fifo_pop(conn->keyrequests),
+					ENOENT, 0, 0);
+				break;
+			}
+			conn->used = 0;
+			return;
+		case CONSOLE_PUTCHAR:
+			write_char(consnum, IPC_GET_ARG1(call));
+			gcons_notify_char(consnum);
+			break;
+		case CONSOLE_CLEAR:
+			/* Send message to fb */
+			if (consnum == active_console) {
+				async_msg(fb_info.phone, FB_CLEAR, 0); 
+			}
+			
+			screenbuffer_clear(&conn->screenbuffer);
+			
+			break;
+		case CONSOLE_GOTO:
+			screenbuffer_goto(&conn->screenbuffer,
+				IPC_GET_ARG2(call), IPC_GET_ARG1(call));
+			if (consnum == active_console)
+				curs_goto(IPC_GET_ARG1(call),
+					IPC_GET_ARG2(call));
+			break;
+		case CONSOLE_GETSIZE:
+			arg1 = fb_info.rows;
+			arg2 = fb_info.cols;
+			break;
+		case CONSOLE_FLUSH:
+			if (consnum == active_console)
+				async_req_2(fb_info.phone, FB_FLUSH, 0, 0,
+					NULL, NULL);		
+			break;
+		case CONSOLE_SET_STYLE:
+			arg1 = IPC_GET_ARG1(call);
+			arg2 = IPC_GET_ARG2(call);
+			screenbuffer_set_style(&conn->screenbuffer, arg1, arg2);
+			if (consnum == active_console)
+				set_style_col(arg1, arg2);
+			break;
+		case CONSOLE_CURSOR_VISIBILITY:
+			arg1 = IPC_GET_ARG1(call);
+			conn->screenbuffer.is_cursor_visible = arg1;
+			if (consnum == active_console)
+				curs_visibility(arg1);
+			break;
+		case CONSOLE_GETCHAR:
+			if (keybuffer_empty(&conn->keybuffer)) {
+				/* buffer is empty -> store request */
+				if (conn->keyrequest_counter <
+					MAX_KEYREQUESTS_BUFFERED) {	
+					fifo_push(conn->keyrequests, callid);
+					conn->keyrequest_counter++;
+				} else {
+					/*
+					 * No key available and too many
+					 * requests => fail.
+					*/
+					ipc_answer_fast(callid, ELIMIT, 0, 0);
+				}
+				continue;
+			}
+			keybuffer_pop(&conn->keybuffer, (int *) &arg1);
+			break;
+		}
+		ipc_answer_fast(callid, 0, arg1, arg2);
+	}
+}
+
+int main(int argc, char *argv[])
+{
+	ipcarg_t phonehash;
+	int kbd_phone;
+	int i;
+
+	async_set_client_connection(client_connection);
+	
+	/* Connect to keyboard driver */
+
+	kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0);
+	while (kbd_phone < 0) {
+		usleep(10000);
+		kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0);
+	}
+	
+	if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, &phonehash) != 0)
+		return -1;
+	async_new_connection(phonehash, 0, NULL, keyboard_events);
+	
+	/* Connect to framebuffer driver */
+	
+	fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0);
+	while (fb_info.phone < 0) {
+		usleep(10000);
+		fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0);
+	}
+	
+	/* Save old kernel screen */
+	kernel_pixmap = switch_screens(-1);
+
+	/* Initialize gcons */
+	gcons_init(fb_info.phone);
+	/* Synchronize, the gcons can have something in queue */
+	async_req(fb_info.phone, FB_FLUSH, 0, NULL);
+	/* Enable double buffering */
+	async_msg_2(fb_info.phone, FB_VIEWPORT_DB, (sysarg_t) -1, 1);
+	
+	async_req_2(fb_info.phone, FB_GET_CSIZE, 0, 0, &(fb_info.rows),
+		&(fb_info.cols)); 
+	set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND);
+	clrscr();
+	
+	/* Init virtual consoles */
+	for (i = 0; i < CONSOLE_COUNT; i++) {
+		connections[i].used = 0;
+		keybuffer_init(&(connections[i].keybuffer));
+		
+		connections[i].keyrequests.head =
+			connections[i].keyrequests.tail = 0;
+		connections[i].keyrequests.items = MAX_KEYREQUESTS_BUFFERED;
+		connections[i].keyrequest_counter = 0;
+		
+		if (screenbuffer_init(&(connections[i].screenbuffer),
+			fb_info.cols, fb_info.rows) == NULL) {
+			/* FIXME: handle error */
+			return -1;
+		}
+	}
+	connections[KERNEL_CONSOLE].used = 1;
+	
+	interbuffer = mmap(NULL,
+		sizeof(keyfield_t) * fb_info.cols * fb_info.rows,
+		PROTO_READ | PROTO_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
+	if (!interbuffer) {
+		if (async_req_3(fb_info.phone, IPC_M_AS_AREA_SEND, (ipcarg_t)
+			interbuffer, 0, AS_AREA_READ, NULL, NULL, NULL) != 0) {
+			munmap(interbuffer, sizeof(keyfield_t) * fb_info.cols
+				* fb_info.rows);
+			interbuffer = NULL;
+		}
+	}
+
+	curs_goto(0, 0);
+	curs_visibility(connections[active_console].screenbuffer.is_cursor_visible);
+
+	/* Register at NS */
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_CONSOLE, 0, &phonehash) != 0) {
+		return -1;
+	}
+	
+	async_manager();
+
+	return 0;	
+}
+ 
+/** @}
+ */
Index: uspace/srv/console/console.h
===================================================================
--- uspace/srv/console/console.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/console.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup console
+ * @{ 
+ */
+/** @file
+ */
+
+#ifndef __CONSOLE_H__
+#define __CONSOLE_H__
+
+#define KERNEL_CONSOLE 11
+
+#define CONSOLE_COUNT 12 
+
+#define CONSOLE_GETCHAR		1026
+#define CONSOLE_PUTCHAR 	1027
+#define CONSOLE_CLEAR		1028
+#define CONSOLE_GOTO		1029
+#define CONSOLE_GETSIZE		1030
+#define CONSOLE_FLUSH		1031
+#define CONSOLE_SET_STYLE 	1032
+#define CONSOLE_CURSOR_VISIBILITY	1033
+
+#endif
+ 
+/** @}
+ */
Index: uspace/srv/console/gcons.c
===================================================================
--- uspace/srv/console/gcons.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/gcons.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,523 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup console
+ * @{ 
+ */
+/** @file
+ */
+
+#include <ipc/fb.h>
+#include <ipc/ipc.h>
+#include <async.h>
+#include <stdio.h>
+#include <sys/mman.h>
+#include <string.h>
+#include <align.h>
+
+#include "console.h"
+#include "gcons.h"
+
+#define CONSOLE_TOP      66
+#define CONSOLE_MARGIN   6
+
+#define STATUS_START    110
+#define STATUS_TOP      8
+#define STATUS_SPACE    4
+#define STATUS_WIDTH    48
+#define STATUS_HEIGHT   48
+
+#define MAIN_COLOR      0xffffff
+
+static int use_gcons = 0;
+static ipcarg_t xres,yres;
+
+enum butstate {
+	CONS_DISCONNECTED = 0,
+	CONS_SELECTED,
+	CONS_IDLE,
+	CONS_HAS_DATA,
+	CONS_KERNEL,
+	CONS_DISCONNECTED_SEL,
+	CONS_LAST
+};
+
+static int console_vp;
+static int cstatus_vp[CONSOLE_COUNT];
+static enum butstate console_state[CONSOLE_COUNT];
+
+static int fbphone;
+
+/** List of pixmaps identifying these icons */
+static int ic_pixmaps[CONS_LAST] = {-1, -1, -1, -1, -1, -1};
+static int animation = -1;
+
+static int active_console = 0;
+
+static void vp_switch(int vp)
+{
+	async_msg(fbphone,FB_VIEWPORT_SWITCH, vp);
+}
+
+/** Create view port */
+static int vp_create(unsigned int x, unsigned int y, 
+		     unsigned int width, unsigned int height)
+{
+	return async_req_2(fbphone, FB_VIEWPORT_CREATE,
+			   (x << 16) | y, (width << 16) | height, NULL, NULL);
+}
+
+static void clear(void)
+{
+	async_msg(fbphone, FB_CLEAR, 0);
+}
+
+static void set_style(int fgcolor, int bgcolor)
+{
+	async_msg_2(fbphone, FB_SET_STYLE, fgcolor, bgcolor);
+}
+
+/** Transparent putchar */
+static void tran_putch(char c, int row, int col)
+{
+	async_msg_3(fbphone, FB_TRANS_PUTCHAR, c, row, col);
+}
+
+/** Redraw the button showing state of a given console */
+static void redraw_state(int consnum)
+{
+	char data[5];
+	int i;
+	enum butstate state = console_state[consnum];
+
+	vp_switch(cstatus_vp[consnum]);
+	if (ic_pixmaps[state] != -1)
+		async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum],
+			ic_pixmaps[state]);
+
+ 	if (state != CONS_DISCONNECTED && state != CONS_KERNEL &&
+		state != CONS_DISCONNECTED_SEL) {
+ 		snprintf(data, 5, "%d", consnum + 1);
+ 		for (i = 0; data[i]; i++)
+ 			tran_putch(data[i], 1, 2 + i);
+ 	}
+}
+
+/** Notification run on changing console (except kernel console) */
+void gcons_change_console(int consnum)
+{
+	int i;
+
+	if (!use_gcons)
+		return;
+
+	if (active_console == KERNEL_CONSOLE) {
+		for (i = 0; i < CONSOLE_COUNT; i++)
+			redraw_state(i);
+		if (animation != -1)
+			async_msg(fbphone, FB_ANIM_START, animation);
+	} else {
+		if (console_state[active_console] == CONS_DISCONNECTED_SEL)
+			console_state[active_console] = CONS_DISCONNECTED;
+		else
+			console_state[active_console] = CONS_IDLE;
+		redraw_state(active_console);
+	}
+	active_console = consnum;
+
+	if (console_state[consnum] == CONS_DISCONNECTED) {
+		console_state[consnum] = CONS_DISCONNECTED_SEL;
+		redraw_state(consnum);
+	} else
+		console_state[consnum] = CONS_SELECTED;
+	redraw_state(consnum);
+
+	vp_switch(console_vp);
+}
+
+/** Notification function that gets called on new output to virtual console */
+void gcons_notify_char(int consnum)
+{
+	if (!use_gcons)
+		return;
+
+	if (consnum == active_console ||
+		console_state[consnum] == CONS_HAS_DATA)
+		return;
+
+	console_state[consnum] = CONS_HAS_DATA;
+
+	if (active_console == KERNEL_CONSOLE)
+		return;
+
+	redraw_state(consnum);
+	
+	vp_switch(console_vp);
+}
+
+/** Notification function called on service disconnect from console */
+void gcons_notify_disconnect(int consnum)
+{
+	if (!use_gcons)
+		return;
+	if (active_console == consnum)
+		console_state[consnum] = CONS_DISCONNECTED_SEL;
+	else
+		console_state[consnum] = CONS_DISCONNECTED;
+
+	if (active_console == KERNEL_CONSOLE)
+		return;
+
+	redraw_state(consnum);
+	vp_switch(console_vp);
+}
+
+/** Notification function called on console connect */
+void gcons_notify_connect(int consnum)
+{
+	if (!use_gcons)
+		return;
+	if (active_console == consnum)
+		console_state[consnum] = CONS_SELECTED;
+	else
+		console_state[consnum] = CONS_IDLE;
+
+	if (active_console == KERNEL_CONSOLE)
+		return;
+
+	redraw_state(consnum);
+	vp_switch(console_vp);
+}
+
+/** Change to kernel console */
+void gcons_in_kernel(void)
+{
+	if (console_state[active_console] == CONS_DISCONNECTED_SEL)
+		console_state[active_console] = CONS_DISCONNECTED;
+	else
+		console_state[active_console] = CONS_IDLE;
+	redraw_state(active_console);
+
+	if (animation != -1)
+		async_msg(fbphone, FB_ANIM_STOP, animation);
+
+	active_console = KERNEL_CONSOLE; /* Set to kernel console */
+	vp_switch(0);
+}
+
+/** Return x, where left <= x <= right && |a-x|==min(|a-x|) is smallest */
+static inline int limit(int a,int left, int right)
+{
+	if (a < left)
+		a = left;
+	if (a >= right)
+		a = right - 1;
+	return a;
+}
+
+int mouse_x, mouse_y;
+int btn_pressed, btn_x, btn_y;
+
+/** Handle mouse move
+ *
+ * @param dx Delta X of mouse move
+ * @param dy Delta Y of mouse move
+ */
+void gcons_mouse_move(int dx, int dy)
+{
+	mouse_x = limit(mouse_x+dx, 0, xres);
+	mouse_y = limit(mouse_y+dy, 0, yres);
+
+	async_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);
+}
+
+static int gcons_find_conbut(int x, int y)
+{
+	int status_start = STATUS_START + (xres - 800) / 2;;
+
+	if (y < STATUS_TOP || y >= STATUS_TOP + STATUS_HEIGHT)
+		return -1;
+	
+	if (x < status_start)
+		return -1;
+	
+	if (x >= status_start + (STATUS_WIDTH + STATUS_SPACE) * CONSOLE_COUNT)
+		return -1;
+	if (((x - status_start) % (STATUS_WIDTH+STATUS_SPACE)) < STATUS_SPACE)
+		return -1;
+	
+	return (x - status_start) / (STATUS_WIDTH+STATUS_SPACE);
+}
+
+/** Handle mouse click
+ *
+ * @param state New state (1-pressed, 0-depressed)
+ */
+int gcons_mouse_btn(int state)
+{
+	int conbut;
+
+	if (state) {
+		conbut = gcons_find_conbut(mouse_x, mouse_y);
+		if (conbut != -1) {
+			btn_pressed = 1;
+			btn_x = mouse_x;
+			btn_y = mouse_y;
+		}
+		return -1;
+	} 
+	if (!state && !btn_pressed)
+		return -1;
+	btn_pressed = 0;
+
+	conbut = gcons_find_conbut(mouse_x, mouse_y);
+	if (conbut == gcons_find_conbut(btn_x, btn_y))
+		return conbut;
+	return -1;
+}
+
+
+/** Draw a PPM pixmap to framebuffer
+ *
+ * @param logo Pointer to PPM data
+ * @param size Size of PPM data
+ * @param x Coordinate of upper left corner
+ * @param y Coordinate of upper left corner
+ */
+static void draw_pixmap(char *logo, size_t size, int x, int y)
+{
+	char *shm;
+	int rc;
+
+	/* Create area */
+	shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED |
+		MAP_ANONYMOUS, 0, 0);
+	if (shm == MAP_FAILED)
+		return;
+
+	memcpy(shm, logo, size);
+	/* Send area */
+	rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL,
+		NULL);
+	if (rc)
+		goto exit;
+	rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0,
+		PROTO_READ, NULL, NULL, NULL);
+	if (rc)
+		goto drop;
+	/* Draw logo */
+	async_msg_2(fbphone, FB_DRAW_PPM, x, y);
+drop:
+	/* Drop area */
+	async_msg(fbphone, FB_DROP_SHM, 0);
+exit:       
+	/* Remove area */
+	munmap(shm, size);
+}
+
+extern char _binary_helenos_ppm_start[0];
+extern int _binary_helenos_ppm_size;
+extern char _binary_nameic_ppm_start[0];
+extern int _binary_nameic_ppm_size;
+/** Redraws console graphics  */
+static void gcons_redraw_console(void)
+{
+	int i;
+
+	if (!use_gcons)
+		return;
+	
+	vp_switch(0);
+	set_style(MAIN_COLOR, MAIN_COLOR);
+	clear();
+	draw_pixmap(_binary_helenos_ppm_start,
+		(size_t) &_binary_helenos_ppm_size, xres - 66, 2);
+	draw_pixmap(_binary_nameic_ppm_start,
+		(size_t) &_binary_nameic_ppm_size, 5, 17);
+
+	for (i = 0;i < CONSOLE_COUNT; i++)
+		redraw_state(i);
+	vp_switch(console_vp);
+}
+
+/** Creates a pixmap on framebuffer
+ *
+ * @param data PPM data
+ * @param size PPM data size
+ * @return Pixmap identification
+ */
+static int make_pixmap(char *data, int size)
+{
+	char *shm;
+	int rc;
+	int pxid = -1;
+
+	/* Create area */
+	shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED |
+		MAP_ANONYMOUS, 0, 0);
+	if (shm == MAP_FAILED)
+		return -1;
+
+	memcpy(shm, data, size);
+	/* Send area */
+	rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL,
+		NULL);
+	if (rc)
+		goto exit;
+	rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0,
+		PROTO_READ, NULL, NULL, NULL);
+	if (rc)
+		goto drop;
+
+	/* Obtain pixmap */
+	rc = async_req(fbphone, FB_SHM2PIXMAP, 0, NULL);
+	if (rc < 0)
+		goto drop;
+	pxid = rc;
+drop:
+	/* Drop area */
+	async_msg(fbphone, FB_DROP_SHM, 0);
+exit:       
+	/* Remove area */
+	munmap(shm, size);
+
+	return pxid;
+}
+
+extern char _binary_anim_1_ppm_start[0];
+extern int _binary_anim_1_ppm_size;
+extern char _binary_anim_2_ppm_start[0];
+extern int _binary_anim_2_ppm_size;
+extern char _binary_anim_3_ppm_start[0];
+extern int _binary_anim_3_ppm_size;
+extern char _binary_anim_4_ppm_start[0];
+extern int _binary_anim_4_ppm_size;
+
+static void make_anim(void)
+{
+	int an;
+	int pm;
+
+	an = async_req(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE],
+		NULL);
+	if (an < 0)
+		return;
+
+	pm = make_pixmap(_binary_anim_1_ppm_start,
+		(int) &_binary_anim_1_ppm_size);
+	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
+
+	pm = make_pixmap(_binary_anim_2_ppm_start,
+		(int) &_binary_anim_2_ppm_size);
+	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
+
+	pm = make_pixmap(_binary_anim_3_ppm_start,
+		(int) &_binary_anim_3_ppm_size);
+	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
+
+	pm = make_pixmap(_binary_anim_4_ppm_start,
+		(int) &_binary_anim_4_ppm_size);
+	async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm);
+
+	async_msg(fbphone, FB_ANIM_START, an);
+
+	animation = an;
+}
+
+extern char _binary_cons_selected_ppm_start[0];
+extern int _binary_cons_selected_ppm_size;
+extern char _binary_cons_idle_ppm_start[0];
+extern int _binary_cons_idle_ppm_size;
+extern char _binary_cons_has_data_ppm_start[0];
+extern int _binary_cons_has_data_ppm_size;
+extern char _binary_cons_kernel_ppm_start[0];
+extern int _binary_cons_kernel_ppm_size;
+
+/** Initialize nice graphical console environment */
+void gcons_init(int phone)
+{
+	int rc;
+	int i;
+	int status_start = STATUS_START;
+
+	fbphone = phone;
+
+	rc = async_req_2(phone, FB_GET_RESOLUTION, 0, 0, &xres, &yres);
+	if (rc)
+		return;
+	
+	if (xres < 800 || yres < 600)
+		return;
+
+	/* create console viewport */
+	/* Align width & height to character size */
+	console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP,
+		ALIGN_DOWN(xres - 2 * CONSOLE_MARGIN, 8),
+		ALIGN_DOWN(yres - (CONSOLE_TOP + CONSOLE_MARGIN), 16));
+	if (console_vp < 0)
+		return;
+	
+	/* Create status buttons */
+	status_start += (xres - 800) / 2;
+	for (i = 0; i < CONSOLE_COUNT; i++) {
+		cstatus_vp[i] = vp_create(status_start + CONSOLE_MARGIN +
+			i * (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP,
+			STATUS_WIDTH, STATUS_HEIGHT);
+		if (cstatus_vp[i] < 0)
+			return;
+		vp_switch(cstatus_vp[i]);
+		set_style(0x202020, 0xffffff);
+	}
+	
+	/* Initialize icons */
+	ic_pixmaps[CONS_SELECTED] =
+		make_pixmap(_binary_cons_selected_ppm_start,
+		(int) &_binary_cons_selected_ppm_size);
+	ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start,
+		(int) &_binary_cons_idle_ppm_size);
+	ic_pixmaps[CONS_HAS_DATA] =
+		make_pixmap(_binary_cons_has_data_ppm_start,
+		(int) &_binary_cons_has_data_ppm_size);
+	ic_pixmaps[CONS_DISCONNECTED] =
+		make_pixmap(_binary_cons_idle_ppm_start,
+		(int) &_binary_cons_idle_ppm_size);
+	ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start,
+		(int) &_binary_cons_kernel_ppm_size);
+	ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED];
+	
+	make_anim();
+
+	use_gcons = 1;
+	console_state[0] = CONS_DISCONNECTED_SEL;
+	console_state[KERNEL_CONSOLE] = CONS_KERNEL;
+	gcons_redraw_console();
+}
+ 
+/** @}
+ */
+
Index: uspace/srv/console/gcons.h
===================================================================
--- uspace/srv/console/gcons.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/gcons.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup console
+ * @{ 
+ */
+/** @file
+ */
+
+#ifndef _GCONS_H_
+#define _GCONS_H_
+
+void gcons_init(int phone);
+void gcons_change_console(int consnum);
+void gcons_notify_char(int consnum);
+void gcons_in_kernel(void);
+void gcons_notify_connect(int consnum);
+void gcons_notify_disconnect(int consnum);
+void gcons_mouse_move(int dx, int dy);
+int gcons_mouse_btn(int state);
+
+#endif
+ 
+/** @}
+ */
Index: uspace/srv/console/helenos.ppm
===================================================================
--- uspace/srv/console/helenos.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/helenos.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,13 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+64 60
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýøùùñóõîñóïòóö÷÷ûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþøùùíñóäêîßèìÞæëÝåêÝåêÞåêäèêðññûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþøùùïòôåëïåìðäêîÛàãØÜßÛàâæëîåëîÝåêÛäèÛáåèééúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþùùúïóôæìïåìðåëî×Üß½ÄÆµ¼¾ÈÍÏÍÒÓÊÏÑ·¾ÀÃÊÌãçêÝåéÚãçØÛÞçèèûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúðôõèîñäìðçíðÙÞáÁÇÉ´¼¾ÊÏÑèëì÷ùù÷ùúôöøòõ÷ñóôÖÚÜ¹ÀÂÞäæÜâåØÝâÔÕ×ñòòþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûòõöéîñåíñæíñÛáäÄËÎµ¼¾ÈÍÏäæçöøøøúúõ÷ùòõ÷ðóõðóõðóõïòôïòôÒ×Ù¿ÅÈàåéØßäÎÒÕáááûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûóö÷êïòæíñçîñÞãåÇÎÐµ½¿ÅËÍàãäö÷÷ùúûöøùóöøòõ÷ñôöðóõðóõïòôïòôïòôîñóëïñ»ÂÅÛßâÚàåÓÙÞÑÒÓôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûüüôöøëðóçîñèïòßåèËÑÓ¶¾ÀÃÉËÜàáóôõøúû÷ùúô÷øóöøòõ÷òõ÷ñôöðóõðóõïòôïòôîñóîñóìðòìïòÔÙÛÄËÍÞäè×ÞãËÎÐæççüýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûüüô÷øíñôèîòéïóáçêÍÔÖ¹ÁÃÂÈÊØÜÝñòóøúú÷úûõ÷ùôöøóöøòõ÷òõ÷ñôöñôöðóõðóõïòôîñóîñóíñóìðòëïñëîñåéìºÁÃÞãå×ÞãÐÕÙÕÕÖ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüõøùîòõèïóéðôãéìÑ×Ù»ÂÄÀÆÈÔØÙïðñøùúøúûõøúô÷ùôöøóöøóöøòõ÷òõ÷ñôöðóõðóõïòôïòôîñóîñóìðòìïòëîñëîñêíðéíðÉÏÒÌÒÓÛàäÓÙÞÊÌÏìííþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷ùùðóõèïóéðôåêîÔÚÝ½ÄÇ¿ÆÇÑÖ×ëíîøùùúûüöùúô÷ùô÷ùô÷ùôöøóöøòõ÷òõ÷òõ÷ñôöðóõðóõïòôîñóîñóíñóìðòëïñëîñêîñéíðèìïèìïÝâä»ÂÄÞâåÓÚßËÐÓÛÛÛúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýý÷ùúðôöéðóêðôæìï×ÝßÁÈË¾ÅÇÎÓÔèëëöøøúüü÷úûöùúõ÷ùô÷ùô÷ùô÷ùôöøòõ÷òõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóíñóìðòìïòëîñëîñêíðéíðèìïèìïçëîæêí¿ÆÈÕÚÜÖÜáÐ×ÛÍÏÐððñþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùúúñõ÷êñôêñõçíñÚàâÃÊÌ¾ÅÆÊÏÑæèéö÷øûüüøúûöùúöùúõøùô÷ùô÷ùô÷ùôöøóöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóîñóíðòìðòìïòëîñëîñêíðéíðèìïçëîçëîæêíåêíÕÛÞ¿ÆÇÝâåÓÙÞÉÍÏâââûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùûûíóöéñôëñôßäçÆÍÏ¾ÅÇÇÌÎâåæõö÷ûüýùûü÷ùúöùúöùúöùúõøùô÷ùô÷ùô÷ùôöøóöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóÛÞà±²´´µ¶ÛÝàëîñêîñéíðèìïèìïçëîçëîæêíåéìäéìáæèºÁÃÙÝßÓÙÝÍÓÖÑÒÓôõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùúúèðôêñõíñóÃÉËÂÈÊßâãóôõûüýúûýøúü÷ùûöùúöùúöùúõøùô÷ùô÷ùô÷ùôöøôöøòõ÷òõ÷òõ÷òõ÷ñôöïòôïòôîñóîñóÜÞá~~ooptsuÛÞáéíðèìïèìïçëîæêíåêíäéìäéëãèêãèêËÒÔÅËÍØÞáÏÖÚÈËÍèèèýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüëðôçðôóöø½ÄÆ×ÚÜúûûûüýøúüøúü÷úûöùúöùúöùúöùúõ÷ùô÷ùô÷ùôöøôöøóöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóîñóíñó¯±³poq{{|º»½çëîçëîçëîæêíåéìäéìãèëãèêâçéáæèÛàâ¸¿ÁÛßâÐ×ÚËÐÒ×××÷øøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïððäíñðöøÔÙÛÍÒÓûüýùûüøúüøúü÷úûöùúöùúöùúõøùõ÷ùô÷ùô÷ùôöøôöøóöøòõ÷òõ÷ñôöðóõïòôïòôïòôîñóîñóíðòìðò«¬®yyz¢¢£«ª«­®¯áåèçëîæêíäéìäèëãèêâçéâçéáæèàåçßäçÁÈÊÌÒÔÓÙÜÎÓÖÊÌÍíîîþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÝàáâëð÷úûºÁÃðòóùûüøúüøúü÷ùûöùúöùúöùúõøùô÷ùô÷ùôöøôöøôöøòõ÷òõ÷òõ÷ñôöðóõïòôïòôîñóîñóîñóìðòìðòëîñÑÓÕ³³´½¼½µµ¶ÑÔ×æêíåéìãèêãèêâçéâçéàåçßäçÞãæÝâåÓØÛºÀÃÙÞáÎÔØÆÊÍÝÝÞúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÍÑÒáêïøúüºÁÃ÷øùøúüøúü÷ùûöùúöùúöùúõ÷ùô÷ùô÷ùôöøôöøóöøòõ÷òõ÷ëîðæéëîñóïòôïòôîñóîñóíñóìðòìïòëîñêîñéìï  ¡¸·¹ÁÀÂ¾½¿ÀÁÂâæéãèêâçéâçéáæèàåçßäçÞãæÝâåÜáäÚßãºÁÄÔÙÛÎÕØËÐÔÍÎÏòòòþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûû¶¸¹Ýåêóöù»ÂÄðòò÷úûöùúöùúöùúõøùõ÷ùô÷ùôöøôöøôöøóöøòõ÷ñôöÎÐÒ°±³èëíîñóîñóíñóìðòìïòëîñêíðéíðèìïÂÄÆ³³´À¿ÁÀÀÁ¹¹ºÙÝÞâçéâçéàåçßäçßäçÝâåÜáäÛàäÛàäÚßãËÑÔ½ÄÆ×ÜßÌÓ×ÆÉËäääüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûº»»½ÄÈëñôÏÔÖÕÙÛöùúöùúöùúõøùô÷ùô÷ùôöøôöøôöøóõ÷òõ÷ñôößâä~~qpqxxz¹º»îñóìðòìðòëîñëîñêíðéíðèìïèìïàäç««¬½¼¾ÂÁÃ½¼¾ÇÈÉàåçàåçßäçÞãæÝâåÜáäÛàäÚßãÚßãÙÞâÕÚÞ¶¾ÀÕÚÞËÒÖÈÎÑÒÒÒöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýýÙÙÙàéíèíï»ÁÃóö÷öùúõøùô÷ùôöøôöøôöøóöøòõ÷òõ÷ñôöðóõÇÉÊqpq~~~£¤¥æêëìïòëîñêíðéíðèìïèìïçëîçëîæêí±³µ¡¡¢··¸ÁÀÂÀ¿Áºº¼ÚßáßäçÞãæÜáåÛàäÛàäÚßãÚÞâØÝáØÝáÖÛàÁÈËÇÌÎÑ×ÚÊÐÔÇÉËéêêýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþéééÌÔØíóõ¿ÆÈâæèõ÷ùô÷ùôöøôöøôöøóõ÷òõ÷ñôöñôöðóõïòôÔÖØ|}}¦¥¦³²³°°±ÒÕ×ëîñêíðéíðèìïèìïçëîæêíæêíåéìÍÐÓ°¯±¿¾ÀÂÁÃ»º»ÌÐÒÝâåÜáäÛàäÚßãÚßãÙÞâØÝá×ÜàÖÛàÕÚßÏÕÙ¶½¿ØÜÞÊÐÔÆÊÌØØÙùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôõõº»¼¢§ª¶¼¾¡¡¤¥ðòôôöøôöøóöøòõ÷òõ÷ñôöñôöðóõïòôïòôèëí²±³¿¾À½¼¾ÀÀÂéìïèìïèìïçëîçëîæêíæêíÞáäÂÅÇ¨¨©»»½ÂÁÃ¾¾À¾¿ÁÙÞáÛàäÚßãÚÞâÙÝáØÝáÖÛàÖÛàÕÚÞÕÚÝÓØÜ»ÁÄÎÓÕÌÒÖÉÎÒÉÊËïïïþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüàààehi444444ÇÇÈôöøóõ÷òõ÷ñôöñôöñôöðóõïòôïòôîñóíñóÁÂÄ²±³À¿ÁÁÀÂ»º¼ÜßáçëîçëîæêíäèëØÛÞ¬®°onowxy¦¦§º¹ºÂÁÃÁÀÂ¸¸¹ÐÔ×ÚßãÚÞâØÝá×ÜàÖÛàÕÚßÕÚÞÔÙÝÓØÛÒ×ÚÊÏÒ·¾ÀÖÚÝÊÐÔÅÈËßßßûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþïïïªª¬|??@222||}ðòôòõ÷ñôöñôöðóõðóõïòôîñóîñóíðòìðòàâå««¬½¼¾ÁÁÂ¼¼½ÈÊÌæêíâåèÉËÍuuvppqvvw}~~®®¯¼¼½ÂÁÃÂÁÃ½½¾ÂÄÆÙÝá×ÜáÖÛàÖÛàÕÚßÔÙÝÔÙÝÓØÛÒ×ÚÑÖÙÏÕØ¶½ÀÔÙÛÊÐÔÈÍÑÌÍÎóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÐÐÐ
+XYY333AAAÜßàñôöñôöðóõðóõïòôîñóíñóìðòìïòëîñêíð´µ·¡¡¢¸¸¹ÁÀÂÀÀÁº¹»ÅÈÊsstrrsyyz¥¥¦±°±º¹»À¿ÁÃÂÄÃÂÄÀ¿Á¹¹»ÒÖÚÖÛàÖÛßÕÚÞÔÙÝÓØÜÒ×ÚÒ×ÚÑÖÙÐÖÙÐÖÙÃÉÌ¾ÄÆÓØÛÊÐÔÅÈÊæææüýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýééérvx999222 ¡¢ñôöðóõïòôîñóîñóíðòìðòìïñëîñêíðéíðÓÖØ°°±¾¾¿ÁÀÂ»º»¨¨©
+
+ ªª«³²´º¹»ÂÁÃÊÌÎÂÁÃÂÁÃÂÁÃÂÁÃ»»¼ÆÈËÕÚßÔÙÝÔÙÝÓØÛÒ×ÚÒ×ÚÐÖÙÐÖÙÏÕØÏÕØËÑÕ³»½ÖÙÜÊÐÔÇÍÐÓÓÓ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôô»¼½JJK222]]]çéëïòôîñóíðòìðòìïñëîñêîðêíðéíðèìïãæé¥¦§¦¦§»º¼ÂÁÃ¿¾Àµ´¶§§¨  ¢¥¥¥®®¯¶¶¸¼¼½ÆÇÉÒÕ×ÚÞâÚßãÃÄÆ¼»½À¿ÁÂÁÃ¿¾À¼¼¾Ò×ÚÔÙÜÓØÛÒ×ÚÑ×ÚÐÖÙÐÖÙÏÕØÏÔØÍÓ×ÍÓ×ºÂÄÈÎÐÍÓ×ÉÏÓÆÈÉìììýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüüàààfij555444ÆÆÇîñóíðòìðòìïñëîñêíðêíðéìïèìïçëîçëîÄÇÈ´´µÀ¿ÁÂÁÃ¾½¿¹¸º·¶¸º¹ºÀÀÁÌÎÐØÜßÛàäÚßãÚßãÚÞâÉÌÏ®®¯¹¸ºÀÀÁÁÀÂ¹¹ºÉÍÏÒ×ÚÒ×ÚÑÖÙÐÖÙÐÖÙÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÈÎÒ³»½×ÛÞÊÐÔÅÉËÚÛÛúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþïïï©«¬|AAB222{||ìïðìðòìîñëîñêíðêíðèìïèìïçëîæêíæêíÜàâ««¬½¼¾ÂÁÃÂÁÃÂÁÃÆÇÉÓÖØÜàãÝâåÛàäÚßãÚÞâÚÞâØÝáÔØÜ¡¡£¬¬­¼¼½ÁÀÂ½¼¾¾¿ÁÑÖÙÐÖÙÐÖÙÏÕØÏÕØÎÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕµ½ÀÐÔÖËÐÔÉÏÒÉÊËðññþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷øøÍÍÎY[\333CCCÙÛÜëîñêîðêíðéìïèìïçëîçëîæêíåéìåéìãèê²´µ  ¡·¶·ÁÁÂÃÂÄÅÄÆÛßâÝâåÜáäÚßãÚßãÚÞâÙÝá×ÜàÖÛàÖÛà°²´ ·¶·ÁÀÂÀÀÁ¹¹»ÌÑÓÐÖÙÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÃÊÍ·¾ÀÕÚÝÊÐÔÄÇÉáááüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýççèsxy:::222 ¡¢ìïòêíðéìïèìïçëîçëîæêíåéìåéìäèëâçéÑÕÖ¯¯°¾¾¿ÃÂÄÂÁÃÐÓÖÛàäÚßãÚÞâÚÞâØÝá×ÜàÖÛàÖÛßÔÙÝÇËÎ®­®¾½¾ÂÁÃ»»¼ÃÇÉÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÉÏÓ³º½ÔØÛÊÐÔÈÎÑÍÎÎôôõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóôô¹ººLMN222^^^ãåçèìïèìïçëîæêíæêíåéìäèëãèêâçéâçéÞãä¥§¨¥¥¦º¹»ÂÁÃÂÁÃÁÁÄÙÞáÚÞâÙÝáØÝáÖÛàÖÛàÕÚÞÔÙÝÓØÛÒ×Ú¢£¤¤¤¥¹¹ºÁÀÂ¿¾ÀÆÈËÎÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔ¾ÅÇÀÆÉÐÕÙÊÐÔÅÈÉçèèýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÝÝÝhjl666666ÃÄÅèìïçëîæêíåéìåéìäèëãçêâçéáæèáæèàåçÂÅÇ³³´À¿ÁÂÁÃ¼»½ÎÒÕÙÝá×ÜàÖÛàÕÚßÕÚÞÓØÜÓØÛÒ×ÚÒ×ÚÀÃÆ²±²À¿ÁÃÃÅÌÐÔÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÇÎÑ±¸»ÖÚÝÊÐÔÆËÏÔÔÔøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþîîï§¨ª{BBC222|}}éìîæêíåéìäèëãèêâçéâçéáæèàåèßäçÞãæÖÚÝªª«¼¼½ÂÁÃ¾½¿ÀÁÃ×ÜàÖÛàÕÚÞÔÙÝÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÕØÃÈÊ¼¾ÀÅÇÉÌÐÔÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÈÏÒ¸¾Á¾ÄÇËÑÕÊÐÔ¹ÀÃÌÑÓÌÒÖÊÏÓÆÇÈíîîþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷øøËËË[]^344EEEÖØÙåéìäèëâçéâçéáæèáæèàåçßäæÝâåÝâåÛàä³µ·  ¶¶·ÁÀÂÀÀÁ¸¸ºÑÕÙÕÚÞÔÙÜÓØÛÓØÛÒ×ÚÒ×ÚÐÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔ£ª¬{ÐÔ×ÊÐÔÄÊÎºÁÃÚÞáÊÐÔÄÈÊÜÜÜúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýçççswy;;;222 ¡¢æêíâçéáæèáæèàåèßäçÞãæÝâåÜáäÛàäÚßãÍÐÓ®®¯¾¾¿ÂÁÃ»»¼ÄÆÉÓØÜÓØÛÒ×ÚÒ×ÚÑ×ÚÐÖÙÐÖÙÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔ®³µ¤«­ÊÐÒâäæÊÐÔÇÍÑ¹ÀÂäæéÊÐÔÉÏÒÉÉÊóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóôô¸¹¹MNO222___áãåáæèáæèàåçßäçÞãæÝâåÜáäÛàäÚßãÚÞâ×ÚÞ¥¦¨¤¤¥º¹»ÁÀÂ¿¾À¾¿ÁÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÌÒÖàãåèëìÑÖÚÊÐÔÂÈË¿ÅÇæèêÊÐÔÉÏÓ¼¾¿êêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúûûÛÛÛhlm666666½¾¿âçéàåçßäæÝâåÜáäÜáäÚßãÚÞâÙÝáÙÝá×Üà¿ÂÅ³²³À¿ÁÂÁÃÆÈÊÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔËÐÔËÑÕÊÐÔÉÏÓ³»½ÙÝÞÜàãÊÐÔÉÏÓ³´µäääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþîîî§¨©{DEE222wxxäèêÞãæÝâåÜáäÛàäÚßãÚÞâÙÝáØÜáÖÛàÕÚßÒ×Û±³µ¬«­¼¼½ÆÆÈÐÔ×Ò×ÚÐÖÙÐÖÙÏÕØÏÔØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÈÎÒ¶¾Á½ÄÅñóôÍÓ×ÊÐÔÃÉÌ¬¬­äääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÊÊÊ\^_444EEEÒÔÕÝâåÜáäÛàãÚßãÙÝáÙÝá×ÜàÖÛàÕÚßÔÙÝÔÙÝÒ×ÚÌÐÒÎÒÔÑÖØÑÖÙÐÖÙÏÕØÏÕØÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÉÏÓÃÊÎ¸ÀÃ±¹»ÇÍÏïñòØÜßÊÐÔÉÏÓ³³´éêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýææçsxy<<<222áåèÚßãÚÞâÙÝáØÝá×ÜàÖÛßÕÚÞÔÙÝÓØÜÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÅËÎ»ÃÅ²º½ºÀÂÑÖ×éëìêíîÔÙÜÊÐÔÉÏÓnooÂÂÃñòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóô¸¸¹
+OQQ222\\\ÝàâÚÞâÙÝá×ÜáÖÛàÕÚßÔÙÞÔÙÝÓØÜÓØÛÒ×ÚÒ×ÚÒ×ÚÐÖÙÐÖÙÏÕØÏÔØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÆÌÐ¾ÄÇ²º¼¸¿ÀËÐÑæèéëíîáåçÓØÛËÑÕÇÍÑ®²µxyzKKKÖÖÖøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÚÚÚiln667777¼½¾Ûàä×ÜàÖÛßÕÚÞÔÙÝÔÙÜÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÏÔØÍÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÊÐÔÇÍÑÀÆÊµ¼¿µ¼¾ÇÌÎáäåìîïäèêÕÚÝÌÒÖÈÎÒ´º½`abAABCCD¼»¼êêêýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþîîî¥§¨zDEF333¥¥¦àãæÖÛßÔÙÞÔÙÝÓØÜÓØÛÓØÛÒ×ÚÒ×ÚÑÖÙÐÖÙÏÕØÏÕØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕËÑÕÊÐÔÊÐÔÊÐÔÊÐÔÈÎÒÁÈËµ½Àµ¼¾ÁÇÉÞáâëíîèêìØÜßÍÓ×ÉÏÓ¹¾ÂgjkHIJ;;;FGGaab¶¶·ßààøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÈÈÉ]__\\]ÐÒÓÛßâÔÙÝÔÙÝÓØÜÓØÛÈÍÐÀÄÇÍÒÔÐÖÙÐÖÙÏÕØÏÔØÎÔ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÊÐÔÊÐÔÉÏÓÃÉÍ¸¿Â³»½½ÃÅØÜÝêìíëíîÚÞáÏÔØÊÐÓ½ÂÆ¡¥¨qstOOO===DDDZ[[www«««ÇÇÈäää÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýæææ}ÂÃÄÂÉËÎÓÕÖÛßÓØÛÓØÛÍÒÕ~
+¤¨ªÚÞáÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÉÏÓÅËÏºÂÅ³»¾¹ÀÂÓ×ØèêëìîïÝáäÐÖÙÊÐÔÀÆÊ¨¬¯|UVV>>>CCDTTUppq¥¥¦»»¼ÐÐÐâââñññúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóô·¸¸ÑÕØÊÐÓºÀÂÚÞáÓØÛÒ×ÚÎÓÕ¢¥§¹ÀÂÕ×ØÝáãÏÔØÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕËÑÕÊÐÔÅÌÏ¾ÄÇ³»½·¾ÀÍÒÓåèèïðñàäæÓØÛËÑÔÃÈÌ°µ¸
+\^_CCDCDDQQQjkk
+ µµ¶ËËÌÞÞÞìììöööüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÙÙÙ·¼¿ÎÔØ·¾ÀÔÙÜÓØÛÒ×ÚÐÖÙÙÝàçêëæéêÐÕÙÍÓ×ÍÓ×ÌÒÖÌÒÖËÑÕÈÎÒÀÇÉ´»¾´»½ÇÌÎâåæîðñäçéÔÙÜËÑÕÆÌÐ´º½cdeGGGCDDNOOddd~°°±ÆÆÇÚÚÚéééôôôûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþíîîÌÒÕÆÌÎ»ÂÄÔÙÜÐÖÙÐÖÙÏÕØÏÔØÎÓ×ÍÓ×ÍÓ×ÌÒÖÉÏÓÃÉÍ¶¾À³»½ÁÈÉÞáâïññæéë×ÜßËÑÕÇÍÑº¿ÂknoKLMDEFKLL_``yzz«««ÁÁÁÕÕÖæççòòóùúúýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÆÇÇuwx¾ÄÈÏÔ×¹ÁÃºÂÄËÑÔÏÕØÏÔØÍÓ×ÍÓ×ËÑÕÅËÏ¸ÀÃ´»½»ÁÃÛÞßíîïëíïÚÞàÍÓ×ÈÎÒ½ÃÇ£¦qsuPQRDEEIJKZ[\uuv¦¦§½½½ÑÑÑáââïïðøøøýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýýåææ£¥ÌÒÖÎÔ×¾ÅÈ²º¼ºÁÄÁÈËÂÉÌºÁÄ³»½¸¿ÁÓ×ØëííîðñÝáãÏÔØÊÏÓÁÆÊ§¬¯x{}RTUCDEGHIUUWoop¡¡¢¸·¸ÍÍÎßààíîî÷÷÷üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóô²²²uxyÃÉÍÍÓÖÐÖÙÕÙÜÒ×ØÇÍÏÉÎÐ×ÚÜæéêñòóàãæÐÖÚÊÐÔÃÉÍ­²µ
+Z\]DEFEFGPPQhii²²³ÈÈÈÜÜÜëëëõööûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúØØØopqÈÎÑÌÒÖÍÓ×ÎÔØÖÛßÛßâÚÞáÒ×ÛÊÐÔÅËÏ¶¼¿`bdGHIGHINOPbcd}}~¬¬­ÃÃÄ××ØèèèóóóúúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþíîîXYZ½ÂÆÉÏÓËÑÕËÑÕÊÐÔÇÍÑ»ÀÄhklKLMGHIKLM]^_vww§§¨¾½¾ÒÓÔåååñññùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷øøÔÔÕ{||RTU\^_|qstQRRHIJLMNYZZqqq¢¢£¹¹¹ÏÏÐáááîîî÷÷÷üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýïïïÅÅÅ~UWXPQROPQNOOMNNNOOWXYklm´³´ÊÊÊÝÝÝìííö÷÷üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüüêëëÊÊÊ z{{jkkhhhnoo®®¯ÅÅÅÙÚÚéééóôôûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüüðððÛÜÜÇÇÇ··¸²²²¶¶¶ÃÃÄÕÕÕæææòóóúúúýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/nameic.ppm
===================================================================
--- uspace/srv/console/nameic.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/nameic.ppm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,14 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+100 26
+255
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿããã»»»¤¤¤¿¿¿êêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÄÄÄ¦¦¦¢¢¢ÅÅÅððñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËË___444222222222222222666rrsÞÞÞÿÿÿÿÿÿÿÿÿññò;;;222222222222222999òòòÿÿÿÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯¯°888222222222222222222222222222AAAÈÈÈÿÿÿïïïbbb222222222222222222222222222VVWïïïÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖ;;;222222222222222222222222222222222UUUììì222222222222222222222222222222222~~~ÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzz222222222222222IIIeef???222222222222222NNN222222222222???hhhLLL222222222222444ççè~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööBBB222222222222VVVëëëÿÿÿÔÔÔAAA222222222222AAA444222222222CCCàááÿÿÿñññWWW222222222333®®®~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÞÞ;;;222222222222ÿÿÿÿÿÿýýýaaa222222222222222222222222222\\\ÿÿÿÿÿÿþþþ222222222222
+
+
+~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýààà¿¿¿´´´ÀÀÀßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëëÈÈÈ´´´ºººÔÔÕúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÇÇÇ´´´¿¿¿ÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222222222222222222GGGëëëÿÿÿÿÿÿ£££222222222222ttt~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿÿÿÿúúú°°±PPP222222222222333\\\ÑÑÑÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿÿÿÿÏÏÏggg666222222222222GHH¬¬¬ûûûÿÿÿÿÿÿâââMMMNNN¤¤¤ùùú;;;222222222222WXXËËËÿÿÿÿÿÿÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222222222222222222222uuuôôôÿÿÿòòòãããããããããäääëëë~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿôôôzz{222222222222222222222222777¼¼¼ÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿ§§§999222222222222222222222444ùùùÿÿÿÞÞÞ222222222222222222222222222555ÄÄÄÿÿÿÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222BBBHHH222222222222222YYYÇÇÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿúúú222222BBBÛÛÛãããÏÏÏ
+
+
+5552229::ãããÿÿÿÿÿÿVVV222IIIòòòÿÿÿ¶¶¶888222666ÏÏÏäääÙÙÙ  ¡EEE222555ªªªÿÿÿÞÞÞ222222CCD222KKK¨¨©ÞÞÞãããÂÃÃ]]]222222RRRúúúÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222OOOooo222222222222222222555wwwçççÿÿÿÿÿÿÿÿÿÿÿÿ~~~222222QQQhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhEEE222222«««ÿÿÿÆÆÆ666222NNNÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿþþþ­¬­222222þþþÿÿÿVVV222IIIòòòïïïLLL222999µµµþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖFFF222RRRîîîÞÞÞ222222222WWWìììÿÿÿÿÿÿÿÿÿÿÿÿóóóFFF222222ÕÕÕÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRÓÓÓKKK222222222222222222222===üüüÿÿÿÿÿÿ~~~222222222222222222222222222222222222222222222222222«««ûûûuuu222<<<ÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûû__`222899óóóÿÿÿVVV222IIIòòò¬¬¬444222ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ222555¸¸¸ÞÞÞ222222:::ÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ222222²²²ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÔÔÔPPP222222222222222222222333nnnùùùÿÿÿ~~~222222222222222222222222222222222222222222222222222«««æææKKK222[[[úúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§¨¨222222¾¾¾ÿÿÿVVV222IIIòòòppp222999ÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚ>>>222ÞÞÞ222222SSSúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°°°222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÿÿÿìììzzz222222222222222222222333ÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ËËË222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÊÊ222222ÿÿÿVVV222IIIêêêEEE222WWWðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêQQQ222]]]ÞÞÞ222222wwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÿÿÿÿÿÿýýýÁÁÁRRR222222222222222222444ááá~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««³³³222222222222222222222222222222222222222222~~~þþþVVV222IIIÖÖÖ@@@222222222222222222222222222222222222222NNNÎÎÎ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222RRRïïïÿÿÿÿÿÿÿÿÿÿÿÿõõõ777222222222222222~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««¥¥¥222222222222222222222222222222222222222222zzzþþþVVV222IIIËËË===222222222222222222222222222222222222222MMMÌÌÌ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222BBB¤¤¤´´´´´´´´´ÚÚÚÿÿÿþþþÆÆÆ===222222222222{{{~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««¨¨¨222222tttÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏàààÿÿÿVVV222IIIÎÎÎ>>>222PPPÄÄÄÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÕÕÕÙÙÙ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÕÕÕ999222222222222±±±ÿÿÿÿÿÿÿÿÿxxx222222222222222222222222222ÿÿÿÿÿÿþþþ222222222222iii~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÁÁÁ222222|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVV222IIIáááCCC222PPPíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÞÞÞ;;;222222222222£££ÿÿÿÿÿÿÿÿÿmmm222222222222222222222222222ÿÿÿÿÿÿÿÿÿ£££222222222222iii~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ßßßAAA222SSSøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏ}}}}}}ÊÊÊÿÿÿVVV222IIIòòò___222555×××ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëë}}}¢¢¢ÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ööö>>>222222222222tttûûûÿÿÿîîïQQQ222222222222222222222222222pqqÿÿÿÿÿÿüüü222222222222~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««øøøjij222888¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüülll222222áááÿÿÿVVV222IIIòòò  ¡333222ûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§¨¨222222£££ÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿiii222222222222777ÌÌÌ555222222222222\\\222222222222999ÎÎÎ¤¤¤;;;222222222333®®®~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÃÃÃ666222IIIÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿøøø222222vvvþþþÿÿÿVVV222IIIòòòìììKKK222677¬¬¬ûûûÿÿÿÿÿÿÿÿÿýýýºººAAA222OOOçççÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿ¬¬¬444222222222222222222222222222222222===£££:::222222222222222222222222222222222;;;îîï~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿûûû222222777www©©©³³³TTT222222HHHçççÿÿÿÿÿÿVVV222IIIòòòÿÿÿ¿¿¿:::222222aaa´´´§§§kkl555222;;;¶¶¶ÿÿÿÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿóóó\\\222222222222222222222222222222222
+úúú222222222222222222222222222222333 ÿÿÿ~~~222222©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}222222«««ÿÿÿÿÿÿøøø777222222222222222222222TTTáááÿÿÿÿÿÿÿÿÿVVV222IIIòòòÿÿÿÿÿÿ»»¼DDD222222222222222222222BBBµµµÿÿÿÿÿÿÞÞÞ222222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´222222¬¬¬ÿÿÿÿÿÿæææbbb333222222222222222222222444~~ôôôÿÿÿ÷÷÷444222222222222222222222444ÿÿÿÿÿÿ¿¿¿ÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¾¾ÕÕÕÿÿÿÿÿÿÿÿÿþþþ×ØØ
+
+SSS555333EEEeef­­­ùùùÿÿÿÿÿÿÿÿÿÿÿÿ«««¤¤¤ùùùÿÿÿÿÿÿÿÿÿëëë__`;;;222===YYZèèèÿÿÿÿÿÿÿÿÿîîîÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙÕÕÕÿÿÿÿÿÿÿÿÿüüüÁÁÁzzzTUU666222:::XYYÐÐÐýýýÿÿÿÿÿÿÿÿÿþþþÕÕÕZZ[<<<222888[[[ÝÝÝÿÿÿÿÿÿÿÿÿ
Index: uspace/srv/console/screenbuffer.c
===================================================================
--- uspace/srv/console/screenbuffer.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/screenbuffer.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup console
+ * @{ 
+ */
+/** @file
+ */
+
+#include <screenbuffer.h>
+#include <malloc.h>
+#include <unistd.h>
+
+/** Store one character to screenbuffer. Its position is determined by
+ * scr->position_x and scr->position_y.
+ *
+ * @param scr	screenbuffer
+ * @param c	stored character
+ */
+void screenbuffer_putchar(screenbuffer_t *scr, char c) 
+{
+	keyfield_t *field;
+	
+	field = get_field_at(scr, scr->position_x, scr->position_y);
+
+	field->character = c;
+	field->style = scr->style;
+}
+
+/** Initilize screenbuffer. Allocate space for screen content in accordance to given size.
+ * @param scr		initialized screenbuffer
+ * @param size_x	width in characters		
+ * @param size_y	height in characters
+ * @return pointer to screenbuffer (same as scr parameter) or NULL
+ */
+screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, int size_x, int size_y) 
+{
+	scr->buffer = (keyfield_t *) malloc(sizeof(keyfield_t) * size_x * size_y);
+	if (!scr->buffer) {
+		return NULL;
+	}
+	
+	scr->size_x = size_x;
+	scr->size_y = size_y;
+	scr->style.fg_color = DEFAULT_FOREGROUND;
+	scr->style.bg_color = DEFAULT_BACKGROUND;
+	scr->is_cursor_visible = 1;
+	
+	screenbuffer_clear(scr);
+	
+	return scr;
+}
+
+/** Clear screenbuffer. 
+ * @param scr screenbuffer
+ */
+void screenbuffer_clear(screenbuffer_t *scr)
+{
+	unsigned int i;
+	
+	for (i = 0; i < (scr->size_x * scr->size_y); i++) {
+		scr->buffer[i].character = ' ';
+		scr->buffer[i].style = scr->style;
+	}
+
+	scr->top_line = 0;
+	scr->position_y = 0;
+	scr->position_x = 0;
+}
+
+/** Clear one buffer line.
+ * @param scr
+ * @param line One buffer line (not a screen line!)
+ */
+void screenbuffer_clear_line(screenbuffer_t *scr, unsigned int line)
+{
+	unsigned int i;
+	
+	for (i = 0; i < scr->size_x; i++) {
+		scr->buffer[i + line * scr->size_x].character = ' ';
+		scr->buffer[i + line * scr->size_x].style = scr->style;
+	}
+}
+
+/** Copy content buffer from screenbuffer to given memory.
+ * @param scr	source screenbuffer
+ * @param dest  destination
+ */
+void screenbuffer_copy_buffer(screenbuffer_t *scr, keyfield_t *dest) 
+{
+	unsigned int i;
+	
+	for (i = 0; i < scr->size_x * scr->size_y; i++) {
+		dest[i] = scr->buffer[i];
+	}
+}
+
+/** Set new cursor position in screenbuffer.
+ * @param scr
+ * @param x
+ * @param y
+ */
+void screenbuffer_goto(screenbuffer_t *scr, unsigned int x, unsigned int y)
+{
+	scr->position_x = x % scr->size_x;
+	scr->position_y = y % scr->size_y;
+}
+
+/** Set new style.
+ * @param scr
+ * @param fg_color
+ * @param bg_color
+ */
+void screenbuffer_set_style(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color)
+{
+	scr->style.fg_color = fg_color;
+	scr->style.bg_color = bg_color;
+}
+
+ 
+/** @}
+ */
Index: uspace/srv/console/screenbuffer.h
===================================================================
--- uspace/srv/console/screenbuffer.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/console/screenbuffer.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup console
+ * @{ 
+ */
+/** @file
+ */
+
+#ifndef __SCREENBUFFER_H__
+#define __SCREENBUFFER_H__
+
+
+#define DEFAULT_FOREGROUND 0x0	/**< default console foreground color */
+#define DEFAULT_BACKGROUND 0xf0f0f0	/**< default console background color */
+
+typedef struct {
+	unsigned int bg_color;		/**< background color */
+	unsigned int fg_color;		/**< foreground color */
+} style_t;
+
+/** One field on screen. It contain one character and its attributes. */
+typedef struct {
+	char character;			/**< Character itself */
+	style_t style;			/**< Character`s attributes */
+} keyfield_t;
+
+/** Structure for buffering state of one virtual console.
+ */
+typedef struct {
+	keyfield_t *buffer;			/**< Screen content - characters and its style. Used as cyclyc buffer. */
+	unsigned int size_x, size_y;		/**< Number of columns and rows */
+	unsigned int position_x, position_y;	/**< Coordinates of last printed character for determining cursor position */
+	style_t style;				/**< Current style */
+	unsigned int top_line;			/**< Points to buffer[][] line that will be printed at screen as the first line */
+	unsigned char is_cursor_visible;	/**< Cursor state - default is visible */
+} screenbuffer_t;
+
+/** Returns keyfield for position on screen. Screenbuffer->buffer is cyclic buffer so we must couted in index of the topmost line.
+ * @param scr	screenbuffer
+ * @param x	position on screen
+ * @param y	position on screen
+ * @return	keyfield structure with character and its attributes on x,y
+ */
+static inline keyfield_t *get_field_at(screenbuffer_t *scr, unsigned int x, unsigned int y) 
+{
+	return scr->buffer + x + ((y + scr->top_line) % scr->size_y) * scr->size_x;
+}
+
+/** Compares two styles.
+ * @param s1 first style
+ * @param s2 second style
+ * @return nonzero on equality
+ */
+static inline int style_same(style_t s1, style_t s2)
+{
+	return s1.fg_color == s2.fg_color && s1.bg_color == s2.bg_color;
+}
+
+
+void screenbuffer_putchar(screenbuffer_t *scr, char c);
+screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, int size_x, int size_y);
+
+void screenbuffer_clear(screenbuffer_t *scr);
+void screenbuffer_clear_line(screenbuffer_t *scr, unsigned int line);
+void screenbuffer_copy_buffer(screenbuffer_t *scr, keyfield_t *dest);
+void screenbuffer_goto(screenbuffer_t *scr, unsigned int x, unsigned int y);
+void screenbuffer_set_style(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color);
+
+#endif
+
+ 
+/** @}
+ */
+
Index: uspace/srv/fb/Makefile
===================================================================
--- uspace/srv/fb/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,97 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+CFLAGS += -I../libipc/include
+
+LIBS =  $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = fb
+SOURCES = \
+	main.c \
+	sysio.c \
+	ppm.c
+
+ifneq ($(ARCH), ia64)
+	SOURCES += fb.c \
+		font-8x16.c
+	CFLAGS += -DFB_ENABLED
+endif
+
+ifeq ($(ARCH), ia32)
+	SOURCES += ega.c
+	CFLAGS += -DEGA_ENABLED
+endif
+ifeq ($(ARCH), amd64)
+	SOURCES += ega.c
+	CFLAGS += -DEGA_ENABLED
+endif
+ifeq ($(ARCH), mips32)
+	CFLAGS += -DFB_INVERT_ENDIAN
+endif
+
+CFLAGS += -D$(ARCH)
+
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/srv/fb/ega.c
===================================================================
--- uspace/srv/fb/ega.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/ega.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,331 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @defgroup egafb EGA framebuffer
+ * @brief	HelenOS EGA framebuffer.
+ * @ingroup fbs
+ * @{
+ */ 
+/** @file
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <align.h>
+#include <async.h>
+#include <ipc/ipc.h>
+#include <errno.h>
+#include <stdio.h>
+#include <ddi.h>
+#include <sysinfo.h>
+#include <as.h>
+#include <ipc/fb.h>
+#include <ipc/ipc.h>
+#include <ipc/ns.h>
+#include <ipc/services.h>
+#include <libarch/ddi.h>
+
+#include "ega.h"
+#include "../console/screenbuffer.h"
+#include "main.h"
+
+#define MAX_SAVED_SCREENS 256
+typedef struct saved_screen {
+	short *data;
+} saved_screen;
+
+saved_screen saved_screens[MAX_SAVED_SCREENS];
+
+#define EGA_IO_ADDRESS 0x3d4
+#define EGA_IO_SIZE 2
+
+#define NORMAL_COLOR       0x0f
+#define INVERTED_COLOR     0xf0
+
+#define EGA_STYLE(fg,bg) ((fg) > (bg) ? NORMAL_COLOR : INVERTED_COLOR)
+
+/* Allow only 1 connection */
+static int client_connected = 0;
+
+static unsigned int scr_width;
+static unsigned int scr_height;
+static char *scr_addr;
+
+static unsigned int style = NORMAL_COLOR;
+
+static void clrscr(void)
+{
+	int i;
+	
+	for (i = 0; i < scr_width*scr_height; i++) {
+		scr_addr[i * 2] = ' ';
+		scr_addr[i * 2 + 1] = style;
+	}
+}
+
+static void cursor_goto(unsigned int row, unsigned int col)
+{
+	int ega_cursor;
+
+	ega_cursor = col + scr_width * row;
+	
+	outb(EGA_IO_ADDRESS, 0xe);
+	outb(EGA_IO_ADDRESS + 1, (ega_cursor >> 8) & 0xff);
+	outb(EGA_IO_ADDRESS, 0xf);
+	outb(EGA_IO_ADDRESS + 1, ega_cursor & 0xff);
+}
+
+static void cursor_disable(void)
+{
+	uint8_t stat;
+
+	outb(EGA_IO_ADDRESS, 0xa);
+	stat=inb(EGA_IO_ADDRESS + 1);
+	outb(EGA_IO_ADDRESS, 0xa);
+	outb(EGA_IO_ADDRESS + 1, stat | (1 << 5));
+}
+
+static void cursor_enable(void)
+{
+	uint8_t stat;
+
+	outb(EGA_IO_ADDRESS, 0xa);
+	stat=inb(EGA_IO_ADDRESS + 1);
+	outb(EGA_IO_ADDRESS, 0xa);
+	outb(EGA_IO_ADDRESS + 1, stat & (~(1 << 5)));
+}
+
+static void scroll(int rows)
+{
+	int i;
+	if (rows > 0) {
+		memcpy(scr_addr, ((char *) scr_addr) + rows * scr_width * 2,
+			scr_width * scr_height * 2 - rows * scr_width * 2);
+		for (i = 0; i < rows * scr_width; i++)
+			(((short *) scr_addr) + scr_width * scr_height - rows *
+				scr_width)[i] = ((style << 8) + ' ');
+	} else if (rows < 0) {
+		memcpy(((char *)scr_addr) - rows * scr_width * 2, scr_addr,
+			scr_width * scr_height * 2 + rows * scr_width * 2);
+		for (i = 0; i < -rows * scr_width; i++)
+			((short *)scr_addr)[i] = ((style << 8 ) + ' ');
+	}
+}
+
+static void printchar(char c, unsigned int row, unsigned int col)
+{
+	scr_addr[(row * scr_width + col) * 2] = c;
+	scr_addr[(row * scr_width + col) * 2 + 1] = style;
+	
+	cursor_goto(row, col + 1);
+}
+
+static void draw_text_data(keyfield_t *data)
+{
+	int i;
+
+	for (i = 0; i < scr_width * scr_height; i++) {
+		scr_addr[i * 2] = data[i].character;
+		scr_addr[i * 2 + 1] = EGA_STYLE(data[i].style.fg_color,
+			data[i].style.bg_color);
+	}
+}
+
+static int save_screen(void)
+{
+	int i;
+
+	for (i=0; (i < MAX_SAVED_SCREENS) && (saved_screens[i].data); i++)
+		;
+	if (i == MAX_SAVED_SCREENS) 
+		return EINVAL;
+	if (!(saved_screens[i].data = malloc(2 * scr_width * scr_height))) 
+		return ENOMEM;
+	memcpy(saved_screens[i].data, scr_addr, 2 * scr_width * scr_height);
+
+	return i;
+}
+
+static int print_screen(int i)
+{
+	if (saved_screens[i].data)
+		memcpy(scr_addr, saved_screens[i].data, 2 * scr_width *
+			scr_height);
+	else
+		return EINVAL;
+	return i;
+}
+
+
+static void ega_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	int retval;
+	ipc_callid_t callid;
+	ipc_call_t call;
+	char c;
+	unsigned int row, col;
+	int bgcolor,fgcolor;
+	keyfield_t *interbuf = NULL;
+	size_t intersize = 0;
+	int i;
+
+	if (client_connected) {
+		ipc_answer_fast(iid, ELIMIT, 0,0);
+		return;
+	}
+	client_connected = 1;
+	ipc_answer_fast(iid, 0, 0, 0); /* Accept connection */
+
+	while (1) {
+		callid = async_get_call(&call);
+ 		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			client_connected = 0;
+			ipc_answer_fast(callid, 0, 0, 0);
+			return; /* Exit thread */
+		case IPC_M_AS_AREA_SEND:
+			/* We accept one area for data interchange */
+			intersize = IPC_GET_ARG2(call);
+			if (intersize >= scr_width * scr_height *
+				sizeof(*interbuf)) {
+				receive_comm_area(callid, &call, (void *)
+					&interbuf);
+				continue;
+			}
+			retval = EINVAL;
+			break;
+		case FB_DRAW_TEXT_DATA:
+			if (!interbuf) {
+				retval = EINVAL;
+				break;
+			}
+			draw_text_data(interbuf);
+			retval = 0;
+			break;
+		case FB_GET_CSIZE:
+			ipc_answer_fast(callid, 0, scr_height, scr_width);
+			continue;
+		case FB_CLEAR:
+			clrscr();
+			retval = 0;
+			break;
+		case FB_PUTCHAR:
+			c = IPC_GET_ARG1(call);
+			row = IPC_GET_ARG2(call);
+			col = IPC_GET_ARG3(call);
+			if (col >= scr_width || row >= scr_height) {
+				retval = EINVAL;
+				break;
+			}
+			printchar(c, row, col);
+			retval = 0;
+			break;
+ 		case FB_CURSOR_GOTO:
+			row = IPC_GET_ARG1(call);
+			col = IPC_GET_ARG2(call);
+			if (row >= scr_height || col >= scr_width) {
+				retval = EINVAL;
+				break;
+			}
+			cursor_goto(row, col);
+ 			retval = 0;
+ 			break;
+		case FB_SCROLL:
+			i = IPC_GET_ARG1(call);
+			if (i > scr_height || i < -((int) scr_height)) {
+				retval = EINVAL;
+				break;
+			}
+			scroll(i);
+			retval = 0;
+			break;
+		case FB_CURSOR_VISIBILITY:
+			if(IPC_GET_ARG1(call))
+				cursor_enable();
+			else
+				cursor_disable();
+			retval = 0;
+			break;
+		case FB_SET_STYLE:
+			fgcolor = IPC_GET_ARG1(call);
+			bgcolor = IPC_GET_ARG2(call);
+			style = EGA_STYLE(fgcolor, bgcolor);
+			retval = 0;
+			break;
+		case FB_VP_DRAW_PIXMAP:
+			i = IPC_GET_ARG2(call);
+			retval = print_screen(i);
+			break;
+		case FB_VP2PIXMAP:
+			retval = save_screen();
+			break;
+		case FB_DROP_PIXMAP:
+			i = IPC_GET_ARG1(call);
+			if (i >= MAX_SAVED_SCREENS) {
+				retval = EINVAL;
+				break;
+			}
+			if (saved_screens[i].data) {
+				free(saved_screens[i].data);
+				saved_screens[i].data = NULL;
+			}
+			retval = 0;
+			break;
+
+		default:
+			retval = ENOENT;
+		}
+		ipc_answer_fast(callid, retval, 0, 0);
+	}
+}
+
+int ega_init(void)
+{
+	void *ega_ph_addr;
+	size_t sz;
+
+	ega_ph_addr = (void *) sysinfo_value("fb.address.physical");
+	scr_width = sysinfo_value("fb.width");
+	scr_height = sysinfo_value("fb.height");
+	iospace_enable(task_get_id(), (void *) EGA_IO_ADDRESS, 2);
+
+	sz = scr_width * scr_height * 2;
+	scr_addr = as_get_mappable_page(sz);
+
+	physmem_map(ega_ph_addr, scr_addr, ALIGN_UP(sz, PAGE_SIZE) >>
+		PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE);
+
+	async_set_client_connection(ega_client_connection);
+
+	return 0;
+}
+
+
+/** 
+ * @}
+ */
Index: uspace/srv/fb/ega.h
===================================================================
--- uspace/srv/fb/ega.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/ega.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup egafb
+ * @brief	HelenOS EGA framebuffer.
+ * @ingroup fbs
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef FB_EGA_H_
+#define FB_EGA_H_
+
+extern int ega_init(void);
+
+#endif
+
+/** @}
+ */
+
Index: uspace/srv/fb/fb.c
===================================================================
--- uspace/srv/fb/fb.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/fb.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1389 @@
+/*
+ * Copyright (c) 2006 Jakub Vana
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @defgroup fb Graphical framebuffer
+ * @brief	HelenOS graphical framebuffer.
+ * @ingroup fbs
+ * @{
+ */ 
+
+/** @file
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <ddi.h>
+#include <sysinfo.h>
+#include <align.h>
+#include <as.h>
+#include <ipc/fb.h>
+#include <ipc/ipc.h>
+#include <ipc/ns.h>
+#include <ipc/services.h>
+#include <kernel/errno.h>
+#include <kernel/genarch/fb/visuals.h>
+#include <async.h>
+#include <bool.h>
+
+#include "font-8x16.h"
+#include "fb.h"
+#include "main.h"
+#include "../console/screenbuffer.h"
+#include "ppm.h"
+
+#include "pointer.xbm"
+#include "pointer_mask.xbm"
+
+#define DEFAULT_BGCOLOR                0xf0f0f0
+#define DEFAULT_FGCOLOR                0x0
+
+/***************************************************************/
+/* Pixel specific fuctions */
+
+typedef void (*conv2scr_fn_t)(void *, int);
+typedef int (*conv2rgb_fn_t)(void *);
+
+struct {
+	uint8_t *fbaddress;
+
+	unsigned int xres;
+	unsigned int yres;
+	unsigned int scanline;
+	unsigned int pixelbytes;
+	unsigned int invert_colors;
+
+	conv2scr_fn_t rgb2scr;
+	conv2rgb_fn_t scr2rgb;
+} screen;
+
+typedef struct {
+	int initialized;
+	unsigned int x, y;
+	unsigned int width, height;
+
+	/* Text support in window */
+	unsigned int rows, cols;
+	/* Style for text printing */
+	style_t style;
+	/* Auto-cursor position */
+	int cursor_active, cur_col, cur_row;
+	int cursor_shown;
+	/* Double buffering */
+	uint8_t *dbdata;
+	unsigned int dboffset;
+	unsigned int paused;
+} viewport_t;
+
+#define MAX_ANIM_LEN    8
+#define MAX_ANIMATIONS  4
+typedef struct {
+	int initialized;
+	int enabled;
+	unsigned int vp;
+
+	unsigned int pos;
+	unsigned int animlen;
+	unsigned int pixmaps[MAX_ANIM_LEN];
+} animation_t;
+static animation_t animations[MAX_ANIMATIONS];
+static int anims_enabled;
+
+/** Maximum number of saved pixmaps 
+ * Pixmap is a saved rectangle
+ */
+#define MAX_PIXMAPS        256
+typedef struct {
+	unsigned int width;
+	unsigned int height;
+	uint8_t *data;
+} pixmap_t;
+static pixmap_t pixmaps[MAX_PIXMAPS];
+
+/* Viewport is a rectangular area on the screen */
+#define MAX_VIEWPORTS 128
+static viewport_t viewports[128];
+
+/* Allow only 1 connection */
+static int client_connected = 0;
+
+#define RED(x, bits)	((x >> (16 + 8 - bits)) & ((1 << bits) - 1))
+#define GREEN(x, bits)	((x >> (8 + 8 - bits)) & ((1 << bits) - 1))
+#define BLUE(x, bits)	((x >> (8 - bits)) & ((1 << bits) - 1))
+
+#define COL_WIDTH	8
+#define ROW_BYTES	(screen.scanline * FONT_SCANLINES)
+
+#define POINTPOS(x, y)	((y) * screen.scanline + (x) * screen.pixelbytes)
+
+static inline int COLOR(int color)
+{
+	return screen.invert_colors ? ~color : color;
+}
+
+/* Conversion routines between different color representations */
+static void
+rgb_byte0888(void *dst, int rgb)
+{
+	*(int *)dst = rgb;
+}
+
+static int
+byte0888_rgb(void *src)
+{
+	return (*(int *)src) & 0xffffff;
+}
+
+static void
+bgr_byte0888(void *dst, int rgb)
+{
+	*((uint32_t *) dst) = BLUE(rgb, 8) << 16 | GREEN(rgb, 8) << 8 |
+		RED(rgb, 8);
+}
+
+static int
+byte0888_bgr(void *src)
+{
+	int color = *(uint32_t *)(src);
+	return ((color & 0xff) << 16) | (((color >> 8) & 0xff) << 8) |
+		((color >> 16) & 0xff);
+}
+
+static void
+rgb_byte888(void *dst, int rgb)
+{
+	uint8_t *scr = dst;
+#if defined(FB_INVERT_ENDIAN)
+	scr[0] = RED(rgb, 8);
+	scr[1] = GREEN(rgb, 8);
+	scr[2] = BLUE(rgb, 8);
+#else
+	scr[2] = RED(rgb, 8);
+	scr[1] = GREEN(rgb, 8);
+	scr[0] = BLUE(rgb, 8);
+#endif
+}
+
+static int
+byte888_rgb(void *src)
+{
+	uint8_t *scr = src;
+#if defined(FB_INVERT_ENDIAN)
+	return scr[0] << 16 | scr[1] << 8 | scr[2];
+#else
+	return scr[2] << 16 | scr[1] << 8 | scr[0];
+#endif	
+}
+
+/**  16-bit depth (5:5:5) */
+static void
+rgb_byte555(void *dst, int rgb)
+{
+	/* 5-bit, 5-bits, 5-bits */ 
+	*((uint16_t *)(dst)) = RED(rgb, 5) << 10 | GREEN(rgb, 5) << 5 |
+		BLUE(rgb, 5);
+}
+
+/** 16-bit depth (5:5:5) */
+static int
+byte555_rgb(void *src)
+{
+	int color = *(uint16_t *)(src);
+	return (((color >> 10) & 0x1f) << (16 + 3)) |
+		(((color >> 5) & 0x1f) << (8 + 3)) | ((color & 0x1f) << 3);
+}
+
+/**  16-bit depth (5:6:5) */
+static void
+rgb_byte565(void *dst, int rgb)
+{
+	/* 5-bit, 6-bits, 5-bits */ 
+	*((uint16_t *)(dst)) = RED(rgb, 5) << 11 | GREEN(rgb, 6) << 5 |
+		BLUE(rgb, 5);
+}
+
+/** 16-bit depth (5:6:5) */
+static int
+byte565_rgb(void *src)
+{
+	int color = *(uint16_t *)(src);
+	return (((color >> 11) & 0x1f) << (16 + 3)) |
+		(((color >> 5) & 0x3f) << (8 + 2)) | ((color & 0x1f) << 3);
+}
+
+/** Put pixel - 8-bit depth (3:2:3) */
+static void
+rgb_byte8(void *dst, int rgb)
+{
+	*(uint8_t *)dst = RED(rgb, 3) << 5 | GREEN(rgb, 2) << 3 | BLUE(rgb, 3);
+}
+
+/** Return pixel color - 8-bit depth (3:2:3) */
+static int
+byte8_rgb(void *src)
+{
+	int color = *(uint8_t *)src;
+	return (((color >> 5) & 0x7) << (16 + 5)) |
+		(((color >> 3) & 0x3) << (8 + 6)) | ((color & 0x7) << 5);
+}
+
+/** Put pixel into viewport 
+ *
+ * @param vport Viewport identification
+ * @param x X coord relative to viewport
+ * @param y Y coord relative to viewport
+ * @param color RGB color 
+ */
+static void
+putpixel(viewport_t *vport, unsigned int x, unsigned int y, int color)
+{
+	int dx = vport->x + x;
+	int dy = vport->y + y;
+
+	if (! (vport->paused && vport->dbdata))
+		(*screen.rgb2scr)(&screen.fbaddress[POINTPOS(dx,dy)],
+			COLOR(color));
+
+	if (vport->dbdata) {
+		int dline = (y + vport->dboffset) % vport->height;
+		int doffset = screen.pixelbytes * (dline * vport->width + x);
+		(*screen.rgb2scr)(&vport->dbdata[doffset], COLOR(color));
+	}
+}
+
+/** Get pixel from viewport */
+static int
+getpixel(viewport_t *vport, unsigned int x, unsigned int y)
+{
+	int dx = vport->x + x;
+	int dy = vport->y + y;
+
+	return COLOR((*screen.scr2rgb)(&screen.fbaddress[POINTPOS(dx, dy)]));
+}
+
+static inline void
+putpixel_mem(char *mem, unsigned int x, unsigned int y, int color)
+{
+	(*screen.rgb2scr)(&mem[POINTPOS(x,y)], COLOR(color));
+}
+
+static void
+draw_rectangle(viewport_t *vport, unsigned int sx, unsigned int sy,
+	unsigned int width, unsigned int height, int color)
+{
+	unsigned int x, y;
+	static void *tmpline;
+
+	if (!tmpline)
+		tmpline = malloc(screen.scanline*screen.pixelbytes);
+
+	/* Clear first line */
+	for (x = 0; x < width; x++)
+		putpixel_mem(tmpline, x, 0, color);
+
+	if (!vport->paused) {
+		/* Recompute to screen coords */
+		sx += vport->x;
+		sy += vport->y;
+		/* Copy the rest */
+		for (y = sy;y < sy+height; y++)
+			memcpy(&screen.fbaddress[POINTPOS(sx,y)], tmpline, 
+			       screen.pixelbytes * width);
+	}
+	if (vport->dbdata) {
+		for (y = sy; y < sy + height; y++) {
+			int rline = (y + vport->dboffset) % vport->height;
+			int rpos = (rline * vport->width + sx) *
+				screen.pixelbytes;
+			memcpy(&vport->dbdata[rpos], tmpline,
+				screen.pixelbytes * width);
+		}
+	}
+
+}
+
+/** Fill viewport with background color */
+static void
+clear_port(viewport_t *vport)
+{
+	draw_rectangle(vport, 0, 0, vport->width, vport->height,
+		vport->style.bg_color);
+}
+
+/** Scroll unbuffered viewport up/down
+ *
+ * @param vport Viewport to scroll
+ * @param lines Positive number - scroll up, negative - scroll down
+ */
+static void
+scroll_port_nodb(viewport_t *vport, int lines)
+{
+	int y;
+
+	if (lines > 0) {
+		for (y = vport->y; y < vport->y+vport->height - lines; y++)
+			memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
+			       &screen.fbaddress[POINTPOS(vport->x,y + lines)],
+			       screen.pixelbytes * vport->width);
+		draw_rectangle(vport, 0, vport->height - lines, vport->width,
+			lines, vport->style.bg_color);
+	} else if (lines < 0) {
+		lines = -lines;
+		for (y = vport->y + vport->height-1; y >= vport->y + lines;
+			 y--)
+			memcpy(&screen.fbaddress[POINTPOS(vport->x,y)],
+			       &screen.fbaddress[POINTPOS(vport->x,y - lines)],
+			       screen.pixelbytes * vport->width);
+		draw_rectangle(vport, 0, 0, vport->width, lines,
+			vport->style.bg_color);
+	}
+}
+
+/** Refresh given viewport from double buffer */
+static void
+refresh_viewport_db(viewport_t *vport)
+{
+	unsigned int y, srcy, srcoff, dsty, dstx;
+
+	for (y = 0; y < vport->height; y++) {
+		srcy = (y + vport->dboffset) % vport->height;
+		srcoff = (vport->width * srcy) * screen.pixelbytes;
+
+		dstx = vport->x;
+		dsty = vport->y + y;
+
+		memcpy(&screen.fbaddress[POINTPOS(dstx,dsty)],
+		       &vport->dbdata[srcoff], 
+		       vport->width*screen.pixelbytes);
+	}
+}
+
+/** Scroll viewport that has double buffering enabled */
+static void
+scroll_port_db(viewport_t *vport, int lines)
+{
+	++vport->paused;
+	if (lines > 0) {
+		draw_rectangle(vport, 0, 0, vport->width, lines,
+			       vport->style.bg_color);
+		vport->dboffset += lines;
+		vport->dboffset %= vport->height;
+	} else if (lines < 0) {
+		lines = -lines;
+		draw_rectangle(vport, 0, vport->height-lines, 
+			       vport->width, lines,
+			       vport->style.bg_color);
+
+		if (vport->dboffset < lines)
+			vport->dboffset += vport->height;
+		vport->dboffset -= lines;
+	}
+	
+	--vport->paused;
+	
+	refresh_viewport_db(vport);
+}
+
+/** Scrolls viewport given number of lines */
+static void
+scroll_port(viewport_t *vport, int lines)
+{
+	if (vport->dbdata)
+		scroll_port_db(vport, lines);
+	else
+		scroll_port_nodb(vport, lines);
+	
+}
+
+static void
+invert_pixel(viewport_t *vport, unsigned int x, unsigned int y)
+{
+	putpixel(vport, x, y, ~getpixel(vport, x, y));
+}
+
+
+/***************************************************************/
+/* Character-console functions */
+
+/** Draw character at given position
+ *
+ * @param vport Viewport where the character is printed
+ * @param sx Coordinates of top-left of the character
+ * @param sy Coordinates of top-left of the character
+ * @param style Color of the character
+ * @param transparent If false, print background color
+ */
+static void
+draw_glyph(viewport_t *vport,uint8_t glyph, unsigned int sx,
+	 unsigned int sy, style_t style, int transparent)
+{
+	int i;
+	unsigned int y;
+	unsigned int glline;
+
+	for (y = 0; y < FONT_SCANLINES; y++) {
+		glline = fb_font[glyph * FONT_SCANLINES + y];
+		for (i = 0; i < 8; i++) {
+			if (glline & (1 << (7 - i)))
+				putpixel(vport, sx + i, sy + y,
+					style.fg_color);
+			else if (!transparent)
+				putpixel(vport, sx + i, sy + y,
+					style.bg_color);
+		}
+	}
+}
+
+/** Invert character at given position */
+static void
+invert_char(viewport_t *vport,unsigned int row, unsigned int col)
+{
+	unsigned int x;
+	unsigned int y;
+
+	for (x = 0; x < COL_WIDTH; x++)
+		for (y = 0; y < FONT_SCANLINES; y++)
+			invert_pixel(vport, col * COL_WIDTH + x, row *
+				FONT_SCANLINES + y);
+}
+
+/***************************************************************/
+/* Stdout specific functions */
+
+
+/** Create new viewport
+ *
+ * @return New viewport number
+ */
+static int
+viewport_create(unsigned int x, unsigned int y,unsigned int width, 
+	unsigned int height)
+{
+	int i;
+
+	for (i = 0; i < MAX_VIEWPORTS; i++) {
+		if (!viewports[i].initialized)
+			break;
+	}
+	if (i == MAX_VIEWPORTS)
+		return ELIMIT;
+
+	viewports[i].x = x;
+	viewports[i].y = y;
+	viewports[i].width = width;
+	viewports[i].height = height;
+	
+	viewports[i].rows = height / FONT_SCANLINES;
+	viewports[i].cols = width / COL_WIDTH;
+
+	viewports[i].style.bg_color = DEFAULT_BGCOLOR;
+	viewports[i].style.fg_color = DEFAULT_FGCOLOR;
+	
+	viewports[i].cur_col = 0;
+	viewports[i].cur_row = 0;
+	viewports[i].cursor_active = 0;
+
+	viewports[i].initialized = 1;
+
+	return i;
+}
+
+/** Initialize framebuffer as a chardev output device
+ *
+ * @param addr          Address of theframebuffer
+ * @param xres          Screen width in pixels
+ * @param yres          Screen height in pixels
+ * @param visual        Bits per pixel (8, 16, 24, 32)
+ * @param scan          Bytes per one scanline
+ * @param invert_colors Inverted colors.
+ *
+ */
+static bool
+screen_init(void *addr, unsigned int xres, unsigned int yres,
+	unsigned int scan, unsigned int visual, bool invert_colors)
+{
+	switch (visual) {
+	case VISUAL_INDIRECT_8:
+		screen.rgb2scr = rgb_byte8;
+		screen.scr2rgb = byte8_rgb;
+		screen.pixelbytes = 1;
+		break;
+	case VISUAL_RGB_5_5_5:
+		screen.rgb2scr = rgb_byte555;
+		screen.scr2rgb = byte555_rgb;
+		screen.pixelbytes = 2;
+		break;
+	case VISUAL_RGB_5_6_5:
+		screen.rgb2scr = rgb_byte565;
+		screen.scr2rgb = byte565_rgb;
+		screen.pixelbytes = 2;
+		break;
+	case VISUAL_RGB_8_8_8:
+		screen.rgb2scr = rgb_byte888;
+		screen.scr2rgb = byte888_rgb;
+		screen.pixelbytes = 3;
+		break;
+	case VISUAL_RGB_8_8_8_0:
+		screen.rgb2scr = rgb_byte888;
+		screen.scr2rgb = byte888_rgb;
+		screen.pixelbytes = 4;
+		break;
+	case VISUAL_RGB_0_8_8_8:
+		screen.rgb2scr = rgb_byte0888;
+		screen.scr2rgb = byte0888_rgb;
+		screen.pixelbytes = 4;
+		break;
+	case VISUAL_BGR_0_8_8_8:
+		screen.rgb2scr = bgr_byte0888;
+		screen.scr2rgb = byte0888_bgr;
+		screen.pixelbytes = 4;
+		break;
+	default:
+		return false;
+	}
+
+	screen.fbaddress = (unsigned char *) addr;
+	screen.xres = xres;
+	screen.yres = yres;
+	screen.scanline = scan;
+	screen.invert_colors = invert_colors;
+	
+	/* Create first viewport */
+	viewport_create(0, 0, xres, yres);
+	
+	return true;
+}
+
+/** Hide cursor if it is shown */
+static void
+cursor_hide(viewport_t *vport)
+{
+	if (vport->cursor_active && vport->cursor_shown) {
+		invert_char(vport, vport->cur_row, vport->cur_col);
+		vport->cursor_shown = 0;
+	}
+}
+
+/** Show cursor if cursor showing is enabled */
+static void
+cursor_print(viewport_t *vport)
+{
+	/* Do not check for cursor_shown */
+	if (vport->cursor_active) {
+		invert_char(vport, vport->cur_row, vport->cur_col);
+		vport->cursor_shown = 1;
+	}
+}
+
+/** Invert cursor, if it is enabled */
+static void
+cursor_blink(viewport_t *vport)
+{
+	if (vport->cursor_shown)
+		cursor_hide(vport);
+	else
+		cursor_print(vport);
+}
+
+/** Draw character at given position relative to viewport 
+ * 
+ * @param vport Viewport identification
+ * @param c Character to print
+ * @param row Screen position relative to viewport
+ * @param col Screen position relative to viewport
+ * @param transparent If false, print background color with character
+ */
+static void
+draw_char(viewport_t *vport, char c, unsigned int row, unsigned int col,
+	style_t style, int transparent)
+{
+	/* Optimize - do not hide cursor if we are going to overwrite it */
+	if (vport->cursor_active && vport->cursor_shown && 
+	    (vport->cur_col != col || vport->cur_row != row))
+		invert_char(vport, vport->cur_row, vport->cur_col);
+	
+	draw_glyph(vport, c, col * COL_WIDTH, row * FONT_SCANLINES, style,
+		transparent);
+
+	vport->cur_col = col;
+	vport->cur_row = row;
+
+	vport->cur_col++;
+	if (vport->cur_col >= vport->cols) {
+		vport->cur_col = 0;
+		vport->cur_row++;
+		if (vport->cur_row >= vport->rows)
+			vport->cur_row--;
+	}
+	cursor_print(vport);
+}
+
+/** Draw text data to viewport
+ *
+ * @param vport Viewport id
+ * @param data Text data fitting exactly into viewport
+ */
+static void
+draw_text_data(viewport_t *vport, keyfield_t *data)
+{
+	int i;
+	int col,row;
+
+	clear_port(vport);
+	for (i = 0; i < vport->cols * vport->rows; i++) {
+		if (data[i].character == ' ' && style_same(data[i].style,
+			vport->style))
+			continue;
+		col = i % vport->cols;
+		row = i / vport->cols;
+		draw_glyph(vport, data[i].character, col * COL_WIDTH, row *
+			FONT_SCANLINES, data[i].style,
+			style_same(data[i].style,vport->style));
+	}
+	cursor_print(vport);
+}
+
+/** Return first free pixmap */
+static int
+find_free_pixmap(void)
+{
+	int i;
+	
+	for (i = 0;i < MAX_PIXMAPS;i++)
+		if (!pixmaps[i].data)
+			return i;
+	return -1;
+}
+
+static void
+putpixel_pixmap(int pm, unsigned int x, unsigned int y, int color)
+{
+	pixmap_t *pmap = &pixmaps[pm];
+	int pos = (y * pmap->width + x) * screen.pixelbytes;
+
+	(*screen.rgb2scr)(&pmap->data[pos],COLOR(color));
+}
+
+/** Create a new pixmap and return appropriate ID */
+static int
+shm2pixmap(unsigned char *shm, size_t size)
+{
+	int pm;
+	pixmap_t *pmap;
+
+	pm = find_free_pixmap();
+	if (pm == -1)
+		return ELIMIT;
+	pmap = &pixmaps[pm];
+	
+	if (ppm_get_data(shm, size, &pmap->width, &pmap->height))
+		return EINVAL;
+	
+	pmap->data = malloc(pmap->width * pmap->height * screen.pixelbytes);
+	if (!pmap->data)
+		return ENOMEM;
+
+	ppm_draw(shm, size, 0, 0, pmap->width, pmap->height, 
+		 (putpixel_cb_t)putpixel_pixmap, (void *)pm);
+
+	return pm;
+}
+
+/** Handle shared memory communication calls
+ *
+ * Protocol for drawing pixmaps:
+ * - FB_PREPARE_SHM(client shm identification)
+ * - IPC_M_AS_AREA_SEND
+ * - FB_DRAW_PPM(startx,starty)
+ * - FB_DROP_SHM
+ *
+ * Protocol for text drawing
+ * - IPC_M_AS_AREA_SEND
+ * - FB_DRAW_TEXT_DATA
+ *
+ * @param callid Callid of the current call
+ * @param call Current call data
+ * @param vp Active viewport
+ * @return 0 if the call was not handled byt this function, 1 otherwise
+ *
+ * note: this function is not threads safe, you would have
+ * to redefine static variables with __thread
+ */
+static int
+shm_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
+{
+	static keyfield_t *interbuffer = NULL;
+	static size_t intersize = 0;
+
+	static unsigned char *shm = NULL;
+	static ipcarg_t shm_id = 0;
+	static size_t shm_size;
+
+	int handled = 1;
+	int retval = 0;
+	viewport_t *vport = &viewports[vp];
+	unsigned int x, y;
+
+	switch (IPC_GET_METHOD(*call)) {
+	case IPC_M_AS_AREA_SEND:
+		/* We accept one area for data interchange */
+		if (IPC_GET_ARG1(*call) == shm_id) {
+			void *dest = as_get_mappable_page(IPC_GET_ARG2(*call));
+			shm_size = IPC_GET_ARG2(*call);
+			if (!ipc_answer_fast(callid, 0, (sysarg_t) dest, 0)) 
+				shm = dest;
+			else
+				shm_id = 0;
+			if (shm[0] != 'P')
+				while (1)
+					;
+			return 1;
+		} else {
+			intersize = IPC_GET_ARG2(*call);
+			receive_comm_area(callid, call, (void *) &interbuffer);
+		}
+		return 1;
+	case FB_PREPARE_SHM:
+		if (shm_id)
+			retval = EBUSY;
+		else 
+			shm_id = IPC_GET_ARG1(*call);
+		break;
+		
+	case FB_DROP_SHM:
+		if (shm) {
+			as_area_destroy(shm);
+			shm = NULL;
+		}
+		shm_id = 0;
+		break;
+
+	case FB_SHM2PIXMAP:
+		if (!shm) {
+			retval = EINVAL;
+			break;
+		}
+		retval = shm2pixmap(shm, shm_size);
+		break;
+	case FB_DRAW_PPM:
+		if (!shm) {
+			retval = EINVAL;
+			break;
+		}
+		x = IPC_GET_ARG1(*call);
+		y = IPC_GET_ARG2(*call);
+		if (x > vport->width || y > vport->height) {
+			retval = EINVAL;
+			break;
+		}
+		
+		ppm_draw(shm, shm_size, IPC_GET_ARG1(*call),
+			IPC_GET_ARG2(*call), vport->width - x,
+			vport->height - y, (putpixel_cb_t)putpixel, vport);
+		break;
+	case FB_DRAW_TEXT_DATA:
+		if (!interbuffer) {
+			retval = EINVAL;
+			break;
+		}
+		if (intersize < vport->cols * vport->rows *
+			sizeof(*interbuffer)) {
+			retval = EINVAL;
+			break;
+		}
+		draw_text_data(vport, interbuffer);
+		break;
+	default:
+		handled = 0;
+	}
+	
+	if (handled)
+		ipc_answer_fast(callid, retval, 0, 0);
+	return handled;
+}
+
+static void
+copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap)
+{
+	int y;
+	int tmp, srcrowsize;
+	int realwidth, realheight, realrowsize;
+	int width = vport->width;
+	int height = vport->height;
+
+	if (width + vport->x > screen.xres)
+		width = screen.xres - vport->x;
+	if (height + vport->y > screen.yres)
+		height = screen.yres - vport->y;
+	
+	realwidth = pmap->width <= width ? pmap->width : width;
+	realheight = pmap->height <= height ? pmap->height : height;
+
+	srcrowsize = vport->width * screen.pixelbytes;
+	realrowsize = realwidth * screen.pixelbytes;
+	
+	for (y = 0; y < realheight; y++) {
+		tmp = (vport->y + y) * screen.scanline +
+			vport->x * screen.pixelbytes;
+		memcpy(pmap->data + srcrowsize * y, screen.fbaddress + tmp,
+			realrowsize); 
+	}
+}
+
+/** Save viewport to pixmap */
+static int
+save_vp_to_pixmap(viewport_t *vport)
+{
+	int pm;
+	pixmap_t *pmap;
+
+	pm = find_free_pixmap();
+	if (pm == -1)
+		return ELIMIT;
+	
+	pmap = &pixmaps[pm];
+	pmap->data = malloc(screen.pixelbytes * vport->width * vport->height);
+	if (!pmap->data)
+		return ENOMEM;
+
+	pmap->width = vport->width;
+	pmap->height = vport->height;
+
+	copy_vp_to_pixmap(vport, pmap);
+	
+	return pm;
+}
+
+/** Draw pixmap on screen
+ *
+ * @param vp Viewport to draw on
+ * @param pm Pixmap identifier
+ */
+static int draw_pixmap(int vp, int pm)
+{
+	pixmap_t *pmap = &pixmaps[pm];
+	viewport_t *vport = &viewports[vp];
+	int y;
+	int tmp, srcrowsize;
+	int realwidth, realheight, realrowsize;
+	int width = vport->width;
+	int height = vport->height;
+
+	if (width + vport->x > screen.xres)
+		width = screen.xres - vport->x;
+	if (height + vport->y > screen.yres)
+		height = screen.yres - vport->y;
+
+	if (!pmap->data)
+		return EINVAL;
+
+	realwidth = pmap->width <= width ? pmap->width : width;
+	realheight = pmap->height <= height ? pmap->height : height;
+
+	srcrowsize = vport->width * screen.pixelbytes;
+	realrowsize = realwidth * screen.pixelbytes;
+
+	for (y = 0; y < realheight; y++) {
+		tmp = (vport->y + y) * screen.scanline + 
+			vport->x * screen.pixelbytes;
+		memcpy(screen.fbaddress + tmp, pmap->data + y * srcrowsize,
+			realrowsize);
+	}
+	return 0;
+}
+
+/** Tick animation one step forward */
+static void
+anims_tick(void)
+{
+	int i;
+	static int counts = 0;
+	
+	/* Limit redrawing */
+	counts = (counts + 1) % 8;
+	if (counts)
+		return;
+
+	for (i = 0; i < MAX_ANIMATIONS; i++) {
+		if (!animations[i].animlen || !animations[i].initialized ||
+			!animations[i].enabled)
+			continue;
+		draw_pixmap(animations[i].vp,
+			animations[i].pixmaps[animations[i].pos]);
+		animations[i].pos = (animations[i].pos + 1) %
+			animations[i].animlen;
+	}
+}
+
+
+static int pointer_x, pointer_y;
+static int pointer_shown, pointer_enabled;
+static int pointer_vport = -1;
+static int pointer_pixmap = -1;
+
+static void
+mouse_show(void)
+{
+	int i, j;
+	int visibility;
+	int color;
+	int bytepos;
+
+	if (pointer_shown || !pointer_enabled)
+		return;
+
+	/* Save image under the cursor */
+	if (pointer_vport == -1) {
+		pointer_vport = viewport_create(pointer_x, pointer_y,
+			pointer_width, pointer_height);
+		if (pointer_vport < 0)
+			return;
+	} else {
+		viewports[pointer_vport].x = pointer_x;
+		viewports[pointer_vport].y = pointer_y;
+	}
+
+	if (pointer_pixmap == -1)
+		pointer_pixmap = save_vp_to_pixmap(&viewports[pointer_vport]);
+	else
+		copy_vp_to_pixmap(&viewports[pointer_vport],
+			&pixmaps[pointer_pixmap]);
+
+	/* Draw cursor */
+	for (i = 0; i < pointer_height; i++)
+		for (j = 0; j < pointer_width; j++) {
+			bytepos = i * ((pointer_width - 1) / 8 + 1) + j / 8;
+			visibility = pointer_mask_bits[bytepos] &
+				(1 << (j % 8));
+			if (visibility) {
+				color = pointer_bits[bytepos] & (1 << (j % 8))
+					? 0 : 0xffffff;
+				if (pointer_x + j < screen.xres && pointer_y +
+					i < screen.yres)
+					putpixel(&viewports[0], pointer_x + j,
+						pointer_y + i, color);
+			}
+		}
+	pointer_shown = 1;
+}
+
+static void
+mouse_hide(void)
+{
+	/* Restore image under the cursor */
+	if (pointer_shown) {
+		draw_pixmap(pointer_vport, pointer_pixmap);
+		pointer_shown = 0;
+	}
+}
+
+static void
+mouse_move(unsigned int x, unsigned int y)
+{
+	mouse_hide();
+	pointer_x = x;
+	pointer_y = y;
+	mouse_show();
+}
+
+static int
+anim_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
+{
+	int handled = 1;
+	int retval = 0;
+	int i,nvp;
+	int newval;
+
+	switch (IPC_GET_METHOD(*call)) {
+	case FB_ANIM_CREATE:
+		nvp = IPC_GET_ARG1(*call);
+		if (nvp == -1)
+			nvp = vp;
+		if (nvp >= MAX_VIEWPORTS || nvp < 0 ||
+			!viewports[nvp].initialized) {
+			retval = EINVAL;
+			break;
+		}
+		for (i = 0; i < MAX_ANIMATIONS; i++) {
+			if (!animations[i].initialized)
+				break;
+		}
+		if (i == MAX_ANIMATIONS) {
+			retval = ELIMIT;
+			break;
+		}
+		animations[i].initialized = 1;
+		animations[i].animlen = 0;
+		animations[i].pos = 0;
+		animations[i].enabled = 0;
+		animations[i].vp = nvp;
+		retval = i;
+		break;
+	case FB_ANIM_DROP:
+		i = IPC_GET_ARG1(*call);
+		if (i >= MAX_ANIMATIONS || i < 0) {
+			retval = EINVAL;
+			break;
+		}
+		animations[i].initialized = 0;
+		break;
+	case FB_ANIM_ADDPIXMAP:
+		i = IPC_GET_ARG1(*call);
+		if (i >= MAX_ANIMATIONS || i < 0 ||
+			!animations[i].initialized) {
+			retval = EINVAL;
+			break;
+		}
+		if (animations[i].animlen == MAX_ANIM_LEN) {
+			retval = ELIMIT;
+			break;
+		}
+		newval = IPC_GET_ARG2(*call);
+		if (newval < 0 || newval > MAX_PIXMAPS ||
+			!pixmaps[newval].data) {
+			retval = EINVAL;
+			break;
+		}
+		animations[i].pixmaps[animations[i].animlen++] = newval;
+		break;
+	case FB_ANIM_CHGVP:
+		i = IPC_GET_ARG1(*call);
+		if (i >= MAX_ANIMATIONS || i < 0) {
+			retval = EINVAL;
+			break;
+		}
+		nvp = IPC_GET_ARG2(*call);
+		if (nvp == -1)
+			nvp = vp;
+		if (nvp >= MAX_VIEWPORTS || nvp < 0 ||
+			!viewports[nvp].initialized) {
+			retval = EINVAL;
+			break;
+		}
+		animations[i].vp = nvp;
+		break;
+	case FB_ANIM_START:
+	case FB_ANIM_STOP:
+		i = IPC_GET_ARG1(*call);
+		if (i >= MAX_ANIMATIONS || i < 0) {
+			retval = EINVAL;
+			break;
+		}
+		newval = (IPC_GET_METHOD(*call) == FB_ANIM_START);
+		if (newval ^ animations[i].enabled) {
+			animations[i].enabled = newval;
+			anims_enabled += newval ? 1 : -1;
+		}
+		break;
+	default:
+		handled = 0;
+	}
+	if (handled)
+		ipc_answer_fast(callid, retval, 0, 0);
+	return handled;
+}
+
+/** Handler for messages concerning pixmap handling */
+static int
+pixmap_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
+{
+	int handled = 1;
+	int retval = 0;
+	int i,nvp;
+
+	switch (IPC_GET_METHOD(*call)) {
+	case FB_VP_DRAW_PIXMAP:
+		nvp = IPC_GET_ARG1(*call);
+		if (nvp == -1)
+			nvp = vp;
+		if (nvp < 0 || nvp >= MAX_VIEWPORTS ||
+			!viewports[nvp].initialized) {
+			retval = EINVAL;
+			break;
+		}
+		i = IPC_GET_ARG2(*call);
+		retval = draw_pixmap(nvp, i);
+		break;
+	case FB_VP2PIXMAP:
+		nvp = IPC_GET_ARG1(*call);
+		if (nvp == -1)
+			nvp = vp;
+		if (nvp < 0 || nvp >= MAX_VIEWPORTS ||
+			!viewports[nvp].initialized)
+			retval = EINVAL;
+		else
+			retval = save_vp_to_pixmap(&viewports[nvp]);
+		break;
+	case FB_DROP_PIXMAP:
+		i = IPC_GET_ARG1(*call);
+		if (i >= MAX_PIXMAPS) {
+			retval = EINVAL;
+			break;
+		}
+		if (pixmaps[i].data) {
+			free(pixmaps[i].data);
+			pixmaps[i].data = NULL;
+		}
+		break;
+	default:
+		handled = 0;
+	}
+
+	if (handled)
+		ipc_answer_fast(callid, retval, 0, 0);
+	return handled;
+	
+}
+
+/** Function for handling connections to FB
+ *
+ */
+static void
+fb_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	ipc_callid_t callid;
+	ipc_call_t call;
+	int retval;
+	int i;
+	unsigned int row,col;
+	char c;
+
+	int vp = 0;
+	viewport_t *vport = &viewports[0];
+
+	if (client_connected) {
+		ipc_answer_fast(iid, ELIMIT, 0,0);
+		return;
+	}
+	client_connected = 1;
+	ipc_answer_fast(iid, 0, 0, 0); /* Accept connection */
+
+	while (1) {
+		if (vport->cursor_active || anims_enabled)
+			callid = async_get_call_timeout(&call, 250000);
+		else
+			callid = async_get_call(&call);
+
+		mouse_hide();
+		if (!callid) {
+			cursor_blink(vport);
+			anims_tick();
+			mouse_show();
+			continue;
+		}
+		if (shm_handle(callid, &call, vp))
+			continue;
+		if (pixmap_handle(callid, &call, vp))
+			continue;
+		if (anim_handle(callid, &call, vp))
+			continue;
+
+ 		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			client_connected = 0;
+			/* cleanup other viewports */
+			for (i = 1; i < MAX_VIEWPORTS; i++)
+				vport->initialized = 0;
+			return; /* Exit thread */
+
+		case FB_PUTCHAR:
+		case FB_TRANS_PUTCHAR:
+			c = IPC_GET_ARG1(call);
+			row = IPC_GET_ARG2(call);
+			col = IPC_GET_ARG3(call);
+			if (row >= vport->rows || col >= vport->cols) {
+				retval = EINVAL;
+				break;
+			}
+			ipc_answer_fast(callid, 0, 0, 0);
+
+			draw_char(vport, c, row, col, vport->style,
+				IPC_GET_METHOD(call) == FB_TRANS_PUTCHAR);
+			continue; /* msg already answered */
+		case FB_CLEAR:
+			clear_port(vport);
+			cursor_print(vport);
+			retval = 0;
+			break;
+ 		case FB_CURSOR_GOTO:
+			row = IPC_GET_ARG1(call);
+			col = IPC_GET_ARG2(call);
+			if (row >= vport->rows || col >= vport->cols) {
+				retval = EINVAL;
+				break;
+			}
+ 			retval = 0;
+			cursor_hide(vport);
+			vport->cur_col = col;
+			vport->cur_row = row;
+			cursor_print(vport);
+ 			break;
+		case FB_CURSOR_VISIBILITY:
+			cursor_hide(vport);
+			vport->cursor_active = IPC_GET_ARG1(call);
+			cursor_print(vport);
+			retval = 0;
+			break;
+		case FB_GET_CSIZE:
+			ipc_answer_fast(callid, 0, vport->rows, vport->cols);
+			continue;
+		case FB_SCROLL:
+			i = IPC_GET_ARG1(call);
+			if (i > vport->rows || i < (- (int)vport->rows)) {
+				retval = EINVAL;
+				break;
+			}
+			cursor_hide(vport);
+			scroll_port(vport, i*FONT_SCANLINES);
+			cursor_print(vport);
+			retval = 0;
+			break;
+		case FB_VIEWPORT_DB:
+			/* Enable double buffering */
+			i = IPC_GET_ARG1(call);
+			if (i == -1)
+				i = vp;
+			if (i < 0 || i >= MAX_VIEWPORTS) {
+				retval = EINVAL;
+				break;
+			}
+			if (! viewports[i].initialized ) {
+				retval = EADDRNOTAVAIL;
+				break;
+			}
+			viewports[i].dboffset = 0;
+			if (IPC_GET_ARG2(call) == 1 && !viewports[i].dbdata)
+				viewports[i].dbdata = malloc(screen.pixelbytes
+					* viewports[i].width *
+					viewports[i].height);
+			else if (IPC_GET_ARG2(call) == 0 &&
+				viewports[i].dbdata) {
+				free(viewports[i].dbdata);
+				viewports[i].dbdata = NULL;
+			}
+			retval = 0;
+			break;
+		case FB_VIEWPORT_SWITCH:
+			i = IPC_GET_ARG1(call);
+			if (i < 0 || i >= MAX_VIEWPORTS) {
+				retval = EINVAL;
+				break;
+			}
+			if (! viewports[i].initialized ) {
+				retval = EADDRNOTAVAIL;
+				break;
+			}
+			cursor_hide(vport);
+			vp = i;
+			vport = &viewports[vp];
+			cursor_print(vport);
+			retval = 0;
+			break;
+		case FB_VIEWPORT_CREATE:
+			retval = viewport_create(IPC_GET_ARG1(call) >> 16,
+				IPC_GET_ARG1(call) & 0xffff,
+				IPC_GET_ARG2(call) >> 16,
+				IPC_GET_ARG2(call) & 0xffff);
+			break;
+		case FB_VIEWPORT_DELETE:
+			i = IPC_GET_ARG1(call);
+			if (i < 0 || i >= MAX_VIEWPORTS) {
+				retval = EINVAL;
+				break;
+			}
+			if (! viewports[i].initialized ) {
+				retval = EADDRNOTAVAIL;
+				break;
+			}
+			viewports[i].initialized = 0;
+			if (viewports[i].dbdata) {
+				free(viewports[i].dbdata);
+				viewports[i].dbdata = NULL;
+			}
+			retval = 0;
+			break;
+		case FB_SET_STYLE:
+			vport->style.fg_color = IPC_GET_ARG1(call);
+			vport->style.bg_color = IPC_GET_ARG2(call);
+			retval = 0;
+			break;
+		case FB_GET_RESOLUTION:
+			ipc_answer_fast(callid, 0, screen.xres,screen.yres);
+			continue;
+		case FB_POINTER_MOVE:
+			pointer_enabled = 1;
+			mouse_move(IPC_GET_ARG1(call), IPC_GET_ARG2(call));
+			retval = 0;
+			break;
+		default:
+			retval = ENOENT;
+		}
+		ipc_answer_fast(callid,retval, 0, 0);
+	}
+}
+
+/** Initialization of framebuffer */
+int
+fb_init(void)
+{
+	void *fb_ph_addr;
+	unsigned int fb_width;
+	unsigned int fb_height;
+	unsigned int fb_scanline;
+	unsigned int fb_visual;
+	bool fb_invert_colors;
+	void *fb_addr;
+	size_t asz;
+
+	async_set_client_connection(fb_client_connection);
+
+	fb_ph_addr = (void *) sysinfo_value("fb.address.physical");
+	fb_width = sysinfo_value("fb.width");
+	fb_height = sysinfo_value("fb.height");
+	fb_scanline = sysinfo_value("fb.scanline");
+	fb_visual = sysinfo_value("fb.visual");
+	fb_invert_colors = sysinfo_value("fb.invert-colors");
+
+	asz = fb_scanline * fb_height;
+	fb_addr = as_get_mappable_page(asz);
+	
+	physmem_map(fb_ph_addr, fb_addr, ALIGN_UP(asz, PAGE_SIZE) >>
+		PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE);
+
+	if (screen_init(fb_addr, fb_width, fb_height, fb_scanline, fb_visual,
+		fb_invert_colors))
+		return 0;
+	
+	return -1;
+}
+
+/** 
+ * @}
+ */
Index: uspace/srv/fb/fb.h
===================================================================
--- uspace/srv/fb/fb.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/fb.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup fb
+ * @ingroup fbs
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef FB_FB_H_
+#define FB_FB_H_
+
+typedef void (* putpixel_cb_t)(void *, unsigned int, unsigned int, int);
+
+extern int fb_init(void);
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/fb/font-8x16.c
===================================================================
--- uspace/srv/fb/font-8x16.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/font-8x16.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,4642 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "font-8x16.h"
+
+unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES] = {
+
+	/* 0 0x00 '^@' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 1 0x01 '^A' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x81, /* 10000001 */
+	0xa5, /* 10100101 */
+	0x81, /* 10000001 */
+	0x81, /* 10000001 */
+	0xbd, /* 10111101 */
+	0x99, /* 10011001 */
+	0x81, /* 10000001 */
+	0x81, /* 10000001 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 2 0x02 '^B' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0xff, /* 11111111 */
+	0xdb, /* 11011011 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xc3, /* 11000011 */
+	0xe7, /* 11100111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 3 0x03 '^C' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 4 0x04 '^D' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x7c, /* 01111100 */
+	0xfe, /* 11111110 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 5 0x05 '^E' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0xe7, /* 11100111 */
+	0xe7, /* 11100111 */
+	0xe7, /* 11100111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 6 0x06 '^F' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 7 0x07 '^G' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 8 0x08 '^H' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xe7, /* 11100111 */
+	0xc3, /* 11000011 */
+	0xc3, /* 11000011 */
+	0xe7, /* 11100111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 9 0x09 '^I' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x42, /* 01000010 */
+	0x42, /* 01000010 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 10 0x0a '^J' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xc3, /* 11000011 */
+	0x99, /* 10011001 */
+	0xbd, /* 10111101 */
+	0xbd, /* 10111101 */
+	0x99, /* 10011001 */
+	0xc3, /* 11000011 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 11 0x0b '^K' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1e, /* 00011110 */
+	0x0e, /* 00001110 */
+	0x1a, /* 00011010 */
+	0x32, /* 00110010 */
+	0x78, /* 01111000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 12 0x0c '^L' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 13 0x0d '^M' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3f, /* 00111111 */
+	0x33, /* 00110011 */
+	0x3f, /* 00111111 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x70, /* 01110000 */
+	0xf0, /* 11110000 */
+	0xe0, /* 11100000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 14 0x0e '^N' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7f, /* 01111111 */
+	0x63, /* 01100011 */
+	0x7f, /* 01111111 */
+	0x63, /* 01100011 */
+	0x63, /* 01100011 */
+	0x63, /* 01100011 */
+	0x63, /* 01100011 */
+	0x67, /* 01100111 */
+	0xe7, /* 11100111 */
+	0xe6, /* 11100110 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 15 0x0f '^O' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xdb, /* 11011011 */
+	0x3c, /* 00111100 */
+	0xe7, /* 11100111 */
+	0x3c, /* 00111100 */
+	0xdb, /* 11011011 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 16 0x10 '^P' */
+	0x00, /* 00000000 */
+	0x80, /* 10000000 */
+	0xc0, /* 11000000 */
+	0xe0, /* 11100000 */
+	0xf0, /* 11110000 */
+	0xf8, /* 11111000 */
+	0xfe, /* 11111110 */
+	0xf8, /* 11111000 */
+	0xf0, /* 11110000 */
+	0xe0, /* 11100000 */
+	0xc0, /* 11000000 */
+	0x80, /* 10000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 17 0x11 '^Q' */
+	0x00, /* 00000000 */
+	0x02, /* 00000010 */
+	0x06, /* 00000110 */
+	0x0e, /* 00001110 */
+	0x1e, /* 00011110 */
+	0x3e, /* 00111110 */
+	0xfe, /* 11111110 */
+	0x3e, /* 00111110 */
+	0x1e, /* 00011110 */
+	0x0e, /* 00001110 */
+	0x06, /* 00000110 */
+	0x02, /* 00000010 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 18 0x12 '^R' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 19 0x13 '^S' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 20 0x14 '^T' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7f, /* 01111111 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0x7b, /* 01111011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 21 0x15 '^U' */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x0c, /* 00001100 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 22 0x16 '^V' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 23 0x17 '^W' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 24 0x18 '^X' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 25 0x19 '^Y' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 26 0x1a '^Z' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0xfe, /* 11111110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 27 0x1b '^[' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xfe, /* 11111110 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 28 0x1c '^\' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 29 0x1d '^]' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x28, /* 00101000 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x28, /* 00101000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 30 0x1e '^^' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x7c, /* 01111100 */
+	0x7c, /* 01111100 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 31 0x1f '^_' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x7c, /* 01111100 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 32 0x20 ' ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 33 0x21 '!' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 34 0x22 '"' */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x24, /* 00100100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 35 0x23 '#' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 36 0x24 '$' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0x7c, /* 01111100 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x86, /* 10000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 37 0x25 '%' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc2, /* 11000010 */
+	0xc6, /* 11000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc6, /* 11000110 */
+	0x86, /* 10000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 38 0x26 '&' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 39 0x27 ''' */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 40 0x28 '(' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 41 0x29 ')' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 42 0x2a '*' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0xff, /* 11111111 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 43 0x2b '+' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 44 0x2c ',' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 45 0x2d '-' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 46 0x2e '.' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 47 0x2f '/' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x02, /* 00000010 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0x80, /* 10000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 48 0x30 '0' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 49 0x31 '1' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x38, /* 00111000 */
+	0x78, /* 01111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 50 0x32 '2' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 51 0x33 '3' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x3c, /* 00111100 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 52 0x34 '4' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x1c, /* 00011100 */
+	0x3c, /* 00111100 */
+	0x6c, /* 01101100 */
+	0xcc, /* 11001100 */
+	0xfe, /* 11111110 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x1e, /* 00011110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 53 0x35 '5' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xfc, /* 11111100 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 54 0x36 '6' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xfc, /* 11111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 55 0x37 '7' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 56 0x38 '8' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 57 0x39 '9' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7e, /* 01111110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 58 0x3a ':' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 59 0x3b ';' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 60 0x3c '<' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 61 0x3d '=' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 62 0x3e '>' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 63 0x3f '?' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 64 0x40 '@' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xde, /* 11011110 */
+	0xde, /* 11011110 */
+	0xde, /* 11011110 */
+	0xdc, /* 11011100 */
+	0xc0, /* 11000000 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 65 0x41 'A' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 66 0x42 'B' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfc, /* 11111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xfc, /* 11111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 67 0x43 'C' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc2, /* 11000010 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 68 0x44 'D' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 69 0x45 'E' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x66, /* 01100110 */
+	0x62, /* 01100010 */
+	0x68, /* 01101000 */
+	0x78, /* 01111000 */
+	0x68, /* 01101000 */
+	0x60, /* 01100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 70 0x46 'F' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x66, /* 01100110 */
+	0x62, /* 01100010 */
+	0x68, /* 01101000 */
+	0x78, /* 01111000 */
+	0x68, /* 01101000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 71 0x47 'G' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xde, /* 11011110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x66, /* 01100110 */
+	0x3a, /* 00111010 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 72 0x48 'H' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 73 0x49 'I' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 74 0x4a 'J' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1e, /* 00011110 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 75 0x4b 'K' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe6, /* 11100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x78, /* 01111000 */
+	0x78, /* 01111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 76 0x4c 'L' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf0, /* 11110000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 77 0x4d 'M' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xee, /* 11101110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xd6, /* 11010110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 78 0x4e 'N' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xe6, /* 11100110 */
+	0xf6, /* 11110110 */
+	0xfe, /* 11111110 */
+	0xde, /* 11011110 */
+	0xce, /* 11001110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 79 0x4f 'O' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 80 0x50 'P' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfc, /* 11111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 81 0x51 'Q' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xde, /* 11011110 */
+	0x7c, /* 01111100 */
+	0x0c, /* 00001100 */
+	0x0e, /* 00001110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 82 0x52 'R' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfc, /* 11111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 83 0x53 'S' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x38, /* 00111000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 84 0x54 'T' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x5a, /* 01011010 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 85 0x55 'U' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 86 0x56 'V' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 87 0x57 'W' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xfe, /* 11111110 */
+	0xee, /* 11101110 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 88 0x58 'X' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x7c, /* 01111100 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 89 0x59 'Y' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 90 0x5a 'Z' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0x86, /* 10000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc2, /* 11000010 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 91 0x5b '[' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 92 0x5c '\' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x80, /* 10000000 */
+	0xc0, /* 11000000 */
+	0xe0, /* 11100000 */
+	0x70, /* 01110000 */
+	0x38, /* 00111000 */
+	0x1c, /* 00011100 */
+	0x0e, /* 00001110 */
+	0x06, /* 00000110 */
+	0x02, /* 00000010 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 93 0x5d ']' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 94 0x5e '^' */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 95 0x5f '_' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 96 0x60 '`' */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 97 0x61 'a' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 98 0x62 'b' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe0, /* 11100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x78, /* 01111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 99 0x63 'c' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 100 0x64 'd' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1c, /* 00011100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x3c, /* 00111100 */
+	0x6c, /* 01101100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 101 0x65 'e' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 102 0x66 'f' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1c, /* 00011100 */
+	0x36, /* 00110110 */
+	0x32, /* 00110010 */
+	0x30, /* 00110000 */
+	0x78, /* 01111000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 103 0x67 'g' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x7c, /* 01111100 */
+	0x0c, /* 00001100 */
+	0xcc, /* 11001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+
+	/* 104 0x68 'h' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe0, /* 11100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x6c, /* 01101100 */
+	0x76, /* 01110110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 105 0x69 'i' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 106 0x6a 'j' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+
+	/* 107 0x6b 'k' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe0, /* 11100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x78, /* 01111000 */
+	0x78, /* 01111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 108 0x6c 'l' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 109 0x6d 'm' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xec, /* 11101100 */
+	0xfe, /* 11111110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 110 0x6e 'n' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 111 0x6f 'o' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 112 0x70 'p' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+
+	/* 113 0x71 'q' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x7c, /* 01111100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x1e, /* 00011110 */
+	0x00, /* 00000000 */
+
+	/* 114 0x72 'r' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x76, /* 01110110 */
+	0x66, /* 01100110 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 115 0x73 's' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x38, /* 00111000 */
+	0x0c, /* 00001100 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 116 0x74 't' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0xfc, /* 11111100 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x36, /* 00110110 */
+	0x1c, /* 00011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 117 0x75 'u' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 118 0x76 'v' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 119 0x77 'w' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 120 0x78 'x' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 121 0x79 'y' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7e, /* 01111110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+
+	/* 122 0x7a 'z' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xcc, /* 11001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 123 0x7b '{' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x0e, /* 00001110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 124 0x7c '|' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 125 0x7d '}' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x70, /* 01110000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x0e, /* 00001110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 126 0x7e '~' */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 127 0x7f '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 128 0x80 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc2, /* 11000010 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 129 0x81 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 130 0x82 '' */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 131 0x83 '' */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 132 0x84 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 133 0x85 '
+' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 134 0x86 '' */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 135 0x87 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 136 0x88 '' */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 137 0x89 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 138 0x8a '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 139 0x8b '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 140 0x8c '' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 141 0x8d '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 142 0x8e '' */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 143 0x8f '' */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 144 0x90 '' */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x66, /* 01100110 */
+	0x62, /* 01100010 */
+	0x68, /* 01101000 */
+	0x78, /* 01111000 */
+	0x68, /* 01101000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 145 0x91 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xec, /* 11101100 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x7e, /* 01111110 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0x6e, /* 01101110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 146 0x92 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3e, /* 00111110 */
+	0x6c, /* 01101100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xfe, /* 11111110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xce, /* 11001110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 147 0x93 '' */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 148 0x94 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 149 0x95 '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 150 0x96 '' */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x78, /* 01111000 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 151 0x97 '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 152 0x98 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7e, /* 01111110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+
+	/* 153 0x99 '' */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 154 0x9a '' */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 155 0x9b '' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 156 0x9c '' */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x64, /* 01100100 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xe6, /* 11100110 */
+	0xfc, /* 11111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 157 0x9d '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 158 0x9e '' */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xf8, /* 11111000 */
+	0xc4, /* 11000100 */
+	0xcc, /* 11001100 */
+	0xde, /* 11011110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 159 0x9f '' */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x1b, /* 00011011 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xd8, /* 11011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 160 0xa0 ' ' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 161 0xa1 '¡' */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 162 0xa2 '¢' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 163 0xa3 '£' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 164 0xa4 '¤' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 165 0xa5 '¥' */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xe6, /* 11100110 */
+	0xf6, /* 11110110 */
+	0xfe, /* 11111110 */
+	0xde, /* 11011110 */
+	0xce, /* 11001110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 166 0xa6 '¦' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x3e, /* 00111110 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 167 0xa7 '§' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 168 0xa8 '¨' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 169 0xa9 '©' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 170 0xaa 'ª' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 171 0xab '«' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0xe0, /* 11100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xdc, /* 11011100 */
+	0x86, /* 10000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x3e, /* 00111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 172 0xac '¬' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0xe0, /* 11100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x66, /* 01100110 */
+	0xce, /* 11001110 */
+	0x9a, /* 10011010 */
+	0x3f, /* 00111111 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 173 0xad '­' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 174 0xae '®' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x36, /* 00110110 */
+	0x6c, /* 01101100 */
+	0xd8, /* 11011000 */
+	0x6c, /* 01101100 */
+	0x36, /* 00110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 175 0xaf '¯' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xd8, /* 11011000 */
+	0x6c, /* 01101100 */
+	0x36, /* 00110110 */
+	0x6c, /* 01101100 */
+	0xd8, /* 11011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 176 0xb0 '°' */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+
+	/* 177 0xb1 '±' */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+
+	/* 178 0xb2 '²' */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+
+	/* 179 0xb3 '³' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 180 0xb4 '´' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 181 0xb5 'µ' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 182 0xb6 '¶' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf6, /* 11110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 183 0xb7 '·' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 184 0xb8 '¸' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 185 0xb9 '¹' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf6, /* 11110110 */
+	0x06, /* 00000110 */
+	0xf6, /* 11110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 186 0xba 'º' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 187 0xbb '»' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x06, /* 00000110 */
+	0xf6, /* 11110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 188 0xbc '¼' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf6, /* 11110110 */
+	0x06, /* 00000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 189 0xbd '½' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 190 0xbe '¾' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 191 0xbf '¿' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 192 0xc0 'À' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 193 0xc1 'Á' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 194 0xc2 'Â' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 195 0xc3 'Ã' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 196 0xc4 'Ä' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 197 0xc5 'Å' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 198 0xc6 'Æ' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 199 0xc7 'Ç' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x37, /* 00110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 200 0xc8 'È' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x37, /* 00110111 */
+	0x30, /* 00110000 */
+	0x3f, /* 00111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 201 0xc9 'É' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3f, /* 00111111 */
+	0x30, /* 00110000 */
+	0x37, /* 00110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 202 0xca 'Ê' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf7, /* 11110111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 203 0xcb 'Ë' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xf7, /* 11110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 204 0xcc 'Ì' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x37, /* 00110111 */
+	0x30, /* 00110000 */
+	0x37, /* 00110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 205 0xcd 'Í' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 206 0xce 'Î' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf7, /* 11110111 */
+	0x00, /* 00000000 */
+	0xf7, /* 11110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 207 0xcf 'Ï' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 208 0xd0 'Ð' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 209 0xd1 'Ñ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 210 0xd2 'Ò' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 211 0xd3 'Ó' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x3f, /* 00111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 212 0xd4 'Ô' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 213 0xd5 'Õ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 214 0xd6 'Ö' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3f, /* 00111111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 215 0xd7 '×' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xff, /* 11111111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 216 0xd8 'Ø' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 217 0xd9 'Ù' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 218 0xda 'Ú' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 219 0xdb 'Û' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 220 0xdc 'Ü' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 221 0xdd 'Ý' */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+
+	/* 222 0xde 'Þ' */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+
+	/* 223 0xdf 'ß' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 224 0xe0 'à' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xdc, /* 11011100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 225 0xe1 'á' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xd8, /* 11011000 */
+	0xcc, /* 11001100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 226 0xe2 'â' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 227 0xe3 'ã' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 228 0xe4 'ä' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 229 0xe5 'å' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 230 0xe6 'æ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+
+	/* 231 0xe7 'ç' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 232 0xe8 'è' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 233 0xe9 'é' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 234 0xea 'ê' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0xee, /* 11101110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 235 0xeb 'ë' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1e, /* 00011110 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x3e, /* 00111110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 236 0xec 'ì' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 237 0xed 'í' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x03, /* 00000011 */
+	0x06, /* 00000110 */
+	0x7e, /* 01111110 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0xf3, /* 11110011 */
+	0x7e, /* 01111110 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 238 0xee 'î' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1c, /* 00011100 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x1c, /* 00011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 239 0xef 'ï' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 240 0xf0 'ð' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 241 0xf1 'ñ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 242 0xf2 'ò' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 243 0xf3 'ó' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 244 0xf4 'ô' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 245 0xf5 'õ' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 246 0xf6 'ö' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 247 0xf7 '÷' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 248 0xf8 'ø' */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 249 0xf9 'ù' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 250 0xfa 'ú' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 251 0xfb 'û' */
+	0x00, /* 00000000 */
+	0x0f, /* 00001111 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0xec, /* 11101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x3c, /* 00111100 */
+	0x1c, /* 00011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 252 0xfc 'ü' */
+	0x00, /* 00000000 */
+	0x6c, /* 01101100 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 253 0xfd 'ý' */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x32, /* 00110010 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 254 0xfe 'þ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 255 0xff 'ÿ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+};
Index: uspace/srv/fb/font-8x16.h
===================================================================
--- uspace/srv/fb/font-8x16.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/font-8x16.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FB_FONT_8X16_H_
+#define FB_FONT_8X16_H_
+
+#define FONT_GLIPHS	256
+#define FONT_SCANLINES	16
+
+extern unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES];
+
+#endif
Index: uspace/srv/fb/main.c
===================================================================
--- uspace/srv/fb/main.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/main.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <ipc/ipc.h>
+#include <ipc/services.h>
+#include <sysinfo.h>
+#include <async.h>
+#include <as.h>
+#include <align.h>
+#include <errno.h>
+
+#include "fb.h"
+#include "sysio.h"
+#include "ega.h"
+#include "main.h"
+
+void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area)
+{
+	void *dest;
+
+	dest = as_get_mappable_page(IPC_GET_ARG2(*call));
+	if (ipc_answer_fast(callid, 0, (sysarg_t) dest, 0) == 0) {
+		if (*area)
+			as_area_destroy(*area);
+		*area = dest;
+	}
+}
+
+int main(int argc, char *argv[])
+{
+	ipcarg_t phonead;
+	int initialized = 0;
+
+#ifdef FB_ENABLED
+	if (sysinfo_value("fb.kind") == 1) {
+		if (fb_init() == 0)
+			initialized = 1;
+	} 
+#endif
+#ifdef EGA_ENABLED
+	if (!initialized && sysinfo_value("fb.kind") == 2) {
+		if (ega_init() == 0)
+			initialized = 1;
+	}
+#endif
+
+	if (!initialized)
+		sysio_init();
+
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_VIDEO, 0, &phonead) != 0) 
+		return -1;
+	
+	async_manager();
+	/* Never reached */
+	return 0;
+}
Index: uspace/srv/fb/main.h
===================================================================
--- uspace/srv/fb/main.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/main.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FB_MAIN_H_
+#define FB_MAIN_H_
+
+extern void receive_comm_area(ipc_callid_t, ipc_call_t *, void **);
+
+#endif
Index: uspace/srv/fb/pointer.xbm
===================================================================
--- uspace/srv/fb/pointer.xbm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/pointer.xbm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+#define pointer_width 11
+#define pointer_height 18
+static unsigned char pointer_bits[] = {
+   0x01, 0x00, 0x03, 0x00, 0x05, 0x00, 0x09, 0x00, 0x11, 0x00, 0x21, 0x00,
+   0x41, 0x00, 0x81, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x04, 0x01, 0x03,
+   0x81, 0x00, 0x89, 0x00, 0x15, 0x01, 0x23, 0x01, 0x21, 0x01, 0xc0, 0x00 };
Index: uspace/srv/fb/pointer_mask.xbm
===================================================================
--- uspace/srv/fb/pointer_mask.xbm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/pointer_mask.xbm	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,6 @@
+#define pointer_mask_width 11
+#define pointer_mask_height 18
+static unsigned char pointer_mask_bits[] = {
+   0x01, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x3f, 0x00,
+   0x7f, 0x00, 0xff, 0x00, 0xff, 0x01, 0xff, 0x03, 0xff, 0x07, 0xff, 0x03,
+   0xff, 0x00, 0xff, 0x00, 0xf7, 0x01, 0xe3, 0x01, 0xe1, 0x01, 0xc0, 0x00 };
Index: uspace/srv/fb/ppm.c
===================================================================
--- uspace/srv/fb/ppm.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/ppm.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <types.h>
+#include <errno.h>
+
+#include "ppm.h"
+
+static void skip_whitespace(unsigned char **data)
+{
+retry:
+	while (**data == ' ' || **data == '\t' || **data == '\n' || **data == '\r')
+		(*data)++;
+	if (**data == '#') {
+		while (1) {
+			if (**data == '\n' || **data == '\r')
+				break;
+			(*data)++;
+		}
+		goto retry;
+	}
+}
+
+static void read_num(unsigned char **data, unsigned int *num)
+{
+	*num = 0;
+	while (**data >= '0' && **data <= '9') {
+		*num *= 10;
+		*num += **data - '0';
+		(*data)++;
+	}
+}
+
+int ppm_get_data(unsigned char *data, size_t dtsz, unsigned int *width, unsigned int *height)
+{
+	/* Read magic */
+	if (data[0] != 'P' || data[1] != '6')
+		return EINVAL;
+
+	data+=2;
+	skip_whitespace(&data);
+	read_num(&data, width);
+	skip_whitespace(&data);
+	read_num(&data,height);
+
+	return 0;
+}
+
+/** Draw PPM pixmap
+ *
+ * @param data Pointer to PPM data
+ * @param datasz Maximum data size
+ * @param sx Coordinate of upper left corner
+ * @param sy Coordinate of upper left corner
+ * @param maxwidth Maximum allowed width for picture
+ * @param maxheight Maximum allowed height for picture
+ * @param putpixel Putpixel function used to print bitmap
+ */
+int ppm_draw(unsigned char *data, size_t datasz, unsigned int sx, 
+	     unsigned int sy, 
+	     unsigned int maxwidth, unsigned int maxheight,
+	     putpixel_cb_t putpixel, void *vport)
+{
+	unsigned int width, height;
+	unsigned int maxcolor;
+	int i;
+	unsigned int color;
+	unsigned int coef;
+
+	/* Read magic */
+	if (data[0] != 'P' || data[1] != '6')
+		return EINVAL;
+
+	data+=2;
+	skip_whitespace(&data);
+	read_num(&data, &width);
+	skip_whitespace(&data);
+	read_num(&data,&height);
+	skip_whitespace(&data);
+	read_num(&data,&maxcolor);
+	data++;
+
+	if (maxcolor == 0 || maxcolor > 255 || width*height > datasz) {
+		return EINVAL;
+	}
+	coef = 255/maxcolor;
+	if (coef*maxcolor > 255)
+		coef -= 1;
+	
+	for (i=0; i < width*height; i++) {
+		/* Crop picture if we don't fit into region */
+		if (i % width > maxwidth || i/width > maxheight) {
+			data += 3;
+			continue;
+		}
+		color = ((data[0]*coef) << 16) + ((data[1]*coef) << 8) + data[2]*coef;
+		
+		(*putpixel)(vport, sx+(i % width), sy+(i / width), color);
+		data += 3;
+	}
+
+	return 0;
+}
Index: uspace/srv/fb/ppm.h
===================================================================
--- uspace/srv/fb/ppm.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/ppm.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FB_PPM_H_
+#define FB_PPM_H_
+
+#include "fb.h"
+
+extern int ppm_draw(unsigned char *, size_t, unsigned int, unsigned int, 
+    unsigned int, unsigned int, putpixel_cb_t, void *);
+extern int ppm_get_data(unsigned char *, size_t, unsigned int *, unsigned int *);
+
+#endif
Index: uspace/srv/fb/sysio.c
===================================================================
--- uspace/srv/fb/sysio.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/sysio.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @defgroup sysio SysIO 
+ * @brief	HelenOS framebuffer emulation via kernel.
+ * @ingroup fbs
+ * @{
+ */ 
+/** @file
+ */
+
+#include <async.h>
+#include <ipc/fb.h>
+#include <ipc/ipc.h>
+#include <libc.h>
+#include <errno.h>
+#include <string.h>
+#include <libc.h>
+#include <stdio.h>
+
+#include "sysio.h"
+
+#define WIDTH 80
+#define HEIGHT 25
+
+/* Allow only 1 connection */
+static int client_connected = 0;
+
+static void sysput(char c)
+{
+	__SYSCALL3(SYS_IO, 1, (sysarg_t)&c, (sysarg_t) 1);
+}
+
+static void sysputs(char *s)
+{
+	while (*s) {
+		sysput(*(s++));
+	}
+//	__SYSCALL3(SYS_IO, 1, (sysarg_t)s, strlen(s));
+}
+
+/** Send clearscreen sequence to console */
+static void clrscr(void)
+{
+	sysputs("\033[2J");
+}
+
+/** Send ansi sequence to console to change cursor position */
+static void curs_goto(unsigned int row, unsigned int col)
+{
+	char control[20];
+
+	if (row > 200 || col > 200)
+		return;
+
+	snprintf(control, 20, "\033[%d;%df",row+1, col+1);
+	sysputs(control);
+}
+
+static void set_style(int mode)
+{
+	char control[20];
+	
+	snprintf(control, 20, "\033[%dm", mode);
+	sysputs(control);
+}
+
+static void scroll(int i)
+{
+	if (i > 0) {
+		curs_goto(HEIGHT-1, 0);
+		while (i--)
+			sysputs("\033D");
+	} else if (i < 0) {
+		curs_goto(0,0);
+		while (i++)
+			sysputs("\033M");
+	}
+}
+
+/** ANSI terminal emulation main thread */
+static void sysio_client_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	int retval;
+	ipc_callid_t callid;
+	ipc_call_t call;
+	char c;
+	int lastcol=0;
+	int lastrow=0;
+	int newcol,newrow;
+	int fgcolor,bgcolor;
+	int i;
+
+	if (client_connected) {
+		ipc_answer_fast(iid, ELIMIT, 0,0);
+		return;
+	}
+	
+	client_connected = 1;
+	ipc_answer_fast(iid, 0, 0, 0); /* Accept connection */
+	while (1) {
+		callid = async_get_call(&call);
+		switch (IPC_GET_METHOD(call)) {
+			case IPC_M_PHONE_HUNGUP:
+				client_connected = 0;
+				ipc_answer_fast(callid, 0, 0, 0);
+				return; /* Exit thread */
+			case FB_PUTCHAR:
+				c = IPC_GET_ARG1(call);
+				newrow = IPC_GET_ARG2(call);
+				newcol = IPC_GET_ARG3(call);
+				if ((lastcol != newcol) || (lastrow != newrow))
+					curs_goto(newrow, newcol);
+				lastcol = newcol + 1;
+				lastrow = newrow;
+				sysput(c);
+				retval = 0;
+				break;
+			case FB_CURSOR_GOTO:
+				newrow = IPC_GET_ARG1(call);
+				newcol = IPC_GET_ARG2(call);
+				curs_goto(newrow, newcol);
+				lastrow = newrow;
+				lastcol = newcol;
+				retval = 0;
+				break;
+			case FB_GET_CSIZE:
+				ipc_answer_fast(callid, 0, HEIGHT, WIDTH);
+				continue;
+			case FB_CLEAR:
+				clrscr();
+				retval = 0;
+				break;
+			case FB_SET_STYLE:
+				fgcolor = IPC_GET_ARG1(call);
+				bgcolor = IPC_GET_ARG2(call);
+				if (fgcolor < bgcolor)
+					set_style(0);
+				else
+					set_style(7);
+				retval = 0;
+				break;
+			case FB_SCROLL:
+				i = IPC_GET_ARG1(call);
+				if ((i > HEIGHT) || (i < -HEIGHT)) {
+					retval = EINVAL;
+					break;
+				}
+				scroll(i);
+				curs_goto(lastrow, lastcol);
+				retval = 0;
+				break;
+			default:
+				retval = ENOENT;
+		}
+		
+		ipc_answer_fast(callid, retval, 0, 0);
+	}
+}
+
+/** ANSI terminal emulation initialization */
+void sysio_init(void)
+{
+	async_set_client_connection(sysio_client_connection);
+	clrscr();
+	curs_goto(0,0);
+	/* Set scrolling region to 0-25 lines */
+	sysputs("\033[0;25r");
+}
+
+/**
+ * @}
+ */
Index: uspace/srv/fb/sysio.h
===================================================================
--- uspace/srv/fb/sysio.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fb/sysio.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup sysio
+ * @brief	HelenOS framebuffer emulation via kernel.
+ * @ingroup fbs
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef FB_SYSIO_H_
+#define FB_SYSIO_H_
+
+extern void sysio_init(void);
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/fs/Makefile
===================================================================
--- uspace/srv/fs/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fs/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = fs
+SOURCES = \
+	fs.c
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/srv/fs/fs.c
===================================================================
--- uspace/srv/fs/fs.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/fs/fs.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup fs
+ * @{
+ */ 
+
+/**
+ * @file	fs.c
+ * @brief	File system driver for HelenOS.
+ */
+
+
+int main(int argc, char **argv)
+{
+	return 0;
+}
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/Makefile
===================================================================
--- uspace/srv/kbd/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,115 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain 
+include ../../../Makefile.config
+
+CFLAGS += -Iinclude -I../libadt/include
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = kbd
+GENERIC_SOURCES = \
+	generic/kbd.c \
+	generic/key_buffer.c
+
+ARCH_SOURCES = \
+	arch/$(ARCH)/src/kbd.c
+
+ifeq ($(ARCH), ia32)
+	ARCH_SOURCES += \
+		arch/$(ARCH)/src/mouse.c \
+		arch/$(ARCH)/src/scanc.c
+	GENARCH_SOURCES = \
+		genarch/src/kbd.c
+	CFLAGS += -DMOUSE_ENABLED
+endif
+ifeq ($(ARCH), amd64)
+	ARCH_SOURCES += \
+		arch/$(ARCH)/src/mouse.c \
+		arch/$(ARCH)/src/scanc.c
+	GENARCH_SOURCES = \
+		genarch/src/kbd.c
+	CFLAGS += -DMOUSE_ENABLED
+endif
+ifeq ($(ARCH), sparc64)
+	ARCH_SOURCES += \
+		arch/$(ARCH)/src/scanc.c
+	GENARCH_SOURCES = \
+		genarch/src/kbd.c
+endif
+ifeq ($(ARCH), arm32)
+ifeq ($(MACHINE), gxemul_testarm)
+	ARCH_SOURCES += \
+		arch/$(ARCH)/src/kbd_gxemul.c
+endif
+endif
+
+
+GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
+ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
+GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES)))
+
+.PHONY: all clean depend disasm links
+
+all: links $(OUTPUT) disasm
+
+-include Makefile.depend
+
+links:
+	ln -sfn ../arch/$(ARCH)/include include/arch
+	ln -sfn ../genarch/include include/genarch
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend include/arch include/genarch
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(ARCH_OBJECTS) $(GENERIC_OBJECTS) $(GENARCH_OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(GENERIC_OBJECTS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/srv/kbd/arch/amd64
===================================================================
--- uspace/srv/kbd/arch/amd64	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/amd64	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+ia32
Index: uspace/srv/kbd/arch/arm32/include/kbd.h
===================================================================
--- uspace/srv/kbd/arch/arm32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/arm32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdarm32
+ * @{
+ */ 
+/** @file
+ *  @brief Empty.
+ */
+
+#ifndef KBD_arm32_KBD_H_
+#define KBD_arm32_KBD_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/arm32/src/kbd.c
===================================================================
--- uspace/srv/kbd/arch/arm32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/arm32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdarm32 arm32
+ * @brief	HelenOS arm32 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ *  @brief Empty, required by generic Makefile.
+ */
+
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/arm32/src/kbd_gxemul.c
===================================================================
--- uspace/srv/kbd/arch/arm32/src/kbd_gxemul.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/arm32/src/kbd_gxemul.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,424 @@
+/*
+ * Copyright (c) 2007 Michal Kebrt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdarm32gxemul GXemul
+ * @brief	HelenOS arm32 GXEmul uspace keyboard handler.
+ * @ingroup  kbdarm32
+ * @{
+ */ 
+/** @file
+ *  @brief GXemul uspace keyboard handler.
+ */
+
+#include <ipc/ipc.h>
+#include <sysinfo.h>
+#include <kbd.h>
+#include <keys.h>
+#include <bool.h>
+
+
+/* GXemul key codes in no-framebuffer mode. */
+#define GXEMUL_KEY_F1  0x504f1bL
+#define GXEMUL_KEY_F2  0x514f1bL
+#define GXEMUL_KEY_F3  0x524f1bL
+#define GXEMUL_KEY_F4  0x534f1bL
+#define GXEMUL_KEY_F5  0x35315b1bL
+#define GXEMUL_KEY_F6  0x37315b1bL
+#define GXEMUL_KEY_F7  0x38315b1bL
+#define GXEMUL_KEY_F8  0x39315b1bL
+#define GXEMUL_KEY_F9  0x30325b1bL
+#define GXEMUL_KEY_F10 0x31325b1bL
+#define GXEMUL_KEY_F11 0x33325d1bL
+#define GXEMUL_KEY_F12 0x34325b1bL 
+
+/** Start code of F5-F12 keys. */
+#define GXEMUL_KEY_F5_F12_START_CODE 0x7e
+
+/* GXemul key codes in framebuffer mode. */
+#define GXEMUL_FB_KEY_F1 0x504f5b1bL
+#define GXEMUL_FB_KEY_F2 0x514f5b1bL
+#define GXEMUL_FB_KEY_F3 0x524f5b1bL
+#define GXEMUL_FB_KEY_F4 0x534f5b1bL
+#define GXEMUL_FB_KEY_F5 0x35315b1bL
+#define GXEMUL_FB_KEY_F6 0x37315b1bL
+#define GXEMUL_FB_KEY_F7 0x38315b1bL
+#define GXEMUL_FB_KEY_F8 0x39315b1bL
+#define GXEMUL_FB_KEY_F9 0x38325b1bL
+#define GXEMUL_FB_KEY_F10 0x39325b1bL
+#define GXEMUL_FB_KEY_F11 0x33325b1bL
+#define GXEMUL_FB_KEY_F12 0x34325b1bL
+
+
+/** Function keys start code (F1=0x101) */
+#define FUNCTION_KEYS 0x100
+
+static irq_cmd_t gxemul_cmds[] = {
+	{ 
+		CMD_MEM_READ_1, 
+		(void *) 0, 
+		0, 
+		2
+	}
+};
+
+static irq_code_t gxemul_kbd = {
+	1,
+	gxemul_cmds
+};
+
+
+/** Framebuffer switched on. */
+static bool fb;
+
+
+/*
+// Please preserve this code (it can be used to determine scancodes)
+int to_hex(int v) 
+{
+        return "0123456789ABCDEF"[v];
+}
+*/
+
+
+/** Process data sent when a key is pressed (in no-framebuffer mode).
+ *  
+ *  @param keybuffer Buffer of pressed key.
+ *  @param scan_code Scan code.
+ *
+ *  @return Always 1.
+ */
+static int gxemul_kbd_process_no_fb(keybuffer_t *keybuffer, int scan_code)
+{
+	// holds at most 4 latest scan codes
+	static unsigned long buf = 0;
+
+	// number of scan codes in #buf
+	static int count = 0;	
+
+	/*
+	// Preserve for detecting scan codes. 
+	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
+	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
+	keybuffer_push(keybuffer, 'X');
+	keybuffer_push(keybuffer, 'Y');
+	return 1;
+	*/
+
+	if (scan_code == '\r') {
+		scan_code = '\n';
+	}
+	
+	if (scan_code == GXEMUL_KEY_F5_F12_START_CODE) {
+		switch (buf) {
+		case GXEMUL_KEY_F5:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
+			buf = count = 0;
+			return 1;
+		case GXEMUL_KEY_F6:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
+			buf = count = 0;
+			return 1;
+		case GXEMUL_KEY_F7:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
+			buf = count = 0;
+			return 1;
+		case GXEMUL_KEY_F8:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
+			buf = count = 0;
+			return 1;
+		case GXEMUL_KEY_F9:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
+			buf = count = 0;
+			return 1;
+		case GXEMUL_KEY_F10:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
+			buf = count = 0;
+			return 1;
+		case GXEMUL_KEY_F11:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
+			buf = count = 0;
+			return 1;
+		case GXEMUL_KEY_F12:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
+			buf = count = 0;
+			return 1;
+		default:
+			keybuffer_push(keybuffer, buf & 0xff);
+			keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
+			keybuffer_push(keybuffer, (buf >> 16) & 0xff);
+			keybuffer_push(keybuffer, (buf >> 24) & 0xff);
+			keybuffer_push(keybuffer, scan_code);
+			buf = count = 0;
+			return 1;
+		}
+	}
+
+	// add to buffer
+	buf |= ((unsigned long) scan_code) << (8 * (count++));
+	
+	if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) {
+		keybuffer_push(keybuffer, buf);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 1) { 
+		return 1;
+	}
+
+	if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff) 
+		&& (buf & 0xffff) != (GXEMUL_KEY_F5 & 0xffff) ) {
+
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) &0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 2) {
+		return 1;
+	}
+
+	switch (buf) {
+	case GXEMUL_KEY_F1:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
+		buf = count = 0;
+		return 1;
+	case GXEMUL_KEY_F2:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
+		buf = count = 0;
+		return 1;
+	case GXEMUL_KEY_F3:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
+		buf = count = 0;
+		return 1;
+	case GXEMUL_KEY_F4:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
+		buf = count = 0;
+		return 1;
+	}
+
+
+	if ((buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
+		&& (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) {
+
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
+		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 3) {
+		return 1;
+	}
+	
+	switch (buf) {
+	case GXEMUL_KEY_F5:
+	case GXEMUL_KEY_F6:
+	case GXEMUL_KEY_F7:
+	case GXEMUL_KEY_F8:
+	case GXEMUL_KEY_F9:
+	case GXEMUL_KEY_F10:
+	case GXEMUL_KEY_F11:
+	case GXEMUL_KEY_F12:
+		return 1;
+	default:
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
+		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
+		keybuffer_push(keybuffer, (buf >> 24) & 0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	return 1;
+}
+
+
+/** Process data sent when a key is pressed (in framebuffer mode).
+ *  
+ *  @param keybuffer Buffer of pressed keys.
+ *  @param scan_code Scan code.
+ *
+ *  @return Always 1.
+ */
+static int gxemul_kbd_process_fb(keybuffer_t *keybuffer, int scan_code)
+{
+	// holds at most 4 latest scan codes
+	static unsigned long buf = 0;
+
+	// number of scan codes in #buf
+	static int count = 0;	
+
+	/*
+	// Please preserve this code (it can be used to determine scancodes)
+	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
+	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
+	keybuffer_push(keybuffer, ' ');
+	keybuffer_push(keybuffer, ' ');
+	return 1;
+	*/
+	
+	if (scan_code == '\r') {
+		scan_code = '\n';
+	}
+	
+	// add to buffer
+	buf |= ((unsigned long) scan_code) << (8*(count++));
+	
+	
+	if ((buf & 0xff) != (GXEMUL_FB_KEY_F1 & 0xff)) {
+		keybuffer_push(keybuffer, buf);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 1) {
+		return 1;
+	}
+
+	if ((buf & 0xffff) != (GXEMUL_FB_KEY_F1 & 0xffff)) {
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) &0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 2) {
+		return 1;
+	}
+
+	if ((buf & 0xffffff) != (GXEMUL_FB_KEY_F1 & 0xffffff)
+		&& (buf & 0xffffff) != (GXEMUL_FB_KEY_F5 & 0xffffff)
+		&& (buf & 0xffffff) != (GXEMUL_FB_KEY_F9 & 0xffffff)) {
+
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
+		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 3) {
+		return 1;
+	}
+
+	switch (buf) {
+	case GXEMUL_FB_KEY_F1:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F2:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F3:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F4:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F5:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F6:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F7:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F8:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F9:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F10:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F11:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
+		buf = count = 0;
+		return 1;
+	case GXEMUL_FB_KEY_F12:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
+		buf = count = 0;
+		return 1;
+	default:
+		keybuffer_push(keybuffer, buf & 0xff );
+		keybuffer_push(keybuffer, (buf >> 8)  & 0xff);
+		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
+		keybuffer_push(keybuffer, (buf >> 24) & 0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	return 1;
+}
+
+
+/** Initializes keyboard handler. */
+int kbd_arch_init(void)
+{
+	fb = (sysinfo_value("fb.kind") == 1);
+	gxemul_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual");
+	ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &gxemul_kbd);
+	return 0;
+}
+
+
+/** Process data sent when a key is pressed.
+ *  
+ *  @param keybuffer Buffer of pressed keys.
+ *  @param call      IPC call.
+ *
+ *  @return Always 1.
+ */
+int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
+{
+	int scan_code = IPC_GET_ARG2(*call);
+
+	if (fb) {
+		return gxemul_kbd_process_fb(keybuffer, scan_code);
+	} else {
+		return gxemul_kbd_process_no_fb(keybuffer, scan_code);
+	}
+
+}
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/ia32/include/kbd.h
===================================================================
--- uspace/srv/kbd/arch/ia32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ia32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdamd64 amd64
+ * @brief	HelenOS ia32 / amd64 arch dependent parts of uspace keyboard and mouse handler.
+ * @ingroup  kbd
+ * @{
+ */
+
+/** @file
+ * @ingroup kbdia32
+ */
+
+#ifndef KBD_ia32_KBD_H_
+#define KBD_ia32_KBD_H_
+
+#include <ddi.h>
+#include <libarch/ddi.h>
+
+#define i8042_DATA      0x60
+#define i8042_STATUS    0X64
+
+
+typedef unsigned char u8;
+typedef short u16;
+
+static inline void i8042_data_write(u8 data)
+{
+	outb(i8042_DATA, data);
+}
+
+static inline u8 i8042_data_read(void)
+{
+	return inb(i8042_DATA);
+}
+
+static inline u8 i8042_status_read(void)
+{
+	return inb(i8042_STATUS);
+}
+
+static inline void i8042_command_write(u8 command)
+{
+	outb(i8042_STATUS, command);
+}
+
+#endif
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/arch/ia32/include/scanc.h
===================================================================
--- uspace/srv/kbd/arch/ia32/include/scanc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ia32/include/scanc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdia32
+ * @{
+ */ 
+/** @file
+ * @ingroup kbdamd64
+ */
+
+#ifndef KBD_ia32_SCANC_H_
+#define KBD_ia32_SCANC_H_
+
+/** Scancodes. */
+#define SC_ESC		0x01
+#define SC_BACKSPACE	0x0e
+#define SC_LSHIFT	0x2a
+#define SC_RSHIFT	0x36
+#define SC_CAPSLOCK	0x3a
+#define SC_SPEC_ESCAPE  0xe0
+#define SC_LEFTARR      0x4b
+#define SC_RIGHTARR     0x4d
+#define SC_UPARR        0x48
+#define SC_DOWNARR      0x50
+#define SC_DELETE       0x53
+#define SC_HOME         0x47
+#define SC_END          0x4f
+
+#endif
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/arch/ia32/src/kbd.c
===================================================================
--- uspace/srv/kbd/arch/ia32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ia32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdia32 ia32
+ * @brief	HelenOS ia32 / amd64 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ * @ingroup kbdamd64
+ */
+
+#include <arch/kbd.h>
+#include <ipc/ipc.h>
+#include <unistd.h>
+#include <kbd.h>
+#include <keys.h>
+#include <genarch/kbd.h>
+#include <sysinfo.h>
+
+/* Interesting bits for status register */
+#define i8042_OUTPUT_FULL  0x1
+#define i8042_INPUT_FULL   0x2
+#define i8042_MOUSE_DATA   0x20
+
+/* Command constants */
+#define i8042_CMD_KBD 0x60
+#define i8042_CMD_MOUSE  0xd4
+
+/* Keyboard cmd byte */
+#define i8042_KBD_IE        0x1
+#define i8042_MOUSE_IE      0x2
+#define i8042_KBD_DISABLE   0x10
+#define i8042_MOUSE_DISABLE 0x20
+#define i8042_KBD_TRANSLATE 0x40
+
+/* Mouse constants */
+#define MOUSE_OUT_INIT  0xf4
+#define MOUSE_ACK       0xfa
+
+#define KEY_RELEASE	0x80
+
+static volatile int keyflags;		/**< Tracking of multiple keypresses. */
+static volatile int lockflags;		/**< Tracking of multiple keys lockings. */
+
+irq_cmd_t i8042_cmds[2] = {
+	{ CMD_PORT_READ_1, (void *) 0x64, 0, 1 },
+	{ CMD_PORT_READ_1, (void *) 0x60, 0, 2 }
+};
+
+irq_code_t i8042_kbd = {
+	2,
+	i8042_cmds
+};
+
+static void wait_ready(void) {
+	while (i8042_status_read() & i8042_INPUT_FULL)
+		;
+}
+
+/** Register uspace irq handler
+ * @return 
+ */
+int kbd_arch_init(void)
+{
+	int i;
+	int mouseenabled = 0;
+
+	iospace_enable(task_get_id(), (void *) i8042_DATA, 5);
+	/* Disable kbd, enable mouse */
+	i8042_command_write(i8042_CMD_KBD);
+	wait_ready();
+	i8042_command_write(i8042_CMD_KBD);
+	wait_ready();
+	i8042_data_write(i8042_KBD_DISABLE);
+	wait_ready();
+
+	/* Flush all current IO */
+	while (i8042_status_read() & i8042_OUTPUT_FULL)
+		i8042_data_read();
+	
+	/* Initialize mouse */
+	i8042_command_write(i8042_CMD_MOUSE);
+	wait_ready();
+	i8042_data_write(MOUSE_OUT_INIT);
+	wait_ready();
+	
+	int mouseanswer = 0;
+	for (i=0;i < 1000; i++) {
+		int status = i8042_status_read();
+		if (status & i8042_OUTPUT_FULL) {
+			int data = i8042_data_read();
+			if (status & i8042_MOUSE_DATA) {
+				mouseanswer = data;
+				break;
+			}
+		}
+		usleep(1000);
+	}
+	if (mouseanswer == MOUSE_ACK) {
+		/* enable mouse */
+		mouseenabled = 1;
+		
+		ipc_register_irq(sysinfo_value("mouse.inr"), sysinfo_value("mouse.devno"), 0, &i8042_kbd);
+	}
+	/* Enable kbd */
+	ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &i8042_kbd);
+
+	int newcontrol = i8042_KBD_IE | i8042_KBD_TRANSLATE;
+	if (mouseenabled)
+		newcontrol |= i8042_MOUSE_IE;
+	
+	i8042_command_write(i8042_CMD_KBD);
+	wait_ready();
+	i8042_data_write(newcontrol);
+	wait_ready();
+	
+	return 0;
+}
+
+/** Process keyboard & mouse events */
+int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
+{
+	int status = IPC_GET_ARG1(*call);
+
+	if ((status & i8042_MOUSE_DATA))
+		return 0;
+	
+	int scan_code = IPC_GET_ARG2(*call);
+	
+	if (scan_code & KEY_RELEASE)
+		key_released(keybuffer, scan_code ^ KEY_RELEASE);
+	else
+		key_pressed(keybuffer, scan_code);
+	return 	1;
+}
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/arch/ia32/src/mouse.c
===================================================================
--- uspace/srv/kbd/arch/ia32/src/mouse.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ia32/src/mouse.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <ipc/ipc.h>
+#include <async.h>
+#include <kbd.h>
+#include <keys.h>
+
+#define i8042_MOUSE_DATA   0x20
+
+#define BUFSIZE 3
+
+typedef struct {
+	union {
+		unsigned char data[BUFSIZE];
+		struct {
+			unsigned leftbtn : 1;
+			unsigned rightbtn : 1;
+			unsigned middlebtn : 1;
+			unsigned isone : 1; /* Always one */
+			unsigned xsign : 1;
+			unsigned ysign : 1;
+			unsigned xovfl : 1;
+			unsigned yovfl : 1;
+			unsigned char x;
+			unsigned char y;
+		} val;
+	}u;
+}ps2packet_t;
+
+static ps2packet_t buf;
+static int bufpos = 0;
+static int leftbtn = 0;
+static int rightbtn = 0;
+static int middlebtn = 0;
+
+/** Convert 9-bit 2-complement signed number to integer */
+static int bit9toint(int sign, unsigned char data)
+{
+	int tmp;
+
+	if (!sign)
+		return data;
+
+	tmp = ((unsigned char)~data) + 1;
+	return -tmp;
+}
+
+/** Process mouse data
+ *
+ * @return True if mouse command was recognized and processed
+ */
+int mouse_arch_process(int phoneid, ipc_call_t *call)
+{
+	int status = IPC_GET_ARG1(*call);
+	int data = IPC_GET_ARG2(*call);
+	int x,y;
+
+	if (!(status & i8042_MOUSE_DATA))
+		return 0;
+
+	/* Check that we have not lost synchronization */
+	if (bufpos == 0 && !(data & 0x8))
+		return 1; /* Synchro lost, ignore byte */
+
+	buf.u.data[bufpos++] = data;
+	if (bufpos == BUFSIZE) {
+		bufpos = 0;
+		if (phoneid != -1) {
+			if (buf.u.val.leftbtn ^ leftbtn) {
+				leftbtn = buf.u.val.leftbtn;
+				async_msg(phoneid, KBD_MS_LEFT, leftbtn);
+			}
+			if (buf.u.val.rightbtn & rightbtn) {
+				rightbtn = buf.u.val.middlebtn;
+				async_msg(phoneid, KBD_MS_RIGHT, rightbtn);
+			}
+			if (buf.u.val.rightbtn & rightbtn) {
+				middlebtn = buf.u.val.middlebtn;
+				async_msg(phoneid, KBD_MS_MIDDLE, middlebtn);
+			}
+			x = bit9toint(buf.u.val.xsign, buf.u.val.x);
+			y = bit9toint(buf.u.val.ysign, buf.u.val.y);
+			if (x || y)
+				async_msg_2(phoneid, KBD_MS_MOVE, (ipcarg_t)x, (ipcarg_t)(-y));
+		}
+	}
+
+	
+	return 1;
+}
Index: uspace/srv/kbd/arch/ia32/src/scanc.c
===================================================================
--- uspace/srv/kbd/arch/ia32/src/scanc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ia32/src/scanc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,202 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdia32
+ * @brief	Scancodes for PC keyboards.
+ * @{
+ */ 
+/** @file
+ * @ingroup kbdamd64
+ */
+
+#include <genarch/scanc.h>
+
+/** Primary meaning of scancodes. */
+int sc_primary_map[] = {
+	SPECIAL, /* 0x00 */
+	SPECIAL, /* 0x01 - Esc */
+	'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=',
+	'\b', /* 0x0e - Backspace */
+	'\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
+	SPECIAL, /* 0x1d - LCtrl */
+	'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
+	'`',
+	SPECIAL, /* 0x2a - LShift */ 
+	'\\',
+	'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/',
+	SPECIAL, /* 0x36 - RShift */
+	'*',
+	SPECIAL, /* 0x38 - LAlt */
+	' ',
+	SPECIAL, /* 0x3a - CapsLock */
+	(FUNCTION_KEYS | 1), /* 0x3b - F1 */
+	(FUNCTION_KEYS | 2), /* 0x3c - F2 */
+	(FUNCTION_KEYS | 3), /* 0x3d - F3 */
+	(FUNCTION_KEYS | 4), /* 0x3e - F4 */
+	(FUNCTION_KEYS | 5), /* 0x3f - F5 */
+	(FUNCTION_KEYS | 6), /* 0x40 - F6 */
+	(FUNCTION_KEYS | 7), /* 0x41 - F7 */
+	(FUNCTION_KEYS | 8), /* 0x42 - F8 */
+	(FUNCTION_KEYS | 9), /* 0x43 - F9 */
+	(FUNCTION_KEYS | 10), /* 0x44 - F10 */
+	SPECIAL, /* 0x45 - NumLock */
+	SPECIAL, /* 0x46 - ScrollLock */
+	'7', '8', '9', '-',
+	'4', '5', '6', '+',
+	'1', '2', '3',
+	'0', '.',
+	SPECIAL, /* 0x54 - Alt-SysRq */
+	SPECIAL, /* 0x55 - F11/F12/PF1/FN */
+	SPECIAL, /* 0x56 - unlabelled key next to LAlt */
+	(FUNCTION_KEYS | 11), /* 0x57 - F11 */
+	(FUNCTION_KEYS | 12), /* 0x58 - F12 */
+	SPECIAL, /* 0x59 */
+	SPECIAL, /* 0x5a */
+	SPECIAL, /* 0x5b */
+	SPECIAL, /* 0x5c */
+	SPECIAL, /* 0x5d */
+	SPECIAL, /* 0x5e */
+	SPECIAL, /* 0x5f */
+	SPECIAL, /* 0x60 */
+	SPECIAL, /* 0x61 */
+	SPECIAL, /* 0x62 */
+	SPECIAL, /* 0x63 */
+	SPECIAL, /* 0x64 */
+	SPECIAL, /* 0x65 */
+	SPECIAL, /* 0x66 */
+	SPECIAL, /* 0x67 */
+	SPECIAL, /* 0x68 */
+	SPECIAL, /* 0x69 */
+	SPECIAL, /* 0x6a */
+	SPECIAL, /* 0x6b */
+	SPECIAL, /* 0x6c */
+	SPECIAL, /* 0x6d */
+	SPECIAL, /* 0x6e */
+	SPECIAL, /* 0x6f */
+	SPECIAL, /* 0x70 */
+	SPECIAL, /* 0x71 */
+	SPECIAL, /* 0x72 */
+	SPECIAL, /* 0x73 */
+	SPECIAL, /* 0x74 */
+	SPECIAL, /* 0x75 */
+	SPECIAL, /* 0x76 */
+	SPECIAL, /* 0x77 */
+	SPECIAL, /* 0x78 */
+	SPECIAL, /* 0x79 */
+	SPECIAL, /* 0x7a */
+	SPECIAL, /* 0x7b */
+	SPECIAL, /* 0x7c */
+	SPECIAL, /* 0x7d */
+	SPECIAL, /* 0x7e */
+	SPECIAL, /* 0x7f */
+};
+
+/** Secondary meaning of scancodes. */
+int sc_secondary_map[] = {
+	SPECIAL, /* 0x00 */
+	0x1b, /* 0x01 - Esc */
+	'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+',
+	SPECIAL, /* 0x0e - Backspace */
+	'\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\n',
+	SPECIAL, /* 0x1d - LCtrl */
+	'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"',
+	'~',
+	SPECIAL, /* 0x2a - LShift */ 
+	'|',
+	'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?',
+	SPECIAL, /* 0x36 - RShift */
+	'*',
+	SPECIAL, /* 0x38 - LAlt */
+	' ',
+	SPECIAL, /* 0x3a - CapsLock */
+	SPECIAL, /* 0x3b - F1 */
+	SPECIAL, /* 0x3c - F2 */
+	SPECIAL, /* 0x3d - F3 */
+	SPECIAL, /* 0x3e - F4 */
+	SPECIAL, /* 0x3f - F5 */
+	SPECIAL, /* 0x40 - F6 */
+	SPECIAL, /* 0x41 - F7 */
+	SPECIAL, /* 0x42 - F8 */
+	SPECIAL, /* 0x43 - F9 */
+	SPECIAL, /* 0x44 - F10 */
+	SPECIAL, /* 0x45 - NumLock */
+	SPECIAL, /* 0x46 - ScrollLock */
+	'7', '8', '9', '-',
+	'4', '5', '6', '+',
+	'1', '2', '3',
+	'0', '.',
+	SPECIAL, /* 0x54 - Alt-SysRq */
+	SPECIAL, /* 0x55 - F11/F12/PF1/FN */
+	SPECIAL, /* 0x56 - unlabelled key next to LAlt */
+	SPECIAL, /* 0x57 - F11 */
+	SPECIAL, /* 0x58 - F12 */
+	SPECIAL, /* 0x59 */
+	SPECIAL, /* 0x5a */
+	SPECIAL, /* 0x5b */
+	SPECIAL, /* 0x5c */
+	SPECIAL, /* 0x5d */
+	SPECIAL, /* 0x5e */
+	SPECIAL, /* 0x5f */
+	SPECIAL, /* 0x60 */
+	SPECIAL, /* 0x61 */
+	SPECIAL, /* 0x62 */
+	SPECIAL, /* 0x63 */
+	SPECIAL, /* 0x64 */
+	SPECIAL, /* 0x65 */
+	SPECIAL, /* 0x66 */
+	SPECIAL, /* 0x67 */
+	SPECIAL, /* 0x68 */
+	SPECIAL, /* 0x69 */
+	SPECIAL, /* 0x6a */
+	SPECIAL, /* 0x6b */
+	SPECIAL, /* 0x6c */
+	SPECIAL, /* 0x6d */
+	SPECIAL, /* 0x6e */
+	SPECIAL, /* 0x6f */
+	SPECIAL, /* 0x70 */
+	SPECIAL, /* 0x71 */
+	SPECIAL, /* 0x72 */
+	SPECIAL, /* 0x73 */
+	SPECIAL, /* 0x74 */
+	SPECIAL, /* 0x75 */
+	SPECIAL, /* 0x76 */
+	SPECIAL, /* 0x77 */
+	SPECIAL, /* 0x78 */
+	SPECIAL, /* 0x79 */
+	SPECIAL, /* 0x7a */
+	SPECIAL, /* 0x7b */
+	SPECIAL, /* 0x7c */
+	SPECIAL, /* 0x7d */
+	SPECIAL, /* 0x7e */
+	SPECIAL, /* 0x7f */	
+};
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/arch/ia64/include/kbd.h
===================================================================
--- uspace/srv/kbd/arch/ia64/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ia64/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdia64 ia64
+ * @brief	HelenOS ia64 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_ia64_KBD_H_
+#define KBD_ia64_KBD_H_
+
+#endif
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/arch/ia64/src/kbd.c
===================================================================
--- uspace/srv/kbd/arch/ia64/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ia64/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdia64 ia64
+ * @brief	HelenOS ia64 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#include <arch/kbd.h>
+#include <ipc/ipc.h>
+#include <sysinfo.h>
+#include <kbd.h>
+#include <keys.h>
+
+#define KEY_F1 0x504f1b
+#define KEY_F2 0x514f1b
+#define KEY_F3 0x524f1b
+#define KEY_F4 0x534f1b
+#define KEY_F5 0x7e35315b1b
+#define KEY_F6 0x7e37315b1b
+#define KEY_F7 0x7e38315b1b
+#define KEY_F8 0x7e39315b1b
+#define KEY_F9 0x7e30325b1b
+#define KEY_F10 0x7e31325b1b
+#define KEY_F11 0x7e33325b1b
+#define KEY_F12 0x7e34325b1b
+
+#define FUNCTION_KEYS 0x100
+
+irq_cmd_t ski_cmds[1] = {
+	{ CMD_IA64_GETCHAR, 0, 0, 2 }
+};
+
+irq_code_t ski_kbd = {
+	1,
+	ski_cmds
+};
+
+int kbd_arch_init(void)
+{
+	if (sysinfo_value("kbd")) {
+		ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &ski_kbd);
+		return 0;
+	}	
+	return 1;
+}
+
+/*
+* Please preserve this code (it can be used to determine scancodes)
+*
+int to_hex(int v) 
+{
+    return "0123456789ABCDEF"[v];
+}
+*/
+
+int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
+{
+	static unsigned long long buf = 0;
+	static int count = 0;	
+	static int esc_count = 0;
+	int scan_code = IPC_GET_ARG2(*call);
+
+	/*
+	 * Please preserve this code (it can be used to determine scancodes)
+	 */
+	//keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
+	//keybuffer_push(keybuffer, to_hex(scan_code&0xf));
+	//keybuffer_push(keybuffer, ' ');
+	//keybuffer_push(keybuffer, ' ');
+	//*/
+	
+	if (scan_code) {
+		buf |= (unsigned long long) scan_code<<(8*(count++));
+	} else {
+		
+		if (buf == 0x1b) {
+			esc_count++;
+			if (esc_count == 3) {
+				__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
+			}	
+		} else {
+			esc_count = 0;
+		}
+	
+		if (!(buf & 0xff00)) {
+			keybuffer_push(keybuffer, buf);
+		} else {
+			switch (buf) {
+			case KEY_F1:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 1);
+				break;
+			case KEY_F2:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 2);
+				break;
+			case KEY_F3:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 3);
+				break;
+			case KEY_F4:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 4);
+				break;
+			case KEY_F5:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 5);
+				break;
+			case KEY_F6:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 6);
+				break;
+			case KEY_F7:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 7);
+				break;
+			case KEY_F8:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 8);
+				break;
+			case KEY_F9:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 9);
+				break;
+			case KEY_F10:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 10);
+				break;
+			case KEY_F11:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 11);
+				break;
+			case KEY_F12:
+				keybuffer_push(keybuffer, FUNCTION_KEYS | 12);
+				break;
+			}
+		}
+		buf = count = 0;
+	}
+
+	return 	1;
+}
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/arch/mips32/include/kbd.h
===================================================================
--- uspace/srv/kbd/arch/mips32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/mips32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdmips32 mips32
+ * @brief	HelenOS mips32 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_mips32_KBD_H_
+#define KBD_mips32_KBD_H_
+
+#endif
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/arch/mips32/src/kbd.c
===================================================================
--- uspace/srv/kbd/arch/mips32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/mips32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,377 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdmips32 mips32
+ * @brief	HelenOS mips32 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+#include <arch/kbd.h>
+#include <ipc/ipc.h>
+#include <sysinfo.h>
+#include <kbd.h>
+#include <keys.h>
+
+#define MSIM_KEY_F1 0x504f1bL
+#define MSIM_KEY_F2 0x514f1bL
+#define MSIM_KEY_F3 0x524f1bL
+#define MSIM_KEY_F4 0x534f1bL
+#define MSIM_KEY_F5 0x35315b1bL
+#define MSIM_KEY_F6 0x37315b1bL
+#define MSIM_KEY_F7 0x38315b1bL
+#define MSIM_KEY_F8 0x39315b1bL
+#define MSIM_KEY_F9 0x30325b1bL
+#define MSIM_KEY_F10 0x31325b1bL
+#define MSIM_KEY_F11 0x33325b1bL
+#define MSIM_KEY_F12 0x34325b1bL
+
+#define GXEMUL_KEY_F1 0x504f5b1bL
+#define GXEMUL_KEY_F2 0x514f5b1bL
+#define GXEMUL_KEY_F3 0x524f5b1bL
+#define GXEMUL_KEY_F4 0x534f5b1bL
+#define GXEMUL_KEY_F5 0x35315b1bL
+#define GXEMUL_KEY_F6 0x37315b1bL
+#define GXEMUL_KEY_F7 0x38315b1bL
+#define GXEMUL_KEY_F8 0x39315b1bL
+#define GXEMUL_KEY_F9 0x38325b1bL
+#define GXEMUL_KEY_F10 0x39325b1bL
+#define GXEMUL_KEY_F11 0x33325b1bL
+#define GXEMUL_KEY_F12 0x34325b1bL
+
+#define FUNCTION_KEYS 0x100
+
+irq_cmd_t msim_cmds[1] = {
+	{ CMD_MEM_READ_1, (void *) 0, 0, 2 }
+};
+
+irq_code_t msim_kbd = {
+	1,
+	msim_cmds
+};
+
+static int msim,gxemul;
+static int fb_fb;
+
+
+int kbd_arch_init(void)
+{
+	fb_fb = (sysinfo_value("fb.kind") == 1);
+	msim_cmds[0].addr = sysinfo_value("kbd.address.virtual");
+	ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &msim_kbd);
+	return 0;
+}
+
+
+/*
+//*
+//* Please preserve this code (it can be used to determine scancodes)
+//*
+int to_hex(int v) 
+{
+        return "0123456789ABCDEF"[v];
+}
+*/
+
+static int kbd_arch_process_no_fb(keybuffer_t *keybuffer, int scan_code)
+{
+
+	static unsigned long buf = 0;
+	static int count = 0;	
+
+	/* Please preserve this code (it can be used to determine scancodes)
+	
+	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
+	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
+	keybuffer_push(keybuffer, ' ');
+	keybuffer_push(keybuffer, ' ');
+	
+	return 1;
+	*/
+	
+	if(scan_code == 0x7e) {
+		switch (buf) {
+		case MSIM_KEY_F5:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 5);
+			buf = count = 0;
+			return 1;
+		case MSIM_KEY_F6:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 6);
+			buf = count = 0;
+			return 1;
+		case MSIM_KEY_F7:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 7);
+			buf = count = 0;
+			return 1;
+		case MSIM_KEY_F8:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 8);
+			buf = count = 0;
+			return 1;
+		case MSIM_KEY_F9:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 9);
+			buf = count = 0;
+			return 1;
+		case MSIM_KEY_F10:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 10);
+			buf = count = 0;
+			return 1;
+		case MSIM_KEY_F11:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 11);
+			buf = count = 0;
+			return 1;
+		case MSIM_KEY_F12:
+			keybuffer_push(keybuffer,FUNCTION_KEYS | 12);
+			buf = count = 0;
+			return 1;
+		default:
+			keybuffer_push(keybuffer, buf & 0xff);
+			keybuffer_push(keybuffer, (buf >> 8) &0xff);
+			keybuffer_push(keybuffer, (buf >> 16) &0xff);
+			keybuffer_push(keybuffer, (buf >> 24) &0xff);
+			keybuffer_push(keybuffer, scan_code);
+			buf = count = 0;
+			return 1;
+		}
+	}
+
+	buf |= ((unsigned long) scan_code)<<(8*(count++));
+	
+	if((buf & 0xff) != (MSIM_KEY_F1 & 0xff)) {
+		keybuffer_push(keybuffer, buf);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 1) 
+		return 1;
+
+	if ((buf & 0xffff) != (MSIM_KEY_F1 & 0xffff) 
+		&& (buf & 0xffff) != (MSIM_KEY_F5 & 0xffff) ) {
+
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) &0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 2) 
+		return 1;
+
+	switch (buf) {
+	case MSIM_KEY_F1:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 1);
+		buf = count = 0;
+		return 1;
+	case MSIM_KEY_F2:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 2);
+		buf = count = 0;
+		return 1;
+	case MSIM_KEY_F3:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 3);
+		buf = count = 0;
+		return 1;
+	case MSIM_KEY_F4:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 4);
+		buf = count = 0;
+		return 1;
+	}
+
+
+	if((buf & 0xffffff) != (MSIM_KEY_F5 & 0xffffff)
+		&& (buf & 0xffffff) != (MSIM_KEY_F9 & 0xffffff)) {
+
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
+		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
+		buf=count=0;
+		return 1;
+	}
+
+	if (count <= 3)
+		return 1;
+	
+	switch (buf) {
+	case MSIM_KEY_F5:
+	case MSIM_KEY_F6:
+	case MSIM_KEY_F7:
+	case MSIM_KEY_F8:
+	case MSIM_KEY_F9:
+	case MSIM_KEY_F10:
+	case MSIM_KEY_F11:
+	case MSIM_KEY_F12:
+		return 1;
+	default:
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) &0xff);
+		keybuffer_push(keybuffer, (buf >> 16) &0xff);
+		keybuffer_push(keybuffer, (buf >> 24) &0xff);
+		buf = count = 0;
+		return 1;
+	}
+	return 1;
+}
+
+
+
+static int kbd_arch_process_fb(keybuffer_t *keybuffer, int scan_code)
+{
+	static unsigned long buf = 0;
+	static int count = 0;
+
+	/* Please preserve this code (it can be used to determine scancodes)
+	
+	keybuffer_push(keybuffer, to_hex((scan_code>>4)&0xf));
+	keybuffer_push(keybuffer, to_hex(scan_code&0xf));
+	keybuffer_push(keybuffer, ' ');
+	keybuffer_push(keybuffer, ' ');
+	
+	return 1;
+	*/
+	
+	if (scan_code == '\r')
+		scan_code = '\n';
+	
+	buf |= ((unsigned long) scan_code)<<(8*(count++));
+	
+	
+	if ((buf & 0xff) != (GXEMUL_KEY_F1 & 0xff)) {
+		keybuffer_push(keybuffer, buf);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 1)
+		return 1;
+
+	if ((buf & 0xffff) != (GXEMUL_KEY_F1 & 0xffff)) {
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) &0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	if (count <= 2) 
+		return 1;
+
+
+	if ((buf & 0xffffff) != (GXEMUL_KEY_F1 & 0xffffff)
+		&& (buf & 0xffffff) != (GXEMUL_KEY_F5 & 0xffffff)
+		&& (buf & 0xffffff) != (GXEMUL_KEY_F9 & 0xffffff)) {
+
+		keybuffer_push(keybuffer, buf & 0xff);
+		keybuffer_push(keybuffer, (buf >> 8) & 0xff);
+		keybuffer_push(keybuffer, (buf >> 16) & 0xff);
+		buf = count = 0;
+		return 1;
+	}
+
+	if ( count <= 3 ) 
+		return 1;
+	
+
+	switch (buf) {
+	case GXEMUL_KEY_F1:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 1 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F2:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 2 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F3:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 3 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F4:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 4 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F5:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 5 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F6:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 6 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F7:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 7 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F8:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 8 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F9:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 9 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F10:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 10 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F11:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 11 );
+		buf=count=0;
+		return 1;
+	case GXEMUL_KEY_F12:
+		keybuffer_push(keybuffer,FUNCTION_KEYS | 12 );
+		buf=count=0;
+		return 1;
+	default:
+		keybuffer_push(keybuffer, buf & 0xff );
+		keybuffer_push(keybuffer, (buf >> 8) &0xff );
+		keybuffer_push(keybuffer, (buf >> 16) &0xff );
+		keybuffer_push(keybuffer, (buf >> 24) &0xff );
+		buf=count=0;
+		return 1;
+	}
+	return 1;
+}
+
+int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
+{
+	int scan_code = IPC_GET_ARG2(*call);
+	static int esc_count=0;
+
+	if (scan_code == 0x1b) {
+		esc_count++;
+		if (esc_count == 3)
+			__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
+	} else {
+		esc_count=0;
+	}
+
+	if (fb_fb)
+		return kbd_arch_process_fb(keybuffer, scan_code);
+
+	return kbd_arch_process_no_fb(keybuffer, scan_code);
+}
+/** @}
+*/
Index: uspace/srv/kbd/arch/mips32eb
===================================================================
--- uspace/srv/kbd/arch/mips32eb	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/mips32eb	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,1 @@
+mips32
Index: uspace/srv/kbd/arch/ppc32/include/kbd.h
===================================================================
--- uspace/srv/kbd/arch/ppc32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ppc32/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdppc32 ppc32
+ * @brief	HelenOS ppc32 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_ppc32_KBD_H_
+#define KBD_ppc32_KBD_H_
+
+#endif
+
+/** @}
+ */
+
Index: uspace/srv/kbd/arch/ppc32/src/kbd.c
===================================================================
--- uspace/srv/kbd/arch/ppc32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ppc32/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdppc32 ppc32
+ * @brief	HelenOS ppc32 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#include <arch/kbd.h>
+#include <ipc/ipc.h>
+#include <sysinfo.h>
+#include <kbd.h>
+#include <keys.h>
+
+irq_cmd_t cuda_cmds[1] = {
+	{ CMD_PPC32_GETCHAR, 0, 0, 2 }
+};
+
+irq_code_t cuda_kbd = {
+	1,
+	cuda_cmds
+};
+
+
+#define SPECIAL		255
+#define FUNCTION_KEYS 0x100
+
+
+static int lchars[0x80] = {
+	'a',
+	's',
+	'd',
+	'f',
+	'h',
+	'g',
+	'z',
+	'x',
+	'c',
+	'v', 
+	SPECIAL,
+	'b',
+	'q',
+	'w',
+	'e',
+	'r',
+	'y',
+	't',
+	'1',
+	'2',
+	'3',
+	'4',
+	'6',
+	'5',
+	'=',
+	'9',
+	'7',
+	'-',
+	'8',
+	'0',
+	']',
+	'o',
+	'u',
+	'[',
+	'i', 
+	'p',
+	'\n',                 /* Enter */
+	'l',
+	'j',
+	'\'',
+	'k',
+	';',
+	'\\',
+	',',
+	'/',
+	'n',
+	'm',
+	'.',
+	'\t',                 /* Tab */
+	' ',
+	'`',
+	'\b',                 /* Backspace */
+	SPECIAL,
+	SPECIAL,              /* Escape */
+	SPECIAL,              /* Ctrl */
+	SPECIAL,              /* Alt */
+	SPECIAL,              /* Shift */
+	SPECIAL,              /* Caps-Lock */
+	SPECIAL,              /* RAlt */
+	SPECIAL,              /* Left */
+	SPECIAL,              /* Right */
+	SPECIAL,              /* Down */
+	SPECIAL,              /* Up */
+	SPECIAL, 
+	SPECIAL,
+	'.',                  /* Keypad . */
+	SPECIAL, 
+	'*',                  /* Keypad * */
+	SPECIAL,
+	'+',                  /* Keypad + */
+	SPECIAL,
+	SPECIAL,              /* NumLock */
+	SPECIAL,
+	SPECIAL,
+	SPECIAL,
+	'/',                  /* Keypad / */
+	'\n',                 /* Keypad Enter */
+	SPECIAL,
+	'-',                  /* Keypad - */
+	SPECIAL,
+	SPECIAL,
+	SPECIAL,
+	'0',                  /* Keypad 0 */
+	'1',                  /* Keypad 1 */
+	'2',                  /* Keypad 2 */
+	'3',                  /* Keypad 3 */
+	'4',                  /* Keypad 4 */
+	'5',                  /* Keypad 5 */
+	'6',                  /* Keypad 6 */
+	'7',                  /* Keypad 7 */
+	SPECIAL,
+	'8',                  /* Keypad 8 */
+	'9',                  /* Keypad 9 */
+	SPECIAL,
+	SPECIAL,
+	SPECIAL,
+	(FUNCTION_KEYS | 5),  /* F5 */
+	(FUNCTION_KEYS | 6),  /* F6 */
+	(FUNCTION_KEYS | 7),  /* F7 */
+	(FUNCTION_KEYS | 3),  /* F3 */
+	(FUNCTION_KEYS | 8),  /* F8 */
+	(FUNCTION_KEYS | 9),  /* F9 */
+	SPECIAL,
+	(FUNCTION_KEYS | 11), /* F11 */
+	SPECIAL,
+	(FUNCTION_KEYS | 13), /* F13 */
+	SPECIAL,
+	SPECIAL,              /* ScrollLock */
+	SPECIAL,
+	(FUNCTION_KEYS | 10), /* F10 */
+	SPECIAL,
+	(FUNCTION_KEYS | 12), /* F12 */
+	SPECIAL,
+	SPECIAL,              /* Pause */
+	SPECIAL,              /* Insert */
+	SPECIAL,              /* Home */
+	SPECIAL,              /* PageUp */
+	SPECIAL,              /* Delete */
+	(FUNCTION_KEYS | 4),  /* F4 */
+	SPECIAL,              /* End */
+	(FUNCTION_KEYS | 2),  /* F2 */
+	SPECIAL,              /* PageDown */
+	(FUNCTION_KEYS | 1)   /* F1 */
+};
+
+
+int kbd_arch_init(void)
+{
+	return ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &cuda_kbd);
+}
+
+
+int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
+{
+	int param = IPC_GET_ARG2(*call);
+
+	if (param != -1) {
+		uint8_t scancode = (uint8_t) param;
+	
+		if ((scancode & 0x80) != 0x80) {
+			int key = lchars[scancode & 0x7f];
+			
+			if (key != SPECIAL)
+				keybuffer_push(keybuffer, key);
+		}
+	}
+	
+	return 1;
+}
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/ppc64/include/kbd.h
===================================================================
--- uspace/srv/kbd/arch/ppc64/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ppc64/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdppc64 ppc64
+ * @brief	HelenOS ppc64 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_ppc64_KBD_H_
+#define KBD_ppc64_KBD_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/ppc64/src/kbd.c
===================================================================
--- uspace/srv/kbd/arch/ppc64/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/ppc64/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdppc64 ppc64
+ * @brief	HelenOS ppc64 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#include <arch/kbd.h>
+#include <ipc/ipc.h>
+#include <sysinfo.h>
+#include <kbd.h>
+#include <keys.h>
+
+
+int kbd_arch_init(void)
+{
+	return 0;
+}
+
+
+int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call) 
+{
+	return 1;
+}
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/sparc64/include/kbd.h
===================================================================
--- uspace/srv/kbd/arch/sparc64/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/sparc64/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdsparc64 sparc64
+ * @brief	HelenOS sparc64 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_sparc64_KBD_H_
+#define KBD_sparc64_KBD_H_
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/sparc64/include/scanc.h
===================================================================
--- uspace/srv/kbd/arch/sparc64/include/scanc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/sparc64/include/scanc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup genarch	
+ * @{
+ */
+/**
+ * @file
+ * @brief	Scan codes for sun keyboards.
+ */
+
+#ifndef KBD_SCANC_SUN_H_
+#define KBD_SCANC_SUN_H_
+
+#define SC_ESC		0x1d
+#define SC_BACKSPACE	0x2b
+#define SC_LSHIFT       0x63
+#define SC_RSHIFT       0x6e
+#define SC_CAPSLOCK     0x77
+#define SC_SPEC_ESCAPE  0xe0	/* ??? */
+#define SC_LEFTARR      0x18
+#define SC_RIGHTARR     0x1c
+#define SC_UPARR        0x14
+#define SC_DOWNARR      0x1b
+#define SC_DELETE       0x42
+#define SC_HOME         0x34
+#define SC_END          0x4a
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/sparc64/src/kbd.c
===================================================================
--- uspace/srv/kbd/arch/sparc64/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/sparc64/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdsparc64 sparc64
+ * @brief	HelenOS sparc64 arch dependent parts of uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#include <arch/kbd.h>
+#include <ipc/ipc.h>
+#include <sysinfo.h>
+#include <kbd.h>
+#include <keys.h>
+#include <stdio.h>
+#include <types.h>
+#include <genarch/kbd.h>
+
+#define KBD_KEY_RELEASE		0x80
+#define KBD_ALL_KEYS_UP		0x7f
+
+/** Top-half pseudocode for z8530. */
+irq_cmd_t z8530_cmds[] = {
+	{
+		CMD_MEM_READ_1,
+		0,			/**< Address. Will be patched in run-time. */
+		0,			/**< Value. Not used. */
+		1			/**< Arg 1 will contain the result. */
+	}
+};
+	
+irq_code_t z8530_kbd = {
+	1,
+	z8530_cmds
+};
+
+/** Top-half pseudocode for ns16550. */
+irq_cmd_t ns16550_cmds[] = {
+	{
+		CMD_MEM_READ_1,
+		0,			/**< Address. Will be patched in run-time. */
+		0,			/**< Value. Not used. */
+		1			/**< Arg 1 will contain the result. */
+	}
+};
+	
+irq_code_t ns16550_kbd = {
+	1,
+	ns16550_cmds
+};
+
+#define KBD_Z8530	1
+#define KBD_NS16550	2
+
+int kbd_arch_init(void)
+{
+	int type = sysinfo_value("kbd.type");
+	switch (type) {
+	case KBD_Z8530:
+		z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual") + 6;
+		ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &z8530_kbd);
+		break;
+	case KBD_NS16550:
+		ns16550_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual");
+		ipc_register_irq(sysinfo_value("kbd.inr"), sysinfo_value("kbd.devno"), 0, &ns16550_kbd);
+		break;
+	default:
+		break;
+	}
+	return 0;
+}
+
+/** Process keyboard events */
+int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)
+{
+	int scan_code = IPC_GET_ARG1(*call);
+
+	if (scan_code == KBD_ALL_KEYS_UP)
+		return 1;
+		
+	if (scan_code & KBD_KEY_RELEASE)
+		key_released(keybuffer, scan_code ^ KBD_KEY_RELEASE);
+	else
+		key_pressed(keybuffer, scan_code);
+
+	return 1;
+}
+
+/** @}
+ */
Index: uspace/srv/kbd/arch/sparc64/src/scanc.c
===================================================================
--- uspace/srv/kbd/arch/sparc64/src/scanc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/arch/sparc64/src/scanc.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,304 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup genarch	
+ * @{
+ */
+/**
+ * @file
+ * @brief	Scan codes for Sun keyboards.
+ */
+
+#include <genarch/scanc.h>
+
+/** Primary meaning of scancodes. */
+int sc_primary_map[] = {
+	[0x00] = SPECIAL,
+	[0x01] = SPECIAL,
+	[0x02] = SPECIAL,
+	[0x03] = SPECIAL,
+	[0x04] = SPECIAL,
+	[0x05] = FUNCTION_KEYS + 1,	/* F1 */
+	[0x06] = FUNCTION_KEYS + 2,	/* F2 */
+	[0x07] = FUNCTION_KEYS + 10,	/* F10 */
+	[0x08] = FUNCTION_KEYS + 3,	/* F3 */
+	[0x09] = FUNCTION_KEYS + 11,	/* F11 */
+	[0x0a] = FUNCTION_KEYS + 4,	/* F4 */
+	[0x0b] = FUNCTION_KEYS + 12,	/* F12 */
+	[0x0c] = FUNCTION_KEYS + 5,	/* F5 */
+	[0x0d] = SPECIAL,	/* RAlt */
+	[0x0e] = FUNCTION_KEYS + 6,	/* F6 */
+	[0x0f] = SPECIAL,
+	[0x10] = FUNCTION_KEYS + 7,	/* F7 */
+	[0x11] = FUNCTION_KEYS + 8,	/* F8 */
+	[0x12] = FUNCTION_KEYS + 9,	/* F9 */
+	[0x13] = SPECIAL,	/* LAlt */
+	[0x14] = SPECIAL,	/* Up Arrow */
+	[0x15] = SPECIAL,	/* Pause */
+	[0x16] = SPECIAL,
+	[0x17] = SPECIAL,	/* Scroll Lock */
+	[0x18] = SPECIAL,	/* Left Arrow */
+	[0x19] = SPECIAL,
+	[0x1a] = SPECIAL,
+	[0x1b] = SPECIAL,	/* Down Arrow */
+	[0x1c] = SPECIAL,	/* Right Arrow */
+	[0x1d] = SPECIAL,	/* Esc */
+	[0x1e] = '1',
+	[0x1f] = '2',
+	[0x20] = '3',
+	[0x21] = '4',
+	[0x22] = '5',
+	[0x23] = '6',
+	[0x24] = '7',
+	[0x25] = '8',
+	[0x26] = '9',
+	[0x27] = '0',
+	[0x28] = '-',
+	[0x29] = '=',
+	[0x2a] = '`',
+	[0x2b] = '\b',		/* Backspace */
+	[0x2c] = SPECIAL,	/* Insert */
+	[0x2d] = SPECIAL,
+	[0x2e] = '/',		/* numeric keypad */
+	[0x2f] = '*',		/* numeric keypad */
+	[0x30] = SPECIAL,
+	[0x31] = SPECIAL,
+	[0x32] = '.',		/* numeric keypad */
+	[0x33] = SPECIAL,
+	[0x34] = SPECIAL,	/* Home */
+	[0x35] = '\t',		/* Tab */
+	[0x36] = 'q',
+	[0x37] = 'w',
+	[0x38] = 'e',
+	[0x39] = 'r',
+	[0x3a] = 't',
+	[0x3b] = 'y',
+	[0x3c] = 'u',
+	[0x3d] = 'i',
+	[0x3e] = 'o',
+	[0x3f] = 'p',
+	[0x40] = '[',
+	[0x41] = ']',
+	[0x42] = SPECIAL,	/* Del */
+	[0x43] = SPECIAL,
+	[0x44] = '7',		/* numeric keypad */
+	[0x45] = '8',		/* numeric keypad */
+	[0x46] = '9',		/* numeric keypad */
+	[0x47] = '-',		/* numeric keypad */
+	[0x48] = SPECIAL,
+	[0x49] = SPECIAL,
+	[0x4a] = SPECIAL,	/* End */
+	[0x4b] = SPECIAL,
+	[0x4c] = SPECIAL,	/* Control */
+	[0x4d] = 'a',
+	[0x4e] = 's',
+	[0x4f] = 'd',
+	[0x50] = 'f',
+	[0x51] = 'g',
+	[0x52] = 'h',
+	[0x53] = 'j',
+	[0x54] = 'k',
+	[0x55] = 'l',
+	[0x56] = ';',
+	[0x57] = '\'',
+	[0x58] = '\\',
+	[0x59] = '\n',		/* Enter */
+	[0x5a] = '\n',		/* Enter on numeric keypad */
+	[0x5b] = '4',		/* numeric keypad */
+	[0x5c] = '5',		/* numeric keypad */
+	[0x5d] = '6',		/* numeric keypad */
+	[0x5e] = '0',		/* numeric keypad */
+	[0x5f] = SPECIAL,
+	[0x60] = SPECIAL,	/* Page Up */
+	[0x61] = SPECIAL,
+	[0x62] = SPECIAL,	/* Num Lock */
+	[0x63] = SPECIAL,	/* LShift */
+	[0x64] = 'z',
+	[0x65] = 'x',
+	[0x66] = 'c',
+	[0x67] = 'v',
+	[0x68] = 'b',
+	[0x69] = 'n',
+	[0x6a] = 'm',
+	[0x6b] = ',',
+	[0x6c] = '.',
+	[0x6d] = '/',
+	[0x6e] = SPECIAL,	/* RShift */
+	[0x6f] = SPECIAL,
+	[0x70] = '1',		/* numeric keypad */
+	[0x71] = '2',		/* numeric keypad */
+	[0x72] = '3',		/* numeric keypad */
+	[0x73] = SPECIAL,
+	[0x74] = SPECIAL,
+	[0x75] = SPECIAL,
+	[0x76] = SPECIAL,
+	[0x77] = SPECIAL,	/* Caps Lock */
+	[0x78] = SPECIAL,
+	[0x79] = ' ',
+	[0x7a] = SPECIAL,
+	[0x7b] = SPECIAL,	/* Page Down */
+	[0x7c] = SPECIAL,
+	[0x7d] = '+',		/* numeric key pad */
+	[0x7e] = SPECIAL,
+	[0x7f] = SPECIAL
+};
+
+/** Secondary meaning of scancodes. */
+int sc_secondary_map[] = {
+	[0x00] = SPECIAL,
+	[0x01] = SPECIAL,
+	[0x02] = SPECIAL,
+	[0x03] = SPECIAL,
+	[0x04] = SPECIAL,
+	[0x05] = SPECIAL,	/* F1 */
+	[0x06] = SPECIAL,	/* F2 */
+	[0x07] = SPECIAL,	/* F10 */
+	[0x08] = SPECIAL,	/* F3 */
+	[0x09] = SPECIAL,	/* F11 */
+	[0x0a] = SPECIAL,	/* F4 */
+	[0x0b] = SPECIAL,	/* F12 */
+	[0x0c] = SPECIAL,	/* F5 */
+	[0x0d] = SPECIAL,	/* RAlt */
+	[0x0e] = SPECIAL,	/* F6 */
+	[0x0f] = SPECIAL,
+	[0x10] = SPECIAL,	/* F7 */
+	[0x11] = SPECIAL,	/* F8 */
+	[0x12] = SPECIAL,	/* F9 */
+	[0x13] = SPECIAL,	/* LAlt */
+	[0x14] = SPECIAL,	/* Up Arrow */
+	[0x15] = SPECIAL,	/* Pause */
+	[0x16] = SPECIAL,
+	[0x17] = SPECIAL,	/* Scroll Lock */
+	[0x18] = SPECIAL,	/* Left Arrow */
+	[0x19] = SPECIAL,
+	[0x1a] = SPECIAL,
+	[0x1b] = SPECIAL,	/* Down Arrow */
+	[0x1c] = SPECIAL,	/* Right Arrow */
+	[0x1d] = SPECIAL,	/* Esc */
+	[0x1e] = '!',
+	[0x1f] = '@',
+	[0x20] = '#',
+	[0x21] = '$',
+	[0x22] = '%',
+	[0x23] = '^',
+	[0x24] = '&',
+	[0x25] = '*',
+	[0x26] = '(',
+	[0x27] = ')',
+	[0x28] = '_',
+	[0x29] = '+',
+	[0x2a] = '~',
+	[0x2b] = SPECIAL,	/* Backspace */
+	[0x2c] = SPECIAL,	/* Insert */
+	[0x2d] = SPECIAL,
+	[0x2e] = '/',		/* numeric keypad */
+	[0x2f] = '*',		/* numeric keypad */
+	[0x30] = SPECIAL,
+	[0x31] = SPECIAL,
+	[0x32] = '.',		/* numeric keypad */
+	[0x33] = SPECIAL,
+	[0x34] = SPECIAL,	/* Home */
+	[0x35] = SPECIAL,	/* Tab */
+	[0x36] = 'Q',
+	[0x37] = 'W',
+	[0x38] = 'E',
+	[0x39] = 'R',
+	[0x3a] = 'T',
+	[0x3b] = 'Y',
+	[0x3c] = 'U',
+	[0x3d] = 'I',
+	[0x3e] = 'O',
+	[0x3f] = 'P',
+	[0x40] = '{',
+	[0x41] = '}',
+	[0x42] = SPECIAL,	/* Del */
+	[0x43] = SPECIAL,
+	[0x44] = '7',		/* numeric keypad */
+	[0x45] = '8',		/* numeric keypad */
+	[0x46] = '9',		/* numeric keypad */
+	[0x47] = '-',		/* numeric keypad */
+	[0x48] = SPECIAL,
+	[0x49] = SPECIAL,
+	[0x4a] = SPECIAL,	/* End */
+	[0x4b] = SPECIAL,
+	[0x4c] = SPECIAL,	/* Control */
+	[0x4d] = 'A',
+	[0x4e] = 'S',
+	[0x4f] = 'D',
+	[0x50] = 'F',
+	[0x51] = 'G',
+	[0x52] = 'H',
+	[0x53] = 'J',
+	[0x54] = 'K',
+	[0x55] = 'L',
+	[0x56] = ':',
+	[0x57] = '"',
+	[0x58] = '|',
+	[0x59] = SPECIAL,	/* Enter */
+	[0x5a] = SPECIAL,	/* Enter on numeric keypad */
+	[0x5b] = '4',		/* numeric keypad */
+	[0x5c] = '5',		/* numeric keypad */
+	[0x5d] = '6',		/* numeric keypad */
+	[0x5e] = '0',		/* numeric keypad */
+	[0x5f] = SPECIAL,
+	[0x60] = SPECIAL,	/* Page Up */
+	[0x61] = SPECIAL,
+	[0x62] = SPECIAL,	/* Num Lock */
+	[0x63] = SPECIAL,	/* LShift */
+	[0x64] = 'Z',
+	[0x65] = 'X',
+	[0x66] = 'C',
+	[0x67] = 'V',
+	[0x68] = 'B',
+	[0x69] = 'N',
+	[0x6a] = 'M',
+	[0x6b] = '<',
+	[0x6c] = '>',
+	[0x6d] = '?',
+	[0x6e] = SPECIAL,	/* RShift */
+	[0x6f] = SPECIAL,
+	[0x70] = '1',		/* numeric keypad */
+	[0x71] = '2',		/* numeric keypad */
+	[0x72] = '3',		/* numeric keypad */
+	[0x73] = SPECIAL,
+	[0x74] = SPECIAL,
+	[0x75] = SPECIAL,
+	[0x76] = SPECIAL,
+	[0x77] = SPECIAL,	/* Caps Lock */
+	[0x78] = SPECIAL,
+	[0x79] = ' ',
+	[0x7a] = SPECIAL,
+	[0x7b] = SPECIAL,	/* Page Down */
+	[0x7c] = SPECIAL,
+	[0x7d] = '+',		/* numeric key pad */
+	[0x7e] = SPECIAL,
+	[0x7f] = SPECIAL
+};
+
+/** @}
+ */
Index: uspace/srv/kbd/genarch/include/kbd.h
===================================================================
--- uspace/srv/kbd/genarch/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/genarch/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2006 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_genarch_KBD_H_
+#define KBD_genarch_KBD_H_
+
+#include <key_buffer.h>
+
+extern void key_released(keybuffer_t *keybuffer, unsigned char key);
+extern void key_pressed(keybuffer_t *keybuffer, unsigned char key);
+
+#endif
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/genarch/include/scanc.h
===================================================================
--- uspace/srv/kbd/genarch/include/scanc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/genarch/include/scanc.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_SCANC_H_
+#define KBD_SCANC_H_
+
+#define FUNCTION_KEYS 0x100
+
+#define SPECIAL		255
+
+extern int sc_primary_map[];
+extern int sc_secondary_map[];
+
+#endif
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/genarch/src/kbd.c
===================================================================
--- uspace/srv/kbd/genarch/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/genarch/src/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2001-2004 Jakub Jermar
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbd
+ * @brief	Handling of keyboard IRQ notifications for several architectures.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#include <key_buffer.h>
+#include <arch/scanc.h>
+#include <genarch/scanc.h>
+#include <genarch/kbd.h>
+#include <libc.h>
+
+#define PRESSED_SHIFT		(1<<0)
+#define PRESSED_CAPSLOCK	(1<<1)
+#define LOCKED_CAPSLOCK		(1<<0)
+
+static volatile int keyflags;		/**< Tracking of multiple keypresses. */
+static volatile int lockflags;		/**< Tracking of multiple keys lockings. */
+
+void key_released(keybuffer_t *keybuffer, unsigned char key)
+{
+	switch (key) {
+	case SC_LSHIFT:
+	case SC_RSHIFT:
+		keyflags &= ~PRESSED_SHIFT;
+		break;
+	case SC_CAPSLOCK:
+		keyflags &= ~PRESSED_CAPSLOCK;
+		if (lockflags & LOCKED_CAPSLOCK)
+			lockflags &= ~LOCKED_CAPSLOCK;
+		else
+			lockflags |= LOCKED_CAPSLOCK;
+		break;
+	default:
+		break;
+	}
+}
+
+void key_pressed(keybuffer_t *keybuffer, unsigned char key)
+{
+	int *map = sc_primary_map;
+	int ascii = sc_primary_map[key];
+	int shift, capslock;
+	int letter = 0;
+
+	static int esc_count = 0;
+
+	if (key == SC_ESC) {
+		esc_count++;
+		if (esc_count == 3)
+			__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE);
+	} else {
+		esc_count = 0;
+	}
+	
+	switch (key) {
+	case SC_LSHIFT:
+	case SC_RSHIFT:
+	    	keyflags |= PRESSED_SHIFT;
+		break;
+	case SC_CAPSLOCK:
+		keyflags |= PRESSED_CAPSLOCK;
+		break;
+	case SC_SPEC_ESCAPE:
+		break;
+	default:
+	    	letter = ((ascii >= 'a') && (ascii <= 'z'));
+		capslock = (keyflags & PRESSED_CAPSLOCK) || (lockflags & LOCKED_CAPSLOCK);
+		shift = keyflags & PRESSED_SHIFT;
+		if (letter && capslock)
+			shift = !shift;
+		if (shift)
+			map = sc_secondary_map;
+		if (map[key] != SPECIAL)
+			keybuffer_push(keybuffer, map[key]);	
+		break;
+	}
+}
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/generic/kbd.c
===================================================================
--- uspace/srv/kbd/generic/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/generic/kbd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @addtogroup kbdgen generic
+ * @brief	HelenOS generic uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#include <ipc/ipc.h>
+#include <ipc/services.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ipc/ns.h>
+#include <errno.h>
+#include <arch/kbd.h>
+#include <kbd.h>
+#include <libadt/fifo.h>
+#include <key_buffer.h>
+#include <async.h>
+#include <keys.h>
+
+#define NAME "KBD"
+
+int cons_connected = 0;
+int phone2cons = -1;
+keybuffer_t keybuffer;	
+
+static void irq_handler(ipc_callid_t iid, ipc_call_t *call)
+{
+	int chr;
+
+#ifdef MOUSE_ENABLED
+	if (mouse_arch_process(phone2cons, call))
+		return;
+#endif
+	
+	kbd_arch_process(&keybuffer, call);
+
+	if (cons_connected && phone2cons != -1) {
+		/* recode to ASCII - one interrupt can produce more than one code so result is stored in fifo */
+		while (!keybuffer_empty(&keybuffer)) {
+			if (!keybuffer_pop(&keybuffer, (int *)&chr))
+				break;
+
+			async_msg(phone2cons, KBD_PUSHCHAR, chr);
+		}
+	}
+}
+
+static void console_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	ipc_callid_t callid;
+	ipc_call_t call;
+	int retval;
+
+	if (cons_connected) {
+		ipc_answer_fast(iid, ELIMIT, 0, 0);
+		return;
+	}
+	cons_connected = 1;
+	ipc_answer_fast(iid, 0, 0, 0);
+
+	while (1) {
+		callid = async_get_call(&call);
+		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			cons_connected = 0;
+			ipc_hangup(phone2cons);
+			phone2cons = -1;
+			ipc_answer_fast(callid, 0,0,0);
+			return;
+		case IPC_M_CONNECT_TO_ME:
+			if (phone2cons != -1) {
+				retval = ELIMIT;
+				break;
+			}
+			phone2cons = IPC_GET_ARG3(call);
+			retval = 0;
+			break;
+		default:
+			retval = EINVAL;
+		}
+		ipc_answer_fast(callid, retval, 0, 0);
+	}	
+}
+
+
+int main(int argc, char **argv)
+{
+	ipcarg_t phonead;
+	
+	/* Initialize arch dependent parts */
+	if (kbd_arch_init())
+		return -1;
+	
+	/* Initialize key buffer */
+	keybuffer_init(&keybuffer);
+	
+	async_set_client_connection(console_connection);
+	async_set_interrupt_received(irq_handler);
+	/* Register service at nameserver */
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_KEYBOARD, 0, &phonead) != 0)
+		return -1;
+
+	async_manager();
+
+	/* Never reached */
+	return 0;
+}
+
+/**
+ * @}
+ */ 
+
Index: uspace/srv/kbd/generic/key_buffer.c
===================================================================
--- uspace/srv/kbd/generic/key_buffer.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/generic/key_buffer.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdgen
+ * @brief	HelenOS generic uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+#include <key_buffer.h>
+#include <futex.h>
+
+atomic_t keybuffer_futex = FUTEX_INITIALIZER;
+
+/** Clear key buffer.
+ */
+void keybuffer_free(keybuffer_t *keybuffer) 
+{
+	futex_down(&keybuffer_futex);
+	keybuffer->head = 0;
+	keybuffer->tail = 0;
+	keybuffer->items = 0;
+	futex_up(&keybuffer_futex);
+}
+
+/** Key buffer initialization.
+ *
+ */
+void keybuffer_init(keybuffer_t *keybuffer)
+{
+	keybuffer_free(keybuffer);
+}
+
+/** Get free space in buffer.
+ * This function is useful for processing some scancodes that are translated 
+ * to more than one character.
+ * @return empty buffer space
+ */
+int keybuffer_available(keybuffer_t *keybuffer)
+{
+	return KEYBUFFER_SIZE - keybuffer->items;
+}
+
+/**
+ * @return nonzero, if buffer is not empty.
+ */
+int keybuffer_empty(keybuffer_t *keybuffer)
+{
+	return (keybuffer->items == 0);
+}
+
+/** Push key to key buffer.
+ * If buffer is full, character is ignored.
+ * @param key code of stored key
+ */
+void keybuffer_push(keybuffer_t *keybuffer, int key)
+{
+	futex_down(&keybuffer_futex);
+	if (keybuffer->items < KEYBUFFER_SIZE) {
+		keybuffer->fifo[keybuffer->tail] = key;
+		keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE;
+		keybuffer->items++;
+	}
+	futex_up(&keybuffer_futex);
+}
+
+/** Pop character from buffer.
+ * @param c pointer to space where to store character from buffer.
+ * @return zero on empty buffer, nonzero else
+ */
+int keybuffer_pop(keybuffer_t *keybuffer, int *c)
+{
+	futex_down(&keybuffer_futex);
+	if (keybuffer->items > 0) {
+		keybuffer->items--;
+		*c = (keybuffer->fifo[keybuffer->head]) ;
+		keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE;
+		futex_up(&keybuffer_futex);
+		return 1;
+	}
+	futex_up(&keybuffer_futex);
+	return 0;
+}
+
+/**
+ * @}
+ */ 
Index: uspace/srv/kbd/include/kbd.h
===================================================================
--- uspace/srv/kbd/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/include/kbd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdgen generic
+ * @brief	HelenOS generic uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef KBD_KBD_H_
+#define KBD_KBD_H_
+
+#include <key_buffer.h>
+
+extern int kbd_arch_init(void);
+extern int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call);
+extern int mouse_arch_process(int phoneid, ipc_call_t *call);
+
+#endif
+
+/**
+ * @}
+ */ 
+
Index: uspace/srv/kbd/include/key_buffer.h
===================================================================
--- uspace/srv/kbd/include/key_buffer.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/include/key_buffer.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup kbdgen
+ * @brief	HelenOS generic uspace keyboard handler.
+ * @ingroup  kbd
+ * @{
+ */ 
+/** @file
+ */
+
+#ifndef __KEY_BUFFER_H__
+#define __KEY_BUFFER_H__
+
+#include <types.h>
+
+/** Size of buffer for pressed keys */
+#define KEYBUFFER_SIZE 128 
+
+typedef struct {
+	int fifo[KEYBUFFER_SIZE];
+	unsigned long head;
+	unsigned long tail;
+	unsigned long items;
+} keybuffer_t;
+
+void keybuffer_free(keybuffer_t *keybuffer);
+void keybuffer_init(keybuffer_t *keybuffer);
+int keybuffer_available(keybuffer_t *keybuffer);
+int keybuffer_empty(keybuffer_t *keybuffer);
+void keybuffer_push(keybuffer_t *keybuffer, int key);
+int keybuffer_pop(keybuffer_t *keybuffer, int *c);
+
+#endif
+
+/**
+ * @}
+ */ 
+
Index: uspace/srv/kbd/include/keys.h
===================================================================
--- uspace/srv/kbd/include/keys.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/kbd/include/keys.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2006 Josef Cejka
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @addtogroup kbdgen
+ * @{
+ */
+/**
+ * @file
+ */
+
+#ifndef _KBD_KEYS_H_
+#define _KBD_KEYS_H_
+
+#define KBD_PUSHCHAR    1024
+#define KBD_MS_LEFT     1025
+#define KBD_MS_RIGHT    1026
+#define KBD_MS_MIDDLE   1027
+#define KBD_MS_MOVE     1028
+
+#define KBD_KEY_F1	0x3b
+#define KBD_KEY_F2	0x3c
+#define KBD_KEY_F3	0x3d
+#define KBD_KEY_F4	0x3e
+#define KBD_KEY_F5	0x3f
+#define KBD_KEY_F6	0x40
+#define KBD_KEY_F7	0x41
+#define KBD_KEY_F8	0x42
+#define KBD_KEY_F9	0x43
+#define KBD_KEY_F10	0x44
+#define KBD_KEY_F11	0x45
+#define KBD_KEY_F12	0x46
+
+#endif
+
+/** @}
+*/
Index: uspace/srv/ns/Makefile
===================================================================
--- uspace/srv/ns/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/ns/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = ns
+SOURCES = \
+	ns.c
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/srv/ns/ns.c
===================================================================
--- uspace/srv/ns/ns.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/ns/ns.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,270 @@
+/*
+ * Copyright (c) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup ns
+ * @{
+ */ 
+
+/**
+ * @file	ns.c
+ * @brief	Naming service for HelenOS IPC.
+ */
+
+
+#include <ipc/ipc.h>
+#include <ipc/ns.h>
+#include <ipc/services.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <assert.h>
+#include <libadt/list.h>
+#include <libadt/hash_table.h>
+#include <sysinfo.h>
+#include <ddi.h>
+#include <as.h>
+
+#define NAME	"NS"
+
+#define NS_HASH_TABLE_CHAINS	20
+
+static int register_service(ipcarg_t service, ipcarg_t phone, ipc_call_t *call);
+static int connect_to_service(ipcarg_t service, ipc_call_t *call,
+    ipc_callid_t callid);
+
+/* Static functions implementing NS hash table operations. */
+static hash_index_t ns_hash(unsigned long *key);
+static int ns_compare(unsigned long *key, hash_count_t keys, link_t *item);
+static void ns_remove(link_t *item);
+
+/** Operations for NS hash table. */
+static hash_table_operations_t ns_hash_table_ops = {
+	.hash = ns_hash,
+	.compare = ns_compare,
+	.remove_callback = ns_remove
+};
+
+/** NS hash table structure. */
+static hash_table_t ns_hash_table;
+
+/** NS hash table item. */
+typedef struct {
+	link_t link;
+	ipcarg_t service;		/**< Number of the service. */
+	ipcarg_t phone;			/**< Phone registered with the service. */
+	ipcarg_t in_phone_hash;		/**< Incoming phone hash. */
+} hashed_service_t;
+
+static void *clockaddr = NULL;
+static void *klogaddr = NULL;
+
+static void get_as_area(ipc_callid_t callid, ipc_call_t *call, char *name,
+    void **addr)
+{
+	void *ph_addr;
+
+	if (!*addr) {
+		ph_addr = (void *) sysinfo_value(name);
+		if (!ph_addr) {
+			ipc_answer_fast(callid, ENOENT, 0, 0);
+			return;
+		}
+		*addr = as_get_mappable_page(PAGE_SIZE);
+		physmem_map(ph_addr, *addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE);
+	}
+	ipc_answer_fast(callid, 0, (ipcarg_t) *addr, AS_AREA_READ);
+}
+
+int main(int argc, char **argv)
+{
+	ipc_call_t call;
+	ipc_callid_t callid;
+	
+	ipcarg_t retval;
+
+	if (!hash_table_create(&ns_hash_table, NS_HASH_TABLE_CHAINS, 3,
+	    &ns_hash_table_ops)) {
+		return ENOMEM;
+	}
+		
+	while (1) {
+		callid = ipc_wait_for_call(&call);
+		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_AS_AREA_RECV:
+			switch (IPC_GET_ARG3(call)) {
+			case SERVICE_MEM_REALTIME:
+				get_as_area(callid, &call, "clock.faddr",
+				    &clockaddr);
+				break;
+			case SERVICE_MEM_KLOG:
+				get_as_area(callid, &call, "klog.faddr",
+				    &klogaddr);
+				break;
+			default:
+				ipc_answer_fast(callid, ENOENT, 0, 0);
+			}
+			continue;
+		case IPC_M_PHONE_HUNGUP:
+			retval = 0;
+			break;
+		case IPC_M_CONNECT_TO_ME:
+			/*
+			 * Server requests service registration.
+			 */
+			retval = register_service(IPC_GET_ARG1(call),
+			    IPC_GET_ARG3(call), &call);
+			break;
+		case IPC_M_CONNECT_ME_TO:
+			/*
+			 * Client requests to be connected to a service.
+			 */
+			retval = connect_to_service(IPC_GET_ARG1(call), &call,
+			    callid);
+			break;
+		default:
+			retval = ENOENT;
+			break;
+		}
+		if (!(callid & IPC_CALLID_NOTIFICATION)) {
+			ipc_answer_fast(callid, retval, 0, 0);
+		}
+	}
+}
+
+/** Register service.
+ *
+ * @param service Service to be registered.
+ * @param phone Phone to be used for connections to the service.
+ * @param call Pointer to call structure.
+ *
+ * @return Zero on success or a value from @ref errno.h.
+ */
+int register_service(ipcarg_t service, ipcarg_t phone, ipc_call_t *call)
+{
+	unsigned long keys[3] = {
+		service,
+		call->in_phone_hash,
+		0
+	};
+	hashed_service_t *hs;
+			
+	if (hash_table_find(&ns_hash_table, keys)) {
+		return EEXISTS;
+	}
+			
+	hs = (hashed_service_t *) malloc(sizeof(hashed_service_t));
+	if (!hs) {
+		return ENOMEM;
+	}
+			
+	link_initialize(&hs->link);
+	hs->service = service;
+	hs->phone = phone;
+	hs->in_phone_hash = call->in_phone_hash;
+	hash_table_insert(&ns_hash_table, keys, &hs->link);
+			
+	return 0;
+}
+
+/** Connect client to service.
+ *
+ * @param service Service to be connected to.
+ * @param call Pointer to call structure.
+ * @param callid Call ID of the request.
+ *
+ * @return Zero on success or a value from @ref errno.h.
+ */
+int connect_to_service(ipcarg_t service, ipc_call_t *call, ipc_callid_t callid)
+{
+	unsigned long keys[3] = { service, 0, 0 };
+	link_t *hlp;
+	hashed_service_t *hs;
+			
+	hlp = hash_table_find(&ns_hash_table, keys);
+	if (!hlp) {
+		return ENOENT;
+	}
+	hs = hash_table_get_instance(hlp, hashed_service_t, link);
+	return ipc_forward_fast(callid, hs->phone, 0, 0);
+}
+
+/** Compute hash index into NS hash table.
+ *
+ * @param key Pointer keys. However, only the first key (i.e. service number)
+ * 	      is used to compute the hash index.
+ * @return Hash index corresponding to key[0].
+ */
+hash_index_t ns_hash(unsigned long *key)
+{
+	assert(key);
+	return *key % NS_HASH_TABLE_CHAINS;
+}
+
+/** Compare a key with hashed item.
+ *
+ * This compare function always ignores the third key.
+ * It exists only to make it possible to remove records
+ * originating from connection with key[1] in_phone_hash
+ * value. Note that this is close to being classified
+ * as a nasty hack.
+ *
+ * @param key Array of keys.
+ * @param keys Must be lesser or equal to 3.
+ * @param item Pointer to a hash table item.
+ * @return Non-zero if the key matches the item, zero otherwise.
+ */
+int ns_compare(unsigned long key[], hash_count_t keys, link_t *item)
+{
+	hashed_service_t *hs;
+
+	assert(key);
+	assert(keys <= 3);
+	assert(item);
+	
+	hs = hash_table_get_instance(item, hashed_service_t, link);
+	
+	if (keys == 2)
+		return key[1] == hs->in_phone_hash;
+	else
+		return key[0] == hs->service;
+}
+
+/** Perform actions after removal of item from the hash table.
+ *
+ * @param item Item that was removed from the hash table.
+ */
+void ns_remove(link_t *item)
+{
+	assert(item);
+	free(hash_table_get_instance(item, hashed_service_t, link));
+}
+
+/** 
+ * @}
+ */
Index: uspace/srv/pci/COPYING
===================================================================
--- uspace/srv/pci/COPYING	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/COPYING	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,345 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: uspace/srv/pci/Makefile
===================================================================
--- uspace/srv/pci/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,78 @@
+#
+# Copyright (c) 2005 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+
+LIBS = libpci/libpci.a $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = pci
+SOURCES = \
+	pci.c
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+	$(MAKE) -C libpci clean
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(MAKE) -C libpci
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
+
+libpci/libpci.a:
+	$(MAKE) -C libpci
Index: uspace/srv/pci/libpci/Makefile
===================================================================
--- uspace/srv/pci/libpci/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,29 @@
+# Makefile for The PCI Library
+# (c) 1999 Martin Mares <mj@ucw.cz>
+
+# Modified and ported to HelenOS by Jakub Jermar
+
+LIBC_PREFIX=$(shell cd ../../../lib/libc; pwd)
+
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+LIBS = $(LIBC_PREFIX)/libc.a
+CFLAGS += -I$(LIBC_PREFIX)/include -trigraphs
+
+OBJS=access.o generic.o names.o
+INCL=internal.h pci.h header.h sysdep.h types.h pci_ids.h
+
+PCILIB=libpci.a
+
+OBJS += i386-ports.o
+
+all: $(PCILIB)
+
+$(PCILIB): $(OBJS)
+	$(AR) rc $@ $(OBJS)
+
+%.o: %.c $(INCL)
+	$(CC) $(CFLAGS) -c $< -o $@
+
+clean:
+	-rm *.o libpci.a
Index: uspace/srv/pci/libpci/VERSION
===================================================================
--- uspace/srv/pci/libpci/VERSION	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/VERSION	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,2 @@
+This libpci has been ported from pciutils-2.2.3
+on May 8, 2006 by Jakub Jermar.
Index: uspace/srv/pci/libpci/access.c
===================================================================
--- uspace/srv/pci/libpci/access.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/access.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,270 @@
+/*
+ *	The PCI Library -- User Access
+ *
+ *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "internal.h"
+
+static struct pci_methods *pci_methods[PCI_ACCESS_MAX] = {
+	&pm_intel_conf1,
+	&pm_intel_conf2,
+};
+
+struct pci_access *pci_alloc(void)
+{
+	struct pci_access *a = malloc(sizeof(struct pci_access));
+	int i;
+
+	if (!a)
+		return NULL;
+		
+	bzero(a, sizeof(*a));
+	for (i = 0; i < PCI_ACCESS_MAX; i++)
+		if (pci_methods[i] && pci_methods[i]->config)
+			pci_methods[i]->config(a);
+	return a;
+}
+
+void *pci_malloc(struct pci_access *a, int size)
+{
+	void *x = malloc(size);
+
+	if (!x)
+		a->error("Out of memory (allocation of %d bytes failed)", size);
+	return x;
+}
+
+void pci_mfree(void *x)
+{
+	if (x)
+		free(x);
+}
+
+static void pci_generic_error(char *msg, ...)
+{
+	va_list args;
+
+	va_start(args, msg);
+	puts("pcilib: ");
+	vprintf(msg, args);
+	putchar('\n');
+	exit(1);
+}
+
+static void pci_generic_warn(char *msg, ...)
+{
+	va_list args;
+
+	va_start(args, msg);
+	puts("pcilib: ");
+	vprintf(msg, args);
+	putchar('\n');
+}
+
+static void pci_generic_debug(char *msg, ...)
+{
+	va_list args;
+
+	va_start(args, msg);
+	vprintf(msg, args);
+	va_end(args);
+}
+
+static void pci_null_debug(char *msg UNUSED, ...)
+{
+}
+
+void pci_init(struct pci_access *a)
+{
+	if (!a->error)
+		a->error = pci_generic_error;
+	if (!a->warning)
+		a->warning = pci_generic_warn;
+	if (!a->debug)
+		a->debug = pci_generic_debug;
+	if (!a->debugging)
+		a->debug = pci_null_debug;
+
+	if (a->method) {
+		if (a->method >= PCI_ACCESS_MAX || !pci_methods[a->method])
+			a->error("This access method is not supported.");
+		a->methods = pci_methods[a->method];
+	} else {
+		unsigned int i;
+		for (i = 0; i < PCI_ACCESS_MAX; i++)
+			if (pci_methods[i]) {
+				a->debug("Trying method %d...", i);
+				if (pci_methods[i]->detect(a)) {
+					a->debug("...OK\n");
+					a->methods = pci_methods[i];
+					a->method = i;
+					break;
+				}
+				a->debug("...No.\n");
+			}
+		if (!a->methods)
+			a->error("Cannot find any working access method.");
+	}
+	a->debug("Decided to use %s\n", a->methods->name);
+	a->methods->init(a);
+}
+
+void pci_cleanup(struct pci_access *a)
+{
+	struct pci_dev *d, *e;
+
+	for (d = a->devices; d; d = e) {
+		e = d->next;
+		pci_free_dev(d);
+	}
+	if (a->methods)
+		a->methods->cleanup(a);
+	pci_free_name_list(a);
+	pci_mfree(a);
+}
+
+void pci_scan_bus(struct pci_access *a)
+{
+	a->methods->scan(a);
+}
+
+struct pci_dev *pci_alloc_dev(struct pci_access *a)
+{
+	struct pci_dev *d = pci_malloc(a, sizeof(struct pci_dev));
+
+	bzero(d, sizeof(*d));
+	d->access = a;
+	d->methods = a->methods;
+	d->hdrtype = -1;
+	if (d->methods->init_dev)
+		d->methods->init_dev(d);
+	return d;
+}
+
+int pci_link_dev(struct pci_access *a, struct pci_dev *d)
+{
+	d->next = a->devices;
+	a->devices = d;
+
+	return 1;
+}
+
+struct pci_dev *pci_get_dev(struct pci_access *a, int domain, int bus,
+			    int dev, int func)
+{
+	struct pci_dev *d = pci_alloc_dev(a);
+
+	d->domain = domain;
+	d->bus = bus;
+	d->dev = dev;
+	d->func = func;
+	return d;
+}
+
+void pci_free_dev(struct pci_dev *d)
+{
+	if (d->methods->cleanup_dev)
+		d->methods->cleanup_dev(d);
+	pci_mfree(d);
+}
+
+static inline void
+pci_read_data(struct pci_dev *d, void *buf, int pos, int len)
+{
+	if (pos & (len - 1))
+		d->access->error("Unaligned read: pos=%02x, len=%d", pos,
+				 len);
+	if (pos + len <= d->cache_len)
+		memcpy(buf, d->cache + pos, len);
+	else if (!d->methods->read(d, pos, buf, len))
+		memset(buf, 0xff, len);
+}
+
+byte pci_read_byte(struct pci_dev *d, int pos)
+{
+	byte buf;
+	pci_read_data(d, &buf, pos, 1);
+	return buf;
+}
+
+word pci_read_word(struct pci_dev * d, int pos)
+{
+	word buf;
+	pci_read_data(d, &buf, pos, 2);
+	return le16_to_cpu(buf);
+}
+
+u32 pci_read_long(struct pci_dev * d, int pos)
+{
+	u32 buf;
+	pci_read_data(d, &buf, pos, 4);
+	return le32_to_cpu(buf);
+}
+
+int pci_read_block(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	return d->methods->read(d, pos, buf, len);
+}
+
+static inline int
+pci_write_data(struct pci_dev *d, void *buf, int pos, int len)
+{
+	if (pos & (len - 1))
+		d->access->error("Unaligned write: pos=%02x,len=%d", pos, len);
+	if (pos + len <= d->cache_len)
+		memcpy(d->cache + pos, buf, len);
+	return d->methods->write(d, pos, buf, len);
+}
+
+int pci_write_byte(struct pci_dev *d, int pos, byte data)
+{
+	return pci_write_data(d, &data, pos, 1);
+}
+
+int pci_write_word(struct pci_dev *d, int pos, word data)
+{
+	word buf = cpu_to_le16(data);
+	return pci_write_data(d, &buf, pos, 2);
+}
+
+int pci_write_long(struct pci_dev *d, int pos, u32 data)
+{
+	u32 buf = cpu_to_le32(data);
+	return pci_write_data(d, &buf, pos, 4);
+}
+
+int pci_write_block(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	if (pos < d->cache_len) {
+		int l = (pos + len >= d->cache_len) ? (d->cache_len - pos) : len;
+		memcpy(d->cache + pos, buf, l);
+	}
+	return d->methods->write(d, pos, buf, len);
+}
+
+int pci_fill_info(struct pci_dev *d, int flags)
+{
+	if (flags & PCI_FILL_RESCAN) {
+		flags &= ~PCI_FILL_RESCAN;
+		d->known_fields = 0;
+	}
+	if (flags & ~d->known_fields)
+		d->known_fields |= d->methods->fill_info(d, flags & ~d->known_fields);
+	return d->known_fields;
+}
+
+void pci_setup_cache(struct pci_dev *d, byte * cache, int len)
+{
+	d->cache = cache;
+	d->cache_len = len;
+}
Index: uspace/srv/pci/libpci/generic.c
===================================================================
--- uspace/srv/pci/libpci/generic.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/generic.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,206 @@
+/*
+ *	The PCI Library -- Generic Direct Access Functions
+ *
+ *	Copyright (c) 1997--2000 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <string.h>
+
+#include "internal.h"
+
+void pci_generic_scan_bus(struct pci_access *a, byte * busmap, int bus)
+{
+	int dev, multi, ht;
+	struct pci_dev *t;
+
+	a->debug("Scanning bus %02x for devices...\n", bus);
+	if (busmap[bus]) {
+		a->warning("Bus %02x seen twice (firmware bug). Ignored.",
+			   bus);
+		return;
+	}
+	busmap[bus] = 1;
+	t = pci_alloc_dev(a);
+	t->bus = bus;
+	for (dev = 0; dev < 32; dev++) {
+		t->dev = dev;
+		multi = 0;
+		for (t->func = 0; !t->func || multi && t->func < 8;
+		     t->func++) {
+			u32 vd = pci_read_long(t, PCI_VENDOR_ID);
+			struct pci_dev *d;
+
+			if (!vd || vd == 0xffffffff)
+				continue;
+			ht = pci_read_byte(t, PCI_HEADER_TYPE);
+			if (!t->func)
+				multi = ht & 0x80;
+			ht &= 0x7f;
+			d = pci_alloc_dev(a);
+			d->bus = t->bus;
+			d->dev = t->dev;
+			d->func = t->func;
+			d->vendor_id = vd & 0xffff;
+			d->device_id = vd >> 16U;
+			d->known_fields = PCI_FILL_IDENT;
+			d->hdrtype = ht;
+			pci_link_dev(a, d);
+			switch (ht) {
+			case PCI_HEADER_TYPE_NORMAL:
+				break;
+			case PCI_HEADER_TYPE_BRIDGE:
+			case PCI_HEADER_TYPE_CARDBUS:
+				pci_generic_scan_bus(a, busmap,
+						     pci_read_byte(t,
+								   PCI_SECONDARY_BUS));
+				break;
+			default:
+				a->debug
+				    ("Device %04x:%02x:%02x.%d has unknown header type %02x.\n",
+				     d->domain, d->bus, d->dev, d->func,
+				     ht);
+			}
+		}
+	}
+	pci_free_dev(t);
+}
+
+void pci_generic_scan(struct pci_access *a)
+{
+	byte busmap[256];
+
+	bzero(busmap, sizeof(busmap));
+	pci_generic_scan_bus(a, busmap, 0);
+}
+
+int pci_generic_fill_info(struct pci_dev *d, int flags)
+{
+	struct pci_access *a = d->access;
+
+	if ((flags & (PCI_FILL_BASES | PCI_FILL_ROM_BASE))
+	    && d->hdrtype < 0)
+		d->hdrtype = pci_read_byte(d, PCI_HEADER_TYPE) & 0x7f;
+	if (flags & PCI_FILL_IDENT) {
+		d->vendor_id = pci_read_word(d, PCI_VENDOR_ID);
+		d->device_id = pci_read_word(d, PCI_DEVICE_ID);
+	}
+	if (flags & PCI_FILL_IRQ)
+		d->irq = pci_read_byte(d, PCI_INTERRUPT_LINE);
+	if (flags & PCI_FILL_BASES) {
+		int cnt = 0, i;
+		bzero(d->base_addr, sizeof(d->base_addr));
+		switch (d->hdrtype) {
+		case PCI_HEADER_TYPE_NORMAL:
+			cnt = 6;
+			break;
+		case PCI_HEADER_TYPE_BRIDGE:
+			cnt = 2;
+			break;
+		case PCI_HEADER_TYPE_CARDBUS:
+			cnt = 1;
+			break;
+		}
+		if (cnt) {
+			for (i = 0; i < cnt; i++) {
+				u32 x = pci_read_long(d, PCI_BASE_ADDRESS_0 + i * 4);
+				if (!x || x == (u32) ~ 0)
+					continue;
+				if ((x & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO)
+					d->base_addr[i] = x;
+				else {
+					if ((x & PCI_BASE_ADDRESS_MEM_TYPE_MASK) != PCI_BASE_ADDRESS_MEM_TYPE_64)
+						d->base_addr[i] = x;
+					else if (i >= cnt - 1)
+						a->warning("%04x:%02x:%02x.%d: Invalid 64-bit address seen for BAR %d.",
+						     d->domain, d->bus,
+						     d->dev, d->func, i);
+					else {
+						u32 y = pci_read_long(d, PCI_BASE_ADDRESS_0 + (++i) * 4);
+#ifdef PCI_HAVE_64BIT_ADDRESS
+						d->base_addr[i - 1] = x | (((pciaddr_t) y) << 32);
+#else
+						if (y)
+							a->warning("%04x:%02x:%02x.%d 64-bit device address ignored.",
+							     d->domain,
+							     d->bus,
+							     d->dev,
+							     d->func);
+						else
+							d->base_addr[i - 1] = x;
+#endif
+					}
+				}
+			}
+		}
+	}
+	if (flags & PCI_FILL_ROM_BASE) {
+		int reg = 0;
+		d->rom_base_addr = 0;
+		switch (d->hdrtype) {
+		case PCI_HEADER_TYPE_NORMAL:
+			reg = PCI_ROM_ADDRESS;
+			break;
+		case PCI_HEADER_TYPE_BRIDGE:
+			reg = PCI_ROM_ADDRESS1;
+			break;
+		}
+		if (reg) {
+			u32 u = pci_read_long(d, reg);
+			if (u != 0xffffffff)
+				d->rom_base_addr = u;
+		}
+	}
+	return flags & ~PCI_FILL_SIZES;
+}
+
+static int
+pci_generic_block_op(struct pci_dev *d, int pos, byte * buf, int len,
+		     int (*r) (struct pci_dev * d, int pos, byte * buf,
+			       int len))
+{
+	if ((pos & 1) && len >= 1) {
+		if (!r(d, pos, buf, 1))
+			return 0;
+		pos++;
+		buf++;
+		len--;
+	}
+	if ((pos & 3) && len >= 2) {
+		if (!r(d, pos, buf, 2))
+			return 0;
+		pos += 2;
+		buf += 2;
+		len -= 2;
+	}
+	while (len >= 4) {
+		if (!r(d, pos, buf, 4))
+			return 0;
+		pos += 4;
+		buf += 4;
+		len -= 4;
+	}
+	if (len >= 2) {
+		if (!r(d, pos, buf, 2))
+			return 0;
+		pos += 2;
+		buf += 2;
+		len -= 2;
+	}
+	if (len && !r(d, pos, buf, 1))
+		return 0;
+	return 1;
+}
+
+int pci_generic_block_read(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	return pci_generic_block_op(d, pos, buf, len, d->access->methods->read);
+}
+
+int pci_generic_block_write(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	return pci_generic_block_op(d, pos, buf, len, d->access->methods->write);
+}
Index: uspace/srv/pci/libpci/header.h
===================================================================
--- uspace/srv/pci/libpci/header.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/header.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,937 @@
+/*
+ *	The PCI Library -- PCI Header Structure (based on <linux/pci.h>)
+ *
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+/*
+ * Under PCI, each device has 256 bytes of configuration address space,
+ * of which the first 64 bytes are standardized as follows:
+ */
+#define PCI_VENDOR_ID		0x00	/* 16 bits */
+#define PCI_DEVICE_ID		0x02	/* 16 bits */
+#define PCI_COMMAND		0x04	/* 16 bits */
+#define  PCI_COMMAND_IO		0x1	/* Enable response in I/O space */
+#define  PCI_COMMAND_MEMORY	0x2	/* Enable response in Memory space */
+#define  PCI_COMMAND_MASTER	0x4	/* Enable bus mastering */
+#define  PCI_COMMAND_SPECIAL	0x8	/* Enable response to special cycles */
+#define  PCI_COMMAND_INVALIDATE	0x10	/* Use memory write and invalidate */
+#define  PCI_COMMAND_VGA_PALETTE 0x20	/* Enable palette snooping */
+#define  PCI_COMMAND_PARITY	0x40	/* Enable parity checking */
+#define  PCI_COMMAND_WAIT 	0x80	/* Enable address/data stepping */
+#define  PCI_COMMAND_SERR	0x100	/* Enable SERR */
+#define  PCI_COMMAND_FAST_BACK	0x200	/* Enable back-to-back writes */
+
+#define PCI_STATUS		0x06	/* 16 bits */
+#define  PCI_STATUS_CAP_LIST	0x10	/* Support Capability List */
+#define  PCI_STATUS_66MHZ	0x20	/* Support 66 Mhz PCI 2.1 bus */
+#define  PCI_STATUS_UDF		0x40	/* Support User Definable Features [obsolete] */
+#define  PCI_STATUS_FAST_BACK	0x80	/* Accept fast-back to back */
+#define  PCI_STATUS_PARITY	0x100	/* Detected parity error */
+#define  PCI_STATUS_DEVSEL_MASK	0x600	/* DEVSEL timing */
+#define  PCI_STATUS_DEVSEL_FAST	0x000
+#define  PCI_STATUS_DEVSEL_MEDIUM 0x200
+#define  PCI_STATUS_DEVSEL_SLOW 0x400
+#define  PCI_STATUS_SIG_TARGET_ABORT 0x800	/* Set on target abort */
+#define  PCI_STATUS_REC_TARGET_ABORT 0x1000	/* Master ack of " */
+#define  PCI_STATUS_REC_MASTER_ABORT 0x2000	/* Set on master abort */
+#define  PCI_STATUS_SIG_SYSTEM_ERROR 0x4000	/* Set when we drive SERR */
+#define  PCI_STATUS_DETECTED_PARITY 0x8000	/* Set on parity error */
+
+#define PCI_CLASS_REVISION	0x08	/* High 24 bits are class, low 8
+					   revision */
+#define PCI_REVISION_ID         0x08	/* Revision ID */
+#define PCI_CLASS_PROG          0x09	/* Reg. Level Programming Interface */
+#define PCI_CLASS_DEVICE        0x0a	/* Device class */
+
+#define PCI_CACHE_LINE_SIZE	0x0c	/* 8 bits */
+#define PCI_LATENCY_TIMER	0x0d	/* 8 bits */
+#define PCI_HEADER_TYPE		0x0e	/* 8 bits */
+#define  PCI_HEADER_TYPE_NORMAL	0
+#define  PCI_HEADER_TYPE_BRIDGE 1
+#define  PCI_HEADER_TYPE_CARDBUS 2
+
+#define PCI_BIST		0x0f	/* 8 bits */
+#define PCI_BIST_CODE_MASK	0x0f	/* Return result */
+#define PCI_BIST_START		0x40	/* 1 to start BIST, 2 secs or less */
+#define PCI_BIST_CAPABLE	0x80	/* 1 if BIST capable */
+
+/*
+ * Base addresses specify locations in memory or I/O space.
+ * Decoded size can be determined by writing a value of 
+ * 0xffffffff to the register, and reading it back.  Only 
+ * 1 bits are decoded.
+ */
+#define PCI_BASE_ADDRESS_0	0x10	/* 32 bits */
+#define PCI_BASE_ADDRESS_1	0x14	/* 32 bits [htype 0,1 only] */
+#define PCI_BASE_ADDRESS_2	0x18	/* 32 bits [htype 0 only] */
+#define PCI_BASE_ADDRESS_3	0x1c	/* 32 bits */
+#define PCI_BASE_ADDRESS_4	0x20	/* 32 bits */
+#define PCI_BASE_ADDRESS_5	0x24	/* 32 bits */
+#define  PCI_BASE_ADDRESS_SPACE	0x01	/* 0 = memory, 1 = I/O */
+#define  PCI_BASE_ADDRESS_SPACE_IO 0x01
+#define  PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
+#define  PCI_BASE_ADDRESS_MEM_TYPE_MASK 0x06
+#define  PCI_BASE_ADDRESS_MEM_TYPE_32	0x00	/* 32 bit address */
+#define  PCI_BASE_ADDRESS_MEM_TYPE_1M	0x02	/* Below 1M [obsolete] */
+#define  PCI_BASE_ADDRESS_MEM_TYPE_64	0x04	/* 64 bit address */
+#define  PCI_BASE_ADDRESS_MEM_PREFETCH	0x08	/* prefetchable? */
+#define  PCI_BASE_ADDRESS_MEM_MASK	(~(pciaddr_t)0x0f)
+#define  PCI_BASE_ADDRESS_IO_MASK	(~(pciaddr_t)0x03)
+/* bit 1 is reserved if address_space = 1 */
+
+/* Header type 0 (normal devices) */
+#define PCI_CARDBUS_CIS		0x28
+#define PCI_SUBSYSTEM_VENDOR_ID	0x2c
+#define PCI_SUBSYSTEM_ID	0x2e
+#define PCI_ROM_ADDRESS		0x30	/* Bits 31..11 are address, 10..1 reserved */
+#define  PCI_ROM_ADDRESS_ENABLE	0x01
+#define PCI_ROM_ADDRESS_MASK	(~(pciaddr_t)0x7ff)
+
+#define PCI_CAPABILITY_LIST	0x34	/* Offset of first capability list entry */
+
+/* 0x35-0x3b are reserved */
+#define PCI_INTERRUPT_LINE	0x3c	/* 8 bits */
+#define PCI_INTERRUPT_PIN	0x3d	/* 8 bits */
+#define PCI_MIN_GNT		0x3e	/* 8 bits */
+#define PCI_MAX_LAT		0x3f	/* 8 bits */
+
+/* Header type 1 (PCI-to-PCI bridges) */
+#define PCI_PRIMARY_BUS		0x18	/* Primary bus number */
+#define PCI_SECONDARY_BUS	0x19	/* Secondary bus number */
+#define PCI_SUBORDINATE_BUS	0x1a	/* Highest bus number behind the bridge */
+#define PCI_SEC_LATENCY_TIMER	0x1b	/* Latency timer for secondary interface */
+#define PCI_IO_BASE		0x1c	/* I/O range behind the bridge */
+#define PCI_IO_LIMIT		0x1d
+#define  PCI_IO_RANGE_TYPE_MASK	0x0f	/* I/O bridging type */
+#define  PCI_IO_RANGE_TYPE_16	0x00
+#define  PCI_IO_RANGE_TYPE_32	0x01
+#define  PCI_IO_RANGE_MASK	~0x0f
+#define PCI_SEC_STATUS		0x1e	/* Secondary status register */
+#define PCI_MEMORY_BASE		0x20	/* Memory range behind */
+#define PCI_MEMORY_LIMIT	0x22
+#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0f
+#define  PCI_MEMORY_RANGE_MASK	~0x0f
+#define PCI_PREF_MEMORY_BASE	0x24	/* Prefetchable memory range behind */
+#define PCI_PREF_MEMORY_LIMIT	0x26
+#define  PCI_PREF_RANGE_TYPE_MASK 0x0f
+#define  PCI_PREF_RANGE_TYPE_32	0x00
+#define  PCI_PREF_RANGE_TYPE_64	0x01
+#define  PCI_PREF_RANGE_MASK	~0x0f
+#define PCI_PREF_BASE_UPPER32	0x28	/* Upper half of prefetchable memory range */
+#define PCI_PREF_LIMIT_UPPER32	0x2c
+#define PCI_IO_BASE_UPPER16	0x30	/* Upper half of I/O addresses */
+#define PCI_IO_LIMIT_UPPER16	0x32
+/* 0x34 same as for htype 0 */
+/* 0x35-0x3b is reserved */
+#define PCI_ROM_ADDRESS1	0x38	/* Same as PCI_ROM_ADDRESS, but for htype 1 */
+/* 0x3c-0x3d are same as for htype 0 */
+#define PCI_BRIDGE_CONTROL	0x3e
+#define  PCI_BRIDGE_CTL_PARITY	0x01	/* Enable parity detection on secondary interface */
+#define  PCI_BRIDGE_CTL_SERR	0x02	/* The same for SERR forwarding */
+#define  PCI_BRIDGE_CTL_NO_ISA	0x04	/* Disable bridging of ISA ports */
+#define  PCI_BRIDGE_CTL_VGA	0x08	/* Forward VGA addresses */
+#define  PCI_BRIDGE_CTL_MASTER_ABORT 0x20	/* Report master aborts */
+#define  PCI_BRIDGE_CTL_BUS_RESET 0x40	/* Secondary bus reset */
+#define  PCI_BRIDGE_CTL_FAST_BACK 0x80	/* Fast Back2Back enabled on secondary interface */
+
+/* Header type 2 (CardBus bridges) */
+/* 0x14-0x15 reserved */
+#define PCI_CB_SEC_STATUS	0x16	/* Secondary status */
+#define PCI_CB_PRIMARY_BUS	0x18	/* PCI bus number */
+#define PCI_CB_CARD_BUS		0x19	/* CardBus bus number */
+#define PCI_CB_SUBORDINATE_BUS	0x1a	/* Subordinate bus number */
+#define PCI_CB_LATENCY_TIMER	0x1b	/* CardBus latency timer */
+#define PCI_CB_MEMORY_BASE_0	0x1c
+#define PCI_CB_MEMORY_LIMIT_0	0x20
+#define PCI_CB_MEMORY_BASE_1	0x24
+#define PCI_CB_MEMORY_LIMIT_1	0x28
+#define PCI_CB_IO_BASE_0	0x2c
+#define PCI_CB_IO_BASE_0_HI	0x2e
+#define PCI_CB_IO_LIMIT_0	0x30
+#define PCI_CB_IO_LIMIT_0_HI	0x32
+#define PCI_CB_IO_BASE_1	0x34
+#define PCI_CB_IO_BASE_1_HI	0x36
+#define PCI_CB_IO_LIMIT_1	0x38
+#define PCI_CB_IO_LIMIT_1_HI	0x3a
+#define  PCI_CB_IO_RANGE_MASK	~0x03
+/* 0x3c-0x3d are same as for htype 0 */
+#define PCI_CB_BRIDGE_CONTROL	0x3e
+#define  PCI_CB_BRIDGE_CTL_PARITY	0x01	/* Similar to standard bridge control register */
+#define  PCI_CB_BRIDGE_CTL_SERR		0x02
+#define  PCI_CB_BRIDGE_CTL_ISA		0x04
+#define  PCI_CB_BRIDGE_CTL_VGA		0x08
+#define  PCI_CB_BRIDGE_CTL_MASTER_ABORT	0x20
+#define  PCI_CB_BRIDGE_CTL_CB_RESET	0x40	/* CardBus reset */
+#define  PCI_CB_BRIDGE_CTL_16BIT_INT	0x80	/* Enable interrupt for 16-bit cards */
+#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100	/* Prefetch enable for both memory regions */
+#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
+#define  PCI_CB_BRIDGE_CTL_POST_WRITES	0x400
+#define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
+#define PCI_CB_SUBSYSTEM_ID	0x42
+#define PCI_CB_LEGACY_MODE_BASE	0x44	/* 16-bit PC Card legacy mode base address (ExCa) */
+/* 0x48-0x7f reserved */
+
+/* Capability lists */
+
+#define PCI_CAP_LIST_ID		0	/* Capability ID */
+#define  PCI_CAP_ID_PM		0x01	/* Power Management */
+#define  PCI_CAP_ID_AGP		0x02	/* Accelerated Graphics Port */
+#define  PCI_CAP_ID_VPD		0x03	/* Vital Product Data */
+#define  PCI_CAP_ID_SLOTID	0x04	/* Slot Identification */
+#define  PCI_CAP_ID_MSI		0x05	/* Message Signalled Interrupts */
+#define  PCI_CAP_ID_CHSWP	0x06	/* CompactPCI HotSwap */
+#define  PCI_CAP_ID_PCIX        0x07	/* PCI-X */
+#define  PCI_CAP_ID_HT          0x08	/* HyperTransport */
+#define  PCI_CAP_ID_VNDR	0x09	/* Vendor specific */
+#define  PCI_CAP_ID_DBG		0x0A	/* Debug port */
+#define  PCI_CAP_ID_CCRC	0x0B	/* CompactPCI Central Resource Control */
+#define  PCI_CAP_ID_AGP3	0x0E	/* AGP 8x */
+#define  PCI_CAP_ID_EXP		0x10	/* PCI Express */
+#define  PCI_CAP_ID_MSIX	0x11	/* MSI-X */
+#define PCI_CAP_LIST_NEXT	1	/* Next capability in the list */
+#define PCI_CAP_FLAGS		2	/* Capability defined flags (16 bits) */
+#define PCI_CAP_SIZEOF		4
+
+/* Capabilities residing in the PCI Express extended configuration space */
+
+#define PCI_EXT_CAP_ID_AER	0x01	/* Advanced Error Reporting */
+#define PCI_EXT_CAP_ID_VC	0x02	/* Virtual Channel */
+#define PCI_EXT_CAP_ID_DSN	0x03	/* Device Serial Number */
+#define PCI_EXT_CAP_ID_PB	0x04	/* Power Budgeting */
+
+/* Power Management Registers */
+
+#define  PCI_PM_CAP_VER_MASK	0x0007	/* Version (2=PM1.1) */
+#define  PCI_PM_CAP_PME_CLOCK	0x0008	/* Clock required for PME generation */
+#define  PCI_PM_CAP_DSI		0x0020	/* Device specific initialization required */
+#define  PCI_PM_CAP_AUX_C_MASK	0x01c0	/* Maximum aux current required in D3cold */
+#define  PCI_PM_CAP_D1		0x0200	/* D1 power state support */
+#define  PCI_PM_CAP_D2		0x0400	/* D2 power state support */
+#define  PCI_PM_CAP_PME_D0	0x0800	/* PME can be asserted from D0 */
+#define  PCI_PM_CAP_PME_D1	0x1000	/* PME can be asserted from D1 */
+#define  PCI_PM_CAP_PME_D2	0x2000	/* PME can be asserted from D2 */
+#define  PCI_PM_CAP_PME_D3_HOT	0x4000	/* PME can be asserted from D3hot */
+#define  PCI_PM_CAP_PME_D3_COLD	0x8000	/* PME can be asserted from D3cold */
+#define PCI_PM_CTRL		4	/* PM control and status register */
+#define  PCI_PM_CTRL_STATE_MASK	0x0003	/* Current power state (D0 to D3) */
+#define  PCI_PM_CTRL_PME_ENABLE	0x0100	/* PME pin enable */
+#define  PCI_PM_CTRL_DATA_SEL_MASK	0x1e00	/* PM table data index */
+#define  PCI_PM_CTRL_DATA_SCALE_MASK	0x6000	/* PM table data scaling factor */
+#define  PCI_PM_CTRL_PME_STATUS	0x8000	/* PME pin status */
+#define PCI_PM_PPB_EXTENSIONS	6	/* PPB support extensions */
+#define  PCI_PM_PPB_B2_B3	0x40	/* If bridge enters D3hot, bus enters: 0=B3, 1=B2 */
+#define  PCI_PM_BPCC_ENABLE	0x80	/* Secondary bus is power managed */
+#define PCI_PM_DATA_REGISTER	7	/* PM table contents read here */
+#define PCI_PM_SIZEOF		8
+
+/* AGP registers */
+
+#define PCI_AGP_VERSION		2	/* BCD version number */
+#define PCI_AGP_RFU		3	/* Rest of capability flags */
+#define PCI_AGP_STATUS		4	/* Status register */
+#define  PCI_AGP_STATUS_RQ_MASK	0xff000000	/* Maximum number of requests - 1 */
+#define  PCI_AGP_STATUS_ISOCH	0x10000	/* Isochronous transactions supported */
+#define  PCI_AGP_STATUS_ARQSZ_MASK	0xe000	/* log2(optimum async req size in bytes) - 4 */
+#define  PCI_AGP_STATUS_CAL_MASK	0x1c00	/* Calibration cycle timing */
+#define  PCI_AGP_STATUS_SBA	0x0200	/* Sideband addressing supported */
+#define  PCI_AGP_STATUS_ITA_COH	0x0100	/* In-aperture accesses always coherent */
+#define  PCI_AGP_STATUS_GART64	0x0080	/* 64-bit GART entries supported */
+#define  PCI_AGP_STATUS_HTRANS	0x0040	/* If 0, core logic can xlate host CPU accesses thru aperture */
+#define  PCI_AGP_STATUS_64BIT	0x0020	/* 64-bit addressing cycles supported */
+#define  PCI_AGP_STATUS_FW	0x0010	/* Fast write transfers supported */
+#define  PCI_AGP_STATUS_AGP3	0x0008	/* AGP3 mode supported */
+#define  PCI_AGP_STATUS_RATE4	0x0004	/* 4x transfer rate supported (RFU in AGP3 mode) */
+#define  PCI_AGP_STATUS_RATE2	0x0002	/* 2x transfer rate supported (8x in AGP3 mode) */
+#define  PCI_AGP_STATUS_RATE1	0x0001	/* 1x transfer rate supported (4x in AGP3 mode) */
+#define PCI_AGP_COMMAND		8	/* Control register */
+#define  PCI_AGP_COMMAND_RQ_MASK 0xff000000	/* Master: Maximum number of requests */
+#define  PCI_AGP_COMMAND_ARQSZ_MASK	0xe000	/* log2(optimum async req size in bytes) - 4 */
+#define  PCI_AGP_COMMAND_CAL_MASK	0x1c00	/* Calibration cycle timing */
+#define  PCI_AGP_COMMAND_SBA	0x0200	/* Sideband addressing enabled */
+#define  PCI_AGP_COMMAND_AGP	0x0100	/* Allow processing of AGP transactions */
+#define  PCI_AGP_COMMAND_GART64	0x0080	/* 64-bit GART entries enabled */
+#define  PCI_AGP_COMMAND_64BIT	0x0020	/* Allow generation of 64-bit addr cycles */
+#define  PCI_AGP_COMMAND_FW	0x0010	/* Enable FW transfers */
+#define  PCI_AGP_COMMAND_RATE4	0x0004	/* Use 4x rate (RFU in AGP3 mode) */
+#define  PCI_AGP_COMMAND_RATE2	0x0002	/* Use 2x rate (8x in AGP3 mode) */
+#define  PCI_AGP_COMMAND_RATE1	0x0001	/* Use 1x rate (4x in AGP3 mode) */
+#define PCI_AGP_SIZEOF		12
+
+/* Slot Identification */
+
+#define PCI_SID_ESR		2	/* Expansion Slot Register */
+#define  PCI_SID_ESR_NSLOTS	0x1f	/* Number of expansion slots available */
+#define  PCI_SID_ESR_FIC	0x20	/* First In Chassis Flag */
+#define PCI_SID_CHASSIS_NR	3	/* Chassis Number */
+
+/* Message Signalled Interrupts registers */
+
+#define PCI_MSI_FLAGS		2	/* Various flags */
+#define  PCI_MSI_FLAGS_64BIT	0x80	/* 64-bit addresses allowed */
+#define  PCI_MSI_FLAGS_QSIZE	0x70	/* Message queue size configured */
+#define  PCI_MSI_FLAGS_QMASK	0x0e	/* Maximum queue size available */
+#define  PCI_MSI_FLAGS_ENABLE	0x01	/* MSI feature enabled */
+#define PCI_MSI_RFU		3	/* Rest of capability flags */
+#define PCI_MSI_ADDRESS_LO	4	/* Lower 32 bits */
+#define PCI_MSI_ADDRESS_HI	8	/* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
+#define PCI_MSI_DATA_32		8	/* 16 bits of data for 32-bit devices */
+#define PCI_MSI_DATA_64		12	/* 16 bits of data for 64-bit devices */
+
+/* PCI-X */
+#define PCI_PCIX_COMMAND                                                2	/* Command register offset */
+#define PCI_PCIX_COMMAND_DPERE                                     0x0001	/* Data Parity Error Recover Enable */
+#define PCI_PCIX_COMMAND_ERO                                       0x0002	/* Enable Relaxed Ordering */
+#define PCI_PCIX_COMMAND_MAX_MEM_READ_BYTE_COUNT                   0x000c	/* Maximum Memory Read Byte Count */
+#define PCI_PCIX_COMMAND_MAX_OUTSTANDING_SPLIT_TRANS               0x0070
+#define PCI_PCIX_COMMAND_RESERVED                                   0xf80
+#define PCI_PCIX_STATUS                                                 4	/* Status register offset */
+#define PCI_PCIX_STATUS_FUNCTION                               0x00000007
+#define PCI_PCIX_STATUS_DEVICE                                 0x000000f8
+#define PCI_PCIX_STATUS_BUS                                    0x0000ff00
+#define PCI_PCIX_STATUS_64BIT                                  0x00010000
+#define PCI_PCIX_STATUS_133MHZ                                 0x00020000
+#define PCI_PCIX_STATUS_SC_DISCARDED                           0x00040000	/* Split Completion Discarded */
+#define PCI_PCIX_STATUS_UNEXPECTED_SC                          0x00080000	/* Unexpected Split Completion */
+#define PCI_PCIX_STATUS_DEVICE_COMPLEXITY                      0x00100000	/* 0 = simple device, 1 = bridge device */
+#define PCI_PCIX_STATUS_DESIGNED_MAX_MEM_READ_BYTE_COUNT       0x00600000	/* 0 = 512 bytes, 1 = 1024, 2 = 2048, 3 = 4096 */
+#define PCI_PCIX_STATUS_DESIGNED_MAX_OUTSTANDING_SPLIT_TRANS   0x03800000
+#define PCI_PCIX_STATUS_DESIGNED_MAX_CUMULATIVE_READ_SIZE      0x1c000000
+#define PCI_PCIX_STATUS_RCVD_SC_ERR_MESS                       0x20000000	/* Received Split Completion Error Message */
+#define PCI_PCIX_STATUS_266MHZ				       0x40000000	/* 266 MHz capable */
+#define PCI_PCIX_STATUS_533MHZ				       0x80000000	/* 533 MHz capable */
+#define PCI_PCIX_SIZEOF		4
+
+/* PCI-X Bridges */
+#define PCI_PCIX_BRIDGE_SEC_STATUS                                      2	/* Secondary bus status register offset */
+#define PCI_PCIX_BRIDGE_SEC_STATUS_64BIT                           0x0001
+#define PCI_PCIX_BRIDGE_SEC_STATUS_133MHZ                          0x0002
+#define PCI_PCIX_BRIDGE_SEC_STATUS_SC_DISCARDED                    0x0004	/* Split Completion Discarded on secondary bus */
+#define PCI_PCIX_BRIDGE_SEC_STATUS_UNEXPECTED_SC                   0x0008	/* Unexpected Split Completion on secondary bus */
+#define PCI_PCIX_BRIDGE_SEC_STATUS_SC_OVERRUN                      0x0010	/* Split Completion Overrun on secondary bus */
+#define PCI_PCIX_BRIDGE_SEC_STATUS_SPLIT_REQUEST_DELAYED           0x0020
+#define PCI_PCIX_BRIDGE_SEC_STATUS_CLOCK_FREQ                      0x01c0
+#define PCI_PCIX_BRIDGE_SEC_STATUS_RESERVED                        0xfe00
+#define PCI_PCIX_BRIDGE_STATUS                                          4	/* Primary bus status register offset */
+#define PCI_PCIX_BRIDGE_STATUS_FUNCTION                        0x00000007
+#define PCI_PCIX_BRIDGE_STATUS_DEVICE                          0x000000f8
+#define PCI_PCIX_BRIDGE_STATUS_BUS                             0x0000ff00
+#define PCI_PCIX_BRIDGE_STATUS_64BIT                           0x00010000
+#define PCI_PCIX_BRIDGE_STATUS_133MHZ                          0x00020000
+#define PCI_PCIX_BRIDGE_STATUS_SC_DISCARDED                    0x00040000	/* Split Completion Discarded */
+#define PCI_PCIX_BRIDGE_STATUS_UNEXPECTED_SC                   0x00080000	/* Unexpected Split Completion */
+#define PCI_PCIX_BRIDGE_STATUS_SC_OVERRUN                      0x00100000	/* Split Completion Overrun */
+#define PCI_PCIX_BRIDGE_STATUS_SPLIT_REQUEST_DELAYED           0x00200000
+#define PCI_PCIX_BRIDGE_STATUS_RESERVED                        0xffc00000
+#define PCI_PCIX_BRIDGE_UPSTREAM_SPLIT_TRANS_CTRL                       8	/* Upstream Split Transaction Register offset */
+#define PCI_PCIX_BRIDGE_DOWNSTREAM_SPLIT_TRANS_CTRL                    12	/* Downstream Split Transaction Register offset */
+#define PCI_PCIX_BRIDGE_STR_CAPACITY                           0x0000ffff
+#define PCI_PCIX_BRIDGE_STR_COMMITMENT_LIMIT                   0xffff0000
+#define PCI_PCIX_BRIDGE_SIZEOF 12
+
+/* HyperTransport (as of spec rev. 2.00) */
+#define PCI_HT_CMD		2	/* Command Register */
+#define  PCI_HT_CMD_TYP_HI	0xe000	/* Capability Type high part */
+#define  PCI_HT_CMD_TYP_HI_PRI	0x0000	/* Slave or Primary Interface */
+#define  PCI_HT_CMD_TYP_HI_SEC	0x2000	/* Host or Secondary Interface */
+#define  PCI_HT_CMD_TYP		0xf800	/* Capability Type */
+#define  PCI_HT_CMD_TYP_SW	0x4000	/* Switch */
+#define  PCI_HT_CMD_TYP_IDC	0x8000	/* Interrupt Discovery and Configuration */
+#define  PCI_HT_CMD_TYP_RID	0x8800	/* Revision ID */
+#define  PCI_HT_CMD_TYP_UIDC	0x9000	/* UnitID Clumping */
+#define  PCI_HT_CMD_TYP_ECSA	0x9800	/* Extended Configuration Space Access */
+#define  PCI_HT_CMD_TYP_AM	0xa000	/* Address Mapping */
+#define  PCI_HT_CMD_TYP_MSIM	0xa800	/* MSI Mapping */
+#define  PCI_HT_CMD_TYP_DR	0xb000	/* DirectRoute */
+#define  PCI_HT_CMD_TYP_VCS	0xb800	/* VCSet */
+#define  PCI_HT_CMD_TYP_RM	0xc000	/* Retry Mode */
+#define  PCI_HT_CMD_TYP_X86	0xc800	/* X86 (reserved) */
+
+					/* Link Control Register */
+#define  PCI_HT_LCTR_CFLE	0x0002	/* CRC Flood Enable */
+#define  PCI_HT_LCTR_CST	0x0004	/* CRC Start Test */
+#define  PCI_HT_LCTR_CFE	0x0008	/* CRC Force Error */
+#define  PCI_HT_LCTR_LKFAIL	0x0010	/* Link Failure */
+#define  PCI_HT_LCTR_INIT	0x0020	/* Initialization Complete */
+#define  PCI_HT_LCTR_EOC	0x0040	/* End of Chain */
+#define  PCI_HT_LCTR_TXO	0x0080	/* Transmitter Off */
+#define  PCI_HT_LCTR_CRCERR	0x0f00	/* CRC Error */
+#define  PCI_HT_LCTR_ISOCEN	0x1000	/* Isochronous Flow Control Enable */
+#define  PCI_HT_LCTR_LSEN	0x2000	/* LDTSTOP# Tristate Enable */
+#define  PCI_HT_LCTR_EXTCTL	0x4000	/* Extended CTL Time */
+#define  PCI_HT_LCTR_64B	0x8000	/* 64-bit Addressing Enable */
+
+					/* Link Configuration Register */
+#define  PCI_HT_LCNF_MLWI	0x0007	/* Max Link Width In */
+#define  PCI_HT_LCNF_LW_8B	0x0	/* Link Width 8 bits */
+#define  PCI_HT_LCNF_LW_16B	0x1	/* Link Width 16 bits */
+#define  PCI_HT_LCNF_LW_32B	0x3	/* Link Width 32 bits */
+#define  PCI_HT_LCNF_LW_2B	0x4	/* Link Width 2 bits */
+#define  PCI_HT_LCNF_LW_4B	0x5	/* Link Width 4 bits */
+#define  PCI_HT_LCNF_LW_NC	0x7	/* Link physically not connected */
+#define  PCI_HT_LCNF_DFI	0x0008	/* Doubleword Flow Control In */
+#define  PCI_HT_LCNF_MLWO	0x0070	/* Max Link Width Out */
+#define  PCI_HT_LCNF_DFO	0x0080	/* Doubleword Flow Control Out */
+#define  PCI_HT_LCNF_LWI	0x0700	/* Link Width In */
+#define  PCI_HT_LCNF_DFIE	0x0800	/* Doubleword Flow Control In Enable */
+#define  PCI_HT_LCNF_LWO	0x7000	/* Link Width Out */
+#define  PCI_HT_LCNF_DFOE	0x8000	/* Doubleword Flow Control Out Enable */
+
+					/* Revision ID Register */
+#define  PCI_HT_RID_MIN		0x1f	/* Minor Revision */
+#define  PCI_HT_RID_MAJ		0xe0	/* Major Revision */
+
+					/* Link Frequency/Error Register */
+#define  PCI_HT_LFRER_FREQ	0x0f	/* Transmitter Clock Frequency */
+#define  PCI_HT_LFRER_200	0x00	/* 200MHz */
+#define  PCI_HT_LFRER_300	0x01	/* 300MHz */
+#define  PCI_HT_LFRER_400	0x02	/* 400MHz */
+#define  PCI_HT_LFRER_500	0x03	/* 500MHz */
+#define  PCI_HT_LFRER_600	0x04	/* 600MHz */
+#define  PCI_HT_LFRER_800	0x05	/* 800MHz */
+#define  PCI_HT_LFRER_1000	0x06	/* 1.0GHz */
+#define  PCI_HT_LFRER_1200	0x07	/* 1.2GHz */
+#define  PCI_HT_LFRER_1400	0x08	/* 1.4GHz */
+#define  PCI_HT_LFRER_1600	0x09	/* 1.6GHz */
+#define  PCI_HT_LFRER_VEND	0x0f	/* Vendor-Specific */
+#define  PCI_HT_LFRER_ERR	0xf0	/* Link Error */
+#define  PCI_HT_LFRER_PROT	0x10	/* Protocol Error */
+#define  PCI_HT_LFRER_OV	0x20	/* Overflow Error */
+#define  PCI_HT_LFRER_EOC	0x40	/* End of Chain Error */
+#define  PCI_HT_LFRER_CTLT	0x80	/* CTL Timeout */
+
+					/* Link Frequency Capability Register */
+#define  PCI_HT_LFCAP_200	0x0001	/* 200MHz */
+#define  PCI_HT_LFCAP_300	0x0002	/* 300MHz */
+#define  PCI_HT_LFCAP_400	0x0004	/* 400MHz */
+#define  PCI_HT_LFCAP_500	0x0008	/* 500MHz */
+#define  PCI_HT_LFCAP_600	0x0010	/* 600MHz */
+#define  PCI_HT_LFCAP_800	0x0020	/* 800MHz */
+#define  PCI_HT_LFCAP_1000	0x0040	/* 1.0GHz */
+#define  PCI_HT_LFCAP_1200	0x0080	/* 1.2GHz */
+#define  PCI_HT_LFCAP_1400	0x0100	/* 1.4GHz */
+#define  PCI_HT_LFCAP_1600	0x0200	/* 1.6GHz */
+#define  PCI_HT_LFCAP_VEND	0x8000	/* Vendor-Specific */
+
+					/* Feature Register */
+#define  PCI_HT_FTR_ISOCFC	0x0001	/* Isochronous Flow Control Mode */
+#define  PCI_HT_FTR_LDTSTOP	0x0002	/* LDTSTOP# Supported */
+#define  PCI_HT_FTR_CRCTM	0x0004	/* CRC Test Mode */
+#define  PCI_HT_FTR_ECTLT	0x0008	/* Extended CTL Time Required */
+#define  PCI_HT_FTR_64BA	0x0010	/* 64-bit Addressing */
+#define  PCI_HT_FTR_UIDRD	0x0020	/* UnitID Reorder Disable */
+
+					/* Error Handling Register */
+#define  PCI_HT_EH_PFLE		0x0001	/* Protocol Error Flood Enable */
+#define  PCI_HT_EH_OFLE		0x0002	/* Overflow Error Flood Enable */
+#define  PCI_HT_EH_PFE		0x0004	/* Protocol Error Fatal Enable */
+#define  PCI_HT_EH_OFE		0x0008	/* Overflow Error Fatal Enable */
+#define  PCI_HT_EH_EOCFE	0x0010	/* End of Chain Error Fatal Enable */
+#define  PCI_HT_EH_RFE		0x0020	/* Response Error Fatal Enable */
+#define  PCI_HT_EH_CRCFE	0x0040	/* CRC Error Fatal Enable */
+#define  PCI_HT_EH_SERRFE	0x0080	/* System Error Fatal Enable (B */
+#define  PCI_HT_EH_CF		0x0100	/* Chain Fail */
+#define  PCI_HT_EH_RE		0x0200	/* Response Error */
+#define  PCI_HT_EH_PNFE		0x0400	/* Protocol Error Nonfatal Enable */
+#define  PCI_HT_EH_ONFE		0x0800	/* Overflow Error Nonfatal Enable */
+#define  PCI_HT_EH_EOCNFE	0x1000	/* End of Chain Error Nonfatal Enable */
+#define  PCI_HT_EH_RNFE		0x2000	/* Response Error Nonfatal Enable */
+#define  PCI_HT_EH_CRCNFE	0x4000	/* CRC Error Nonfatal Enable */
+#define  PCI_HT_EH_SERRNFE	0x8000	/* System Error Nonfatal Enable */
+
+/* HyperTransport: Slave or Primary Interface */
+#define PCI_HT_PRI_CMD		2	/* Command Register */
+#define  PCI_HT_PRI_CMD_BUID	0x001f	/* Base UnitID */
+#define  PCI_HT_PRI_CMD_UC	0x03e0	/* Unit Count */
+#define  PCI_HT_PRI_CMD_MH	0x0400	/* Master Host */
+#define  PCI_HT_PRI_CMD_DD	0x0800	/* Default Direction */
+#define  PCI_HT_PRI_CMD_DUL	0x1000	/* Drop on Uninitialized Link */
+
+#define PCI_HT_PRI_LCTR0	4	/* Link Control 0 Register */
+#define PCI_HT_PRI_LCNF0	6	/* Link Config 0 Register */
+#define PCI_HT_PRI_LCTR1	8	/* Link Control 1 Register */
+#define PCI_HT_PRI_LCNF1	10	/* Link Config 1 Register */
+#define PCI_HT_PRI_RID		12	/* Revision ID Register */
+#define PCI_HT_PRI_LFRER0	13	/* Link Frequency/Error 0 Register */
+#define PCI_HT_PRI_LFCAP0	14	/* Link Frequency Capability 0 Register */
+#define PCI_HT_PRI_FTR		16	/* Feature Register */
+#define PCI_HT_PRI_LFRER1	17	/* Link Frequency/Error 1 Register */
+#define PCI_HT_PRI_LFCAP1	18	/* Link Frequency Capability 1 Register */
+#define PCI_HT_PRI_ES		20	/* Enumeration Scratchpad Register */
+#define PCI_HT_PRI_EH		22	/* Error Handling Register */
+#define PCI_HT_PRI_MBU		24	/* Memory Base Upper Register */
+#define PCI_HT_PRI_MLU		25	/* Memory Limit Upper Register */
+#define PCI_HT_PRI_BN		26	/* Bus Number Register */
+#define PCI_HT_PRI_SIZEOF	28
+
+/* HyperTransport: Host or Secondary Interface */
+#define PCI_HT_SEC_CMD		2	/* Command Register */
+#define  PCI_HT_SEC_CMD_WR	0x0001	/* Warm Reset */
+#define  PCI_HT_SEC_CMD_DE	0x0002	/* Double-Ended */
+#define  PCI_HT_SEC_CMD_DN	0x0076	/* Device Number */
+#define  PCI_HT_SEC_CMD_CS	0x0080	/* Chain Side */
+#define  PCI_HT_SEC_CMD_HH	0x0100	/* Host Hide */
+#define  PCI_HT_SEC_CMD_AS	0x0400	/* Act as Slave */
+#define  PCI_HT_SEC_CMD_HIECE	0x0800	/* Host Inbound End of Chain Error */
+#define  PCI_HT_SEC_CMD_DUL	0x1000	/* Drop on Uninitialized Link */
+
+#define PCI_HT_SEC_LCTR		4	/* Link Control Register */
+#define PCI_HT_SEC_LCNF		6	/* Link Config Register */
+#define PCI_HT_SEC_RID		8	/* Revision ID Register */
+#define PCI_HT_SEC_LFRER	9	/* Link Frequency/Error Register */
+#define PCI_HT_SEC_LFCAP	10	/* Link Frequency Capability Register */
+#define PCI_HT_SEC_FTR		12	/* Feature Register */
+#define  PCI_HT_SEC_FTR_EXTRS	0x0100	/* Extended Register Set */
+#define  PCI_HT_SEC_FTR_UCNFE	0x0200	/* Upstream Configuration Enable */
+#define PCI_HT_SEC_ES		16	/* Enumeration Scratchpad Register */
+#define PCI_HT_SEC_EH		18	/* Error Handling Register */
+#define PCI_HT_SEC_MBU		20	/* Memory Base Upper Register */
+#define PCI_HT_SEC_MLU		21	/* Memory Limit Upper Register */
+#define PCI_HT_SEC_SIZEOF	24
+
+/* HyperTransport: Switch */
+#define PCI_HT_SW_CMD		2	/* Switch Command Register */
+#define  PCI_HT_SW_CMD_VIBERR	0x0080	/* VIB Error */
+#define  PCI_HT_SW_CMD_VIBFL	0x0100	/* VIB Flood */
+#define  PCI_HT_SW_CMD_VIBFT	0x0200	/* VIB Fatal */
+#define  PCI_HT_SW_CMD_VIBNFT	0x0400	/* VIB Nonfatal */
+#define PCI_HT_SW_PMASK		4	/* Partition Mask Register */
+#define PCI_HT_SW_SWINF		8	/* Switch Info Register */
+#define  PCI_HT_SW_SWINF_DP	0x0000001f	/* Default Port */
+#define  PCI_HT_SW_SWINF_EN	0x00000020	/* Enable Decode */
+#define  PCI_HT_SW_SWINF_CR	0x00000040	/* Cold Reset */
+#define  PCI_HT_SW_SWINF_PCIDX	0x00000f00	/* Performance Counter Index */
+#define  PCI_HT_SW_SWINF_BLRIDX	0x0003f000	/* Base/Limit Range Index */
+#define  PCI_HT_SW_SWINF_SBIDX	0x00002000	/* Secondary Base Range Index */
+#define  PCI_HT_SW_SWINF_HP	0x00040000	/* Hot Plug */
+#define  PCI_HT_SW_SWINF_HIDE	0x00080000	/* Hide Port */
+#define PCI_HT_SW_PCD		12	/* Performance Counter Data Register */
+#define PCI_HT_SW_BLRD		16	/* Base/Limit Range Data Register */
+#define PCI_HT_SW_SBD		20	/* Secondary Base Data Register */
+#define PCI_HT_SW_SIZEOF	24
+
+					/* Counter indices */
+#define  PCI_HT_SW_PC_PCR	0x0	/* Posted Command Receive */
+#define  PCI_HT_SW_PC_NPCR	0x1	/* Nonposted Command Receive */
+#define  PCI_HT_SW_PC_RCR	0x2	/* Response Command Receive */
+#define  PCI_HT_SW_PC_PDWR	0x3	/* Posted DW Receive */
+#define  PCI_HT_SW_PC_NPDWR	0x4	/* Nonposted DW Receive */
+#define  PCI_HT_SW_PC_RDWR	0x5	/* Response DW Receive */
+#define  PCI_HT_SW_PC_PCT	0x6	/* Posted Command Transmit */
+#define  PCI_HT_SW_PC_NPCT	0x7	/* Nonposted Command Transmit */
+#define  PCI_HT_SW_PC_RCT	0x8	/* Response Command Transmit */
+#define  PCI_HT_SW_PC_PDWT	0x9	/* Posted DW Transmit */
+#define  PCI_HT_SW_PC_NPDWT	0xa	/* Nonposted DW Transmit */
+#define  PCI_HT_SW_PC_RDWT	0xb	/* Response DW Transmit */
+
+					/* Base/Limit Range indices */
+#define  PCI_HT_SW_BLR_BASE0_LO	0x0	/* Base 0[31:1], Enable */
+#define  PCI_HT_SW_BLR_BASE0_HI	0x1	/* Base 0 Upper */
+#define  PCI_HT_SW_BLR_LIM0_LO	0x2	/* Limit 0 Lower */
+#define  PCI_HT_SW_BLR_LIM0_HI	0x3	/* Limit 0 Upper */
+
+					/* Secondary Base indices */
+#define  PCI_HT_SW_SB_LO	0x0	/* Secondary Base[31:1], Enable */
+#define  PCI_HT_SW_S0_HI	0x1	/* Secondary Base Upper */
+
+/* HyperTransport: Interrupt Discovery and Configuration */
+#define PCI_HT_IDC_IDX		2	/* Index Register */
+#define PCI_HT_IDC_DATA		4	/* Data Register */
+#define PCI_HT_IDC_SIZEOF	8
+
+					/* Register indices */
+#define  PCI_HT_IDC_IDX_LINT	0x01	/* Last Interrupt Register */
+#define   PCI_HT_IDC_LINT	0x00ff0000	/* Last interrupt definition */
+#define  PCI_HT_IDC_IDX_IDR	0x10	/* Interrupt Definition Registers */
+					/* Low part (at index) */
+#define   PCI_HT_IDC_IDR_MASK	0x10000001	/* Mask */
+#define   PCI_HT_IDC_IDR_POL	0x10000002	/* Polarity */
+#define   PCI_HT_IDC_IDR_II_2	0x1000001c	/* IntrInfo[4:2]: Message Type */
+#define   PCI_HT_IDC_IDR_II_5	0x10000020	/* IntrInfo[5]: Request EOI */
+#define   PCI_HT_IDC_IDR_II_6	0x00ffffc0	/* IntrInfo[23:6] */
+#define   PCI_HT_IDC_IDR_II_24	0xff000000	/* IntrInfo[31:24] */
+					/* High part (at index + 1) */
+#define   PCI_HT_IDC_IDR_II_32	0x00ffffff	/* IntrInfo[55:32] */
+#define   PCI_HT_IDC_IDR_PASSPW	0x40000000	/* PassPW setting for messages */
+#define   PCI_HT_IDC_IDR_WEOI	0x80000000	/* Waiting for EOI */
+
+/* HyperTransport: Revision ID */
+#define PCI_HT_RID_RID		2	/* Revision Register */
+#define PCI_HT_RID_SIZEOF	4
+
+/* HyperTransport: UnitID Clumping */
+#define PCI_HT_UIDC_CS		4	/* Clumping Support Register */
+#define PCI_HT_UIDC_CE		8	/* Clumping Enable Register */
+#define PCI_HT_UIDC_SIZEOF	12
+
+/* HyperTransport: Extended Configuration Space Access */
+#define PCI_HT_ECSA_ADDR	4	/* Configuration Address Register */
+#define  PCI_HT_ECSA_ADDR_REG	0x00000ffc	/* Register */
+#define  PCI_HT_ECSA_ADDR_FUN	0x00007000	/* Function */
+#define  PCI_HT_ECSA_ADDR_DEV	0x000f1000	/* Device */
+#define  PCI_HT_ECSA_ADDR_BUS	0x0ff00000	/* Bus Number */
+#define  PCI_HT_ECSA_ADDR_TYPE	0x10000000	/* Access Type */
+#define PCI_HT_ECSA_DATA	8	/* Configuration Data Register */
+#define PCI_HT_ECSA_SIZEOF	12
+
+/* HyperTransport: Address Mapping */
+#define PCI_HT_AM_CMD		2	/* Command Register */
+#define  PCI_HT_AM_CMD_NDMA	0x000f	/* Number of DMA Mappings */
+#define  PCI_HT_AM_CMD_IOSIZ	0x01f0	/* I/O Size */
+#define  PCI_HT_AM_CMD_MT	0x0600	/* Map Type */
+#define  PCI_HT_AM_CMD_MT_40B	0x0000	/* 40-bit */
+#define  PCI_HT_AM_CMD_MT_64B	0x0200	/* 64-bit */
+
+					/* Window Control Register bits */
+#define  PCI_HT_AM_SBW_CTR_COMP	0x1	/* Compat */
+#define  PCI_HT_AM_SBW_CTR_NCOH	0x2	/* NonCoherent */
+#define  PCI_HT_AM_SBW_CTR_ISOC	0x4	/* Isochronous */
+#define  PCI_HT_AM_SBW_CTR_EN	0x8	/* Enable */
+
+/* HyperTransport: 40-bit Address Mapping */
+#define PCI_HT_AM40_SBNPW	4	/* Secondary Bus Non-Prefetchable Window Register */
+#define  PCI_HT_AM40_SBW_BASE	0x000fffff	/* Window Base */
+#define  PCI_HT_AM40_SBW_CTR	0xf0000000	/* Window Control */
+#define PCI_HT_AM40_SBPW	8	/* Secondary Bus Prefetchable Window Register */
+#define PCI_HT_AM40_DMA_PBASE0	12	/* DMA Window Primary Base 0 Register */
+#define PCI_HT_AM40_DMA_CTR0	15	/* DMA Window Control 0 Register */
+#define  PCI_HT_AM40_DMA_CTR_CTR 0xf0	/* Window Control */
+#define PCI_HT_AM40_DMA_SLIM0	16	/* DMA Window Secondary Limit 0 Register */
+#define PCI_HT_AM40_DMA_SBASE0	18	/* DMA Window Secondary Base 0 Register */
+#define PCI_HT_AM40_SIZEOF	12	/* size is variable: 12 + 8 * NDMA */
+
+/* HyperTransport: 64-bit Address Mapping */
+#define PCI_HT_AM64_IDX		4	/* Index Register */
+#define PCI_HT_AM64_DATA_LO	8	/* Data Lower Register */
+#define PCI_HT_AM64_DATA_HI	12	/* Data Upper Register */
+#define PCI_HT_AM64_SIZEOF	16
+
+					/* Register indices */
+#define  PCI_HT_AM64_IDX_SBNPW	0x00	/* Secondary Bus Non-Prefetchable Window Register */
+#define   PCI_HT_AM64_W_BASE_LO	0xfff00000	/* Window Base Lower */
+#define   PCI_HT_AM64_W_CTR	0x0000000f	/* Window Control */
+#define  PCI_HT_AM64_IDX_SBPW	0x01	/* Secondary Bus Prefetchable Window Register */
+#define   PCI_HT_AM64_IDX_PBNPW	0x02	/* Primary Bus Non-Prefetchable Window Register */
+#define   PCI_HT_AM64_IDX_DMAPB0 0x04	/* DMA Window Primary Base 0 Register */
+#define   PCI_HT_AM64_IDX_DMASB0 0x05	/* DMA Window Secondary Base 0 Register */
+#define   PCI_HT_AM64_IDX_DMASL0 0x06	/* DMA Window Secondary Limit 0 Register */
+
+/* HyperTransport: MSI Mapping */
+#define PCI_HT_MSIM_CMD		2	/* Command Register */
+#define  PCI_HT_MSIM_CMD_EN	0x0001	/* Mapping Active */
+#define  PCI_HT_MSIM_CMD_FIXD	0x0002	/* MSI Mapping Address Fixed */
+#define PCI_HT_MSIM_ADDR_LO	4	/* MSI Mapping Address Lower Register */
+#define PCI_HT_MSIM_ADDR_HI	8	/* MSI Mapping Address Upper Register */
+#define PCI_HT_MSIM_SIZEOF	12
+
+/* HyperTransport: DirectRoute */
+#define PCI_HT_DR_CMD		2	/* Command Register */
+#define  PCI_HT_DR_CMD_NDRS	0x000f	/* Number of DirectRoute Spaces */
+#define  PCI_HT_DR_CMD_IDX	0x01f0	/* Index */
+#define PCI_HT_DR_EN		4	/* Enable Vector Register */
+#define PCI_HT_DR_DATA		8	/* Data Register */
+#define PCI_HT_DR_SIZEOF	12
+
+					/* Register indices */
+#define  PCI_HT_DR_IDX_BASE_LO	0x00	/* DirectRoute Base Lower Register */
+#define   PCI_HT_DR_OTNRD	0x00000001	/* Opposite to Normal Request Direction */
+#define   PCI_HT_DR_BL_LO	0xffffff00	/* Base/Limit Lower */
+#define  PCI_HT_DR_IDX_BASE_HI	0x01	/* DirectRoute Base Upper Register */
+#define  PCI_HT_DR_IDX_LIMIT_LO	0x02	/* DirectRoute Limit Lower Register */
+#define  PCI_HT_DR_IDX_LIMIT_HI	0x03	/* DirectRoute Limit Upper Register */
+
+/* HyperTransport: VCSet */
+#define PCI_HT_VCS_SUP		4	/* VCSets Supported Register */
+#define PCI_HT_VCS_L1EN		5	/* Link 1 VCSets Enabled Register */
+#define PCI_HT_VCS_L0EN		6	/* Link 0 VCSets Enabled Register */
+#define PCI_HT_VCS_SBD		8	/* Stream Bucket Depth Register */
+#define PCI_HT_VCS_SINT		9	/* Stream Interval Register */
+#define PCI_HT_VCS_SSUP		10	/* Number of Streaming VCs Supported Register */
+#define  PCI_HT_VCS_SSUP_0	0x00	/* Streaming VC 0 */
+#define  PCI_HT_VCS_SSUP_3	0x01	/* Streaming VCs 0-3 */
+#define  PCI_HT_VCS_SSUP_15	0x02	/* Streaming VCs 0-15 */
+#define PCI_HT_VCS_NFCBD	12	/* Non-FC Bucket Depth Register */
+#define PCI_HT_VCS_NFCINT	13	/* Non-FC Bucket Interval Register */
+#define PCI_HT_VCS_SIZEOF	16
+
+/* HyperTransport: Retry Mode */
+#define PCI_HT_RM_CTR0		4	/* Control 0 Register */
+#define  PCI_HT_RM_CTR_LRETEN	0x01	/* Link Retry Enable */
+#define  PCI_HT_RM_CTR_FSER	0x02	/* Force Single Error */
+#define  PCI_HT_RM_CTR_ROLNEN	0x04	/* Rollover Nonfatal Enable */
+#define  PCI_HT_RM_CTR_FSS	0x08	/* Force Single Stomp */
+#define  PCI_HT_RM_CTR_RETNEN	0x10	/* Retry Nonfatal Enable */
+#define  PCI_HT_RM_CTR_RETFEN	0x20	/* Retry Fatal Enable */
+#define  PCI_HT_RM_CTR_AA	0xc0	/* Allowed Attempts */
+#define PCI_HT_RM_STS0		5	/* Status 0 Register */
+#define  PCI_HT_RM_STS_RETSNT	0x01	/* Retry Sent */
+#define  PCI_HT_RM_STS_CNTROL	0x02	/* Count Rollover */
+#define  PCI_HT_RM_STS_SRCV	0x04	/* Stomp Received */
+#define PCI_HT_RM_CTR1		6	/* Control 1 Register */
+#define PCI_HT_RM_STS1		7	/* Status 1 Register */
+#define PCI_HT_RM_CNT0		8	/* Retry Count 0 Register */
+#define PCI_HT_RM_CNT1		10	/* Retry Count 1 Register */
+#define PCI_HT_RM_SIZEOF	12
+
+/* PCI Express */
+#define PCI_EXP_FLAGS		0x2	/* Capabilities register */
+#define PCI_EXP_FLAGS_VERS	0x000f	/* Capability version */
+#define PCI_EXP_FLAGS_TYPE	0x00f0	/* Device/Port type */
+#define  PCI_EXP_TYPE_ENDPOINT	0x0	/* Express Endpoint */
+#define  PCI_EXP_TYPE_LEG_END	0x1	/* Legacy Endpoint */
+#define  PCI_EXP_TYPE_ROOT_PORT 0x4	/* Root Port */
+#define  PCI_EXP_TYPE_UPSTREAM	0x5	/* Upstream Port */
+#define  PCI_EXP_TYPE_DOWNSTREAM 0x6	/* Downstream Port */
+#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7	/* PCI/PCI-X Bridge */
+#define PCI_EXP_FLAGS_SLOT	0x0100	/* Slot implemented */
+#define PCI_EXP_FLAGS_IRQ	0x3e00	/* Interrupt message number */
+#define PCI_EXP_DEVCAP		0x4	/* Device capabilities */
+#define  PCI_EXP_DEVCAP_PAYLOAD	0x07	/* Max_Payload_Size */
+#define  PCI_EXP_DEVCAP_PHANTOM	0x18	/* Phantom functions */
+#define  PCI_EXP_DEVCAP_EXT_TAG	0x20	/* Extended tags */
+#define  PCI_EXP_DEVCAP_L0S	0x1c0	/* L0s Acceptable Latency */
+#define  PCI_EXP_DEVCAP_L1	0xe00	/* L1 Acceptable Latency */
+#define  PCI_EXP_DEVCAP_ATN_BUT	0x1000	/* Attention Button Present */
+#define  PCI_EXP_DEVCAP_ATN_IND	0x2000	/* Attention Indicator Present */
+#define  PCI_EXP_DEVCAP_PWR_IND	0x4000	/* Power Indicator Present */
+#define  PCI_EXP_DEVCAP_PWR_VAL	0x3fc0000	/* Slot Power Limit Value */
+#define  PCI_EXP_DEVCAP_PWR_SCL	0xc000000	/* Slot Power Limit Scale */
+#define PCI_EXP_DEVCTL		0x8	/* Device Control */
+#define  PCI_EXP_DEVCTL_CERE	0x0001	/* Correctable Error Reporting En. */
+#define  PCI_EXP_DEVCTL_NFERE	0x0002	/* Non-Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_FERE	0x0004	/* Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_URRE	0x0008	/* Unsupported Request Reporting En. */
+#define  PCI_EXP_DEVCTL_RELAXED	0x0010	/* Enable Relaxed Ordering */
+#define  PCI_EXP_DEVCTL_PAYLOAD	0x00e0	/* Max_Payload_Size */
+#define  PCI_EXP_DEVCTL_EXT_TAG	0x0100	/* Extended Tag Field Enable */
+#define  PCI_EXP_DEVCTL_PHANTOM	0x0200	/* Phantom Functions Enable */
+#define  PCI_EXP_DEVCTL_AUX_PME	0x0400	/* Auxiliary Power PM Enable */
+#define  PCI_EXP_DEVCTL_NOSNOOP	0x0800	/* Enable No Snoop */
+#define  PCI_EXP_DEVCTL_READRQ	0x7000	/* Max_Read_Request_Size */
+#define PCI_EXP_DEVSTA		0xa	/* Device Status */
+#define  PCI_EXP_DEVSTA_CED	0x01	/* Correctable Error Detected */
+#define  PCI_EXP_DEVSTA_NFED	0x02	/* Non-Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_FED	0x04	/* Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_URD	0x08	/* Unsupported Request Detected */
+#define  PCI_EXP_DEVSTA_AUXPD	0x10	/* AUX Power Detected */
+#define  PCI_EXP_DEVSTA_TRPND	0x20	/* Transactions Pending */
+#define PCI_EXP_LNKCAP		0xc	/* Link Capabilities */
+#define  PCI_EXP_LNKCAP_SPEED	0x0000f	/* Maximum Link Speed */
+#define  PCI_EXP_LNKCAP_WIDTH	0x003f0	/* Maximum Link Width */
+#define  PCI_EXP_LNKCAP_ASPM	0x00c00	/* Active State Power Management */
+#define  PCI_EXP_LNKCAP_L0S	0x07000	/* L0s Acceptable Latency */
+#define  PCI_EXP_LNKCAP_L1	0x38000	/* L1 Acceptable Latency */
+#define  PCI_EXP_LNKCAP_PORT	0xff000000	/* Port Number */
+#define PCI_EXP_LNKCTL		0x10	/* Link Control */
+#define  PCI_EXP_LNKCTL_ASPM	0x0003	/* ASPM Control */
+#define  PCI_EXP_LNKCTL_RCB	0x0008	/* Read Completion Boundary */
+#define  PCI_EXP_LNKCTL_DISABLE	0x0010	/* Link Disable */
+#define  PCI_EXP_LNKCTL_RETRAIN	0x0020	/* Retrain Link */
+#define  PCI_EXP_LNKCTL_CLOCK	0x0040	/* Common Clock Configuration */
+#define  PCI_EXP_LNKCTL_XSYNCH	0x0080	/* Extended Synch */
+#define PCI_EXP_LNKSTA		0x12	/* Link Status */
+#define  PCI_EXP_LNKSTA_SPEED	0x000f	/* Negotiated Link Speed */
+#define  PCI_EXP_LNKSTA_WIDTH	0x03f0	/* Negotiated Link Width */
+#define  PCI_EXP_LNKSTA_TR_ERR	0x0400	/* Training Error */
+#define  PCI_EXP_LNKSTA_TRAIN	0x0800	/* Link Training */
+#define  PCI_EXP_LNKSTA_SL_CLK	0x1000	/* Slot Clock Configuration */
+#define PCI_EXP_SLTCAP		0x14	/* Slot Capabilities */
+#define  PCI_EXP_SLTCAP_ATNB	0x0001	/* Attention Button Present */
+#define  PCI_EXP_SLTCAP_PWRC	0x0002	/* Power Controller Present */
+#define  PCI_EXP_SLTCAP_MRL	0x0004	/* MRL Sensor Present */
+#define  PCI_EXP_SLTCAP_ATNI	0x0008	/* Attention Indicator Present */
+#define  PCI_EXP_SLTCAP_PWRI	0x0010	/* Power Indicator Present */
+#define  PCI_EXP_SLTCAP_HPS	0x0020	/* Hot-Plug Surprise */
+#define  PCI_EXP_SLTCAP_HPC	0x0040	/* Hot-Plug Capable */
+#define  PCI_EXP_SLTCAP_PWR_VAL	0x00007f80	/* Slot Power Limit Value */
+#define  PCI_EXP_SLTCAP_PWR_SCL	0x00018000	/* Slot Power Limit Scale */
+#define  PCI_EXP_SLTCAP_PSN	0xfff80000	/* Physical Slot Number */
+#define PCI_EXP_SLTCTL		0x18	/* Slot Control */
+#define  PCI_EXP_SLTCTL_ATNB	0x0001	/* Attention Button Pressed Enable */
+#define  PCI_EXP_SLTCTL_PWRF	0x0002	/* Power Fault Detected Enable */
+#define  PCI_EXP_SLTCTL_MRLS	0x0004	/* MRL Sensor Changed Enable */
+#define  PCI_EXP_SLTCTL_PRSD	0x0008	/* Presence Detect Changed Enable */
+#define  PCI_EXP_SLTCTL_CMDC	0x0010	/* Command Completed Interrupt Enable */
+#define  PCI_EXP_SLTCTL_HPIE	0x0020	/* Hot-Plug Interrupt Enable */
+#define  PCI_EXP_SLTCTL_ATNI	0x00C0	/* Attention Indicator Control */
+#define  PCI_EXP_SLTCTL_PWRI	0x0300	/* Power Indicator Control */
+#define  PCI_EXP_SLTCTL_PWRC	0x0400	/* Power Controller Control */
+#define PCI_EXP_SLTSTA		0x1a	/* Slot Status */
+#define PCI_EXP_RTCTL		0x1c	/* Root Control */
+#define  PCI_EXP_RTCTL_SECEE	0x1	/* System Error on Correctable Error */
+#define  PCI_EXP_RTCTL_SENFEE	0x1	/* System Error on Non-Fatal Error */
+#define  PCI_EXP_RTCTL_SEFEE	0x1	/* System Error on Fatal Error */
+#define  PCI_EXP_RTCTL_PMEIE	0x1	/* PME Interrupt Enable */
+#define PCI_EXP_RTSTA		0x20	/* Root Status */
+
+/* MSI-X */
+#define  PCI_MSIX_ENABLE	0x8000
+#define  PCI_MSIX_MASK		0x4000
+#define  PCI_MSIX_TABSIZE	0x03ff
+#define PCI_MSIX_TABLE		4
+#define PCI_MSIX_PBA		8
+#define  PCI_MSIX_BIR		0x7
+
+/* Advanced Error Reporting */
+#define PCI_ERR_UNCOR_STATUS	4	/* Uncorrectable Error Status */
+#define  PCI_ERR_UNC_TRAIN	0x00000001	/* Training */
+#define  PCI_ERR_UNC_DLP	0x00000010	/* Data Link Protocol */
+#define  PCI_ERR_UNC_POISON_TLP	0x00001000	/* Poisoned TLP */
+#define  PCI_ERR_UNC_FCP	0x00002000	/* Flow Control Protocol */
+#define  PCI_ERR_UNC_COMP_TIME	0x00004000	/* Completion Timeout */
+#define  PCI_ERR_UNC_COMP_ABORT	0x00008000	/* Completer Abort */
+#define  PCI_ERR_UNC_UNX_COMP	0x00010000	/* Unexpected Completion */
+#define  PCI_ERR_UNC_RX_OVER	0x00020000	/* Receiver Overflow */
+#define  PCI_ERR_UNC_MALF_TLP	0x00040000	/* Malformed TLP */
+#define  PCI_ERR_UNC_ECRC	0x00080000	/* ECRC Error Status */
+#define  PCI_ERR_UNC_UNSUP	0x00100000	/* Unsupported Request */
+#define PCI_ERR_UNCOR_MASK	8	/* Uncorrectable Error Mask */
+	/* Same bits as above */
+#define PCI_ERR_UNCOR_SEVER	12	/* Uncorrectable Error Severity */
+	/* Same bits as above */
+#define PCI_ERR_COR_STATUS	16	/* Correctable Error Status */
+#define  PCI_ERR_COR_RCVR	0x00000001	/* Receiver Error Status */
+#define  PCI_ERR_COR_BAD_TLP	0x00000040	/* Bad TLP Status */
+#define  PCI_ERR_COR_BAD_DLLP	0x00000080	/* Bad DLLP Status */
+#define  PCI_ERR_COR_REP_ROLL	0x00000100	/* REPLAY_NUM Rollover */
+#define  PCI_ERR_COR_REP_TIMER	0x00001000	/* Replay Timer Timeout */
+#define PCI_ERR_COR_MASK	20	/* Correctable Error Mask */
+	/* Same bits as above */
+#define PCI_ERR_CAP		24	/* Advanced Error Capabilities */
+#define  PCI_ERR_CAP_FEP(x)	((x) & 31)	/* First Error Pointer */
+#define  PCI_ERR_CAP_ECRC_GENC	0x00000020	/* ECRC Generation Capable */
+#define  PCI_ERR_CAP_ECRC_GENE	0x00000040	/* ECRC Generation Enable */
+#define  PCI_ERR_CAP_ECRC_CHKC	0x00000080	/* ECRC Check Capable */
+#define  PCI_ERR_CAP_ECRC_CHKE	0x00000100	/* ECRC Check Enable */
+#define PCI_ERR_HEADER_LOG	28	/* Header Log Register (16 bytes) */
+#define PCI_ERR_ROOT_COMMAND	44	/* Root Error Command */
+#define PCI_ERR_ROOT_STATUS	48
+#define PCI_ERR_ROOT_COR_SRC	52
+#define PCI_ERR_ROOT_SRC	54
+
+/* Virtual Channel */
+#define PCI_VC_PORT_REG1	4
+#define PCI_VC_PORT_REG2	8
+#define PCI_VC_PORT_CTRL	12
+#define PCI_VC_PORT_STATUS	14
+#define PCI_VC_RES_CAP		16
+#define PCI_VC_RES_CTRL		20
+#define PCI_VC_RES_STATUS	26
+
+/* Power Budgeting */
+#define PCI_PWR_DSR		4	/* Data Select Register */
+#define PCI_PWR_DATA		8	/* Data Register */
+#define  PCI_PWR_DATA_BASE(x)	((x) & 0xff)	/* Base Power */
+#define  PCI_PWR_DATA_SCALE(x)	(((x) >> 8) & 3)	/* Data Scale */
+#define  PCI_PWR_DATA_PM_SUB(x)	(((x) >> 10) & 7)	/* PM Sub State */
+#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3)	/* PM State */
+#define  PCI_PWR_DATA_TYPE(x)	(((x) >> 15) & 7)	/* Type */
+#define  PCI_PWR_DATA_RAIL(x)	(((x) >> 18) & 7)	/* Power Rail */
+#define PCI_PWR_CAP		12	/* Capability */
+#define  PCI_PWR_CAP_BUDGET(x)	((x) & 1)	/* Included in system budget */
+
+/*
+ * The PCI interface treats multi-function devices as independent
+ * devices.  The slot/function address of each device is encoded
+ * in a single byte as follows:
+ *
+ *	7:3 = slot
+ *	2:0 = function
+ */
+#define PCI_DEVFN(slot,func)	((((slot) & 0x1f) << 3) | ((func) & 0x07))
+#define PCI_SLOT(devfn)		(((devfn) >> 3) & 0x1f)
+#define PCI_FUNC(devfn)		((devfn) & 0x07)
+
+/* Device classes and subclasses */
+
+#define PCI_CLASS_NOT_DEFINED		0x0000
+#define PCI_CLASS_NOT_DEFINED_VGA	0x0001
+
+#define PCI_BASE_CLASS_STORAGE		0x01
+#define PCI_CLASS_STORAGE_SCSI		0x0100
+#define PCI_CLASS_STORAGE_IDE		0x0101
+#define PCI_CLASS_STORAGE_FLOPPY	0x0102
+#define PCI_CLASS_STORAGE_IPI		0x0103
+#define PCI_CLASS_STORAGE_RAID		0x0104
+#define PCI_CLASS_STORAGE_OTHER		0x0180
+
+#define PCI_BASE_CLASS_NETWORK		0x02
+#define PCI_CLASS_NETWORK_ETHERNET	0x0200
+#define PCI_CLASS_NETWORK_TOKEN_RING	0x0201
+#define PCI_CLASS_NETWORK_FDDI		0x0202
+#define PCI_CLASS_NETWORK_ATM		0x0203
+#define PCI_CLASS_NETWORK_OTHER		0x0280
+
+#define PCI_BASE_CLASS_DISPLAY		0x03
+#define PCI_CLASS_DISPLAY_VGA		0x0300
+#define PCI_CLASS_DISPLAY_XGA		0x0301
+#define PCI_CLASS_DISPLAY_OTHER		0x0380
+
+#define PCI_BASE_CLASS_MULTIMEDIA	0x04
+#define PCI_CLASS_MULTIMEDIA_VIDEO	0x0400
+#define PCI_CLASS_MULTIMEDIA_AUDIO	0x0401
+#define PCI_CLASS_MULTIMEDIA_OTHER	0x0480
+
+#define PCI_BASE_CLASS_MEMORY		0x05
+#define  PCI_CLASS_MEMORY_RAM		0x0500
+#define  PCI_CLASS_MEMORY_FLASH		0x0501
+#define  PCI_CLASS_MEMORY_OTHER		0x0580
+
+#define PCI_BASE_CLASS_BRIDGE		0x06
+#define  PCI_CLASS_BRIDGE_HOST		0x0600
+#define  PCI_CLASS_BRIDGE_ISA		0x0601
+#define  PCI_CLASS_BRIDGE_EISA		0x0602
+#define  PCI_CLASS_BRIDGE_MC		0x0603
+#define  PCI_CLASS_BRIDGE_PCI		0x0604
+#define  PCI_CLASS_BRIDGE_PCMCIA	0x0605
+#define  PCI_CLASS_BRIDGE_NUBUS		0x0606
+#define  PCI_CLASS_BRIDGE_CARDBUS	0x0607
+#define  PCI_CLASS_BRIDGE_OTHER		0x0680
+
+#define PCI_BASE_CLASS_COMMUNICATION	0x07
+#define PCI_CLASS_COMMUNICATION_SERIAL	0x0700
+#define PCI_CLASS_COMMUNICATION_PARALLEL 0x0701
+#define PCI_CLASS_COMMUNICATION_OTHER	0x0780
+
+#define PCI_BASE_CLASS_SYSTEM		0x08
+#define PCI_CLASS_SYSTEM_PIC		0x0800
+#define PCI_CLASS_SYSTEM_DMA		0x0801
+#define PCI_CLASS_SYSTEM_TIMER		0x0802
+#define PCI_CLASS_SYSTEM_RTC		0x0803
+#define PCI_CLASS_SYSTEM_OTHER		0x0880
+
+#define PCI_BASE_CLASS_INPUT		0x09
+#define PCI_CLASS_INPUT_KEYBOARD	0x0900
+#define PCI_CLASS_INPUT_PEN		0x0901
+#define PCI_CLASS_INPUT_MOUSE		0x0902
+#define PCI_CLASS_INPUT_OTHER		0x0980
+
+#define PCI_BASE_CLASS_DOCKING		0x0a
+#define PCI_CLASS_DOCKING_GENERIC	0x0a00
+#define PCI_CLASS_DOCKING_OTHER		0x0a01
+
+#define PCI_BASE_CLASS_PROCESSOR	0x0b
+#define PCI_CLASS_PROCESSOR_386		0x0b00
+#define PCI_CLASS_PROCESSOR_486		0x0b01
+#define PCI_CLASS_PROCESSOR_PENTIUM	0x0b02
+#define PCI_CLASS_PROCESSOR_ALPHA	0x0b10
+#define PCI_CLASS_PROCESSOR_POWERPC	0x0b20
+#define PCI_CLASS_PROCESSOR_CO		0x0b40
+
+#define PCI_BASE_CLASS_SERIAL		0x0c
+#define PCI_CLASS_SERIAL_FIREWIRE	0x0c00
+#define PCI_CLASS_SERIAL_ACCESS		0x0c01
+#define PCI_CLASS_SERIAL_SSA		0x0c02
+#define PCI_CLASS_SERIAL_USB		0x0c03
+#define PCI_CLASS_SERIAL_FIBER		0x0c04
+
+#define PCI_CLASS_OTHERS		0xff
+
+/* Several ID's we need in the library */
+
+#define PCI_VENDOR_ID_INTEL		0x8086
+#define PCI_VENDOR_ID_COMPAQ		0x0e11
Index: uspace/srv/pci/libpci/i386-ports.c
===================================================================
--- uspace/srv/pci/libpci/i386-ports.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/i386-ports.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,274 @@
+/*
+ *	The PCI Library -- Direct Configuration access via i386 Ports
+ *
+ *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <unistd.h>
+
+#include "internal.h"
+
+static inline void outb(u8 b, u16 port)
+{
+	asm volatile ("outb %0, %1\n" :: "a" (b), "d" (port));
+}
+
+static inline void outw(u16 w, u16 port)
+{
+	asm volatile ("outw %0, %1\n" :: "a" (w), "d" (port));
+}
+
+static inline void outl(u32 l, u16 port)
+{
+	asm volatile ("outl %0, %1\n" :: "a" (l), "d" (port));
+}
+
+static inline u8 inb(u16 port)
+{
+	u8 val;
+
+	asm volatile ("inb %1, %0 \n" : "=a" (val) : "d"(port));
+	return val;
+}
+
+static inline u16 inw(u16 port)
+{
+	u16 val;
+
+	asm volatile ("inw %1, %0 \n" : "=a" (val) : "d"(port));
+	return val;
+}
+
+static inline u32 inl(u16 port)
+{
+	u32 val;
+
+	asm volatile ("inl %1, %0 \n" : "=a" (val) : "d"(port));
+	return val;
+}
+
+static void conf12_init(struct pci_access *a)
+{
+}
+
+static void conf12_cleanup(struct pci_access *a UNUSED)
+{
+}
+
+/*
+ * Before we decide to use direct hardware access mechanisms, we try to do some
+ * trivial checks to ensure it at least _seems_ to be working -- we just test
+ * whether bus 00 contains a host bridge (this is similar to checking
+ * techniques used in XFree86, but ours should be more reliable since we
+ * attempt to make use of direct access hints provided by the PCI BIOS).
+ *
+ * This should be close to trivial, but it isn't, because there are buggy
+ * chipsets (yes, you guessed it, by Intel and Compaq) that have no class ID.
+ */
+
+static int intel_sanity_check(struct pci_access *a, struct pci_methods *m)
+{
+	struct pci_dev d;
+
+	a->debug("...sanity check");
+	d.bus = 0;
+	d.func = 0;
+	for (d.dev = 0; d.dev < 32; d.dev++) {
+		u16 class, vendor;
+		if (m->read(&d, PCI_CLASS_DEVICE, (byte *) & class,
+			 sizeof(class))
+		    && (class == cpu_to_le16(PCI_CLASS_BRIDGE_HOST)
+			|| class == cpu_to_le16(PCI_CLASS_DISPLAY_VGA))
+		    || m->read(&d, PCI_VENDOR_ID, (byte *) & vendor,
+			       sizeof(vendor))
+		    && (vendor == cpu_to_le16(PCI_VENDOR_ID_INTEL)
+			|| vendor == cpu_to_le16(PCI_VENDOR_ID_COMPAQ))) {
+			a->debug("...outside the Asylum at 0/%02x/0",
+				 d.dev);
+			return 1;
+		}
+	}
+	a->debug("...insane");
+	return 0;
+}
+
+/*
+ *	Configuration type 1
+ */
+
+#define CONFIG_CMD(bus, device_fn, where)   (0x80000000 | (bus << 16) | (device_fn << 8) | (where & ~3))
+
+static int conf1_detect(struct pci_access *a)
+{
+	unsigned int tmp;
+	int res = 0;
+
+	outb(0x01, 0xCFB);
+	tmp = inl(0xCF8);
+	outl(0x80000000, 0xCF8);
+	if (inl(0xCF8) == 0x80000000)
+		res = 1;
+	outl(tmp, 0xCF8);
+	if (res)
+		res = intel_sanity_check(a, &pm_intel_conf1);
+	return res;
+}
+
+static int conf1_read(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	int addr = 0xcfc + (pos & 3);
+
+	if (pos >= 256)
+		return 0;
+
+	outl(0x80000000 | ((d->bus & 0xff) << 16) |
+	     (PCI_DEVFN(d->dev, d->func) << 8) | (pos & ~3), 0xcf8);
+
+	switch (len) {
+	case 1:
+		buf[0] = inb(addr);
+		break;
+	case 2:
+		((u16 *) buf)[0] = cpu_to_le16(inw(addr));
+		break;
+	case 4:
+		((u32 *) buf)[0] = cpu_to_le32(inl(addr));
+		break;
+	default:
+		return pci_generic_block_read(d, pos, buf, len);
+	}
+	return 1;
+}
+
+static int conf1_write(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	int addr = 0xcfc + (pos & 3);
+
+	if (pos >= 256)
+		return 0;
+
+	outl(0x80000000 | ((d->bus & 0xff) << 16) |
+	     (PCI_DEVFN(d->dev, d->func) << 8) | (pos & ~3), 0xcf8);
+
+	switch (len) {
+	case 1:
+		outb(buf[0], addr);
+		break;
+	case 2:
+		outw(le16_to_cpu(((u16 *) buf)[0]), addr);
+		break;
+	case 4:
+		outl(le32_to_cpu(((u32 *) buf)[0]), addr);
+		break;
+	default:
+		return pci_generic_block_write(d, pos, buf, len);
+	}
+	return 1;
+}
+
+/*
+ *	Configuration type 2. Obsolete and brain-damaged, but existing.
+ */
+
+static int conf2_detect(struct pci_access *a)
+{
+	/* This is ugly and tends to produce false positives. Beware. */
+	outb(0x00, 0xCFB);
+	outb(0x00, 0xCF8);
+	outb(0x00, 0xCFA);
+	if (inb(0xCF8) == 0x00 && inb(0xCFA) == 0x00)
+		return intel_sanity_check(a, &pm_intel_conf2);
+	else
+		return 0;
+}
+
+static int conf2_read(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	int addr = 0xc000 | (d->dev << 8) | pos;
+
+	if (pos >= 256)
+		return 0;
+
+	if (d->dev >= 16)
+		/* conf2 supports only 16 devices per bus */
+		return 0;
+	outb((d->func << 1) | 0xf0, 0xcf8);
+	outb(d->bus, 0xcfa);
+	switch (len) {
+	case 1:
+		buf[0] = inb(addr);
+		break;
+	case 2:
+		((u16 *) buf)[0] = cpu_to_le16(inw(addr));
+		break;
+	case 4:
+		((u32 *) buf)[0] = cpu_to_le32(inl(addr));
+		break;
+	default:
+		outb(0, 0xcf8);
+		return pci_generic_block_read(d, pos, buf, len);
+	}
+	outb(0, 0xcf8);
+	return 1;
+}
+
+static int conf2_write(struct pci_dev *d, int pos, byte * buf, int len)
+{
+	int addr = 0xc000 | (d->dev << 8) | pos;
+
+	if (pos >= 256)
+		return 0;
+
+	if (d->dev >= 16)
+		d->access->error("conf2_write: only first 16 devices exist.");
+	outb((d->func << 1) | 0xf0, 0xcf8);
+	outb(d->bus, 0xcfa);
+	switch (len) {
+	case 1:
+		outb(buf[0], addr);
+		break;
+	case 2:
+		outw(le16_to_cpu(*(u16 *) buf), addr);
+		break;
+	case 4:
+		outl(le32_to_cpu(*(u32 *) buf), addr);
+		break;
+	default:
+		outb(0, 0xcf8);
+		return pci_generic_block_write(d, pos, buf, len);
+	}
+	outb(0, 0xcf8);
+	return 1;
+}
+
+struct pci_methods pm_intel_conf1 = {
+	"Intel-conf1",
+	NULL,			/* config */
+	conf1_detect,
+	conf12_init,
+	conf12_cleanup,
+	pci_generic_scan,
+	pci_generic_fill_info,
+	conf1_read,
+	conf1_write,
+	NULL,			/* init_dev */
+	NULL			/* cleanup_dev */
+};
+
+struct pci_methods pm_intel_conf2 = {
+	"Intel-conf2",
+	NULL,			/* config */
+	conf2_detect,
+	conf12_init,
+	conf12_cleanup,
+	pci_generic_scan,
+	pci_generic_fill_info,
+	conf2_read,
+	conf2_write,
+	NULL,			/* init_dev */
+	NULL			/* cleanup_dev */
+};
Index: uspace/srv/pci/libpci/internal.h
===================================================================
--- uspace/srv/pci/libpci/internal.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/internal.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,43 @@
+/*
+ *	The PCI Library -- Internal Stuff
+ *
+ *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include "pci.h"
+#include "sysdep.h"
+
+struct pci_methods {
+	char *name;
+	void (*config) (struct pci_access *);
+	int (*detect) (struct pci_access *);
+	void (*init) (struct pci_access *);
+	void (*cleanup) (struct pci_access *);
+	void (*scan) (struct pci_access *);
+	int (*fill_info) (struct pci_dev *, int flags);
+	int (*read) (struct pci_dev *, int pos, byte * buf, int len);
+	int (*write) (struct pci_dev *, int pos, byte * buf, int len);
+	void (*init_dev) (struct pci_dev *);
+	void (*cleanup_dev) (struct pci_dev *);
+};
+
+void pci_generic_scan_bus(struct pci_access *, byte * busmap, int bus);
+void pci_generic_scan(struct pci_access *);
+int pci_generic_fill_info(struct pci_dev *, int flags);
+int pci_generic_block_read(struct pci_dev *, int pos, byte * buf, int len);
+int pci_generic_block_write(struct pci_dev *, int pos, byte * buf,
+			    int len);
+
+void *pci_malloc(struct pci_access *, int);
+void pci_mfree(void *);
+
+struct pci_dev *pci_alloc_dev(struct pci_access *);
+int pci_link_dev(struct pci_access *, struct pci_dev *);
+
+extern struct pci_methods pm_intel_conf1, pm_intel_conf2, pm_linux_proc,
+    pm_fbsd_device, pm_aix_device, pm_nbsd_libpci, pm_obsd_device,
+    pm_dump, pm_linux_sysfs;
Index: uspace/srv/pci/libpci/names.c
===================================================================
--- uspace/srv/pci/libpci/names.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/names.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,456 @@
+/*
+ *	The PCI Library -- ID to Name Translation
+ *
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+
+#include "internal.h"
+#include "pci_ids.h"
+
+struct id_entry {
+	struct id_entry *next;
+	u32 id12, id34;
+	byte cat;
+	byte name[1];
+};
+
+enum id_entry_type {
+	ID_UNKNOWN,
+	ID_VENDOR,
+	ID_DEVICE,
+	ID_SUBSYSTEM,
+	ID_GEN_SUBSYSTEM,
+	ID_CLASS,
+	ID_SUBCLASS,
+	ID_PROGIF
+};
+
+struct id_bucket {
+	struct id_bucket *next;
+	unsigned int full;
+};
+
+#define MAX_LINE 1024
+#define BUCKET_SIZE 8192
+#define HASH_SIZE 4099
+
+#ifdef __GNUC__
+#define BUCKET_ALIGNMENT __alignof__(struct id_bucket)
+#else
+union id_align {
+	struct id_bucket *next;
+	unsigned int full;
+};
+#define BUCKET_ALIGNMENT sizeof(union id_align)
+#endif
+#define BUCKET_ALIGN(n) ((n)+BUCKET_ALIGNMENT-(n)%BUCKET_ALIGNMENT)
+
+static void *id_alloc(struct pci_access *a, unsigned int size)
+{
+	struct id_bucket *buck = a->current_id_bucket;
+	unsigned int pos;
+	if (!buck || buck->full + size > BUCKET_SIZE) {
+		buck = pci_malloc(a, BUCKET_SIZE);
+		buck->next = a->current_id_bucket;
+		a->current_id_bucket = buck;
+		buck->full = BUCKET_ALIGN(sizeof(struct id_bucket));
+	}
+	pos = buck->full;
+	buck->full = BUCKET_ALIGN(buck->full + size);
+	return (byte *) buck + pos;
+}
+
+static inline u32 id_pair(unsigned int x, unsigned int y)
+{
+	return ((x << 16) | y);
+}
+
+static inline unsigned int id_hash(int cat, u32 id12, u32 id34)
+{
+	unsigned int h;
+
+	h = id12 ^ (id34 << 3) ^ (cat << 5);
+	return h % HASH_SIZE;
+}
+
+static struct id_entry *id_lookup(struct pci_access *a, int cat, int id1,
+				  int id2, int id3, int id4)
+{
+	struct id_entry *n;
+	u32 id12 = id_pair(id1, id2);
+	u32 id34 = id_pair(id3, id4);
+
+	n = a->id_hash[id_hash(cat, id12, id34)];
+	while (n && (n->id12 != id12 || n->id34 != id34 || n->cat != cat))
+		n = n->next;
+	return n;
+}
+
+static int id_insert(struct pci_access *a, int cat, int id1, int id2,
+		     int id3, int id4, byte * text)
+{
+	u32 id12 = id_pair(id1, id2);
+	u32 id34 = id_pair(id3, id4);
+	unsigned int h = id_hash(cat, id12, id34);
+	struct id_entry *n = a->id_hash[h];
+	int len = strlen((char *) text);
+
+	while (n && (n->id12 != id12 || n->id34 != id34 || n->cat != cat))
+		n = n->next;
+	if (n)
+		return 1;
+	n = id_alloc(a, sizeof(struct id_entry) + len);
+	n->id12 = id12;
+	n->id34 = id34;
+	n->cat = cat;
+	memcpy(n->name, text, len + 1);
+	n->next = a->id_hash[h];
+	a->id_hash[h] = n;
+	return 0;
+}
+
+static int id_hex(byte * p, int cnt)
+{
+	int x = 0;
+	while (cnt--) {
+		x <<= 4;
+		if (*p >= '0' && *p <= '9')
+			x += (*p - '0');
+		else if (*p >= 'a' && *p <= 'f')
+			x += (*p - 'a' + 10);
+		else if (*p >= 'A' && *p <= 'F')
+			x += (*p - 'A' + 10);
+		else
+			return -1;
+		p++;
+	}
+	return x;
+}
+
+static inline int id_white_p(int c)
+{
+	return (c == ' ') || (c == '\t');
+}
+
+static const char *id_parse_list(struct pci_access *a, int *lino)
+{
+	byte *line;
+	byte *p;
+	int id1 = 0, id2 = 0, id3 = 0, id4 = 0;
+	int cat = -1;
+	int nest;
+	static const char parse_error[] = "Parse error";
+	int i;
+
+	*lino = 0;
+	for (i = 0; i < sizeof(pci_ids) / sizeof(char *); i++) {
+		line = (byte *) pci_ids[i];
+		(*lino)++;
+		p = line;
+		while (*p)
+			p++;
+		if (p > line && (p[-1] == ' ' || p[-1] == '\t'))
+			*--p = 0;
+
+		p = line;
+		while (id_white_p(*p))
+			p++;
+		if (!*p || *p == '#')
+			continue;
+
+		p = line;
+		while (*p == '\t')
+			p++;
+		nest = p - line;
+
+		if (!nest) {	/* Top-level entries */
+			if (p[0] == 'C' && p[1] == ' ') {	/* Class block */
+				if ((id1 = id_hex(p + 2, 2)) < 0 || !id_white_p(p[4]))
+					return parse_error;
+				cat = ID_CLASS;
+				p += 5;
+			} else if (p[0] == 'S' && p[1] == ' ') {	/* Generic subsystem block */
+				if ((id1 = id_hex(p + 2, 4)) < 0 || p[6])
+					return parse_error;
+				if (!id_lookup(a, ID_VENDOR, id1, 0, 0, 0))
+					return "Vendor does not exist";
+				cat = ID_GEN_SUBSYSTEM;
+				continue;
+			} else if (p[0] >= 'A' && p[0] <= 'Z' && p[1] == ' ') {	/* Unrecognized block (RFU) */
+				cat = ID_UNKNOWN;
+				continue;
+			} else {	/* Vendor ID */
+
+				if ((id1 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
+					return parse_error;
+				cat = ID_VENDOR;
+				p += 5;
+			}
+			id2 = id3 = id4 = 0;
+		} else if (cat == ID_UNKNOWN)	/* Nested entries in RFU blocks are skipped */
+			continue;
+		else if (nest == 1)	/* Nesting level 1 */
+			switch (cat) {
+			case ID_VENDOR:
+			case ID_DEVICE:
+			case ID_SUBSYSTEM:
+				if ((id2 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
+					return parse_error;
+				p += 5;
+				cat = ID_DEVICE;
+				id3 = id4 = 0;
+				break;
+			case ID_GEN_SUBSYSTEM:
+				if ((id2 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
+					return parse_error;
+				p += 5;
+				id3 = id4 = 0;
+				break;
+			case ID_CLASS:
+			case ID_SUBCLASS:
+			case ID_PROGIF:
+				if ((id2 = id_hex(p, 2)) < 0 || !id_white_p(p[2]))
+					return parse_error;
+				p += 3;
+				cat = ID_SUBCLASS;
+				id3 = id4 = 0;
+				break;
+			default:
+				return parse_error;
+		} else if (nest == 2)	/* Nesting level 2 */
+			switch (cat) {
+			case ID_DEVICE:
+			case ID_SUBSYSTEM:
+				if ((id3 = id_hex(p, 4)) < 0 || !id_white_p(p[4])
+				    || (id4 = id_hex(p + 5, 4)) < 0 || !id_white_p(p[9]))
+					return parse_error;
+				p += 10;
+				cat = ID_SUBSYSTEM;
+				break;
+			case ID_CLASS:
+			case ID_SUBCLASS:
+			case ID_PROGIF:
+				if ((id3 = id_hex(p, 2)) < 0 || !id_white_p(p[2]))
+					return parse_error;
+				p += 3;
+				cat = ID_PROGIF;
+				id4 = 0;
+				break;
+			default:
+				return parse_error;
+		} else		/* Nesting level 3 or more */
+			return parse_error;
+		while (id_white_p(*p))
+			p++;
+		if (!*p)
+			return parse_error;
+		if (id_insert(a, cat, id1, id2, id3, id4, p))
+			return "Duplicate entry";
+	}
+	return NULL;
+}
+
+int pci_load_name_list(struct pci_access *a)
+{
+	int lino;
+	const char *err;
+
+	pci_free_name_list(a);
+	a->id_hash = pci_malloc(a, sizeof(struct id_entry *) * HASH_SIZE);
+	bzero(a->id_hash, sizeof(struct id_entry *) * HASH_SIZE);
+	err = id_parse_list(a, &lino);
+	if (err)
+		a->error("%s at %s, element %d\n", err, "pci_ids.h", lino);
+	return 1;
+}
+
+void pci_free_name_list(struct pci_access *a)
+{
+	pci_mfree(a->id_hash);
+	a->id_hash = NULL;
+	while (a->current_id_bucket) {
+		struct id_bucket *buck = a->current_id_bucket;
+		a->current_id_bucket = buck->next;
+		pci_mfree(buck);
+	}
+}
+
+static struct id_entry *id_lookup_subsys(struct pci_access *a, int iv,
+					 int id, int isv, int isd)
+{
+	struct id_entry *d = NULL;
+	if (iv > 0 && id > 0)	/* Per-device lookup */
+		d = id_lookup(a, ID_SUBSYSTEM, iv, id, isv, isd);
+	if (!d)			/* Generic lookup */
+		d = id_lookup(a, ID_GEN_SUBSYSTEM, isv, isd, 0, 0);
+	if (!d && iv == isv && id == isd)	/* Check for subsystem == device */
+		d = id_lookup(a, ID_DEVICE, iv, id, 0, 0);
+	return d;
+}
+
+char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags,
+		      ...)
+{
+	va_list args;
+	int num, res, synth;
+	struct id_entry *v, *d, *cls, *pif;
+	int iv, id, isv, isd, icls, ipif;
+
+	va_start(args, flags);
+
+	num = 0;
+	if ((flags & PCI_LOOKUP_NUMERIC) || a->numeric_ids) {
+		flags &= ~PCI_LOOKUP_NUMERIC;
+		num = 1;
+	} else if (!a->id_hash) {
+		if (!pci_load_name_list(a))
+			num = a->numeric_ids = 1;
+	}
+
+	if (flags & PCI_LOOKUP_NO_NUMBERS) {
+		flags &= ~PCI_LOOKUP_NO_NUMBERS;
+		synth = 0;
+		if (num)
+			return NULL;
+	} else
+		synth = 1;
+
+	switch (flags) {
+	case PCI_LOOKUP_VENDOR:
+		iv = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%04x", iv);
+		else if (v = id_lookup(a, ID_VENDOR, iv, 0, 0, 0))
+			return (char *) v->name;
+		else
+			res = snprintf(buf, size, "Unknown vendor %04x", iv);
+		break;
+	case PCI_LOOKUP_DEVICE:
+		iv = va_arg(args, int);
+		id = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%04x", id);
+		else if (d = id_lookup(a, ID_DEVICE, iv, id, 0, 0))
+			return (char *) d->name;
+		else if (synth)
+			res = snprintf(buf, size, "Unknown device %04x", id);
+		else
+			return NULL;
+		break;
+	case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE:
+		iv = va_arg(args, int);
+		id = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%04x:%04x", iv, id);
+		else {
+			v = id_lookup(a, ID_VENDOR, iv, 0, 0, 0);
+			d = id_lookup(a, ID_DEVICE, iv, id, 0, 0);
+			if (v && d)
+				res = snprintf(buf, size, "%s %s", v->name,
+					     d->name);
+			else if (!synth)
+				return NULL;
+			else if (!v)
+				res = snprintf(buf, size, "Unknown device %04x:%04x", iv, id);
+			else	/* !d */
+				res = snprintf(buf, size, "%s Unknown device %04x", v->name, id);
+		}
+		break;
+	case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR:
+		isv = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%04x", isv);
+		else if (v = id_lookup(a, ID_VENDOR, isv, 0, 0, 0))
+			return (char *) v->name;
+		else if (synth)
+			res = snprintf(buf, size, "Unknown vendor %04x", isv);
+		else
+			return NULL;
+		break;
+	case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE:
+		iv = va_arg(args, int);
+		id = va_arg(args, int);
+		isv = va_arg(args, int);
+		isd = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%04x", isd);
+		else if (d = id_lookup_subsys(a, iv, id, isv, isd))
+			return (char *) d->name;
+		else if (synth)
+			res = snprintf(buf, size, "Unknown device %04x", isd);
+		else
+			return NULL;
+		break;
+	case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
+		iv = va_arg(args, int);
+		id = va_arg(args, int);
+		isv = va_arg(args, int);
+		isd = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%04x:%04x", isv, isd);
+		else {
+			v = id_lookup(a, ID_VENDOR, isv, 0, 0, 0);
+			d = id_lookup_subsys(a, iv, id, isv, isd);
+			if (v && d)
+				res = snprintf(buf, size, "%s %s", v->name, d->name);
+			else if (!synth)
+				return NULL;
+			else if (!v)
+				res = snprintf(buf, size, "Unknown device %04x:%04x", isv, isd);
+			else	/* !d */
+				res = snprintf(buf, size, "%s Unknown device %04x", v->name, isd);
+		}
+		break;
+	case PCI_LOOKUP_CLASS:
+		icls = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%04x", icls);
+		else if (cls = id_lookup(a, ID_SUBCLASS, icls >> 8, icls & 0xff, 0, 0))
+			return (char *) cls->name;
+		else if (cls = id_lookup(a, ID_CLASS, icls, 0, 0, 0))
+			res = snprintf(buf, size, "%s [%04x]", cls->name, icls);
+		else if (synth)
+			res = snprintf(buf, size, "Class %04x", icls);
+		else
+			return NULL;
+		break;
+	case PCI_LOOKUP_PROGIF:
+		icls = va_arg(args, int);
+		ipif = va_arg(args, int);
+		if (num)
+			res = snprintf(buf, size, "%02x", ipif);
+		else if (pif = id_lookup(a, ID_PROGIF, icls >> 8, icls & 0xff, ipif, 0))
+			return (char *) pif->name;
+		else if (icls == 0x0101 && !(ipif & 0x70)) {
+			/* IDE controllers have complex prog-if semantics */
+			res = snprintf(buf, size, "%s%s%s%s%s",
+				       (ipif & 0x80) ? "Master " : "",
+				       (ipif & 0x08) ? "SecP " : "",
+				       (ipif & 0x04) ? "SecO " : "",
+				       (ipif & 0x02) ? "PriP " : "",
+				       (ipif & 0x01) ? "PriO " : "");
+			if (res > 0 && res < size)
+				buf[--res] = 0;
+		} else if (synth)
+			res = snprintf(buf, size, "ProgIf %02x", ipif);
+		else
+			return NULL;
+		break;
+	default:
+		return "<pci_lookup_name: invalid request>";
+	}
+	if (res < 0 || res >= size)
+		return "<pci_lookup_name: buffer too small>";
+	else
+		return buf;
+}
Index: uspace/srv/pci/libpci/pci.h
===================================================================
--- uspace/srv/pci/libpci/pci.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/pci.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,146 @@
+/*
+ *	The PCI Library
+ *
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _PCI_LIB_H
+#define _PCI_LIB_H
+
+#include "header.h"
+#include "types.h"
+
+#define PCI_LIB_VERSION 0x020200
+
+/*
+ *	PCI Access Structure
+ */
+
+struct pci_methods;
+
+enum pci_access_type {
+	/* Known access methods, remember to update access.c as well */
+	PCI_ACCESS_I386_TYPE1,	/* i386 ports, type 1 (params: none) */
+	PCI_ACCESS_I386_TYPE2,	/* i386 ports, type 2 (params: none) */
+	PCI_ACCESS_MAX
+};
+
+struct pci_access {
+	/* Options you can change: */
+	unsigned int method;	/* Access method */
+	char *method_params[PCI_ACCESS_MAX];	/* Parameters for the methods */
+	int writeable;		/* Open in read/write mode */
+	int buscentric;		/* Bus-centric view of the world */
+	int numeric_ids;	/* Don't resolve device IDs to names */
+	int debugging;		/* Turn on debugging messages */
+
+	/* Functions you can override: */
+	void (*error) (char *msg, ...);	/* Write error message and quit */
+	void (*warning) (char *msg, ...);	/* Write a warning message */
+	void (*debug) (char *msg, ...);	/* Write a debugging message */
+
+	struct pci_dev *devices;	/* Devices found on this bus */
+
+	/* Fields used internally: */
+	struct pci_methods *methods;
+	struct id_entry **id_hash;	/* names.c */
+	struct id_bucket *current_id_bucket;
+};
+
+/* Initialize PCI access */
+struct pci_access *pci_alloc(void);
+void pci_init(struct pci_access *);
+void pci_cleanup(struct pci_access *);
+
+/* Scanning of devices */
+void pci_scan_bus(struct pci_access *acc);
+struct pci_dev *pci_get_dev(struct pci_access *acc, int domain, int bus, int dev, int func);	/* Raw access to specified device */
+void pci_free_dev(struct pci_dev *);
+
+/*
+ *	Devices
+ */
+
+struct pci_dev {
+	struct pci_dev *next;	/* Next device in the chain */
+	u16 domain;		/* PCI domain (host bridge) */
+	u8 bus, dev, func;	/* Bus inside domain, device and function */
+
+	/* These fields are set by pci_fill_info() */
+	int known_fields;	/* Set of info fields already known */
+	u16 vendor_id, device_id;	/* Identity of the device */
+	int irq;		/* IRQ number */
+	pciaddr_t base_addr[6];	/* Base addresses */
+	pciaddr_t size[6];	/* Region sizes */
+	pciaddr_t rom_base_addr;	/* Expansion ROM base address */
+	pciaddr_t rom_size;	/* Expansion ROM size */
+
+	/* Fields used internally: */
+	struct pci_access *access;
+	struct pci_methods *methods;
+	u8 *cache;		/* Cached config registers */
+	int cache_len;
+	int hdrtype;		/* Cached low 7 bits of header type, -1 if unknown */
+	void *aux;		/* Auxillary data */
+};
+
+#define PCI_ADDR_IO_MASK (~(pciaddr_t) 0x3)
+#define PCI_ADDR_MEM_MASK (~(pciaddr_t) 0xf)
+
+u8 pci_read_byte(struct pci_dev *, int pos);	/* Access to configuration space */
+u16 pci_read_word(struct pci_dev *, int pos);
+u32 pci_read_long(struct pci_dev *, int pos);
+int pci_read_block(struct pci_dev *, int pos, u8 * buf, int len);
+int pci_write_byte(struct pci_dev *, int pos, u8 data);
+int pci_write_word(struct pci_dev *, int pos, u16 data);
+int pci_write_long(struct pci_dev *, int pos, u32 data);
+int pci_write_block(struct pci_dev *, int pos, u8 * buf, int len);
+
+int pci_fill_info(struct pci_dev *, int flags);	/* Fill in device information */
+
+#define PCI_FILL_IDENT		1
+#define PCI_FILL_IRQ		2
+#define PCI_FILL_BASES		4
+#define PCI_FILL_ROM_BASE	8
+#define PCI_FILL_SIZES		16
+#define PCI_FILL_RESCAN		0x10000
+
+void pci_setup_cache(struct pci_dev *, u8 * cache, int len);
+
+/*
+ *	Conversion of PCI ID's to names (according to the pci.ids file)
+ *
+ *	Call pci_lookup_name() to identify different types of ID's:
+ *
+ *	VENDOR				(vendorID) -> vendor
+ *	DEVICE				(vendorID, deviceID) -> device
+ *	VENDOR | DEVICE			(vendorID, deviceID) -> combined vendor and device
+ *	SUBSYSTEM | VENDOR		(subvendorID) -> subsystem vendor
+ *	SUBSYSTEM | DEVICE		(vendorID, deviceID, subvendorID, subdevID) -> subsystem device
+ *	SUBSYSTEM | VENDOR | DEVICE	(vendorID, deviceID, subvendorID, subdevID) -> combined subsystem v+d
+ *	SUBSYSTEM | ...			(-1, -1, subvendorID, subdevID) -> generic subsystem
+ *	CLASS				(classID) -> class
+ *	PROGIF				(classID, progif) -> programming interface
+ */
+
+char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags,
+		      ...);
+
+int pci_load_name_list(struct pci_access *a);	/* Called automatically by pci_lookup_*() when needed; returns success */
+void pci_free_name_list(struct pci_access *a);	/* Called automatically by pci_cleanup() */
+
+enum pci_lookup_mode {
+	PCI_LOOKUP_VENDOR = 1,	/* Vendor name (args: vendorID) */
+	PCI_LOOKUP_DEVICE = 2,	/* Device name (args: vendorID, deviceID) */
+	PCI_LOOKUP_CLASS = 4,	/* Device class (args: classID) */
+	PCI_LOOKUP_SUBSYSTEM = 8,
+	PCI_LOOKUP_PROGIF = 16,	/* Programming interface (args: classID, prog_if) */
+	PCI_LOOKUP_NUMERIC = 0x10000,	/* Want only formatted numbers; default if access->numeric_ids is set */
+	PCI_LOOKUP_NO_NUMBERS = 0x20000	/* Return NULL if not found in the database; default is to print numerically */
+};
+
+#endif
Index: uspace/srv/pci/libpci/pci_ids.h
===================================================================
--- uspace/srv/pci/libpci/pci_ids.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/pci_ids.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,11934 @@
+/* DO NOT EDIT, THIS FILE IS AUTOMATICALLY GENERATED */
+char *pci_ids[] = {
+"0000  Gammagraphx, Inc.",
+"001a  Ascend Communications, Inc.",
+"0033  Paradyne corp.",
+"003d  Lockheed Martin-Marietta Corp",
+"0059  Tiger Jet Network Inc. (Wrong ID)",
+"0070  Hauppauge computer works Inc.",
+"0071  Nebula Electronics Ltd.",
+"0095  Silicon Image, Inc. (Wrong ID)",
+"	0680  Ultra ATA/133 IDE RAID CONTROLLER CARD",
+"00a7  Teles AG (Wrong ID)",
+"00f5  BFG Technologies, Inc.",
+"0100  Ncipher Corp Ltd",
+"0123  General Dynamics",
+"018a  LevelOne",
+"	0106  FPC-0106TX misprogrammed [RTL81xx]",
+"021b  Compaq Computer Corporation",
+"	8139  HNE-300 (RealTek RTL8139c) [iPaq Networking]",
+"0270  Hauppauge computer works Inc. (Wrong ID)",
+"0291  Davicom Semiconductor, Inc.",
+"	8212  DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40)",
+"02ac  SpeedStream",
+"	1012  1012 PCMCIA 10/100 Ethernet Card [RTL81xx]",
+"0315  SK-Electronics Co., Ltd.",
+"0357  TTTech AG",
+"	000a  TTP-Monitoring Card V2.0",
+"0432  SCM Microsystems, Inc.",
+"	0001  Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]",
+"045e  Microsoft",
+"	006e  MN-510 802.11b wireless USB paddle",
+"	00c2  MN-710 wireless USB paddle",
+"04cf  Myson Century, Inc",
+"	8818  CS8818 USB2.0-to-ATAPI Bridge Controller with Embedded PHY",
+"050d  Belkin",
+"	0109  F5U409-CU USB/Serial Portable Adapter",
+"	7050  F5D7050 802.11g Wireless USB Adapter",
+"05e3  CyberDoor",
+"	0701  CBD516",
+"066f  Sigmatel Inc.",
+"	3410  SMTP3410",
+"	3500  SMTP3500",
+"0675  Dynalink",
+"	1700  IS64PH ISDN Adapter",
+"	1702  IS64PH ISDN Adapter",
+"	1703  ISDN Adapter (PCI Bus, DV, W)",
+"	1704  ISDN Adapter (PCI Bus, D, C)",
+"067b  Prolific Technology, Inc.",
+"	3507  PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller",
+"0721  Sapphire, Inc.",
+"07e2  ELMEG Communication Systems GmbH",
+"0925  VIA Technologies, Inc. (Wrong ID)",
+"09c1  Arris",
+"	0704  CM 200E Cable Modem",
+"0a89  BREA Technologies Inc",
+"0b0b  Rhino Equiment Corp.",
+"	0105  Rhino R1T1",
+"	0205  Rhino R4FXO",
+"	0305  Rhino R4T1",
+"	0405  Rhino R8FXX",
+"	0505  Rhino R24FXX",
+"	0506  Rhino R2T1",
+"0b49  ASCII Corporation",
+"	064f  Trance Vibrator",
+"0e11  Compaq Computer Corporation",
+"	0001  PCI to EISA Bridge",
+"	0002  PCI to ISA Bridge",
+"	0046  Smart Array 64xx",
+"		0e11 409a  Smart Array 641",
+"		0e11 409b  Smart Array 642",
+"		0e11 409c  Smart Array 6400",
+"		0e11 409d  Smart Array 6400 EM",
+"	0049  NC7132 Gigabit Upgrade Module",
+"	004a  NC6136 Gigabit Server Adapter",
+"	005a  Remote Insight II board - Lights-Out",
+"	007c  NC7770 1000BaseTX",
+"	007d  NC6770 1000BaseTX",
+"	0085  NC7780 1000BaseTX",
+"	00b1  Remote Insight II board - PCI device",
+"	00bb  NC7760",
+"	00ca  NC7771",
+"	00cb  NC7781",
+"	00cf  NC7772",
+"	00d0  NC7782",
+"	00d1  NC7783",
+"	00e3  NC7761",
+"	0508  Netelligent 4/16 Token Ring",
+"	1000  Triflex/Pentium Bridge, Model 1000",
+"	2000  Triflex/Pentium Bridge, Model 2000",
+"	3032  QVision 1280/p",
+"	3033  QVision 1280/p",
+"	3034  QVision 1280/p",
+"	4000  4000 [Triflex]",
+"	4030  SMART-2/P",
+"	4031  SMART-2SL",
+"	4032  Smart Array 3200",
+"	4033  Smart Array 3100ES",
+"	4034  Smart Array 221",
+"	4040  Integrated Array",
+"	4048  Compaq Raid LC2",
+"	4050  Smart Array 4200",
+"	4051  Smart Array 4250ES",
+"	4058  Smart Array 431",
+"	4070  Smart Array 5300",
+"	4080  Smart Array 5i",
+"	4082  Smart Array 532",
+"	4083  Smart Array 5312",
+"	4091  Smart Array 6i",
+"	409a  Smart Array 641",
+"	409b  Smart Array 642",
+"	409c  Smart Array 6400",
+"	409d  Smart Array 6400 EM",
+"	6010  HotPlug PCI Bridge 6010",
+"	7020  USB Controller",
+"	a0ec  Fibre Channel Host Controller",
+"	a0f0  Advanced System Management Controller",
+"	a0f3  Triflex PCI to ISA Bridge",
+"	a0f7  PCI Hotplug Controller",
+"		8086 002a  PCI Hotplug Controller A",
+"		8086 002b  PCI Hotplug Controller B",
+"	a0f8  ZFMicro Chipset USB",
+"	a0fc  FibreChannel HBA Tachyon",
+"	ae10  Smart-2/P RAID Controller",
+"		0e11 4030  Smart-2/P Array Controller",
+"		0e11 4031  Smart-2SL Array Controller",
+"		0e11 4032  Smart Array Controller",
+"		0e11 4033  Smart 3100ES Array Controller",
+"	ae29  MIS-L",
+"	ae2a  MPC",
+"	ae2b  MIS-E",
+"	ae31  System Management Controller",
+"	ae32  Netelligent 10/100 TX PCI UTP",
+"	ae33  Triflex Dual EIDE Controller",
+"	ae34  Netelligent 10 T PCI UTP",
+"	ae35  Integrated NetFlex-3/P",
+"	ae40  Netelligent Dual 10/100 TX PCI UTP",
+"	ae43  Netelligent Integrated 10/100 TX UTP",
+"	ae69  CETUS-L",
+"	ae6c  Northstar",
+"	ae6d  NorthStar CPU to PCI Bridge",
+"	b011  Netelligent 10/100 TX Embedded UTP",
+"	b012  Netelligent 10 T/2 PCI UTP/Coax",
+"	b01e  NC3120 Fast Ethernet NIC",
+"	b01f  NC3122 Fast Ethernet NIC",
+"	b02f  NC1120 Ethernet NIC",
+"	b030  Netelligent 10/100 TX UTP",
+"	b04a  10/100 TX PCI Intel WOL UTP Controller",
+"	b060  Smart Array 5300 Controller",
+"	b0c6  NC3161 Fast Ethernet NIC",
+"	b0c7  NC3160 Fast Ethernet NIC",
+"	b0d7  NC3121 Fast Ethernet NIC",
+"	b0dd  NC3131 Fast Ethernet NIC",
+"	b0de  NC3132 Fast Ethernet Module",
+"	b0df  NC6132 Gigabit Module",
+"	b0e0  NC6133 Gigabit Module",
+"	b0e1  NC3133 Fast Ethernet Module",
+"	b123  NC6134 Gigabit NIC",
+"	b134  NC3163 Fast Ethernet NIC",
+"	b13c  NC3162 Fast Ethernet NIC",
+"	b144  NC3123 Fast Ethernet NIC",
+"	b163  NC3134 Fast Ethernet NIC",
+"	b164  NC3165 Fast Ethernet Upgrade Module",
+"	b178  Smart Array 5i/532",
+"		0e11 4080  Smart Array 5i",
+"		0e11 4082  Smart Array 532",
+"		0e11 4083  Smart Array 5312",
+"	b1a4  NC7131 Gigabit Server Adapter",
+"	b200  Memory Hot-Plug Controller",
+"	b203  Integrated Lights Out Controller",
+"	b204  Integrated Lights Out  Processor",
+"	f130  NetFlex-3/P ThunderLAN 1.0",
+"	f150  NetFlex-3/P ThunderLAN 2.3",
+"0e21  Cowon Systems, Inc.",
+"0e55  HaSoTec GmbH",
+"1000  LSI Logic / Symbios Logic",
+"	0001  53c810",
+"		1000 1000  LSI53C810AE PCI to SCSI I/O Processor",
+"	0002  53c820",
+"	0003  53c825",
+"		1000 1000  LSI53C825AE PCI to SCSI I/O Processor (Ultra Wide)",
+"	0004  53c815",
+"	0005  53c810AP",
+"	0006  53c860",
+"		1000 1000  LSI53C860E PCI to Ultra SCSI I/O Processor",
+"	000a  53c1510",
+"		1000 1000  LSI53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Nonintelligent mode)",
+"	000b  53C896/897",
+"		0e11 6004  EOB003 Series SCSI host adapter",
+"		1000 1000  LSI53C896/7 PCI to Dual Channel Ultra2 SCSI Multifunction Controller",
+"		1000 1010  LSI22910 PCI to Dual Channel Ultra2 SCSI host adapter",
+"		1000 1020  LSI21002 PCI to Dual Channel Ultra2 SCSI host adapter",
+"		13e9 1000  6221L-4U",
+"	000c  53c895",
+"		1000 1010  LSI8951U PCI to Ultra2 SCSI host adapter",
+"		1000 1020  LSI8952U PCI to Ultra2 SCSI host adapter",
+"		1de1 3906  DC-390U2B SCSI adapter",
+"		1de1 3907  DC-390U2W",
+"	000d  53c885",
+"	000f  53c875",
+"		0e11 7004  Embedded Ultra Wide SCSI Controller",
+"		1000 1000  LSI53C876/E PCI to Dual Channel SCSI Controller",
+"		1000 1010  LSI22801 PCI to Dual Channel Ultra SCSI host adapter",
+"		1000 1020  LSI22802 PCI to Dual Channel Ultra SCSI host adapter",
+"		1092 8760  FirePort 40 Dual SCSI Controller",
+"		1de1 3904  DC390F/U Ultra Wide SCSI Adapter",
+"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
+"		4c53 1050  CT7 mainboard",
+"	0010  53C1510",
+"		0e11 4040  Integrated Array Controller",
+"		0e11 4048  RAID LC2 Controller",
+"		1000 1000  53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode)",
+"	0012  53c895a",
+"		1000 1000  LSI53C895A PCI to Ultra2 SCSI Controller",
+"	0013  53c875a",
+"		1000 1000  LSI53C875A PCI to Ultra SCSI Controller",
+"	0020  53c1010 Ultra3 SCSI Adapter",
+"		1000 1000  LSI53C1010-33 PCI to Dual Channel Ultra160 SCSI Controller",
+"		1de1 1020  DC-390U3W",
+"	0021  53c1010 66MHz  Ultra3 SCSI Adapter",
+"		1000 1000  LSI53C1000/1000R/1010R/1010-66 PCI to Ultra160 SCSI Controller",
+"		1000 1010  Asus TR-DLS onboard 53C1010-66",
+"		124b 1070  PMC-USCSI3",
+"		4c53 1080  CT8 mainboard",
+"		4c53 1300  P017 mezzanine (32-bit PMC)",
+"		4c53 1310  P017 mezzanine (64-bit PMC)",
+"	0030  53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI",
+"		0e11 00da  ProLiant ML 350",
+"		1028 0123  PowerEdge 2600",
+"		1028 014a  PowerEdge 1750",
+"		1028 016c  PowerEdge 1850 MPT Fusion SCSI/RAID (Perc 4)",
+"		1028 0183  PowerEdge 1800",
+"		1028 1010  LSI U320 SCSI Controller",
+"		124b 1170  PMC-USCSI320",
+"		1734 1052  Primergy RX300 S2",
+"	0031  53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI",
+"	0032  53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI",
+"		1000 1000  LSI53C1020/1030 PCI-X to Ultra320 SCSI Controller",
+"	0033  1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI",
+"	0040  53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI",
+"		1000 0033  MegaRAID SCSI 320-2XR",
+"		1000 0066  MegaRAID SCSI 320-2XRWS",
+"	0041  53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI",
+"	0050  SAS1064 PCI-X Fusion-MPT SAS",
+"	0054  SAS1068 PCI-X Fusion-MPT SAS",
+"	0056  SAS1064E PCI-Express Fusion-MPT SAS",
+"	0058  SAS1068E PCI-Express Fusion-MPT SAS",
+"	005a  SAS1066E PCI-Express Fusion-MPT SAS",
+"	005c  SAS1064A PCI-X Fusion-MPT SAS",
+"	005e  SAS1066 PCI-X Fusion-MPT SAS",
+"	0060  SAS1078 PCI-X Fusion-MPT SAS",
+"	0062  SAS1078 PCI-Express Fusion-MPT SAS",
+"		1000 0062  SAS1078 PCI-Express Fusion-MPT SAS",
+"	008f  53c875J",
+"		1092 8000  FirePort 40 SCSI Controller",
+"		1092 8760  FirePort 40 Dual SCSI Host Adapter",
+"	0407  MegaRAID",
+"		1000 0530  MegaRAID 530 SCSI 320-0X RAID Controller",
+"		1000 0531  MegaRAID 531 SCSI 320-4X RAID Controller",
+"		1000 0532  MegaRAID 532 SCSI 320-2X RAID Controller",
+"		1028 0531  PowerEdge Expandable RAID Controller 4/QC",
+"		1028 0533  PowerEdge Expandable RAID Controller 4/QC",
+"		8086 0530  MegaRAID Intel RAID Controller SRCZCRX",
+"		8086 0532  MegaRAID Intel RAID Controller SRCU42X",
+"	0408  MegaRAID",
+"		1000 0001  MegaRAID SCSI 320-1E RAID Controller",
+"		1000 0002  MegaRAID SCSI 320-2E RAID Controller",
+"		1025 004d  MegaRAID ACER ROMB-2E RAID Controller",
+"		1028 0001  PowerEdge RAID Controller PERC4e/SC",
+"		1028 0002  PowerEdge RAID Controller PERC4e/DC",
+"		1734 1065  FSC MegaRAID PCI Express ROMB",
+"		8086 0002  MegaRAID Intel RAID Controller SRCU42E",
+"	0409  MegaRAID",
+"		1000 3004  MegaRAID SATA 300-4X RAID Controller",
+"		1000 3008  MegaRAID SATA 300-8X RAID Controller",
+"		8086 3008  MegaRAID RAID Controller SRCS28X",
+"		8086 3431  MegaRAID RAID Controller Alief SROMBU42E",
+"		8086 3499  MegaRAID RAID Controller Harwich SROMBU42E",
+"	0621  FC909 Fibre Channel Adapter",
+"	0622  FC929 Fibre Channel Adapter",
+"		1000 1020  44929 O Dual Fibre Channel card",
+"	0623  FC929 LAN",
+"	0624  FC919 Fibre Channel Adapter",
+"	0625  FC919 LAN",
+"	0626  FC929X Fibre Channel Adapter",
+"		1000 1010  7202-XP-LC Dual Fibre Channel card",
+"	0627  FC929X LAN",
+"	0628  FC919X Fibre Channel Adapter",
+"	0629  FC919X LAN",
+"	0640  FC949X Fibre Channel Adapter",
+"	0642  FC939X Fibre Channel Adapter",
+"	0646  FC949ES Fibre Channel Adapter",
+"	0701  83C885 NT50 DigitalScape Fast Ethernet",
+"	0702  Yellowfin G-NIC gigabit ethernet",
+"		1318 0000  PEI100X",
+"	0804  SA2010",
+"	0805  SA2010ZC",
+"	0806  SA2020",
+"	0807  SA2020ZC",
+"	0901  61C102",
+"	1000  63C815",
+"	1960  MegaRAID",
+"		1000 0518  MegaRAID 518 SCSI 320-2 Controller",
+"		1000 0520  MegaRAID 520 SCSI 320-1 Controller",
+"		1000 0522  MegaRAID 522 i4 133 RAID Controller",
+"		1000 0523  MegaRAID SATA 150-6 RAID Controller",
+"		1000 4523  MegaRAID SATA 150-4 RAID Controller",
+"		1000 a520  MegaRAID ZCR SCSI 320-0 Controller",
+"		1028 0518  MegaRAID 518 DELL PERC 4/DC RAID Controller",
+"		1028 0520  MegaRAID 520 DELL PERC 4/SC RAID Controller",
+"		1028 0531  PowerEdge Expandable RAID Controller 4/QC",
+"		1028 0533  PowerEdge Expandable RAID Controller 4/QC",
+"		8086 0520  MegaRAIDRAID Controller SRCU41L",
+"		8086 0523  MegaRAID RAID Controller SRCS16",
+"1001  Kolter Electronic",
+"	0010  PCI 1616 Measurement card with 32 digital I/O lines",
+"	0011  OPTO-PCI Opto-Isolated digital I/O board",
+"	0012  PCI-AD/DA Analogue I/O board",
+"	0013  PCI-OPTO-RELAIS Digital I/O board with relay outputs",
+"	0014  PCI-Counter/Timer Counter Timer board",
+"	0015  PCI-DAC416 Analogue output board",
+"	0016  PCI-MFB Analogue I/O board",
+"	0017  PROTO-3 PCI Prototyping board",
+"	9100  INI-9100/9100W SCSI Host",
+"1002  ATI Technologies Inc",
+"	3150  M24 1P [Radeon Mobility X600]",
+"	3152  M22 [Radeon Mobility X300]",
+"	3154  M24 1T [FireGL M24 GL]",
+"	3e50  RV380 0x3e50 [Radeon X600]",
+"	3e54  RV380 0x3e54 [FireGL V3200]",
+"	3e70  RV380 [Radeon X600] Secondary",
+"	4136  Radeon IGP 320 M",
+"	4137  Radeon IGP330/340/350",
+"	4144  R300 AD [Radeon 9500 Pro]",
+"	4145  R300 AE [Radeon 9700 Pro]",
+"	4146  R300 AF [Radeon 9700 Pro]",
+"	4147  R300 AG [FireGL Z1/X1]",
+"	4148  R350 AH [Radeon 9800]",
+"	4149  R350 AI [Radeon 9800]",
+"	414a  R350 AJ [Radeon 9800]",
+"	414b  R350 AK [Fire GL X2]",
+"	4150  RV350 AP [Radeon 9600]",
+"		1002 0002  R9600 Pro primary (Asus OEM for HP)",
+"		1002 0003  R9600 Pro secondary (Asus OEM for HP)",
+"		1002 4722  All-in-Wonder 2006 AGP Edition",
+"		1458 4024  Giga-Byte GV-R96128D Primary",
+"		148c 2064  PowerColor R96A-C3N",
+"		148c 2066  PowerColor R96A-C3N",
+"		174b 7c19  Sapphire Atlantis Radeon 9600 Pro",
+"		174b 7c29  GC-R9600PRO Primary [Sapphire]",
+"		17ee 2002  Radeon 9600 256Mb Primary",
+"		18bc 0101  GC-R9600PRO Primary",
+"	4151  RV350 AQ [Radeon 9600]",
+"		1043 c004  A9600SE",
+"	4152  RV350 AR [Radeon 9600]",
+"		1002 0002  Radeon 9600XT",
+"		1002 4772  All-in-Wonder 9600 XT",
+"		1043 c002  Radeon 9600 XT TVD",
+"		1043 c01a  A9600XT/TD",
+"		174b 7c29  Sapphire Radeon 9600XT",
+"		1787 4002  Radeon 9600 XT",
+"	4153  RV350 AS [Radeon 9550]",
+"		1462 932c  865PE Neo2-V (MS-6788) mainboard",
+"	4154  RV350 AT [Fire GL T2]",
+"	4155  RV350 AU [Fire GL T2]",
+"	4156  RV350 AV [Fire GL T2]",
+"	4157  RV350 AW [Fire GL T2]",
+"	4158  68800AX [Mach32]",
+"	4164  R300 AD [Radeon 9500 Pro] (Secondary)",
+"	4165  R300 AE [Radeon 9700 Pro] (Secondary)",
+"	4166  R300 AF [Radeon 9700 Pro] (Secondary)",
+"	4168  Radeon R350 [Radeon 9800] (Secondary)",
+"	4170  RV350 AP [Radeon 9600] (Secondary)",
+"		1002 0003  R9600 Pro secondary (Asus OEM for HP)",
+"		1002 4723  All-in-Wonder 2006 AGP Edition (Secondary)",
+"		1458 4025  Giga-Byte GV-R96128D Secondary",
+"		148c 2067  PowerColor R96A-C3N (Secondary)",
+"		174b 7c28  GC-R9600PRO Secondary [Sapphire]",
+"		17ee 2003  Radeon 9600 256Mb Secondary",
+"		18bc 0100  GC-R9600PRO Secondary",
+"	4171  RV350 AQ [Radeon 9600] (Secondary)",
+"		1043 c005  A9600SE (Secondary)",
+"	4172  RV350 AR [Radeon 9600] (Secondary)",
+"		1002 0003  Radeon 9600XT (Secondary)",
+"		1002 4773  All-in-Wonder 9600 XT (Secondary)",
+"		1043 c003  A9600XT (Secondary)",
+"		1043 c01b  A9600XT/TD (Secondary)",
+"		174b 7c28  Sapphire Radeon 9600XT (Secondary)",
+"		1787 4003  Radeon 9600 XT (Secondary)",
+"	4173  RV350 ?? [Radeon 9550] (Secondary)",
+"	4237  Radeon 7000 IGP",
+"	4242  R200 BB [Radeon All in Wonder 8500DV]",
+"		1002 02aa  Radeon 8500 AIW DV Edition",
+"	4243  R200 BC [Radeon All in Wonder 8500]",
+"	4336  Radeon Mobility U1",
+"		1002 4336  Pavilion ze4300 ATI Radeon Mobility U1 (IGP 320 M)",
+"		103c 0024  Pavilion ze4400 builtin Video",
+"		161f 2029  eMachines M5312 builtin Video",
+"	4337  Radeon IGP 330M/340M/350M",
+"		1014 053a  ThinkPad R40e (2684-HVG) builtin VGA controller",
+"		103c 0850  Radeon IGP 345M",
+"	4341  IXP150 AC'97 Audio Controller",
+"	4345  EHCI USB Controller",
+"	4347  OHCI USB Controller #1",
+"	4348  OHCI USB Controller #2",
+"	4349  ATI Dual Channel Bus Master PCI IDE Controller",
+"	434d  IXP AC'97 Modem",
+"	4353  ATI SMBus",
+"	4354  215CT [Mach64 CT]",
+"	4358  210888CX [Mach64 CX]",
+"	4363  ATI SMBus",
+"	436e  ATI 436E Serial ATA Controller",
+"	4370  IXP SB400 AC'97 Audio Controller",
+"		1025 0079  Aspire 5024WLMMi",
+"		103c 308b  MX6125",
+"		107b 0300  MX6421",
+"	4371  IXP SB400 PCI-PCI Bridge",
+"		103c 308b  MX6125",
+"	4372  IXP SB400 SMBus Controller",
+"		1025 0080  Aspire 5024WLMMi",
+"		103c 308b  MX6125",
+"	4373  IXP SB400 USB2 Host Controller",
+"		1025 0080  Aspire 5024WLMMi",
+"		103c 308b  MX6125",
+"	4374  IXP SB400 USB Host Controller",
+"		103c 308b  MX6125",
+"	4375  IXP SB400 USB Host Controller",
+"		1025 0080  Aspire 5024WLMMi",
+"		103c 308b  MX6125",
+"	4376  Standard Dual Channel PCI IDE Controller ATI",
+"		1025 0080  Aspire 5024WLMMi",
+"		103c 308b  MX6125",
+"	4377  IXP SB400 PCI-ISA Bridge",
+"		1025 0080  Aspire 5024WLMi",
+"		103c 308b  MX6125",
+"	4378  ATI SB400 - AC'97 Modem Controller",
+"		1025 0080  Aspire 5024WLMMi",
+"		103c 308b  MX6125",
+"	4379  ATI 4379 Serial ATA Controller",
+"	437a  ATI 437A Serial ATA Controller",
+"	437b  SB450 HDA Audio",
+"	4380  SB600 Non-Raid-5 SATA",
+"	4381  SB600 Raid-5 SATA",
+"	4382  SB600 AC97 Audio",
+"	4383  SB600 Azalia",
+"	4384  SB600 PCI to PCI Bridge",
+"	4385  SB600 SMBus",
+"	4386  SB600 USB Controller (EHCI)",
+"	4387  SB600 USB (OHCI0)",
+"	4388  SB600 USB (OHCI1)",
+"	4389  SB600 USB (OHCI2)",
+"	438a  SB600 USB (OHCI3)",
+"	438b  SB600 USB (OHCI4)",
+"	438c  SB600 IDE",
+"	438d  SB600 PCI to LPC Bridge",
+"	438e  SB600 AC97 Modem",
+"	4437  Radeon Mobility 7000 IGP",
+"	4554  210888ET [Mach64 ET]",
+"	4654  Mach64 VT",
+"	4742  3D Rage Pro AGP 1X/2X",
+"		1002 0040  Rage Pro Turbo AGP 2X",
+"		1002 0044  Rage Pro Turbo AGP 2X",
+"		1002 0061  Rage Pro AIW AGP 2X",
+"		1002 0062  Rage Pro AIW AGP 2X",
+"		1002 0063  Rage Pro AIW AGP 2X",
+"		1002 0080  Rage Pro Turbo AGP 2X",
+"		1002 0084  Rage Pro Turbo AGP 2X",
+"		1002 4742  Rage Pro Turbo AGP 2X",
+"		1002 8001  Rage Pro Turbo AGP 2X",
+"		1028 0082  Rage Pro Turbo AGP 2X",
+"		1028 4082  Optiplex GX1 Onboard Display Adapter",
+"		1028 8082  Rage Pro Turbo AGP 2X",
+"		1028 c082  Rage Pro Turbo AGP 2X",
+"		8086 4152  Xpert 98D AGP 2X",
+"		8086 464a  Rage Pro Turbo AGP 2X",
+"	4744  3D Rage Pro AGP 1X",
+"		1002 4744  Rage Pro Turbo AGP",
+"	4747  3D Rage Pro",
+"	4749  3D Rage Pro",
+"		1002 0061  Rage Pro AIW",
+"		1002 0062  Rage Pro AIW",
+"	474c  Rage XC",
+"	474d  Rage XL AGP 2X",
+"		1002 0004  Xpert 98 RXL AGP 2X",
+"		1002 0008  Xpert 98 RXL AGP 2X",
+"		1002 0080  Rage XL AGP 2X",
+"		1002 0084  Xpert 98 AGP 2X",
+"		1002 474d  Rage XL AGP",
+"		1033 806a  Rage XL AGP",
+"	474e  Rage XC AGP",
+"		1002 474e  Rage XC AGP",
+"	474f  Rage XL",
+"		1002 0008  Rage XL",
+"		1002 474f  Rage XL",
+"	4750  3D Rage Pro 215GP",
+"		1002 0040  Rage Pro Turbo",
+"		1002 0044  Rage Pro Turbo",
+"		1002 0080  Rage Pro Turbo",
+"		1002 0084  Rage Pro Turbo",
+"		1002 4750  Rage Pro Turbo",
+"	4751  3D Rage Pro 215GQ",
+"	4752  Rage XL",
+"		0e11 001e  Proliant Rage XL",
+"		1002 0008  Rage XL",
+"		1002 4752  Proliant Rage XL",
+"		1002 8008  Rage XL",
+"		1028 00ce  PowerEdge 1400",
+"		1028 00d1  PowerEdge 2550",
+"		1028 00d9  PowerEdge 2500",
+"		1028 0134  Poweredge SC600",
+"		103c 10e1  NetServer Rage XL",
+"		1734 007a  Primergy RX300",
+"		8086 3411  SDS2 Mainboard",
+"		8086 3427  S875WP1-E mainboard",
+"	4753  Rage XC",
+"		1002 4753  Rage XC",
+"	4754  3D Rage I/II 215GT [Mach64 GT]",
+"	4755  3D Rage II+ 215GTB [Mach64 GTB]",
+"	4756  3D Rage IIC 215IIC [Mach64 GT IIC]",
+"		1002 4756  Rage IIC",
+"	4757  3D Rage IIC AGP",
+"		1002 4757  Rage IIC AGP",
+"		1028 0089  Rage 3D IIC",
+"		1028 008e  PowerEdge 1300 onboard video",
+"		1028 4082  Rage 3D IIC",
+"		1028 8082  Rage 3D IIC",
+"		1028 c082  Rage 3D IIC",
+"	4758  210888GX [Mach64 GX]",
+"	4759  3D Rage IIC",
+"	475a  3D Rage IIC AGP",
+"		1002 0084  Rage 3D Pro AGP 2x XPERT 98",
+"		1002 0087  Rage 3D IIC",
+"		1002 475a  Rage IIC AGP",
+"	4964  Radeon RV250 Id [Radeon 9000]",
+"	4965  Radeon RV250 Ie [Radeon 9000]",
+"	4966  Radeon RV250 If [Radeon 9000]",
+"		10f1 0002  RV250 If [Tachyon G9000 PRO]",
+"		148c 2039  RV250 If [Radeon 9000 Pro 'Evil Commando']",
+"		1509 9a00  RV250 If [Radeon 9000 'AT009']",
+"		1681 0040  RV250 If [3D prophet 9000]",
+"		174b 7176  RV250 If [Sapphire Radeon 9000 Pro]",
+"		174b 7192  RV250 If [Radeon 9000 'Atlantis']",
+"		17af 2005  RV250 If [Excalibur Radeon 9000 Pro]",
+"		17af 2006  RV250 If [Excalibur Radeon 9000]",
+"	4967  Radeon RV250 Ig [Radeon 9000]",
+"	496e  Radeon RV250 [Radeon 9000] (Secondary)",
+"	4a48  R420 JH [Radeon X800]",
+"	4a49  R420 JI [Radeon X800PRO]",
+"	4a4a  R420 JJ [Radeon X800SE]",
+"	4a4b  R420 JK [Radeon X800]",
+"	4a4c  R420 JL [Radeon X800]",
+"	4a4d  R420 JM [FireGL X3]",
+"	4a4e  M18 JN [Radeon Mobility 9800]",
+"	4a50  R420 JP [Radeon X800XT]",
+"	4a70  R420 [X800XT-PE] (Secondary)",
+"	4b49  R480 [Radeon X850XT]",
+"	4b4b  R480 [Radeon X850Pro]",
+"	4b4c  R481 [Radeon X850XT-PE]",
+"	4b69  R480 [Radeon X850XT] (Secondary)",
+"	4b6b  R480 [Radeon X850Pro] (Secondary)",
+"	4b6c  R481 [Radeon X850XT-PE] (Secondary)",
+"	4c42  3D Rage LT Pro AGP-133",
+"		0e11 b0e7  Rage LT Pro (Compaq Presario 5240)",
+"		0e11 b0e8  Rage 3D LT Pro",
+"		0e11 b10e  3D Rage LT Pro (Compaq Armada 1750)",
+"		1002 0040  Rage LT Pro AGP 2X",
+"		1002 0044  Rage LT Pro AGP 2X",
+"		1002 4c42  Rage LT Pro AGP 2X",
+"		1002 8001  Rage LT Pro AGP 2X",
+"		1028 0085  Rage 3D LT Pro",
+"	4c44  3D Rage LT Pro AGP-66",
+"	4c45  Rage Mobility M3 AGP",
+"	4c46  Rage Mobility M3 AGP 2x",
+"		1028 00b1  Latitude C600",
+"	4c47  3D Rage LT-G 215LG",
+"	4c49  3D Rage LT Pro",
+"		1002 0004  Rage LT Pro",
+"		1002 0040  Rage LT Pro",
+"		1002 0044  Rage LT Pro",
+"		1002 4c49  Rage LT Pro",
+"	4c4d  Rage Mobility P/M AGP 2x",
+"		0e11 b111  Armada M700",
+"		0e11 b160  Armada E500",
+"		1002 0084  Xpert 98 AGP 2X (Mobility)",
+"		1014 0154  ThinkPad A20m/A21m",
+"		1028 00aa  Latitude CPt",
+"		1028 00bb  Latitude CPx",
+"		10e1 10cf  Fujitsu Siemens LifeBook C Series",
+"		1179 ff00  Satellite 1715XCDS laptop",
+"		13bd 1019  PC-AR10",
+"	4c4e  Rage Mobility L AGP 2x",
+"	4c50  3D Rage LT Pro",
+"		1002 4c50  Rage LT Pro",
+"	4c51  3D Rage LT Pro",
+"	4c52  Rage Mobility P/M",
+"		1033 8112  Versa Note VXi",
+"	4c53  Rage Mobility L",
+"	4c54  264LT [Mach64 LT]",
+"	4c57  Radeon Mobility M7 LW [Radeon Mobility 7500]",
+"		1014 0517  ThinkPad T30",
+"		1028 00e6  Radeon Mobility M7 LW (Dell Inspiron 8100)",
+"		1028 012a  Latitude C640",
+"		144d c006  Radeon Mobility M7 LW in vpr Matrix 170B4",
+"	4c58  Radeon RV200 LX [Mobility FireGL 7800 M7]",
+"	4c59  Radeon Mobility M6 LY",
+"		0e11 b111  Evo N600c",
+"		1014 0235  ThinkPad A30/A30p (2652/2653)",
+"		1014 0239  ThinkPad X22/X23/X24",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		104d 8140  PCG-Z1SP laptop",
+"		1509 1930  Medion MD9703",
+"	4c5a  Radeon Mobility M6 LZ",
+"	4c64  Radeon R250 Ld [Radeon Mobility 9000 M9]",
+"	4c65  Radeon R250 Le [Radeon Mobility 9000 M9]",
+"	4c66  Radeon R250 [Radeon Mobility 9200]",
+"	4c67  Radeon R250 Lg [Radeon Mobility 9000 M9]",
+"	4c6e  Radeon R250 Ln [Radeon Mobility 9000 M9] [Secondary]",
+"	4d46  Rage Mobility M4 AGP",
+"	4d4c  Rage Mobility M4 AGP",
+"	4e44  Radeon R300 ND [Radeon 9700 Pro]",
+"		1002 515e  Radeon ES1000",
+"		1002 5965  Radeon ES1000",
+"	4e45  Radeon R300 NE [Radeon 9500 Pro]",
+"		1002 0002  Radeon R300 NE [Radeon 9500 Pro]",
+"		1681 0002  Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro]",
+"	4e46  RV350 NF [Radeon 9600]",
+"	4e47  Radeon R300 NG [FireGL X1]",
+"	4e48  Radeon R350 [Radeon 9800 Pro]",
+"	4e49  Radeon R350 [Radeon 9800]",
+"	4e4a  RV350 NJ [Radeon 9800 XT]",
+"	4e4b  R350 NK [Fire GL X2]",
+"	4e50  RV350 [Mobility Radeon 9600 M10]",
+"		1025 005a  TravelMate 290",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1462 0311  MSI M510A",
+"		1734 1055  Amilo M1420W",
+"	4e51  M10 NQ [Radeon Mobility 9600]",
+"	4e52  RV350 [Mobility Radeon 9600 M10]",
+"	4e53  M10 NS [Radeon Mobility 9600]",
+"	4e54  M10 NT [FireGL Mobility T2]",
+"	4e56  M11 NV [FireGL Mobility T2e]",
+"	4e64  Radeon R300 [Radeon 9700 Pro] (Secondary)",
+"	4e65  Radeon R300 [Radeon 9500 Pro] (Secondary)",
+"		1002 0003  Radeon R300 NE [Radeon 9500 Pro]",
+"		1681 0003  Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary)",
+"	4e66  RV350 NF [Radeon 9600] (Secondary)",
+"	4e67  Radeon R300 [FireGL X1] (Secondary)",
+"	4e68  Radeon R350 [Radeon 9800 Pro] (Secondary)",
+"	4e69  Radeon R350 [Radeon 9800] (Secondary)",
+"	4e6a  RV350 NJ [Radeon 9800 XT] (Secondary)",
+"		1002 4e71  ATI Technologies Inc M10 NQ [Radeon Mobility 9600]",
+"	4e71  M10 NQ [Radeon Mobility 9600] (Secondary)",
+"	4f72  RV250 [Radeon 9000 Series]",
+"	4f73  Radeon RV250 [Radeon 9000 Series] (Secondary)",
+"	5041  Rage 128 PA/PRO",
+"	5042  Rage 128 PB/PRO AGP 2x",
+"	5043  Rage 128 PC/PRO AGP 4x",
+"	5044  Rage 128 PD/PRO TMDS",
+"		1002 0028  Rage 128 AIW",
+"		1002 0029  Rage 128 AIW",
+"	5045  Rage 128 PE/PRO AGP 2x TMDS",
+"	5046  Rage 128 PF/PRO AGP 4x TMDS",
+"		1002 0004  Rage Fury Pro",
+"		1002 0008  Rage Fury Pro/Xpert 2000 Pro",
+"		1002 0014  Rage Fury Pro",
+"		1002 0018  Rage Fury Pro/Xpert 2000 Pro",
+"		1002 0028  Rage 128 Pro AIW AGP",
+"		1002 002a  Rage 128 Pro AIW AGP",
+"		1002 0048  Rage Fury Pro",
+"		1002 2000  Rage Fury MAXX AGP 4x (TMDS) (VGA device)",
+"		1002 2001  Rage Fury MAXX AGP 4x (TMDS) (Extra device?!)",
+"	5047  Rage 128 PG/PRO",
+"	5048  Rage 128 PH/PRO AGP 2x",
+"	5049  Rage 128 PI/PRO AGP 4x",
+"	504a  Rage 128 PJ/PRO TMDS",
+"	504b  Rage 128 PK/PRO AGP 2x TMDS",
+"	504c  Rage 128 PL/PRO AGP 4x TMDS",
+"	504d  Rage 128 PM/PRO",
+"	504e  Rage 128 PN/PRO AGP 2x",
+"	504f  Rage 128 PO/PRO AGP 4x",
+"	5050  Rage 128 PP/PRO TMDS [Xpert 128]",
+"		1002 0008  Xpert 128",
+"	5051  Rage 128 PQ/PRO AGP 2x TMDS",
+"	5052  Rage 128 PR/PRO AGP 4x TMDS",
+"	5053  Rage 128 PS/PRO",
+"	5054  Rage 128 PT/PRO AGP 2x",
+"	5055  Rage 128 PU/PRO AGP 4x",
+"	5056  Rage 128 PV/PRO TMDS",
+"	5057  Rage 128 PW/PRO AGP 2x TMDS",
+"	5058  Rage 128 PX/PRO AGP 4x TMDS",
+"	5144  Radeon R100 QD [Radeon 7200]",
+"		1002 0008  Radeon 7000/Radeon VE",
+"		1002 0009  Radeon 7000/Radeon",
+"		1002 000a  Radeon 7000/Radeon",
+"		1002 001a  Radeon 7000/Radeon",
+"		1002 0029  Radeon AIW",
+"		1002 0038  Radeon 7000/Radeon",
+"		1002 0039  Radeon 7000/Radeon",
+"		1002 008a  Radeon 7000/Radeon",
+"		1002 00ba  Radeon 7000/Radeon",
+"		1002 0139  Radeon 7000/Radeon",
+"		1002 028a  Radeon 7000/Radeon",
+"		1002 02aa  Radeon AIW",
+"		1002 053a  Radeon 7000/Radeon",
+"	5145  Radeon R100 QE",
+"	5146  Radeon R100 QF",
+"	5147  Radeon R100 QG",
+"	5148  Radeon R200 QH [Radeon 8500]",
+"		1002 010a  FireGL 8800 64Mb",
+"		1002 0152  FireGL 8800 128Mb",
+"		1002 0162  FireGL 8700 32Mb",
+"		1002 0172  FireGL 8700 64Mb",
+"	5149  Radeon R200 QI",
+"	514a  Radeon R200 QJ",
+"	514b  Radeon R200 QK",
+"	514c  Radeon R200 QL [Radeon 8500 LE]",
+"		1002 003a  Radeon R200 QL [Radeon 8500 LE]",
+"		1002 013a  Radeon 8500",
+"		148c 2026  R200 QL [Radeon 8500 Evil Master II Multi Display Edition]",
+"		1681 0010  Radeon 8500 [3D Prophet 8500 128Mb]",
+"		174b 7149  Radeon R200 QL [Sapphire Radeon 8500 LE]",
+"	514d  Radeon R200 QM [Radeon 9100]",
+"	514e  Radeon R200 QN [Radeon 8500LE]",
+"	514f  Radeon R200 QO [Radeon 8500LE]",
+"	5154  R200 QT [Radeon 8500]",
+"	5155  R200 QU [Radeon 9100]",
+"	5157  Radeon RV200 QW [Radeon 7500]",
+"		1002 013a  Radeon 7500",
+"		1002 103a  Dell Optiplex GX260",
+"		1458 4000  RV200 QW [RADEON 7500 PRO MAYA AR]",
+"		148c 2024  RV200 QW [Radeon 7500LE Dual Display]",
+"		148c 2025  RV200 QW [Radeon 7500 Evil Master Multi Display Edition]",
+"		148c 2036  RV200 QW [Radeon 7500 PCI Dual Display]",
+"		174b 7146  RV200 QW [Radeon 7500 LE]",
+"		174b 7147  RV200 QW [Sapphire Radeon 7500LE]",
+"		174b 7161  Radeon RV200 QW [Radeon 7500 LE]",
+"		17af 0202  RV200 QW [Excalibur Radeon 7500LE]",
+"	5158  Radeon RV200 QX [Radeon 7500]",
+"	5159  Radeon RV100 QY [Radeon 7000/VE]",
+"		1002 000a  Radeon 7000/Radeon VE",
+"		1002 000b  Radeon 7000",
+"		1002 0038  Radeon 7000/Radeon VE",
+"		1002 003a  Radeon 7000/Radeon VE",
+"		1002 00ba  Radeon 7000/Radeon VE",
+"		1002 013a  Radeon 7000/Radeon VE",
+"		1002 0908  XVR-100 (supplied by Sun)",
+"		1014 029a  Remote Supervisor Adapter II (RSA2)",
+"		1014 02c8  IBM eServer xSeries server mainboard",
+"		1028 019a  PowerEdge SC1425",
+"		1458 4002  RV100 QY [RADEON 7000 PRO MAYA AV Series]",
+"		148c 2003  RV100 QY [Radeon 7000 Multi-Display Edition]",
+"		148c 2023  RV100 QY [Radeon 7000 Evil Master Multi-Display]",
+"		174b 7112  RV100 QY [Sapphire Radeon VE 7000]",
+"		174b 7c28  Sapphire Radeon VE 7000 DDR",
+"		1787 0202  RV100 QY [Excalibur Radeon 7000]",
+"	515a  Radeon RV100 QZ [Radeon 7000/VE]",
+"	515e  ES1000",
+"	515f  ES1000",
+"	5168  Radeon R200 Qh",
+"	5169  Radeon R200 Qi",
+"	516a  Radeon R200 Qj",
+"	516b  Radeon R200 Qk",
+"	516c  Radeon R200 Ql",
+"	5245  Rage 128 RE/SG",
+"		1002 0008  Xpert 128",
+"		1002 0028  Rage 128 AIW",
+"		1002 0029  Rage 128 AIW",
+"		1002 0068  Rage 128 AIW",
+"	5246  Rage 128 RF/SG AGP",
+"		1002 0004  Magnum/Xpert 128/Xpert 99",
+"		1002 0008  Magnum/Xpert128/X99/Xpert2000",
+"		1002 0028  Rage 128 AIW AGP",
+"		1002 0044  Rage Fury/Xpert 128/Xpert 2000",
+"		1002 0068  Rage 128 AIW AGP",
+"		1002 0448  Rage Fury",
+"	5247  Rage 128 RG",
+"	524b  Rage 128 RK/VR",
+"	524c  Rage 128 RL/VR AGP",
+"		1002 0008  Xpert 99/Xpert 2000",
+"		1002 0088  Xpert 99",
+"	5345  Rage 128 SE/4x",
+"	5346  Rage 128 SF/4x AGP 2x",
+"		1002 0048  RAGE 128 16MB VGA TVOUT AMC PAL",
+"	5347  Rage 128 SG/4x AGP 4x",
+"	5348  Rage 128 SH",
+"	534b  Rage 128 SK/4x",
+"	534c  Rage 128 SL/4x AGP 2x",
+"	534d  Rage 128 SM/4x AGP 4x",
+"		1002 0008  Xpert 99/Xpert 2000",
+"		1002 0018  Xpert 2000",
+"	534e  Rage 128 4x",
+"	5354  Mach 64 VT",
+"		1002 5654  Mach 64 reference",
+"	5446  Rage 128 Pro Ultra TF",
+"		1002 0004  Rage Fury Pro",
+"		1002 0008  Rage Fury Pro/Xpert 2000 Pro",
+"		1002 0018  Rage Fury Pro/Xpert 2000 Pro",
+"		1002 0028  Rage 128 AIW Pro AGP",
+"		1002 0029  Rage 128 AIW",
+"		1002 002a  Rage 128 AIW Pro AGP",
+"		1002 002b  Rage 128 AIW",
+"		1002 0048  Xpert 2000 Pro",
+"	544c  Rage 128 Pro Ultra TL",
+"	5452  Rage 128 Pro Ultra TR",
+"		1002 001c  Rage 128 Pro 4XL",
+"		103c 1279  Rage 128 Pro 4XL",
+"	5453  Rage 128 Pro Ultra TS",
+"	5454  Rage 128 Pro Ultra TT",
+"	5455  Rage 128 Pro Ultra TU",
+"	5460  M22 [Radeon Mobility M300]",
+"	5462  M24 [Radeon Mobility X600]",
+"	5464  M22 [FireGL GL]",
+"	5548  R423 UH [Radeon X800 (PCIE)]",
+"	5549  R423 UI [Radeon X800PRO (PCIE)]",
+"	554a  R423 UJ [Radeon X800LE (PCIE)]",
+"	554b  R423 UK [Radeon X800SE (PCIE)]",
+"	554d  R430 [Radeon X800 XL] (PCIe)",
+"	554f  R430 [Radeon X800 (PCIE)]",
+"	5550  R423 [Fire GL V7100]",
+"	5551  R423 UQ [FireGL V7200 (PCIE)]",
+"	5552  R423 UR [FireGL V5100 (PCIE)]",
+"	5554  R423 UT [FireGL V7100 (PCIE)]",
+"	556b  Radeon R423 UK (PCIE) [X800 SE] (Secondary)",
+"	556d  R430 [Radeon X800 XL] (PCIe) Secondary",
+"	556f  R430 [Radeon X800 (PCIE) Secondary]",
+"	564a  M26 [Mobility FireGL V5000]",
+"	564b  M26 [Mobility FireGL V5000]",
+"	564f  M26 [Radeon Mobility X700 XL] (PCIE)",
+"	5652  M26 [Radeon Mobility X700]",
+"	5653  Radeon Mobility X700 (PCIE)",
+"		1025 0080  Aspire 5024WLMi",
+"	5654  264VT [Mach64 VT]",
+"		1002 5654  Mach64VT Reference",
+"	5655  264VT3 [Mach64 VT3]",
+"	5656  264VT4 [Mach64 VT4]",
+"	5830  RS300 Host Bridge",
+"	5831  RS300 Host Bridge",
+"	5832  RS300 Host Bridge",
+"	5833  Radeon 9100 IGP Host Bridge",
+"	5834  Radeon 9100 IGP",
+"	5835  RS300M AGP [Radeon Mobility 9100IGP]",
+"	5838  Radeon 9100 IGP AGP Bridge",
+"	5940  RV280 [Radeon 9200 PRO] (Secondary)",
+"	5941  RV280 [Radeon 9200] (Secondary)",
+"		1458 4019  Gigabyte Radeon 9200",
+"		174b 7c12  Sapphire Radeon 9200",
+"		17af 200d  Excalibur Radeon 9200",
+"		18bc 0050  GeXcube GC-R9200-C3 (Secondary)",
+"	5944  RV280 [Radeon 9200 SE (PCI)]",
+"	5950  RS480 Host Bridge",
+"		1025 0080  Aspire 5024WLMMi",
+"		103c 308b  MX6125",
+"	5951  ATI Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge",
+"	5954  RS480 [Radeon Xpress 200G Series]",
+"		1002 5954  RV370 [Radeon Xpress 200G Series]",
+"	5955  ATI Radeon XPRESS 200M 5955 (PCIE)",
+"		1002 5955  RS480 0x5955 [ATI Radeon XPRESS 200M 5955 (PCIE)]",
+"		103c 308b  MX6125",
+"	5960  RV280 [Radeon 9200 PRO]",
+"	5961  RV280 [Radeon 9200]",
+"		1002 2f72  All-in-Wonder 9200 Series",
+"		1019 4c30  Radeon 9200 VIVO",
+"		12ab 5961  YUAN SMARTVGA Radeon 9200",
+"		1458 4018  Gigabyte Radeon 9200",
+"		174b 7c13  Sapphire Radeon 9200",
+"		17af 200c  Excalibur Radeon 9200",
+"		18bc 0050  Radeon 9200 Game Buster",
+"		18bc 0051  GeXcube GC-R9200-C3",
+"		18bc 0053  Radeon 9200 Game Buster VIVO",
+"	5962  RV280 [Radeon 9200]",
+"	5964  RV280 [Radeon 9200 SE]",
+"		1043 c006  ASUS Radeon 9200 SE / TD / 128M",
+"		1458 4018  Radeon 9200 SE",
+"		1458 4032  Radeon 9200 SE 128MB",
+"		147b 6191  R9200SE-DT",
+"		148c 2073  CN-AG92E",
+"		174b 7c13  Sapphire Radeon 9200 SE",
+"		1787 5964  Excalibur 9200SE VIVO 128M",
+"		17af 2012  Radeon 9200 SE Excalibur",
+"		18bc 0170  Sapphire Radeon 9200 SE 128MB Game Buster",
+"		18bc 0173  GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]",
+"	5969  ES1000",
+"	5974  RS482 [Radeon Xpress 200]",
+"	5975  RS482 [Radeon Xpress 200M]",
+"	5a34  RS480 PCI-X Root Port",
+"	5a36  RS480 PCI Bridge",
+"	5a38  RS480 PCI Bridge",
+"	5a39  RS480 PCI Bridge",
+"	5a3f  RS480 PCI Bridge",
+"	5a41  RS400 [Radeon Xpress 200]",
+"	5a42  RS400 [Radeon Xpress 200M]",
+"	5a61  RC410 [Radeon Xpress 200]",
+"	5a62  RC410 [Radeon Xpress 200M]",
+"	5b60  RV370 5B60 [Radeon X300 (PCIE)]",
+"		1043 002a  Extreme AX300SE-X",
+"		1043 032e  Extreme AX300/TD",
+"		1462 0400  RX300SE-TD128E (MS-8940 REV:200)",
+"		1462 0402  RX300SE-TD128E (MS-8940)",
+"	5b62  RV370 5B62 [Radeon X600 (PCIE)]",
+"	5b63  RV370 [Sapphire X550 Silent]",
+"	5b64  RV370 5B64 [FireGL V3100 (PCIE)]",
+"	5b65  RV370 5B65 [FireGL D1100 (PCIE)]",
+"	5b70  RV370 [Radeon X300SE]",
+"		1462 0403  RX300SE-TD128E (MS-8940) (secondary display)",
+"	5b72  Radeon X600(RV380)",
+"	5b73  RV370 secondary [Sapphire X550 Silent]",
+"	5b74  RV370 5B64 [FireGL V3100 (PCIE)] (Secondary)",
+"	5c61  M9+ 5C61 [Radeon Mobility 9200 (AGP)]",
+"	5c63  M9+ 5C63 [Radeon Mobility 9200 (AGP)]",
+"		1002 5c63  Apple iBook G4 2004",
+"	5d44  RV280 [Radeon 9200 SE] (Secondary)",
+"		1458 4019  Radeon 9200 SE (Secondary)",
+"		1458 4032  Radeon 9200 SE 128MB",
+"		174b 7c12  Sapphire Radeon 9200 SE (Secondary)",
+"		1787 5965  Excalibur 9200SE VIVO 128M (Secondary)",
+"		17af 2013  Radeon 9200 SE Excalibur (Secondary)",
+"		18bc 0171  Radeon 9200 SE 128MB Game Buster (Secondary)",
+"		18bc 0172  GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]",
+"	5d48  M28 [Radeon Mobility X800XT]",
+"	5d49  M28 [Mobility FireGL V5100]",
+"	5d4a  Mobility Radeon X800",
+"	5d4d  R480 [Radeon X850XT Platinum (PCIE)]",
+"	5d4f  R480 [Radeon X800 GTO (PCIE)]",
+"	5d52  R480 [Radeon X850XT (PCIE)] (Primary)",
+"		1002 0b12  PowerColor X850XT PCIe Primary",
+"		1002 0b13  PowerColor X850XT PCIe Secondary",
+"	5d57  R423 5F57 [Radeon X800XT (PCIE)]",
+"	5d6d  R480 [Radeon X850XT Platinum (PCIE)] (Secondary)",
+"	5d6f  R480 [Radeon X800 GTO (PCIE)] (Secondary)",
+"	5d72  R480 [Radeon X850XT (PCIE)] (Secondary)",
+"	5d77  R423 5F57 [Radeon X800XT (PCIE)] (Secondary)",
+"	5e48  RV410 [FireGL V5000]",
+"	5e49  RV410 [FireGL V3300]",
+"	5e4a  RV410 [Radeon X700XT]",
+"	5e4b  RV410 [Radeon X700 Pro (PCIE)]",
+"	5e4c  RV410 [Radeon X700SE]",
+"	5e4d  RV410 [Radeon X700 (PCIE)]",
+"		148c 2116  PowerColor Bravo X700",
+"	5e4f  RV410 [Radeon X700]",
+"	5e6b  RV410 [Radeon X700 Pro (PCIE)] Secondary",
+"	5e6d  RV410 [Radeon X700 (PCIE)] (Secondary)",
+"		148c 2117  PowerColor Bravo X700",
+"	5f57  R423 [Radeon X800XT (PCIE)]",
+"	700f  PCI Bridge [IGP 320M]",
+"	7010  PCI Bridge [IGP 340M]",
+"	7100  R520 [Radeon X1800]",
+"	7105  R520 [FireGL]",
+"	7109  R520 [Radeon X1800]",
+"		1002 0322  All-in-Wonder X1800XL",
+"		1002 0d02  Radeon X1800 CrossFire Edition",
+"	7120  R520 [Radeon X1800] (Secondary)",
+"	7129  R520 [Radeon X1800] (Secondary)",
+"		1002 0323  All-in-Wonder X1800XL (Secondary)",
+"		1002 0d03  Radeon X1800 CrossFire Edition (Secondary)",
+"	7142  RV515 [Radeon X1300]",
+"		1002 0322  All-in-Wonder 2006 PCI-E Edition",
+"	7145  Radeon Mobility X1400",
+"	7146  RV515 [Radeon X1300]",
+"		1002 0322  All-in-Wonder 2006 PCI-E Edition",
+"	7149  M52 [ATI Mobility Radeon X1300]",
+"	714a  M52 [ATI Mobility Radeon X1300]",
+"	714b  M52 [ATI Mobility Radeon X1300]",
+"	714c  M52 [ATI Mobility Radeon X1300]",
+"	7162  RV515 [Radeon X1300] (Secondary)",
+"		1002 0323  All-in-Wonder 2006 PCI-E Edition (Secondary)",
+"	7166  RV515 [Radeon X1300] (Secondary)",
+"		1002 0323  All-in-Wonder 2006 PCI-E Edition (Secondary)",
+"	71c0  RV530 [Radeon X1600]",
+"	71c2  RV530 [Radeon X1600]",
+"	71c4  M56GL [ATI Mobility FireGL V5200]",
+"	71c5  M56P [Radeon Mobility X1600]",
+"	71e0  RV530 [Radeon X1600] (Secondary)",
+"	71e2  RV530 [Radeon X1600] (Secondary)",
+"	7833  Radeon 9100 IGP Host Bridge",
+"	7834  Radeon 9100 PRO IGP",
+"	7835  Radeon Mobility 9200 IGP",
+"	7838  Radeon 9100 IGP PCI/AGP Bridge",
+"	7c37  RV350 AQ [Radeon 9600 SE]",
+"	cab0  AGP Bridge [IGP 320M]",
+"	cab2  RS200/RS200M AGP Bridge [IGP 340M]",
+"	cab3  R200 AGP Bridge [Mobility Radeon 7000 IGP]",
+"	cbb2  RS200/RS200M AGP Bridge [IGP 340M]",
+"1003  ULSI Systems",
+"	0201  US201",
+"1004  VLSI Technology Inc",
+"	0005  82C592-FC1",
+"	0006  82C593-FC1",
+"	0007  82C594-AFC2",
+"	0008  82C596/7 [Wildcat]",
+"	0009  82C597-AFC2",
+"	000c  82C541 [Lynx]",
+"	000d  82C543 [Lynx]",
+"	0101  82C532",
+"	0102  82C534 [Eagle]",
+"	0103  82C538",
+"	0104  82C535",
+"	0105  82C147",
+"	0200  82C975",
+"	0280  82C925",
+"	0304  QSound ThunderBird PCI Audio",
+"		1004 0304  QSound ThunderBird PCI Audio",
+"		122d 1206  DSP368 Audio",
+"		1483 5020  XWave Thunder 3D Audio",
+"	0305  QSound ThunderBird PCI Audio Gameport",
+"		1004 0305  QSound ThunderBird PCI Audio Gameport",
+"		122d 1207  DSP368 Audio Gameport",
+"		1483 5021  XWave Thunder 3D Audio Gameport",
+"	0306  QSound ThunderBird PCI Audio Support Registers",
+"		1004 0306  QSound ThunderBird PCI Audio Support Registers",
+"		122d 1208  DSP368 Audio Support Registers",
+"		1483 5022  XWave Thunder 3D Audio Support Registers",
+"	0307  Thunderbird",
+"	0308  Thunderbird",
+"	0702  VAS96011 [Golden Gate II]",
+"	0703  Tollgate",
+"1005  Avance Logic Inc. [ALI]",
+"	2064  ALG2032/2064",
+"	2128  ALG2364A",
+"	2301  ALG2301",
+"	2302  ALG2302",
+"	2364  ALG2364",
+"	2464  ALG2364A",
+"	2501  ALG2564A/25128A",
+"1006  Reply Group",
+"1007  NetFrame Systems Inc",
+"1008  Epson",
+"100a  Phoenix Technologies",
+"100b  National Semiconductor Corporation",
+"	0001  DP83810",
+"	0002  87415/87560 IDE",
+"	000e  87560 Legacy I/O",
+"	000f  FireWire Controller",
+"	0011  NS87560 National PCI System I/O",
+"	0012  USB Controller",
+"	0020  DP83815 (MacPhyter) Ethernet Controller",
+"		103c 0024  Pavilion ze4400 builtin Network",
+"		12d9 000c  Aculab E1/T1 PMXc cPCI carrier card",
+"		1385 f311  FA311 / FA312 (FA311 with WoL HW)",
+"	0021  PC87200 PCI to ISA Bridge",
+"	0022  DP83820 10/100/1000 Ethernet Controller",
+"	0028  Geode GX2 Host Bridge",
+"	002a  CS5535 South Bridge",
+"	002b  CS5535 ISA bridge",
+"	002d  CS5535 IDE",
+"	002e  CS5535 Audio",
+"	002f  CS5535 USB",
+"	0030  Geode GX2 Graphics Processor",
+"	0035  DP83065 [Saturn] 10/100/1000 Ethernet Controller",
+"	0500  SCx200 Bridge",
+"	0501  SCx200 SMI",
+"	0502  SCx200 IDE",
+"	0503  SCx200 Audio",
+"	0504  SCx200 Video",
+"	0505  SCx200 XBus",
+"	0510  SC1100 Bridge",
+"	0511  SC1100 SMI",
+"	0515  SC1100 XBus",
+"	d001  87410 IDE",
+"100c  Tseng Labs Inc",
+"	3202  ET4000/W32p rev A",
+"	3205  ET4000/W32p rev B",
+"	3206  ET4000/W32p rev C",
+"	3207  ET4000/W32p rev D",
+"	3208  ET6000",
+"	4702  ET6300",
+"100d  AST Research Inc",
+"100e  Weitek",
+"	9000  P9000 Viper",
+"	9001  P9000 Viper",
+"	9002  P9000 Viper",
+"	9100  P9100 Viper Pro/SE",
+"1010  Video Logic, Ltd.",
+"1011  Digital Equipment Corporation",
+"	0001  DECchip 21050",
+"	0002  DECchip 21040 [Tulip]",
+"	0004  DECchip 21030 [TGA]",
+"	0007  NVRAM [Zephyr NVRAM]",
+"	0008  KZPSA [KZPSA]",
+"	0009  DECchip 21140 [FasterNet]",
+"		1025 0310  21140 Fast Ethernet",
+"		10b8 2001  SMC9332BDT EtherPower 10/100",
+"		10b8 2002  SMC9332BVT EtherPower T4 10/100",
+"		10b8 2003  SMC9334BDT EtherPower 10/100 (1-port)",
+"		1109 2400  ANA-6944A/TX Fast Ethernet",
+"		1112 2300  RNS2300 Fast Ethernet",
+"		1112 2320  RNS2320 Fast Ethernet",
+"		1112 2340  RNS2340 Fast Ethernet",
+"		1113 1207  EN-1207-TX Fast Ethernet",
+"		1186 1100  DFE-500TX Fast Ethernet",
+"		1186 1112  DFE-570TX Fast Ethernet",
+"		1186 1140  DFE-660 Cardbus Ethernet 10/100",
+"		1186 1142  DFE-660 Cardbus Ethernet 10/100",
+"		11f6 0503  Freedomline Fast Ethernet",
+"		1282 9100  AEF-380TXD Fast Ethernet",
+"		1385 1100  FA310TX Fast Ethernet",
+"		2646 0001  KNE100TX Fast Ethernet",
+"	000a  21230 Video Codec",
+"	000d  PBXGB [TGA2]",
+"	000f  PCI-to-PDQ Interface Chip [PFI]",
+"		1011 def1  FDDI controller (DEFPA)",
+"		103c def1  FDDI controller (3X-DEFPA)",
+"	0014  DECchip 21041 [Tulip Pass 3]",
+"		1186 0100  DE-530+",
+"	0016  DGLPB [OPPO]",
+"	0017  PV-PCI Graphics Controller (ZLXp-L)",
+"	0019  DECchip 21142/43",
+"		1011 500a  DE500A Fast Ethernet",
+"		1011 500b  DE500B Fast Ethernet",
+"		1014 0001  10/100 EtherJet Cardbus",
+"		1025 0315  ALN315 Fast Ethernet",
+"		1033 800c  PC-9821-CS01 100BASE-TX Interface Card",
+"		1033 800d  PC-9821NR-B06 100BASE-TX Interface Card",
+"		108d 0016  Rapidfire 2327 10/100 Ethernet",
+"		108d 0017  GoCard 2250 Ethernet 10/100 Cardbus",
+"		10b8 2005  SMC8032DT Extreme Ethernet 10/100",
+"		10b8 8034  SMC8034 Extreme Ethernet 10/100",
+"		10ef 8169  Cardbus Fast Ethernet",
+"		1109 2a00  ANA-6911A/TX Fast Ethernet",
+"		1109 2b00  ANA-6911A/TXC Fast Ethernet",
+"		1109 3000  ANA-6922/TX Fast Ethernet",
+"		1113 1207  Cheetah Fast Ethernet",
+"		1113 2220  Cardbus Fast Ethernet",
+"		115d 0002  Cardbus Ethernet 10/100",
+"		1179 0203  Fast Ethernet",
+"		1179 0204  Cardbus Fast Ethernet",
+"		1186 1100  DFE-500TX Fast Ethernet",
+"		1186 1101  DFE-500TX Fast Ethernet",
+"		1186 1102  DFE-500TX Fast Ethernet",
+"		1186 1112  DFE-570TX Quad Fast Ethernet",
+"		1259 2800  AT-2800Tx Fast Ethernet",
+"		1266 0004  Eagle Fast EtherMAX",
+"		12af 0019  NetFlyer Cardbus Fast Ethernet",
+"		1374 0001  Cardbus Ethernet Card 10/100",
+"		1374 0002  Cardbus Ethernet Card 10/100",
+"		1374 0007  Cardbus Ethernet Card 10/100",
+"		1374 0008  Cardbus Ethernet Card 10/100",
+"		1385 2100  FA510",
+"		1395 0001  10/100 Ethernet CardBus PC Card",
+"		13d1 ab01  EtherFast 10/100 Cardbus (PCMPC200)",
+"		14cb 0100  LNDL-100N 100Base-TX Ethernet PC Card",
+"		8086 0001  EtherExpress PRO/100 Mobile CardBus 32",
+"	001a  Farallon PN9000SX Gigabit Ethernet",
+"	0021  DECchip 21052",
+"	0022  DECchip 21150",
+"	0023  DECchip 21150",
+"	0024  DECchip 21152",
+"	0025  DECchip 21153",
+"	0026  DECchip 21154",
+"	0034  56k Modem Cardbus",
+"		1374 0003  56k Modem Cardbus",
+"	0045  DECchip 21553",
+"	0046  DECchip 21554",
+"		0e11 4050  Integrated Smart Array",
+"		0e11 4051  Integrated Smart Array",
+"		0e11 4058  Integrated Smart Array",
+"		103c 10c2  Hewlett-Packard NetRAID-4M",
+"		12d9 000a  IP Telephony card",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1051  CE7 mainboard",
+"		9005 0364  5400S (Mustang)",
+"		9005 0365  5400S (Mustang)",
+"		9005 1364  Dell PowerEdge RAID Controller 2",
+"		9005 1365  Dell PowerEdge RAID Controller 2",
+"		e4bf 1000  CC8-1-BLUES",
+"	1065  StrongARM DC21285",
+"		1069 0020  DAC960P / DAC1164P",
+"1012  Micronics Computers Inc",
+"1013  Cirrus Logic",
+"	0038  GD 7548",
+"	0040  GD 7555 Flat Panel GUI Accelerator",
+"	004c  GD 7556 Video/Graphics LCD/CRT Ctrlr",
+"	00a0  GD 5430/40 [Alpine]",
+"	00a2  GD 5432 [Alpine]",
+"	00a4  GD 5434-4 [Alpine]",
+"	00a8  GD 5434-8 [Alpine]",
+"	00ac  GD 5436 [Alpine]",
+"	00b0  GD 5440",
+"	00b8  GD 5446",
+"	00bc  GD 5480",
+"		1013 00bc  CL-GD5480",
+"	00d0  GD 5462",
+"	00d2  GD 5462 [Laguna I]",
+"	00d4  GD 5464 [Laguna]",
+"	00d5  GD 5464 BD [Laguna]",
+"	00d6  GD 5465 [Laguna]",
+"		13ce 8031  Barco Metheus 2 Megapixel, Dual Head",
+"		13cf 8031  Barco Metheus 2 Megapixel, Dual Head",
+"	00e8  GD 5436U",
+"	1100  CL 6729",
+"	1110  PD 6832 PCMCIA/CardBus Ctrlr",
+"	1112  PD 6834 PCMCIA/CardBus Ctrlr",
+"	1113  PD 6833 PCMCIA/CardBus Ctrlr",
+"	1200  GD 7542 [Nordic]",
+"	1202  GD 7543 [Viking]",
+"	1204  GD 7541 [Nordic Light]",
+"	4000  MD 5620 [CLM Data Fax Voice]",
+"	4400  CD 4400",
+"	6001  CS 4610/11 [CrystalClear SoundFusion Audio Accelerator]",
+"		1014 1010  CS4610 SoundFusion Audio Accelerator",
+"	6003  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]",
+"		1013 4280  Crystal SoundFusion PCI Audio Accelerator",
+"		1014 0153  ThinkPad A20m",
+"		153b 1136  SiXPack 5.1+",
+"		1681 0050  Game Theater XP",
+"		1681 a011  Fortissimo III 7.1",
+"	6004  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]",
+"	6005  Crystal CS4281 PCI Audio",
+"		1013 4281  Crystal CS4281 PCI Audio",
+"		10cf 10a8  Crystal CS4281 PCI Audio",
+"		10cf 10a9  Crystal CS4281 PCI Audio",
+"		10cf 10aa  Crystal CS4281 PCI Audio",
+"		10cf 10ab  Crystal CS4281 PCI Audio",
+"		10cf 10ac  Crystal CS4281 PCI Audio",
+"		10cf 10ad  Crystal CS4281 PCI Audio",
+"		10cf 10b4  Crystal CS4281 PCI Audio",
+"		1179 0001  Crystal CS4281 PCI Audio",
+"		14c0 000c  Crystal CS4281 PCI Audio",
+"1014  IBM",
+"	0002  PCI to MCA Bridge",
+"	0005  Alta Lite",
+"	0007  Alta MP",
+"	000a  Fire Coral",
+"	0017  CPU to PCI Bridge",
+"	0018  TR Auto LANstreamer",
+"	001b  GXT-150P",
+"	001c  Carrera",
+"	001d  82G2675",
+"	0020  GXT1000 Graphics Adapter",
+"	0022  IBM27-82351",
+"	002d  Python",
+"	002e  SCSI RAID Adapter [ServeRAID]",
+"		1014 002e  ServeRAID-3x",
+"		1014 022e  ServeRAID-4H",
+"	0031  2 Port Serial Adapter",
+"		1014 0031  2721 WAN IOA - 2 Port Sync Serial Adapter",
+"	0036  Miami",
+"	0037  82660 CPU to PCI Bridge",
+"	003a  CPU to PCI Bridge",
+"	003c  GXT250P/GXT255P Graphics Adapter",
+"	003e  16/4 Token ring UTP/STP controller",
+"		1014 003e  Token-Ring Adapter",
+"		1014 00cd  Token-Ring Adapter + Wake-On-LAN",
+"		1014 00ce  16/4 Token-Ring Adapter 2",
+"		1014 00cf  16/4 Token-Ring Adapter Special",
+"		1014 00e4  High-Speed 100/16/4 Token-Ring Adapter",
+"		1014 00e5  16/4 Token-Ring Adapter 2 + Wake-On-LAN",
+"		1014 016d  iSeries 2744 Card",
+"	0045  SSA Adapter",
+"	0046  MPIC interrupt controller",
+"	0047  PCI to PCI Bridge",
+"	0048  PCI to PCI Bridge",
+"	0049  Warhead SCSI Controller",
+"	004e  ATM Controller (14104e00)",
+"	004f  ATM Controller (14104f00)",
+"	0050  ATM Controller (14105000)",
+"	0053  25 MBit ATM Controller",
+"	0054  GXT500P/GXT550P Graphics Adapter",
+"	0057  MPEG PCI Bridge",
+"	005c  i82557B 10/100",
+"	005e  GXT800P Graphics Adapter",
+"	007c  ATM Controller (14107c00)",
+"	007d  3780IDSP [MWave]",
+"	008b  EADS PCI to PCI Bridge",
+"	008e  GXT3000P Graphics Adapter",
+"	0090  GXT 3000P",
+"		1014 008e  GXT-3000P",
+"	0091  SSA Adapter",
+"	0095  20H2999 PCI Docking Bridge",
+"	0096  Chukar chipset SCSI controller",
+"		1014 0097  iSeries 2778 DASD IOA",
+"		1014 0098  iSeries 2763 DASD IOA",
+"		1014 0099  iSeries 2748 DASD IOA",
+"	009f  PCI 4758 Cryptographic Accelerator",
+"	00a5  ATM Controller (1410a500)",
+"	00a6  ATM 155MBPS MM Controller (1410a600)",
+"	00b7  256-bit Graphics Rasterizer [Fire GL1]",
+"		1092 00b8  FireGL1 AGP 32Mb",
+"	00b8  GXT2000P Graphics Adapter",
+"	00be  ATM 622MBPS Controller (1410be00)",
+"	00dc  Advanced Systems Management Adapter (ASMA)",
+"	00fc  CPC710 Dual Bridge and Memory Controller (PCI-64)",
+"	0104  Gigabit Ethernet-SX Adapter",
+"	0105  CPC710 Dual Bridge and Memory Controller (PCI-32)",
+"	010f  Remote Supervisor Adapter (RSA)",
+"	0142  Yotta Video Compositor Input",
+"		1014 0143  Yotta Input Controller (ytin)",
+"	0144  Yotta Video Compositor Output",
+"		1014 0145  Yotta Output Controller (ytout)",
+"	0156  405GP PLB to PCI Bridge",
+"	015e  622Mbps ATM PCI Adapter",
+"	0160  64bit/66MHz PCI ATM 155 MMF",
+"	016e  GXT4000P Graphics Adapter",
+"	0170  GXT6000P Graphics Adapter",
+"	017d  GXT300P Graphics Adapter",
+"	0180  Snipe chipset SCSI controller",
+"		1014 0241  iSeries 2757 DASD IOA",
+"		1014 0264  Quad Channel PCI-X U320 SCSI RAID Adapter (2780)",
+"	0188  EADS-X PCI-X to PCI-X Bridge",
+"	01a7  PCI-X to PCI-X Bridge",
+"	01bd  ServeRAID Controller",
+"		1014 01be  ServeRAID-4M",
+"		1014 01bf  ServeRAID-4L",
+"		1014 0208  ServeRAID-4Mx",
+"		1014 020e  ServeRAID-4Lx",
+"		1014 022e  ServeRAID-4H",
+"		1014 0258  ServeRAID-5i",
+"		1014 0259  ServeRAID-5i",
+"	01c1  64bit/66MHz PCI ATM 155 UTP",
+"	01e6  Cryptographic Accelerator",
+"	01ff  10/100 Mbps Ethernet",
+"	0219  Multiport Serial Adapter",
+"		1014 021a  Dual RVX",
+"		1014 0251  Internal Modem/RVX",
+"		1014 0252  Quad Internal Modem",
+"	021b  GXT6500P Graphics Adapter",
+"	021c  GXT4500P Graphics Adapter",
+"	0233  GXT135P Graphics Adapter",
+"	0266  PCI-X Dual Channel SCSI",
+"	0268  Gigabit Ethernet-SX Adapter (PCI-X)",
+"	0269  10/100/1000 Base-TX Ethernet Adapter (PCI-X)",
+"	028c  Citrine chipset SCSI controller",
+"		1014 028d  Dual Channel PCI-X DDR SAS RAID Adapter (572E)",
+"		1014 02be  Dual Channel PCI-X DDR U320 SCSI RAID Adapter (571B)",
+"		1014 02c0  Dual Channel PCI-X DDR U320 SCSI Adapter (571A)",
+"		1014 030d  PCI-X DDR Auxiliary Cache Adapter (575B)",
+"	02a1  Calgary PCI-X Host Bridge",
+"	02bd  Obsidian chipset SCSI controller",
+"		1014 02c1  PCI-X DDR 3Gb SAS Adapter (572A/572C)",
+"		1014 02c2  PCI-X DDR 3Gb SAS RAID Adapter (572B/571D)",
+"	0302  Winnipeg PCI-X Host Bridge",
+"	0314  ZISC 036 Neural accelerator card",
+"	3022  QLA3022 Network Adapter",
+"	4022  QLA3022 Network Adapter",
+"	ffff  MPIC-2 interrupt controller",
+"1015  LSI Logic Corp of Canada",
+"1016  ICL Personal Systems",
+"1017  SPEA Software AG",
+"	5343  SPEA 3D Accelerator",
+"1018  Unisys Systems",
+"1019  Elitegroup Computer Systems",
+"101a  AT&T GIS (NCR)",
+"	0005  100VG ethernet",
+"101b  Vitesse Semiconductor",
+"101c  Western Digital",
+"	0193  33C193A",
+"	0196  33C196A",
+"	0197  33C197A",
+"	0296  33C296A",
+"	3193  7193",
+"	3197  7197",
+"	3296  33C296A",
+"	4296  34C296",
+"	9710  Pipeline 9710",
+"	9712  Pipeline 9712",
+"	c24a  90C",
+"101e  American Megatrends Inc.",
+"	0009  MegaRAID 428 Ultra RAID Controller (rev 03)",
+"	1960  MegaRAID",
+"		101e 0471  MegaRAID 471 Enterprise 1600 RAID Controller",
+"		101e 0475  MegaRAID 475 Express 500/500LC RAID Controller",
+"		101e 0477  MegaRAID 477 Elite 3100 RAID Controller",
+"		101e 0493  MegaRAID 493 Elite 1600 RAID Controller",
+"		101e 0494  MegaRAID 494 Elite 1650 RAID Controller",
+"		101e 0503  MegaRAID 503 Enterprise 1650 RAID Controller",
+"		101e 0511  MegaRAID 511 i4 IDE RAID Controller",
+"		101e 0522  MegaRAID 522 i4133 RAID Controller",
+"		1028 0471  PowerEdge RAID Controller 3/QC",
+"		1028 0475  PowerEdge RAID Controller 3/SC",
+"		1028 0493  PowerEdge RAID Controller 3/DC",
+"		1028 0511  PowerEdge Cost Effective RAID Controller ATA100/4Ch",
+"		103c 60e7  NetRAID-1M",
+"	9010  MegaRAID 428 Ultra RAID Controller",
+"	9030  EIDE Controller",
+"	9031  EIDE Controller",
+"	9032  EIDE & SCSI Controller",
+"	9033  SCSI Controller",
+"	9040  Multimedia card",
+"	9060  MegaRAID 434 Ultra GT RAID Controller",
+"	9063  MegaRAC",
+"		101e 0767  Dell Remote Assistant Card 2",
+"101f  PictureTel",
+"1020  Hitachi Computer Products",
+"1021  OKI Electric Industry Co. Ltd.",
+"1022  Advanced Micro Devices [AMD]",
+"	1100  K8 [Athlon64/Opteron] HyperTransport Technology Configuration",
+"	1101  K8 [Athlon64/Opteron] Address Map",
+"	1102  K8 [Athlon64/Opteron] DRAM Controller",
+"	1103  K8 [Athlon64/Opteron] Miscellaneous Control",
+"	2000  79c970 [PCnet32 LANCE]",
+"		1014 2000  NetFinity 10/100 Fast Ethernet",
+"		1022 2000  PCnet - Fast 79C971",
+"		103c 104c  Ethernet with LAN remote power Adapter",
+"		103c 1064  Ethernet with LAN remote power Adapter",
+"		103c 1065  Ethernet with LAN remote power Adapter",
+"		103c 106c  Ethernet with LAN remote power Adapter",
+"		103c 106e  Ethernet with LAN remote power Adapter",
+"		103c 10ea  Ethernet with LAN remote power Adapter",
+"		1113 1220  EN1220 10/100 Fast Ethernet",
+"		1259 2450  AT-2450 10/100 Fast Ethernet",
+"		1259 2454  AT-2450v4 10Mb Ethernet Adapter",
+"		1259 2700  AT-2700TX 10/100 Fast Ethernet",
+"		1259 2701  AT-2700FX 100Mb Ethernet",
+"		1259 2702  AT-2700FTX 10/100 Mb Fiber/Copper Fast Ethernet",
+"		1259 2703  AT-2701FX",
+"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
+"		4c53 1010  CP5/CR6 mainboard",
+"		4c53 1020  VR6 mainboard",
+"		4c53 1030  PC5 mainboard",
+"		4c53 1040  CL7 mainboard",
+"		4c53 1060  PC7 mainboard",
+"	2001  79c978 [HomePNA]",
+"		1092 0a78  Multimedia Home Network Adapter",
+"		1668 0299  ActionLink Home Network Adapter",
+"	2003  Am 1771 MBW [Alchemy]",
+"	2020  53c974 [PCscsi]",
+"	2040  79c974",
+"	2081  Geode LX Video",
+"	2082  Geode LX AES Security Block",
+"	208f  CS5536 GeodeLink PCI South Bridge",
+"	2090  CS5536 [Geode companion] ISA",
+"	2091  CS5536 [Geode companion] FLASH",
+"	2093  CS5536 [Geode companion] Audio",
+"	2094  CS5536 [Geode companion] OHC",
+"	2095  CS5536 [Geode companion] EHC",
+"	2096  CS5536 [Geode companion] UDC",
+"	2097  CS5536 [Geode companion] UOC",
+"	209a  CS5536 [Geode companion] IDE",
+"	3000  ELanSC520 Microcontroller",
+"	7006  AMD-751 [Irongate] System Controller",
+"	7007  AMD-751 [Irongate] AGP Bridge",
+"	700a  AMD-IGR4 AGP Host to PCI Bridge",
+"	700b  AMD-IGR4 PCI to PCI Bridge",
+"	700c  AMD-760 MP [IGD4-2P] System Controller",
+"	700d  AMD-760 MP [IGD4-2P] AGP Bridge",
+"	700e  AMD-760 [IGD4-1P] System Controller",
+"	700f  AMD-760 [IGD4-1P] AGP Bridge",
+"	7400  AMD-755 [Cobra] ISA",
+"	7401  AMD-755 [Cobra] IDE",
+"	7403  AMD-755 [Cobra] ACPI",
+"	7404  AMD-755 [Cobra] USB",
+"	7408  AMD-756 [Viper] ISA",
+"	7409  AMD-756 [Viper] IDE",
+"	740b  AMD-756 [Viper] ACPI",
+"	740c  AMD-756 [Viper] USB",
+"	7410  AMD-766 [ViperPlus] ISA",
+"	7411  AMD-766 [ViperPlus] IDE",
+"	7413  AMD-766 [ViperPlus] ACPI",
+"	7414  AMD-766 [ViperPlus] USB",
+"	7440  AMD-768 [Opus] ISA",
+"		1043 8044  A7M-D Mainboard",
+"	7441  AMD-768 [Opus] IDE",
+"	7443  AMD-768 [Opus] ACPI",
+"		1043 8044  A7M-D Mainboard",
+"	7445  AMD-768 [Opus] Audio",
+"	7446  AMD-768 [Opus] MC97 Modem (Smart Link HAMR5600 compatible)",
+"	7448  AMD-768 [Opus] PCI",
+"	7449  AMD-768 [Opus] USB",
+"	7450  AMD-8131 PCI-X Bridge",
+"	7451  AMD-8131 PCI-X IOAPIC",
+"	7454  AMD-8151 System Controller",
+"	7455  AMD-8151 AGP Bridge",
+"	7458  AMD-8132 PCI-X Bridge",
+"	7459  AMD-8132 PCI-X IOAPIC",
+"	7460  AMD-8111 PCI",
+"		161f 3017  HDAMB",
+"	7461  AMD-8111 USB",
+"	7462  AMD-8111 Ethernet",
+"	7464  AMD-8111 USB",
+"		161f 3017  HDAMB",
+"	7468  AMD-8111 LPC",
+"		161f 3017  HDAMB",
+"	7469  AMD-8111 IDE",
+"		1022 2b80  AMD-8111 IDE [Quartet]",
+"		161f 3017  HDAMB",
+"	746a  AMD-8111 SMBus 2.0",
+"	746b  AMD-8111 ACPI",
+"		161f 3017  HDAMB",
+"	746d  AMD-8111 AC97 Audio",
+"		161f 3017  HDAMB",
+"	746e  AMD-8111 MC97 Modem",
+"	756b  AMD-8111 ACPI",
+"1023  Trident Microsystems",
+"	0194  82C194",
+"	2000  4DWave DX",
+"	2001  4DWave NX",
+"		122d 1400  Trident PCI288-Q3DII (NX)",
+"	2100  CyberBlade XP4m32",
+"	2200  XGI Volari XP5",
+"	8400  CyberBlade/i7",
+"		1023 8400  CyberBlade i7 AGP",
+"	8420  CyberBlade/i7d",
+"		0e11 b15a  CyberBlade i7 AGP",
+"	8500  CyberBlade/i1",
+"	8520  CyberBlade i1",
+"		0e11 b16e  CyberBlade i1 AGP",
+"		1023 8520  CyberBlade i1 AGP",
+"	8620  CyberBlade/i1",
+"		1014 0502  ThinkPad R30/T30",
+"		1014 1025  Travelmate 352TE",
+"	8820  CyberBlade XPAi1",
+"	9320  TGUI 9320",
+"	9350  GUI Accelerator",
+"	9360  Flat panel GUI Accelerator",
+"	9382  Cyber 9382 [Reference design]",
+"	9383  Cyber 9383 [Reference design]",
+"	9385  Cyber 9385 [Reference design]",
+"	9386  Cyber 9386",
+"	9388  Cyber 9388",
+"	9397  Cyber 9397",
+"	939a  Cyber 9397DVD",
+"	9420  TGUI 9420",
+"	9430  TGUI 9430",
+"	9440  TGUI 9440",
+"	9460  TGUI 9460",
+"	9470  TGUI 9470",
+"	9520  Cyber 9520",
+"	9525  Cyber 9525",
+"		10cf 1094  Lifebook C6155",
+"	9540  Cyber 9540",
+"	9660  TGUI 9660/938x/968x",
+"	9680  TGUI 9680",
+"	9682  TGUI 9682",
+"	9683  TGUI 9683",
+"	9685  ProVIDIA 9685",
+"	9750  3DImage 9750",
+"		1014 9750  3DImage 9750",
+"		1023 9750  3DImage 9750",
+"	9753  TGUI 9753",
+"	9754  TGUI 9754",
+"	9759  TGUI 975",
+"	9783  TGUI 9783",
+"	9785  TGUI 9785",
+"	9850  3DImage 9850",
+"	9880  Blade 3D PCI/AGP",
+"		1023 9880  Blade 3D",
+"	9910  CyberBlade/XP",
+"	9930  CyberBlade/XPm",
+"1024  Zenith Data Systems",
+"1025  Acer Incorporated [ALI]",
+"	1435  M1435",
+"	1445  M1445",
+"	1449  M1449",
+"	1451  M1451",
+"	1461  M1461",
+"	1489  M1489",
+"	1511  M1511",
+"	1512  ALI M1512 Aladdin",
+"	1513  M1513",
+"	1521  ALI M1521 Aladdin III CPU Bridge",
+"		10b9 1521  ALI M1521 Aladdin III CPU Bridge",
+"	1523  ALI M1523 ISA Bridge",
+"		10b9 1523  ALI M1523 ISA Bridge",
+"	1531  M1531 Northbridge [Aladdin IV/IV+]",
+"	1533  M1533 PCI-to-ISA Bridge",
+"		10b9 1533  ALI M1533 Aladdin IV/V ISA South Bridge",
+"	1535  M1535 PCI Bridge + Super I/O + FIR",
+"	1541  M1541 Northbridge [Aladdin V]",
+"		10b9 1541  ALI M1541 Aladdin V/V+ AGP+PCI North Bridge",
+"	1542  M1542 Northbridge [Aladdin V]",
+"	1543  M1543 PCI-to-ISA Bridge + Super I/O + FIR",
+"	1561  M1561 Northbridge [Aladdin 7]",
+"	1621  M1621 Northbridge [Aladdin-Pro II]",
+"	1631  M1631 Northbridge+3D Graphics [Aladdin TNT2]",
+"	1641  M1641 Northbridge [Aladdin-Pro IV]",
+"	1647  M1647 [MaGiK1] PCI North Bridge",
+"	1671  M1671 Northbridge [ALADDiN-P4]",
+"	1672  Northbridge [CyberALADDiN-P4]",
+"	3141  M3141",
+"	3143  M3143",
+"	3145  M3145",
+"	3147  M3147",
+"	3149  M3149",
+"	3151  M3151",
+"	3307  M3307 MPEG-I Video Controller",
+"	3309  M3309 MPEG-II Video w/ Software Audio Decoder",
+"	3321  M3321 MPEG-II Audio/Video Decoder",
+"	5212  M4803",
+"	5215  ALI PCI EIDE Controller",
+"	5217  M5217H",
+"	5219  M5219",
+"	5225  M5225",
+"	5229  M5229",
+"	5235  M5235",
+"	5237  M5237 PCI USB Host Controller",
+"	5240  EIDE Controller",
+"	5241  PCMCIA Bridge",
+"	5242  General Purpose Controller",
+"	5243  PCI to PCI Bridge Controller",
+"	5244  Floppy Disk Controller",
+"	5247  M1541 PCI to PCI Bridge",
+"	5251  M5251 P1394 Controller",
+"	5427  PCI to AGP Bridge",
+"	5451  M5451 PCI AC-Link Controller Audio Device",
+"	5453  M5453 PCI AC-Link Controller Modem Device",
+"	7101  M7101 PCI PMU Power Management Controller",
+"		10b9 7101  M7101 PCI PMU Power Management Controller",
+"1028  Dell",
+"	0001  PowerEdge Expandable RAID Controller 2/Si",
+"		1028 0001  PowerEdge 2400",
+"	0002  PowerEdge Expandable RAID Controller 3/Di",
+"		1028 0002  PowerEdge 4400",
+"	0003  PowerEdge Expandable RAID Controller 3/Si",
+"		1028 0003  PowerEdge 2450",
+"	0006  PowerEdge Expandable RAID Controller 3/Di",
+"	0007  Remote Access Card III",
+"	0008  Remote Access Card III",
+"	0009  Remote Access Card III: BMC/SMIC device not present",
+"	000a  PowerEdge Expandable RAID Controller 3/Di",
+"	000c  Embedded Remote Access or ERA/O",
+"	000d  Embedded Remote Access: BMC/SMIC device",
+"	000e  PowerEdge Expandable RAID controller 4/Di",
+"	000f  PowerEdge Expandable RAID controller 4/Di",
+"	0010  Remote Access Card 4",
+"	0011  Remote Access Card 4 Daughter Card",
+"	0012  Remote Access Card 4 Daughter Card Virtual UART",
+"	0013  PowerEdge Expandable RAID controller 4",
+"		1028 016c  PowerEdge Expandable RAID Controller 4e/Si",
+"		1028 016d  PowerEdge Expandable RAID Controller 4e/Di",
+"		1028 016e  PowerEdge Expandable RAID Controller 4e/Di",
+"		1028 016f  PowerEdge Expandable RAID Controller 4e/Di",
+"		1028 0170  PowerEdge Expandable RAID Controller 4e/Di",
+"	0014  Remote Access Card 4 Daughter Card SMIC interface",
+"	0015  PowerEdge Expandable RAID controller 5",
+"1029  Siemens Nixdorf IS",
+"102a  LSI Logic",
+"	0000  HYDRA",
+"	0010  ASPEN",
+"	001f  AHA-2940U2/U2W /7890/7891 SCSI Controllers",
+"		9005 000f  2940U2W SCSI Controller",
+"		9005 0106  2940U2W SCSI Controller",
+"		9005 a180  2940U2W SCSI Controller",
+"	00c5  AIC-7899 U160/m SCSI Controller",
+"		1028 00c5  PowerEdge 2550/2650/4600",
+"	00cf  AIC-7899P U160/m",
+"		1028 0106  PowerEdge 4600",
+"		1028 0121  PowerEdge 2650",
+"102b  Matrox Graphics, Inc.",
+"	0010  MGA-I [Impression?]",
+"	0100  MGA 1064SG [Mystique]",
+"	0518  MGA-II [Athena]",
+"	0519  MGA 2064W [Millennium]",
+"	051a  MGA 1064SG [Mystique]",
+"		102b 0100  MGA-1064SG Mystique",
+"		102b 1100  MGA-1084SG Mystique",
+"		102b 1200  MGA-1084SG Mystique",
+"		1100 102b  MGA-1084SG Mystique",
+"		110a 0018  Scenic Pro C5 (D1025)",
+"	051b  MGA 2164W [Millennium II]",
+"		102b 051b  MGA-2164W Millennium II",
+"		102b 1100  MGA-2164W Millennium II",
+"		102b 1200  MGA-2164W Millennium II",
+"	051e  MGA 1064SG [Mystique] AGP",
+"	051f  MGA 2164W [Millennium II] AGP",
+"	0520  MGA G200",
+"		102b dbc2  G200 Multi-Monitor",
+"		102b dbc8  G200 Multi-Monitor",
+"		102b dbe2  G200 Multi-Monitor",
+"		102b dbe8  G200 Multi-Monitor",
+"		102b ff03  Millennium G200 SD",
+"		102b ff04  Marvel G200",
+"	0521  MGA G200 AGP",
+"		1014 ff03  Millennium G200 AGP",
+"		102b 48e9  Mystique G200 AGP",
+"		102b 48f8  Millennium G200 SD AGP",
+"		102b 4a60  Millennium G200 LE AGP",
+"		102b 4a64  Millennium G200 AGP",
+"		102b c93c  Millennium G200 AGP",
+"		102b c9b0  Millennium G200 AGP",
+"		102b c9bc  Millennium G200 AGP",
+"		102b ca60  Millennium G250 LE AGP",
+"		102b ca6c  Millennium G250 AGP",
+"		102b dbbc  Millennium G200 AGP",
+"		102b dbc2  Millennium G200 MMS (Dual G200)",
+"		102b dbc3  G200 Multi-Monitor",
+"		102b dbc8  Millennium G200 MMS (Dual G200)",
+"		102b dbd2  G200 Multi-Monitor",
+"		102b dbd3  G200 Multi-Monitor",
+"		102b dbd4  G200 Multi-Monitor",
+"		102b dbd5  G200 Multi-Monitor",
+"		102b dbd8  G200 Multi-Monitor",
+"		102b dbd9  G200 Multi-Monitor",
+"		102b dbe2  Millennium G200 MMS (Quad G200)",
+"		102b dbe3  G200 Multi-Monitor",
+"		102b dbe8  Millennium G200 MMS (Quad G200)",
+"		102b dbf2  G200 Multi-Monitor",
+"		102b dbf3  G200 Multi-Monitor",
+"		102b dbf4  G200 Multi-Monitor",
+"		102b dbf5  G200 Multi-Monitor",
+"		102b dbf8  G200 Multi-Monitor",
+"		102b dbf9  G200 Multi-Monitor",
+"		102b f806  Mystique G200 Video AGP",
+"		102b ff00  MGA-G200 AGP",
+"		102b ff02  Mystique G200 AGP",
+"		102b ff03  Millennium G200 AGP",
+"		102b ff04  Marvel G200 AGP",
+"		110a 0032  MGA-G200 AGP",
+"	0522  MGA G200e [Pilot] ServerEngines (SEP1)",
+"	0525  MGA G400/G450",
+"		0e11 b16f  MGA-G400 AGP",
+"		102b 0328  Millennium G400 16Mb SDRAM",
+"		102b 0338  Millennium G400 16Mb SDRAM",
+"		102b 0378  Millennium G400 32Mb SDRAM",
+"		102b 0541  Millennium G450 Dual Head",
+"		102b 0542  Millennium G450 Dual Head LX",
+"		102b 0543  Millennium G450 Single Head LX",
+"		102b 0641  Millennium G450 32Mb SDRAM Dual Head",
+"		102b 0642  Millennium G450 32Mb SDRAM Dual Head LX",
+"		102b 0643  Millennium G450 32Mb SDRAM Single Head LX",
+"		102b 07c0  Millennium G450 Dual Head LE",
+"		102b 07c1  Millennium G450 SDR Dual Head LE",
+"		102b 0d41  Millennium G450 Dual Head PCI",
+"		102b 0d42  Millennium G450 Dual Head LX PCI",
+"		102b 0d43  Millennium G450 32Mb Dual Head PCI",
+"		102b 0e00  Marvel G450 eTV",
+"		102b 0e01  Marvel G450 eTV",
+"		102b 0e02  Marvel G450 eTV",
+"		102b 0e03  Marvel G450 eTV",
+"		102b 0f80  Millennium G450 Low Profile",
+"		102b 0f81  Millennium G450 Low Profile",
+"		102b 0f82  Millennium G450 Low Profile DVI",
+"		102b 0f83  Millennium G450 Low Profile DVI",
+"		102b 19d8  Millennium G400 16Mb SGRAM",
+"		102b 19f8  Millennium G400 32Mb SGRAM",
+"		102b 2159  Millennium G400 Dual Head 16Mb",
+"		102b 2179  Millennium G400 MAX/Dual Head 32Mb",
+"		102b 217d  Millennium G400 Dual Head Max",
+"		102b 23c0  Millennium G450",
+"		102b 23c1  Millennium G450",
+"		102b 23c2  Millennium G450 DVI",
+"		102b 23c3  Millennium G450 DVI",
+"		102b 2f58  Millennium G400",
+"		102b 2f78  Millennium G400",
+"		102b 3693  Marvel G400 AGP",
+"		102b 5dd0  4Sight II",
+"		102b 5f50  4Sight II",
+"		102b 5f51  4Sight II",
+"		102b 5f52  4Sight II",
+"		102b 9010  Millennium G400 Dual Head",
+"		1458 0400  GA-G400",
+"		1705 0001  Millennium G450 32MB SGRAM",
+"		1705 0002  Millennium G450 16MB SGRAM",
+"		1705 0003  Millennium G450 32MB",
+"		1705 0004  Millennium G450 16MB",
+"	0527  MGA Parhelia AGP",
+"		102b 0840  Parhelia 128Mb",
+"		102b 0850  Parhelia 256MB AGP 4X",
+"	0528  Parhelia 8X",
+"		102b 1020  Parhelia 128MB",
+"		102b 1030  Parhelia 256 MB Dual DVI",
+"		102b 14e1  Parhelia PCI 256MB",
+"		102b 2021  QID Pro",
+"	0d10  MGA Ultima/Impression",
+"	1000  MGA G100 [Productiva]",
+"		102b ff01  Productiva G100",
+"		102b ff05  Productiva G100 Multi-Monitor",
+"	1001  MGA G100 [Productiva] AGP",
+"		102b 1001  MGA-G100 AGP",
+"		102b ff00  MGA-G100 AGP",
+"		102b ff01  MGA-G100 Productiva AGP",
+"		102b ff03  Millennium G100 AGP",
+"		102b ff04  MGA-G100 AGP",
+"		102b ff05  MGA-G100 Productiva AGP Multi-Monitor",
+"		110a 001e  MGA-G100 AGP",
+"	2007  MGA Mistral",
+"	2527  MGA G550 AGP",
+"		102b 0f83  Millennium G550",
+"		102b 0f84  Millennium G550 Dual Head DDR 32Mb",
+"		102b 1e41  Millennium G550",
+"	2537  Millenium P650/P750",
+"		102b 1820  Millennium P750 64MB",
+"		102b 1830  Millennium P650 64MB",
+"		102b 1c10  QID 128MB",
+"		102b 2811  Millennium P650 Low-profile PCI 64MB",
+"		102b 2c11  QID Low-profile PCI",
+"	2538  Millenium P650 PCIe",
+"		102b 08c7  Millennium P650 PCIe 128MB",
+"		102b 0907  Millennium P650 PCIe 64MB",
+"		102b 1047  Millennium P650 LP PCIe 128MB",
+"		102b 1087  Millennium P650 LP PCIe 64MB",
+"		102b 2538  Parhelia APVe",
+"		102b 3007  QID Low-profile PCIe",
+"	4536  VIA Framegrabber",
+"	6573  Shark 10/100 Multiport SwitchNIC",
+"102c  Chips and Technologies",
+"	00b8  F64310",
+"	00c0  F69000 HiQVideo",
+"		102c 00c0  F69000 HiQVideo",
+"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
+"		4c53 1010  CP5/CR6 mainboard",
+"		4c53 1020  VR6 mainboard",
+"		4c53 1030  PC5 mainboard",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1051  CE7 mainboard",
+"	00d0  F65545",
+"	00d8  F65545",
+"	00dc  F65548",
+"	00e0  F65550",
+"	00e4  F65554",
+"	00e5  F65555 HiQVPro",
+"		0e11 b049  Armada 1700 Laptop Display Controller",
+"		1179 0001  Satellite Pro",
+"	00f0  F68554",
+"	00f4  F68554 HiQVision",
+"	00f5  F68555",
+"	0c30  F69030",
+"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1051  CE7 mainboard",
+"		4c53 1080  CT8 mainboard",
+"102d  Wyse Technology Inc.",
+"	50dc  3328 Audio",
+"102e  Olivetti Advanced Technology",
+"102f  Toshiba America",
+"	0009  r4x00",
+"	000a  TX3927 MIPS RISC PCI Controller",
+"	0020  ATM Meteor 155",
+"		102f 00f8  ATM Meteor 155",
+"	0030  TC35815CF PCI 10/100 Mbit Ethernet Controller",
+"	0031  TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL",
+"	0105  TC86C001 [goku-s] IDE",
+"	0106  TC86C001 [goku-s] USB 1.1 Host",
+"	0107  TC86C001 [goku-s] USB Device Controller",
+"	0108  TC86C001 [goku-s] I2C/SIO/GPIO Controller",
+"	0180  TX4927/38 MIPS RISC PCI Controller",
+"	0181  TX4925 MIPS RISC PCI Controller",
+"	0182  TX4937 MIPS RISC PCI Controller",
+"1030  TMC Research",
+"1031  Miro Computer Products AG",
+"	5601  DC20 ASIC",
+"	5607  Video I/O & motion JPEG compressor",
+"	5631  Media 3D",
+"	6057  MiroVideo DC10/DC30+",
+"1032  Compaq",
+"1033  NEC Corporation",
+"	0000  Vr4181A USB Host or Function Control Unit",
+"	0001  PCI to 486-like bus Bridge",
+"	0002  PCI to VL98 Bridge",
+"	0003  ATM Controller",
+"	0004  R4000 PCI Bridge",
+"	0005  PCI to 486-like bus Bridge",
+"	0006  PC-9800 Graphic Accelerator",
+"	0007  PCI to UX-Bus Bridge",
+"	0008  PC-9800 Graphic Accelerator",
+"	0009  PCI to PC9800 Core-Graph Bridge",
+"	0016  PCI to VL Bridge",
+"	001a  [Nile II]",
+"	0021  Vrc4373 [Nile I]",
+"	0029  PowerVR PCX1",
+"	002a  PowerVR 3D",
+"	002c  Star Alpha 2",
+"	002d  PCI to C-bus Bridge",
+"	0035  USB",
+"		1033 0035  Hama USB 2.0 CardBus",
+"		1179 0001  USB",
+"		12ee 7000  Root Hub",
+"		14c2 0105  PTI-205N USB 2.0 Host Controller",
+"		1799 0001  Root Hub",
+"		1931 000a  GlobeTrotter Fusion Quad Lite (PPP data)",
+"		1931 000b  GlobeTrotter Fusion Quad Lite (GSM data)",
+"		807d 0035  PCI-USB2 (OHCI subsystem)",
+"	003b  PCI to C-bus Bridge",
+"	003e  NAPCCARD Cardbus Controller",
+"	0046  PowerVR PCX2 [midas]",
+"	005a  Vrc5074 [Nile 4]",
+"	0063  Firewarden",
+"	0067  PowerVR Neon 250 Chipset",
+"		1010 0020  PowerVR Neon 250 AGP 32Mb",
+"		1010 0080  PowerVR Neon 250 AGP 16Mb",
+"		1010 0088  PowerVR Neon 250 16Mb",
+"		1010 0090  PowerVR Neon 250 AGP 16Mb",
+"		1010 0098  PowerVR Neon 250 16Mb",
+"		1010 00a0  PowerVR Neon 250 AGP 32Mb",
+"		1010 00a8  PowerVR Neon 250 32Mb",
+"		1010 0120  PowerVR Neon 250 AGP 32Mb",
+"	0072  uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr",
+"	0074  56k Voice Modem",
+"		1033 8014  RCV56ACF 56k Voice Modem",
+"	009b  Vrc5476",
+"	00a5  VRC4173",
+"	00a6  VRC5477 AC97",
+"	00cd  IEEE 1394 [OrangeLink] Host Controller",
+"		12ee 8011  Root hub",
+"	00ce  IEEE 1394 Host Controller",
+"	00df  Vr4131",
+"	00e0  USB 2.0",
+"		12ee 7001  Root hub",
+"		14c2 0205  PTI-205N USB 2.0 Host Controller",
+"		1799 0002  Root Hub",
+"		807d 1043  PCI-USB2 (EHCI subsystem)",
+"	00e7  IEEE 1394 Host Controller",
+"	00f2  uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr",
+"	00f3  uPD6113x Multimedia Decoder/Processor [EMMA2]",
+"	010c  VR7701",
+"	0125  uPD720400 PCI Express - PCI/PCI-X Bridge",
+"1034  Framatome Connectors USA Inc.",
+"1035  Comp. & Comm. Research Lab",
+"1036  Future Domain Corp.",
+"	0000  TMC-18C30 [36C70]",
+"1037  Hitachi Micro Systems",
+"1038  AMP, Inc",
+"1039  Silicon Integrated Systems [SiS]",
+"	0001  Virtual PCI-to-PCI bridge (AGP)",
+"	0002  SG86C202",
+"	0003  SiS AGP Port (virtual PCI-to-PCI bridge)",
+"	0004  PCI-to-PCI bridge",
+"	0006  85C501/2/3",
+"	0008  SiS85C503/5513 (LPC Bridge)",
+"	0009  ACPI",
+"	000a  PCI-to-PCI bridge",
+"	0016  SiS961/2 SMBus Controller",
+"	0018  SiS85C503/5513 (LPC Bridge)",
+"	0180  RAID bus controller 180 SATA/PATA  [SiS]",
+"	0181  SATA",
+"	0182  182 SATA/RAID Controller",
+"	0190  190 Gigabit Ethernet Adapter",
+"	0191  191 Gigabit Ethernet Adapter",
+"	0200  5597/5598/6326 VGA",
+"		1039 0000  SiS5597 SVGA (Shared RAM)",
+"	0204  82C204",
+"	0205  SG86C205",
+"	0300  300/305 PCI/AGP VGA Display Adapter",
+"		107d 2720  Leadtek WinFast VR300",
+"	0310  315H PCI/AGP VGA Display Adapter",
+"	0315  315 PCI/AGP VGA Display Adapter",
+"	0325  315PRO PCI/AGP VGA Display Adapter",
+"	0330  330 [Xabre] PCI/AGP VGA Display Adapter",
+"	0406  85C501/2",
+"	0496  85C496",
+"	0530  530 Host",
+"	0540  540 Host",
+"	0550  550 Host",
+"	0597  5513C",
+"	0601  85C601",
+"	0620  620 Host",
+"	0630  630 Host",
+"	0633  633 Host",
+"	0635  635 Host",
+"	0645  SiS645 Host & Memory & AGP Controller",
+"	0646  SiS645DX Host & Memory & AGP Controller",
+"	0648  645xx",
+"	0650  650/M650 Host",
+"	0651  651 Host",
+"	0655  655 Host",
+"	0660  660 Host",
+"	0661  661FX/M661FX/M661MX Host",
+"	0730  730 Host",
+"	0733  733 Host",
+"	0735  735 Host",
+"	0740  740 Host",
+"	0741  741/741GX/M741 Host",
+"	0745  745 Host",
+"	0746  746 Host",
+"	0755  755 Host",
+"	0760  760/M760 Host",
+"	0761  761/M761 Host",
+"	0900  SiS900 PCI Fast Ethernet",
+"		1019 0a14  K7S5A motherboard",
+"		1039 0900  SiS900 10/100 Ethernet Adapter",
+"		1043 8035  CUSI-FX motherboard",
+"	0961  SiS961 [MuTIOL Media IO]",
+"	0962  SiS962 [MuTIOL Media IO]",
+"	0963  SiS963 [MuTIOL Media IO]",
+"	0964  SiS964 [MuTIOL Media IO]",
+"	0965  SiS965 [MuTIOL Media IO]",
+"	3602  83C602",
+"	5107  5107",
+"	5300  SiS540 PCI Display Adapter",
+"	5315  550 PCI/AGP VGA Display Adapter",
+"	5401  486 PCI Chipset",
+"	5511  5511/5512",
+"	5513  5513 [IDE]",
+"		1019 0970  P6STP-FL motherboard",
+"		1039 5513  SiS5513 EIDE Controller (A,B step)",
+"		1043 8035  CUSI-FX motherboard",
+"	5517  5517",
+"	5571  5571",
+"	5581  5581 Pentium Chipset",
+"	5582  5582",
+"	5591  5591/5592 Host",
+"	5596  5596 Pentium Chipset",
+"	5597  5597 [SiS5582]",
+"	5600  5600 Host",
+"	6204  Video decoder & MPEG interface",
+"	6205  VGA Controller",
+"	6236  6236 3D-AGP",
+"	6300  630/730 PCI/AGP VGA Display Adapter",
+"		1019 0970  P6STP-FL motherboard",
+"		1043 8035  CUSI-FX motherboard",
+"	6306  530/620 PCI/AGP VGA Display Adapter",
+"		1039 6306  SiS530,620 GUI Accelerator+3D",
+"	6325  65x/M650/740 PCI/AGP VGA Display Adapter",
+"	6326  86C326 5598/6326",
+"		1039 6326  SiS6326 GUI Accelerator",
+"		1092 0a50  SpeedStar A50",
+"		1092 0a70  SpeedStar A70",
+"		1092 4910  SpeedStar A70",
+"		1092 4920  SpeedStar A70",
+"		1569 6326  SiS6326 GUI Accelerator",
+"	6330  661/741/760/761 PCI/AGP VGA Display Adapter",
+"		1039 6330  [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter",
+"	7001  USB 1.0 Controller",
+"		1019 0a14  K7S5A motherboard",
+"		1039 7000  Onboard USB Controller",
+"		1462 5470  K7SOM+ 5.2C Motherboard",
+"	7002  USB 2.0 Controller",
+"		1509 7002  Onboard USB Controller",
+"	7007  FireWire Controller",
+"	7012  AC'97 Sound Controller",
+"		15bd 1001  DFI 661FX motherboard",
+"	7013  AC'97 Modem Controller",
+"	7016  SiS7016 PCI Fast Ethernet Adapter",
+"		1039 7016  SiS7016 10/100 Ethernet Adapter",
+"	7018  SiS PCI Audio Accelerator",
+"		1014 01b6  SiS PCI Audio Accelerator",
+"		1014 01b7  SiS PCI Audio Accelerator",
+"		1019 7018  SiS PCI Audio Accelerator",
+"		1025 000e  SiS PCI Audio Accelerator",
+"		1025 0018  SiS PCI Audio Accelerator",
+"		1039 7018  SiS PCI Audio Accelerator",
+"		1043 800b  SiS PCI Audio Accelerator",
+"		1054 7018  SiS PCI Audio Accelerator",
+"		107d 5330  SiS PCI Audio Accelerator",
+"		107d 5350  SiS PCI Audio Accelerator",
+"		1170 3209  SiS PCI Audio Accelerator",
+"		1462 400a  SiS PCI Audio Accelerator",
+"		14a4 2089  SiS PCI Audio Accelerator",
+"		14cd 2194  SiS PCI Audio Accelerator",
+"		14ff 1100  SiS PCI Audio Accelerator",
+"		152d 8808  SiS PCI Audio Accelerator",
+"		1558 1103  SiS PCI Audio Accelerator",
+"		1558 2200  SiS PCI Audio Accelerator",
+"		1563 7018  SiS PCI Audio Accelerator",
+"		15c5 0111  SiS PCI Audio Accelerator",
+"		270f a171  SiS PCI Audio Accelerator",
+"		a0a0 0022  SiS PCI Audio Accelerator",
+"	7019  SiS7019 Audio Accelerator",
+"103a  Seiko Epson Corporation",
+"103b  Tatung Co. of America",
+"103c  Hewlett-Packard Company",
+"	002a  NX9000 Notebook",
+"	1005  A4977A Visualize EG",
+"	1008  Visualize FX",
+"	1028  Tach TL Fibre Channel Host Adapter",
+"	1029  Tach XL2 Fibre Channel Host Adapter",
+"		107e 000f  Interphase 5560 Fibre Channel Adapter",
+"		9004 9210  1Gb/2Gb Family Fibre Channel Controller",
+"		9004 9211  1Gb/2Gb Family Fibre Channel Controller",
+"	102a  Tach TS Fibre Channel Host Adapter",
+"		107e 000e  Interphase 5540/5541 Fibre Channel Adapter",
+"		9004 9110  1Gb/2Gb Family Fibre Channel Controller",
+"		9004 9111  1Gb/2Gb Family Fibre Channel Controller",
+"	1030  J2585A DeskDirect 10/100VG NIC",
+"	1031  J2585B HP 10/100VG PCI LAN Adapter",
+"		103c 1040  J2973A DeskDirect 10BaseT NIC",
+"		103c 1041  J2585B DeskDirect 10/100VG NIC",
+"		103c 1042  J2970A DeskDirect 10BaseT/2 NIC",
+"	1040  J2973A DeskDirect 10BaseT NIC",
+"	1041  J2585B DeskDirect 10/100 NIC",
+"	1042  J2970A DeskDirect 10BaseT/2 NIC",
+"	1048  Diva Serial [GSP] Multiport UART",
+"		103c 1049  Tosca Console",
+"		103c 104a  Tosca Secondary",
+"		103c 104b  Maestro SP2",
+"		103c 1223  Superdome Console",
+"		103c 1226  Keystone SP2",
+"		103c 1227  Powerbar SP2",
+"		103c 1282  Everest SP2",
+"		103c 1301  Diva RMP3",
+"	1054  PCI Local Bus Adapter",
+"	1064  79C970 PCnet Ethernet Controller",
+"	108b  Visualize FXe",
+"	10c1  NetServer Smart IRQ Router",
+"	10ed  TopTools Remote Control",
+"	10f0  rio System Bus Adapter",
+"	10f1  rio I/O Controller",
+"	1200  82557B 10/100 NIC",
+"	1219  NetServer PCI Hot-Plug Controller",
+"	121a  NetServer SMIC Controller",
+"	121b  NetServer Legacy COM Port Decoder",
+"	121c  NetServer PCI COM Port Decoder",
+"	1229  zx1 System Bus Adapter",
+"	122a  zx1 I/O Controller",
+"	122e  zx1 Local Bus Adapter",
+"	127c  sx1000 I/O Controller",
+"	1290  Auxiliary Diva Serial Port",
+"	1291  Auxiliary Diva Serial Port",
+"	12b4  zx1 QuickSilver AGP8x Local Bus Adapter",
+"	12f8  Broadcom BCM4306 802.11b/g Wireless LAN",
+"	12fa  BCM4306 802.11b/g Wireless LAN Controller",
+"	2910  E2910A PCIBus Exerciser",
+"	2925  E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer",
+"	3080  Pavilion ze2028ea",
+"	3085  Realtek RTL8139/8139C/8139C+",
+"	3220  Hewlett-Packard Smart Array P600",
+"	3230  Hewlett-Packard Smart Array Controller",
+"103e  Solliday Engineering",
+"103f  Synopsys/Logic Modeling Group",
+"1040  Accelgraphics Inc.",
+"1041  Computrend",
+"1042  Micron",
+"	1000  PC Tech RZ1000",
+"	1001  PC Tech RZ1001",
+"	3000  Samurai_0",
+"	3010  Samurai_1",
+"	3020  Samurai_IDE",
+"1043  ASUSTeK Computer Inc.",
+"	0675  ISDNLink P-IN100-ST-D",
+"		0675 1704  ISDN Adapter (PCI Bus, D, C)",
+"		0675 1707  ISDN Adapter (PCI Bus, DV, W)",
+"		10cf 105e  ISDN Adapter (PCI Bus, DV, W)",
+"	0c11  A7N8X Motherboard nForce2 IDE/USB/SMBus",
+"	4015  v7100 SDRAM [GeForce2 MX]",
+"	4021  v7100 Combo Deluxe [GeForce2 MX + TV tuner]",
+"	4057  v8200 GeForce 3",
+"	8043  v8240 PAL 128M [P4T] Motherboard",
+"	807b  v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI]",
+"	8095  A7N8X Motherboard nForce2 AC97 Audio",
+"	80ac  A7N8X Motherboard nForce2 AGP/Memory",
+"	80bb  v9180 Magic/T [GeForce4 MX440 AGP 8x 64MB TV-out]",
+"	80c5  nForce3 chipset motherboard [SK8N]",
+"	80df  v9520 Magic/T",
+"	8187  802.11a/b/g Wireless LAN Card",
+"	8188  Tiger Hybrid TV Capture Device",
+"1044  Adaptec (formerly DPT)",
+"	1012  Domino RAID Engine",
+"	a400  SmartCache/Raid I-IV Controller",
+"	a500  PCI Bridge",
+"	a501  SmartRAID V Controller",
+"		1044 c001  PM1554U2 Ultra2 Single Channel",
+"		1044 c002  PM1654U2 Ultra2 Single Channel",
+"		1044 c003  PM1564U3 Ultra3 Single Channel",
+"		1044 c004  PM1564U3 Ultra3 Dual Channel",
+"		1044 c005  PM1554U2 Ultra2 Single Channel (NON ACPI)",
+"		1044 c00a  PM2554U2 Ultra2 Single Channel",
+"		1044 c00b  PM2654U2 Ultra2 Single Channel",
+"		1044 c00c  PM2664U3 Ultra3 Single Channel",
+"		1044 c00d  PM2664U3 Ultra3 Dual Channel",
+"		1044 c00e  PM2554U2 Ultra2 Single Channel (NON ACPI)",
+"		1044 c00f  PM2654U2 Ultra2 Single Channel (NON ACPI)",
+"		1044 c014  PM3754U2 Ultra2 Single Channel (NON ACPI)",
+"		1044 c015  PM3755U2B Ultra2 Single Channel (NON ACPI)",
+"		1044 c016  PM3755F Fibre Channel (NON ACPI)",
+"		1044 c01e  PM3757U2 Ultra2 Single Channel",
+"		1044 c01f  PM3757U2 Ultra2 Dual Channel",
+"		1044 c020  PM3767U3 Ultra3 Dual Channel",
+"		1044 c021  PM3767U3 Ultra3 Quad Channel",
+"		1044 c028  PM2865U3 Ultra3 Single Channel",
+"		1044 c029  PM2865U3 Ultra3 Dual Channel",
+"		1044 c02a  PM2865F Fibre Channel",
+"		1044 c03c  2000S Ultra3 Single Channel",
+"		1044 c03d  2000S Ultra3 Dual Channel",
+"		1044 c03e  2000F Fibre Channel",
+"		1044 c046  3000S Ultra3 Single Channel",
+"		1044 c047  3000S Ultra3 Dual Channel",
+"		1044 c048  3000F Fibre Channel",
+"		1044 c050  5000S Ultra3 Single Channel",
+"		1044 c051  5000S Ultra3 Dual Channel",
+"		1044 c052  5000F Fibre Channel",
+"		1044 c05a  2400A UDMA Four Channel",
+"		1044 c05b  2400A UDMA Four Channel DAC",
+"		1044 c064  3010S Ultra3 Dual Channel",
+"		1044 c065  3410S Ultra160 Four Channel",
+"		1044 c066  3010S Fibre Channel",
+"	a511  SmartRAID V Controller",
+"		1044 c032  ASR-2005S I2O Zero Channel",
+"		1044 c035  ASR-2010S I2O Zero Channel",
+"1045  OPTi Inc.",
+"	a0f8  82C750 [Vendetta] USB Controller",
+"	c101  92C264",
+"	c178  92C178",
+"	c556  82X556 [Viper]",
+"	c557  82C557 [Viper-M]",
+"	c558  82C558 [Viper-M ISA+IDE]",
+"	c567  82C750 [Vendetta], device 0",
+"	c568  82C750 [Vendetta], device 1",
+"	c569  82C579 [Viper XPress+ Chipset]",
+"	c621  82C621 [Viper-M/N+]",
+"	c700  82C700 [FireStar]",
+"	c701  82C701 [FireStar Plus]",
+"	c814  82C814 [Firebridge 1]",
+"	c822  82C822",
+"	c824  82C824",
+"	c825  82C825 [Firebridge 2]",
+"	c832  82C832",
+"	c861  82C861",
+"	c895  82C895",
+"	c935  EV1935 ECTIVA MachOne PCIAudio",
+"	d568  82C825 [Firebridge 2]",
+"	d721  IDE [FireStar]",
+"1046  IPC Corporation, Ltd.",
+"1047  Genoa Systems Corp",
+"1048  Elsa AG",
+"	0c60  Gladiac MX",
+"	0d22  Quadro4 900XGL [ELSA GLoria4 900XGL]",
+"	1000  QuickStep 1000",
+"	3000  QuickStep 3000",
+"	8901  Gloria XL",
+"		1048 0935  GLoria XL (Virge)",
+"1049  Fountain Technologies, Inc.",
+"104a  STMicroelectronics",
+"	0008  STG 2000X",
+"	0009  STG 1764X",
+"	0010  STG4000 [3D Prophet Kyro Series]",
+"	0209  STPC Consumer/Industrial North- and Southbridge",
+"	020a  STPC Atlas/ConsumerS/Consumer IIA Northbridge",
+"	0210  STPC Atlas ISA Bridge",
+"	021a  STPC Consumer S Southbridge",
+"	021b  STPC Consumer IIA Southbridge",
+"	0500  ST70137 [Unicorn] ADSL DMT Transceiver",
+"	0564  STPC Client Northbridge",
+"	0981  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	1746  STG 1764X",
+"	2774  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	3520  MPEG-II decoder card",
+"	55cc  STPC Client Southbridge",
+"104b  BusLogic",
+"	0140  BT-946C (old) [multimaster  01]",
+"	1040  BT-946C (BA80C30) [MultiMaster 10]",
+"	8130  Flashpoint LT",
+"104c  Texas Instruments",
+"	0500  100 MBit LAN Controller",
+"	0508  TMS380C2X Compressor Interface",
+"	1000  Eagle i/f AS",
+"	104c  PCI1510 PC card Cardbus Controller",
+"	3d04  TVP4010 [Permedia]",
+"	3d07  TVP4020 [Permedia 2]",
+"		1011 4d10  Comet",
+"		1040 000f  AccelStar II",
+"		1040 0011  AccelStar II",
+"		1048 0a31  WINNER 2000",
+"		1048 0a32  GLoria Synergy",
+"		1048 0a34  GLoria Synergy",
+"		1048 0a35  GLoria Synergy",
+"		1048 0a36  GLoria Synergy",
+"		1048 0a43  GLoria Synergy",
+"		1048 0a44  GLoria Synergy",
+"		107d 2633  WinFast 3D L2300",
+"		1092 0127  FIRE GL 1000 PRO",
+"		1092 0136  FIRE GL 1000 PRO",
+"		1092 0141  FIRE GL 1000 PRO",
+"		1092 0146  FIRE GL 1000 PRO",
+"		1092 0148  FIRE GL 1000 PRO",
+"		1092 0149  FIRE GL 1000 PRO",
+"		1092 0152  FIRE GL 1000 PRO",
+"		1092 0154  FIRE GL 1000 PRO",
+"		1092 0155  FIRE GL 1000 PRO",
+"		1092 0156  FIRE GL 1000 PRO",
+"		1092 0157  FIRE GL 1000 PRO",
+"		1097 3d01  Jeronimo Pro",
+"		1102 100f  Graphics Blaster Extreme",
+"		3d3d 0100  Reference Permedia 2 3D",
+"	8000  PCILynx/PCILynx2 IEEE 1394 Link Layer Controller",
+"		e4bf 1010  CF1-1-SNARE",
+"		e4bf 1020  CF1-2-SNARE",
+"	8009  FireWire Controller",
+"		104d 8032  8032 OHCI i.LINK (IEEE 1394) Controller",
+"	8017  PCI4410 FireWire Controller",
+"	8019  TSB12LV23 IEEE-1394 Controller",
+"		11bd 000a  Studio DV500-1394",
+"		11bd 000e  Studio DV",
+"		e4bf 1010  CF2-1-CYMBAL",
+"	8020  TSB12LV26 IEEE-1394 Controller (Link)",
+"		11bd 000f  Studio DV500-1394",
+"	8021  TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated)",
+"		104d 80df  Vaio PCG-FX403",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"	8022  TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link)",
+"	8023  TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)",
+"		103c 088c  NC8000 laptop",
+"		1043 808b  K8N4-E Mainboard",
+"	8024  TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)",
+"	8025  TSB82AA2 IEEE-1394b Link Layer Controller",
+"		1458 1000  GA-K8N Ultra-9 Mainboard",
+"	8026  TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)",
+"		1025 003c  Aspire 2001WLCi (Compaq CL50 motherboard)",
+"		103c 006a  NX9500",
+"		1043 808d  A7V333 mainboard.",
+"	8027  PCI4451 IEEE-1394 Controller",
+"		1028 00e6  PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)",
+"	8029  PCI4510 IEEE-1394 Controller",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		1071 8160  MIM2900",
+"	802b  PCI7410,7510,7610 OHCI-Lynx Controller",
+"		1028 0139  Latitude D400",
+"		1028 014e  PCI7410,7510,7610 OHCI-Lynx Controller (Dell Latitude D800)",
+"	802e  PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller",
+"	8031  PCIxx21/x515 Cardbus Controller",
+"		1025 0080  Aspire 5024WLMi",
+"		103c 099c  NX6110/NC6120",
+"		103c 308b  MX6125",
+"	8032  OHCI Compliant IEEE 1394 Host Controller",
+"		1025 0080  Aspire 5024WLMi",
+"		103c 099c  NX6110/NC6120",
+"		103c 308b  MX6125",
+"	8033  PCIxx21 Integrated FlashMedia Controller",
+"		1025 0080  Aspire 5024WLMi",
+"		103c 099c  NX6110/NC6120",
+"		103c 308b  MX6125",
+"	8034  PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller",
+"		1025 0080  Aspire 5024WLMi",
+"		103c 099c  NX6110/NC6120",
+"		103c 308b  MX6125",
+"	8035  PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Smart Card Controller (SMC)",
+"		103c 099c  NX6110/NC6120",
+"	8036  PCI6515 Cardbus Controller",
+"	8038  PCI6515 SmartCard Controller",
+"	803b  5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)",
+"	8201  PCI1620 Firmware Loading Function",
+"	8204  PCI7410,7510,7610 PCI Firmware Loading Function",
+"		1028 0139  Latitude D400",
+"		1028 014e  Latitude D800",
+"	8231  XIO2000(A)/XIO2200 PCI Express-to-PCI Bridge",
+"	8235  XIO2200 IEEE-1394a-2000 Controller (PHY/Link)",
+"	8400  ACX 100 22Mbps Wireless Interface",
+"		1186 3b00  DWL-650+ PC Card cardbus 22Mbs Wireless Adapter [AirPlus]",
+"		1186 3b01  DWL-520+ 22Mbps PCI Wireless Adapter",
+"		16ab 8501  WL-8305 IEEE802.11b+ Wireless LAN PCI Adapter",
+"	8401  ACX 100 22Mbps Wireless Interface",
+"	9000  Wireless Interface (of unknown type)",
+"	9065  TMS320DM642",
+"	9066  ACX 111 54Mbps Wireless Interface",
+"		104c 9066  Trendnet TEW-421PC Wireless PCI Adapter",
+"		1186 3b04  DWL-G520+ Wireless PCI Adapter",
+"		1186 3b05  DWL-G650+ AirPlusG+ CardBus Wireless LAN",
+"		13d1 aba0  SWLMP-54108 108Mbps Wireless mini PCI card 802.11g+",
+"		1737 0033  WPC54G Ver.2 802.11G PC Card",
+"	a001  TDC1570",
+"	a100  TDC1561",
+"	a102  TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f",
+"	a106  TMS320C6414 TMS320C6415 TMS320C6416",
+"		175c 5000  ASI50xx Audio Adapter",
+"		175c 6400  ASI6400 Cobranet series",
+"		175c 8700  ASI87xx Radio Tuner card",
+"	ac10  PCI1050",
+"	ac11  PCI1053",
+"	ac12  PCI1130",
+"	ac13  PCI1031",
+"	ac15  PCI1131",
+"	ac16  PCI1250",
+"		1014 0092  ThinkPad 600",
+"	ac17  PCI1220",
+"	ac18  PCI1260",
+"	ac19  PCI1221",
+"	ac1a  PCI1210",
+"	ac1b  PCI1450",
+"		0e11 b113  Armada M700",
+"		1014 0130  Thinkpad T20/T22/A21m",
+"	ac1c  PCI1225",
+"		0e11 b121  Armada E500",
+"		1028 0088  Latitude CPi A400XT",
+"	ac1d  PCI1251A",
+"	ac1e  PCI1211",
+"	ac1f  PCI1251B",
+"	ac20  TI 2030",
+"	ac21  PCI2031",
+"	ac22  PCI2032 PCI Docking Bridge",
+"	ac23  PCI2250 PCI-to-PCI Bridge",
+"	ac28  PCI2050 PCI-to-PCI Bridge",
+"	ac30  PCI1260 PC card Cardbus Controller",
+"	ac40  PCI4450 PC card Cardbus Controller",
+"	ac41  PCI4410 PC card Cardbus Controller",
+"	ac42  PCI4451 PC card Cardbus Controller",
+"		1028 00e6  PCI4451 PC card CardBus Controller (Dell Inspiron 8100)",
+"	ac44  PCI4510 PC card Cardbus Controller",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		1071 8160  MIM2000",
+"	ac46  PCI4520 PC card Cardbus Controller",
+"	ac47  PCI7510 PC card Cardbus Controller",
+"		1028 0139  Latitude D400",
+"		1028 013f  Precision M60",
+"		1028 014e  Latitude D800",
+"	ac4a  PCI7510,7610 PC card Cardbus Controller",
+"		1028 0139  Latitude D400",
+"		1028 014e  Latitude D800",
+"	ac50  PCI1410 PC card Cardbus Controller",
+"	ac51  PCI1420",
+"		0e11 004e  Evo N600c",
+"		1014 0148  ThinkPad A20m",
+"		1014 023b  ThinkPad T23 (2647-4MG)",
+"		1028 00b1  Latitude C600",
+"		1028 012a  Latitude C640",
+"		1033 80cd  Versa Note VXi",
+"		1095 10cf  Fujitsu-Siemens LifeBook C Series",
+"		10cf 1095  Lifebook S-4510/C6155",
+"		e4bf 1000  CP2-2-HIPHOP",
+"	ac52  PCI1451 PC card Cardbus Controller",
+"	ac53  PCI1421 PC card Cardbus Controller",
+"	ac54  PCI1620 PC Card Controller",
+"	ac55  PCI1520 PC card Cardbus Controller",
+"		1014 0512  ThinkPad T30/T40",
+"	ac56  PCI1510 PC card Cardbus Controller",
+"		1014 0528  ThinkPad R40e (2684-HVG) Cardbus Controller",
+"	ac60  PCI2040 PCI to DSP Bridge Controller",
+"		175c 5100  ASI51xx Audio Adapter",
+"		175c 6100  ASI61xx Audio Adapter",
+"		175c 6200  ASI62xx Audio Adapter",
+"		175c 8800  ASI88xx Audio Adapter",
+"	ac8d  PCI 7620",
+"	ac8e  PCI7420 CardBus Controller",
+"	ac8f  PCI7420/PCI7620 Dual Socket CardBus and Smart Card Cont. w/ 1394a-2000 OHCI Two-Port  PHY/Link-Layer Cont. and SD/MS-Pro Sockets",
+"	fe00  FireWire Host Controller",
+"	fe03  12C01A FireWire Host Controller",
+"104d  Sony Corporation",
+"	8004  DTL-H2500 [Playstation development board]",
+"	8009  CXD1947Q i.LINK Controller",
+"	8039  CXD3222 i.LINK Controller",
+"	8056  Rockwell HCF 56K modem",
+"	808a  Memory Stick Controller",
+"104e  Oak Technology, Inc",
+"	0017  OTI-64017",
+"	0107  OTI-107 [Spitfire]",
+"	0109  Video Adapter",
+"	0111  OTI-64111 [Spitfire]",
+"	0217  OTI-64217",
+"	0317  OTI-64317",
+"104f  Co-time Computer Ltd",
+"1050  Winbond Electronics Corp",
+"	0000  NE2000",
+"	0001  W83769F",
+"	0033  W89C33D 802.11 a/b/g BB/MAC",
+"	0105  W82C105",
+"	0840  W89C840",
+"		1050 0001  W89C840 Ethernet Adapter",
+"		1050 0840  W89C840 Ethernet Adapter",
+"	0940  W89C940",
+"	5a5a  W89C940F",
+"	6692  W6692",
+"		1043 1702  ISDN Adapter (PCI Bus, D, W)",
+"		1043 1703  ISDN Adapter (PCI Bus, DV, W)",
+"		1043 1707  ISDN Adapter (PCI Bus, DV, W)",
+"		144f 1702  ISDN Adapter (PCI Bus, D, W)",
+"		144f 1703  ISDN Adapter (PCI Bus, DV, W)",
+"		144f 1707  ISDN Adapter (PCI Bus, DV, W)",
+"	9921  W99200F MPEG-1 Video Encoder",
+"	9922  W99200F/W9922PF MPEG-1/2 Video Encoder",
+"	9970  W9970CF",
+"1051  Anigma, Inc.",
+"1052  ?Young Micro Systems",
+"1053  Young Micro Systems",
+"1054  Hitachi, Ltd",
+"1055  Efar Microsystems",
+"	9130  SLC90E66 [Victory66] IDE",
+"	9460  SLC90E66 [Victory66] ISA",
+"	9462  SLC90E66 [Victory66] USB",
+"	9463  SLC90E66 [Victory66] ACPI",
+"1056  ICL",
+"1057  Motorola",
+"	0001  MPC105 [Eagle]",
+"	0002  MPC106 [Grackle]",
+"	0003  MPC8240 [Kahlua]",
+"	0004  MPC107",
+"	0006  MPC8245 [Unity]",
+"	0008  MPC8540",
+"	0009  MPC8560",
+"	0100  MC145575 [HFC-PCI]",
+"	0431  KTI829c 100VG",
+"	1801  DSP56301 Digital Signal Processor",
+"		14fb 0101  Transas Radar Imitator Board [RIM]",
+"		14fb 0102  Transas Radar Imitator Board [RIM-2]",
+"		14fb 0202  Transas Radar Integrator Board [RIB-2]",
+"		14fb 0611  1 channel CAN bus Controller [CanPci-1]",
+"		14fb 0612  2 channels CAN bus Controller [CanPci-2]",
+"		14fb 0613  3 channels CAN bus Controller [CanPci-3]",
+"		14fb 0614  4 channels CAN bus Controller [CanPci-4]",
+"		14fb 0621  1 channel CAN bus Controller [CanPci2-1]",
+"		14fb 0622  2 channels CAN bus Controller [CanPci2-2]",
+"		14fb 0810  Transas VTS Radar Integrator Board [RIB-4]",
+"		175c 4200  ASI4215 Audio Adapter",
+"		175c 4300  ASI43xx Audio Adapter",
+"		175c 4400  ASI4401 Audio Adapter",
+"		ecc0 0010  Darla",
+"		ecc0 0020  Gina",
+"		ecc0 0030  Layla rev.0",
+"		ecc0 0031  Layla rev.1",
+"		ecc0 0040  Darla24 rev.0",
+"		ecc0 0041  Darla24 rev.1",
+"		ecc0 0050  Gina24 rev.0",
+"		ecc0 0051  Gina24 rev.1",
+"		ecc0 0070  Mona rev.0",
+"		ecc0 0071  Mona rev.1",
+"		ecc0 0072  Mona rev.2",
+"	18c0  MPC8265A/8266/8272",
+"	18c1  MPC8271/MPC8272",
+"	3410  DSP56361 Digital Signal Processor",
+"		ecc0 0050  Gina24 rev.0",
+"		ecc0 0051  Gina24 rev.1",
+"		ecc0 0060  Layla24",
+"		ecc0 0070  Mona rev.0",
+"		ecc0 0071  Mona rev.1",
+"		ecc0 0072  Mona rev.2",
+"		ecc0 0080  Mia rev.0",
+"		ecc0 0081  Mia rev.1",
+"		ecc0 0090  Indigo",
+"		ecc0 00a0  Indigo IO",
+"		ecc0 00b0  Indigo DJ",
+"		ecc0 0100  3G",
+"	4801  Raven",
+"	4802  Falcon",
+"	4803  Hawk",
+"	4806  CPX8216",
+"	4d68  20268",
+"	5600  SM56 PCI Modem",
+"		1057 0300  SM56 PCI Speakerphone Modem",
+"		1057 0301  SM56 PCI Voice Modem",
+"		1057 0302  SM56 PCI Fax Modem",
+"		1057 5600  SM56 PCI Voice modem",
+"		13d2 0300  SM56 PCI Speakerphone Modem",
+"		13d2 0301  SM56 PCI Voice modem",
+"		13d2 0302  SM56 PCI Fax Modem",
+"		1436 0300  SM56 PCI Speakerphone Modem",
+"		1436 0301  SM56 PCI Voice modem",
+"		1436 0302  SM56 PCI Fax Modem",
+"		144f 100c  SM56 PCI Fax Modem",
+"		1494 0300  SM56 PCI Speakerphone Modem",
+"		1494 0301  SM56 PCI Voice modem",
+"		14c8 0300  SM56 PCI Speakerphone Modem",
+"		14c8 0302  SM56 PCI Fax Modem",
+"		1668 0300  SM56 PCI Speakerphone Modem",
+"		1668 0302  SM56 PCI Fax Modem",
+"	5608  Wildcard X100P",
+"	5803  MPC5200",
+"	5806  MCF54 Coldfire",
+"	5808  MPC8220",
+"	5809  MPC5200B",
+"	6400  MPC190 Security Processor (S1 family, encryption)",
+"	6405  MPC184 Security Processor (S1 family)",
+"1058  Electronics & Telecommunications RSH",
+"1059  Teknor Industrial Computers Inc",
+"105a  Promise Technology, Inc.",
+"	0d30  PDC20265 (FastTrak100 Lite/Ultra100)",
+"		105a 4d33  Ultra100",
+"	0d38  20263",
+"		105a 4d39  Fasttrak66",
+"	1275  20275",
+"	3318  PDC20318 (SATA150 TX4)",
+"	3319  PDC20319 (FastTrak S150 TX4)",
+"		8086 3427  S875WP1-E mainboard",
+"	3371  PDC20371 (FastTrak S150 TX2plus)",
+"	3373  PDC20378 (FastTrak 378/SATA 378)",
+"		1043 80f5  K8V Deluxe/PC-DL Deluxe motherboard",
+"		1462 702e  K8T NEO FIS2R motherboard",
+"	3375  PDC20375 (SATA150 TX2plus)",
+"	3376  PDC20376 (FastTrak 376)",
+"		1043 809e  A7V8X motherboard",
+"	3515  PDC40719 [FastTrak TX4300/TX4310]",
+"	3519  PDC40519 (FastTrak TX4200)",
+"	3570  20771 (FastTrak TX2300)",
+"	3571  PDC20571 (FastTrak TX2200)",
+"	3574  PDC20579 SATAII 150 IDE Controller",
+"	3577  PDC40779 (SATA 300 779)",
+"	3d17  PDC40718 (SATA 300 TX4)",
+"	3d18  PDC20518/PDC40518 (SATAII 150 TX4)",
+"	3d73  PDC40775 (SATA 300 TX2plus)",
+"	3d75  PDC20575 (SATAII150 TX2plus)",
+"	4d30  PDC20267 (FastTrak100/Ultra100)",
+"		105a 4d33  Ultra100",
+"		105a 4d39  FastTrak100",
+"	4d33  20246",
+"		105a 4d33  20246 IDE Controller",
+"	4d38  PDC20262 (FastTrak66/Ultra66)",
+"		105a 4d30  Ultra Device on SuperTrak",
+"		105a 4d33  Ultra66",
+"		105a 4d39  FastTrak66",
+"	4d68  PDC20268 (Ultra100 TX2)",
+"		105a 4d68  Ultra100TX2",
+"	4d69  20269",
+"		105a 4d68  Ultra133TX2",
+"	5275  PDC20276 (MBFastTrak133 Lite)",
+"		1043 807e  A7V333 motherboard.",
+"		105a 0275  SuperTrak SX6000 IDE",
+"		105a 1275  MBFastTrak133 Lite (tm) Controller (RAID mode)",
+"		1458 b001  MBUltra 133",
+"	5300  DC5300",
+"	6268  PDC20270 (FastTrak100 LP/TX2/TX4)",
+"		105a 4d68  FastTrak100 TX2",
+"	6269  PDC20271 (FastTrak TX2000)",
+"		105a 6269  FastTrak TX2/TX2000",
+"	6621  PDC20621 (FastTrak S150 SX4/FastTrak SX4000 lite)",
+"	6622  PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller",
+"	6624  PDC20621 [FastTrak SX4100]",
+"	6626  PDC20618 (Ultra 618)",
+"	6629  PDC20619 (FastTrak TX4000)",
+"	7275  PDC20277 (SBFastTrak133 Lite)",
+"	8002  SATAII150 SX8",
+"105b  Foxconn International, Inc.",
+"105c  Wipro Infotech Limited",
+"105d  Number 9 Computer Company",
+"	2309  Imagine 128",
+"	2339  Imagine 128-II",
+"		105d 0000  Imagine 128 series 2 4Mb VRAM",
+"		105d 0001  Imagine 128 series 2 4Mb VRAM",
+"		105d 0002  Imagine 128 series 2 4Mb VRAM",
+"		105d 0003  Imagine 128 series 2 4Mb VRAM",
+"		105d 0004  Imagine 128 series 2 4Mb VRAM",
+"		105d 0005  Imagine 128 series 2 4Mb VRAM",
+"		105d 0006  Imagine 128 series 2 4Mb VRAM",
+"		105d 0007  Imagine 128 series 2 4Mb VRAM",
+"		105d 0008  Imagine 128 series 2e 4Mb DRAM",
+"		105d 0009  Imagine 128 series 2e 4Mb DRAM",
+"		105d 000a  Imagine 128 series 2 8Mb VRAM",
+"		105d 000b  Imagine 128 series 2 8Mb H-VRAM",
+"		11a4 000a  Barco Metheus 5 Megapixel",
+"		13cc 0000  Barco Metheus 5 Megapixel",
+"		13cc 0004  Barco Metheus 5 Megapixel",
+"		13cc 0005  Barco Metheus 5 Megapixel",
+"		13cc 0006  Barco Metheus 5 Megapixel",
+"		13cc 0008  Barco Metheus 5 Megapixel",
+"		13cc 0009  Barco Metheus 5 Megapixel",
+"		13cc 000a  Barco Metheus 5 Megapixel",
+"		13cc 000c  Barco Metheus 5 Megapixel",
+"	493d  Imagine 128 T2R [Ticket to Ride]",
+"		11a4 000a  Barco Metheus 5 Megapixel, Dual Head",
+"		11a4 000b  Barco Metheus 5 Megapixel, Dual Head",
+"		13cc 0002  Barco Metheus 4 Megapixel, Dual Head",
+"		13cc 0003  Barco Metheus 5 Megapixel, Dual Head",
+"		13cc 0007  Barco Metheus 5 Megapixel, Dual Head",
+"		13cc 0008  Barco Metheus 5 Megapixel, Dual Head",
+"		13cc 0009  Barco Metheus 5 Megapixel, Dual Head",
+"		13cc 000a  Barco Metheus 5 Megapixel, Dual Head",
+"	5348  Revolution 4",
+"		105d 0037  Revolution IV-FP AGP (For SGI 1600SW)",
+"		11a4 0028  PVS5600M",
+"		11a4 0038  PVS5600D",
+"105e  Vtech Computers Ltd",
+"105f  Infotronic America Inc",
+"1060  United Microelectronics [UMC]",
+"	0001  UM82C881",
+"	0002  UM82C886",
+"	0101  UM8673F",
+"	0881  UM8881",
+"	0886  UM8886F",
+"	0891  UM8891A",
+"	1001  UM886A",
+"	673a  UM8886BF",
+"	673b  EIDE Master/DMA",
+"	8710  UM8710",
+"	886a  UM8886A",
+"	8881  UM8881F",
+"	8886  UM8886F",
+"	888a  UM8886A",
+"	8891  UM8891A",
+"	9017  UM9017F",
+"	9018  UM9018",
+"	9026  UM9026",
+"	e881  UM8881N",
+"	e886  UM8886N",
+"	e88a  UM8886N",
+"	e891  UM8891N",
+"1061  I.I.T.",
+"	0001  AGX016",
+"	0002  IIT3204/3501",
+"1062  Maspar Computer Corp",
+"1063  Ocean Office Automation",
+"1064  Alcatel",
+"1065  Texas Microsystems",
+"1066  PicoPower Technology",
+"	0000  PT80C826",
+"	0001  PT86C521 [Vesuvius v1] Host Bridge",
+"	0002  PT86C523 [Vesuvius v3] PCI-ISA Bridge Master",
+"	0003  PT86C524 [Nile] PCI-to-PCI Bridge",
+"	0004  PT86C525 [Nile-II] PCI-to-PCI Bridge",
+"	0005  National PC87550 System Controller",
+"	8002  PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave",
+"1067  Mitsubishi Electric",
+"	0301  AccelGraphics AccelECLIPSE",
+"	0304  AccelGALAXY A2100 [OEM Evans & Sutherland]",
+"	0308  Tornado 3000 [OEM Evans & Sutherland]",
+"	1002  VG500 [VolumePro Volume Rendering Accelerator]",
+"1068  Diversified Technology",
+"1069  Mylex Corporation",
+"	0001  DAC960P",
+"	0002  DAC960PD",
+"	0010  DAC960PG",
+"	0020  DAC960LA",
+"	0050  AcceleRAID 352/170/160 support Device",
+"		1069 0050  AcceleRAID 352 support Device",
+"		1069 0052  AcceleRAID 170 support Device",
+"		1069 0054  AcceleRAID 160 support Device",
+"	b166  AcceleRAID 600/500/400/Sapphire support Device",
+"		1014 0242  iSeries 2872 DASD IOA",
+"		1014 0266  Dual Channel PCI-X U320 SCSI Adapter",
+"		1014 0278  Dual Channel PCI-X U320 SCSI RAID Adapter",
+"		1014 02d3  Dual Channel PCI-X U320 SCSI Adapter",
+"		1014 02d4  Dual Channel PCI-X U320 SCSI RAID Adapter",
+"		1069 0200  AcceleRAID 400, Single Channel, PCI-X, U320, SCSI RAID",
+"		1069 0202  AcceleRAID Sapphire, Dual Channel, PCI-X, U320, SCSI RAID",
+"		1069 0204  AcceleRAID 500, Dual Channel, Low-Profile, PCI-X, U320, SCSI RAID",
+"		1069 0206  AcceleRAID 600, Dual Channel, PCI-X, U320, SCSI RAID",
+"	ba55  eXtremeRAID 1100 support Device",
+"	ba56  eXtremeRAID 2000/3000 support Device",
+"		1069 0030  eXtremeRAID 3000 support Device",
+"		1069 0040  eXtremeRAID 2000 support Device",
+"	ba57  eXtremeRAID 4000/5000 support Device",
+"		1069 0072  eXtremeRAID 5000 support Device",
+"106a  Aten Research Inc",
+"106b  Apple Computer Inc.",
+"	0001  Bandit PowerPC host bridge",
+"	0002  Grand Central I/O",
+"	0003  Control Video",
+"	0004  PlanB Video-In",
+"	0007  O'Hare I/O",
+"	000c  DOS on Mac",
+"	000e  Hydra Mac I/O",
+"	0010  Heathrow Mac I/O",
+"	0017  Paddington Mac I/O",
+"	0018  UniNorth FireWire",
+"	0019  KeyLargo USB",
+"	001e  UniNorth Internal PCI",
+"	001f  UniNorth PCI",
+"	0020  UniNorth AGP",
+"	0021  UniNorth GMAC (Sun GEM)",
+"	0022  KeyLargo Mac I/O",
+"	0024  UniNorth/Pangea GMAC (Sun GEM)",
+"	0025  KeyLargo/Pangea Mac I/O",
+"	0026  KeyLargo/Pangea USB",
+"	0027  UniNorth/Pangea AGP",
+"	0028  UniNorth/Pangea PCI",
+"	0029  UniNorth/Pangea Internal PCI",
+"	002d  UniNorth 1.5 AGP",
+"	002e  UniNorth 1.5 PCI",
+"	002f  UniNorth 1.5 Internal PCI",
+"	0030  UniNorth/Pangea FireWire",
+"	0031  UniNorth 2 FireWire",
+"		106b 5811  iBook G4 2004",
+"	0032  UniNorth 2 GMAC (Sun GEM)",
+"	0033  UniNorth 2 ATA/100",
+"	0034  UniNorth 2 AGP",
+"	0035  UniNorth 2 PCI",
+"	0036  UniNorth 2 Internal PCI",
+"	003b  UniNorth/Intrepid ATA/100",
+"	003e  KeyLargo/Intrepid Mac I/O",
+"	003f  KeyLargo/Intrepid USB",
+"	0040  K2 KeyLargo USB",
+"	0041  K2 KeyLargo Mac/IO",
+"	0042  K2 FireWire",
+"	0043  K2 ATA/100",
+"	0045  K2 HT-PCI Bridge",
+"	0046  K2 HT-PCI Bridge",
+"	0047  K2 HT-PCI Bridge",
+"	0048  K2 HT-PCI Bridge",
+"	0049  K2 HT-PCI Bridge",
+"	004b  U3 AGP",
+"	004c  K2 GMAC (Sun GEM)",
+"	004f  Shasta Mac I/O",
+"	0050  Shasta IDE",
+"	0051  Shasta (Sun GEM)",
+"	0052  Shasta Firewire",
+"	0053  Shasta PCI Bridge",
+"	0054  Shasta PCI Bridge",
+"	0055  Shasta PCI Bridge",
+"	0058  U3L AGP Bridge",
+"	0059  U3H AGP Bridge",
+"	0066  Intrepid2 AGP Bridge",
+"	0067  Intrepid2 PCI Bridge",
+"	0068  Intrepid2 PCI Bridge",
+"	0069  Intrepid2 ATA/100",
+"	006a  Intrepid2 Firewire",
+"	006b  Intrepid2 GMAC (Sun GEM)",
+"	1645  Tigon3 Gigabit Ethernet NIC (BCM5701)",
+"106c  Hynix Semiconductor",
+"	8801  Dual Pentium ISA/PCI Motherboard",
+"	8802  PowerPC ISA/PCI Motherboard",
+"	8803  Dual Window Graphics Accelerator",
+"	8804  LAN Controller",
+"	8805  100-BaseT LAN",
+"106d  Sequent Computer Systems",
+"106e  DFI, Inc",
+"106f  City Gate Development Ltd",
+"1070  Daewoo Telecom Ltd",
+"1071  Mitac",
+"	8160  Mitac 8060B Mobile Platform",
+"1072  GIT Co Ltd",
+"1073  Yamaha Corporation",
+"	0001  3D GUI Accelerator",
+"	0002  YGV615 [RPA3 3D-Graphics Controller]",
+"	0003  YMF-740",
+"	0004  YMF-724",
+"		1073 0004  YMF724-Based PCI Audio Adapter",
+"	0005  DS1 Audio",
+"		1073 0005  DS-XG PCI Audio CODEC",
+"	0006  DS1 Audio",
+"	0008  DS1 Audio",
+"		1073 0008  DS-XG PCI Audio CODEC",
+"	000a  DS1L Audio",
+"		1073 0004  DS-XG PCI Audio CODEC",
+"		1073 000a  DS-XG PCI Audio CODEC",
+"	000c  YMF-740C [DS-1L Audio Controller]",
+"		107a 000c  DS-XG PCI Audio CODEC",
+"	000d  YMF-724F [DS-1 Audio Controller]",
+"		1073 000d  DS-XG PCI Audio CODEC",
+"	0010  YMF-744B [DS-1S Audio Controller]",
+"		1073 0006  DS-XG PCI Audio CODEC",
+"		1073 0010  DS-XG PCI Audio CODEC",
+"	0012  YMF-754 [DS-1E Audio Controller]",
+"		1073 0012  DS-XG PCI Audio Codec",
+"	0020  DS-1 Audio",
+"	2000  DS2416 Digital Mixing Card",
+"		1073 2000  DS2416 Digital Mixing Card",
+"1074  NexGen Microsystems",
+"	4e78  82c500/1",
+"1075  Advanced Integrations Research",
+"1076  Chaintech Computer Co. Ltd",
+"1077  QLogic Corp.",
+"	1016  ISP10160 Single Channel Ultra3 SCSI Processor",
+"	1020  ISP1020 Fast-wide SCSI",
+"	1022  ISP1022 Fast-wide SCSI",
+"	1080  ISP1080 SCSI Host Adapter",
+"	1216  ISP12160 Dual Channel Ultra3 SCSI Processor",
+"		101e 8471  QLA12160 on AMI MegaRAID",
+"		101e 8493  QLA12160 on AMI MegaRAID",
+"	1240  ISP1240 SCSI Host Adapter",
+"	1280  ISP1280 SCSI Host Adapter",
+"	2020  ISP2020A Fast!SCSI Basic Adapter",
+"	2100  QLA2100 64-bit Fibre Channel Adapter",
+"		1077 0001  QLA2100 64-bit Fibre Channel Adapter",
+"	2200  QLA2200 64-bit Fibre Channel Adapter",
+"		1077 0002  QLA2200",
+"	2300  QLA2300 64-bit Fibre Channel Adapter",
+"	2312  QLA2312 Fibre Channel Adapter",
+"	2322  QLA2322 Fibre Channel Adapter",
+"	2422  QLA2422 Fibre Channel Adapter",
+"	2432  QLA2432 Fibre Channel Adapter",
+"	3010  QLA3010 Network Adapter",
+"	3022  QLA3022 Network Adapter",
+"	4010  QLA4010 iSCSI TOE Adapter",
+"	4022  QLA4022 iSCSI TOE Adapter",
+"	6312  QLA6312 Fibre Channel Adapter",
+"	6322  QLA6322 Fibre Channel Adapter",
+"1078  Cyrix Corporation",
+"	0000  5510 [Grappa]",
+"	0001  PCI Master",
+"	0002  5520 [Cognac]",
+"	0100  5530 Legacy [Kahlua]",
+"	0101  5530 SMI [Kahlua]",
+"	0102  5530 IDE [Kahlua]",
+"	0103  5530 Audio [Kahlua]",
+"	0104  5530 Video [Kahlua]",
+"	0400  ZFMicro PCI Bridge",
+"	0401  ZFMicro Chipset SMI",
+"	0402  ZFMicro Chipset IDE",
+"	0403  ZFMicro Expansion Bus",
+"1079  I-Bus",
+"107a  NetWorth",
+"107b  Gateway 2000",
+"107c  LG Electronics [Lucky Goldstar Co. Ltd]",
+"107d  LeadTek Research Inc.",
+"	0000  P86C850",
+"	204d  [GeForce 7800 GTX] Winfast PX7800 GTX TDH",
+"	2134  WinFast 3D S320 II",
+"	2971  [GeForce FX 5900] WinFast A350 TDH MyViVo",
+"107e  Interphase Corporation",
+"	0001  5515 ATM Adapter [Flipper]",
+"	0002  100 VG AnyLan Controller",
+"	0004  5526 Fibre Channel Host Adapter",
+"	0005  x526 Fibre Channel Host Adapter",
+"	0008  5525/5575 ATM Adapter (155 Mbit) [Atlantic]",
+"	9003  5535-4P-BRI-ST",
+"	9007  5535-4P-BRI-U",
+"	9008  5535-1P-SR",
+"	900c  5535-1P-SR-ST",
+"	900e  5535-1P-SR-U",
+"	9011  5535-1P-PRI",
+"	9013  5535-2P-PRI",
+"	9023  5536-4P-BRI-ST",
+"	9027  5536-4P-BRI-U",
+"	9031  5536-1P-PRI",
+"	9033  5536-2P-PRI",
+"107f  Data Technology Corporation",
+"	0802  SL82C105",
+"1080  Contaq Microsystems",
+"	0600  82C599",
+"	c691  Cypress CY82C691",
+"	c693  82c693",
+"1081  Supermac Technology",
+"	0d47  Radius PCI to NuBUS Bridge",
+"1082  EFA Corporation of America",
+"1083  Forex Computer Corporation",
+"	0001  FR710",
+"1084  Parador",
+"1085  Tulip Computers Int.B.V.",
+"1086  J. Bond Computer Systems",
+"1087  Cache Computer",
+"1088  Microcomputer Systems (M) Son",
+"1089  Data General Corporation",
+"108a  SBS Technologies",
+"	0001  VME Bridge Model 617",
+"	0010  VME Bridge Model 618",
+"	0040  dataBLIZZARD",
+"	3000  VME Bridge Model 2706",
+"108c  Oakleigh Systems Inc.",
+"108d  Olicom",
+"	0001  Token-Ring 16/4 PCI Adapter (3136/3137)",
+"	0002  16/4 Token Ring",
+"	0004  RapidFire 3139 Token-Ring 16/4 PCI Adapter",
+"		108d 0004  OC-3139/3140 RapidFire Token-Ring 16/4 Adapter",
+"	0005  GoCard 3250 Token-Ring 16/4 CardBus PC Card",
+"	0006  OC-3530 RapidFire Token-Ring 100",
+"	0007  RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter",
+"		108d 0007  OC-3141 RapidFire Token-Ring 16/4 Adapter",
+"	0008  RapidFire 3540 HSTR 100/16/4 PCI Adapter",
+"		108d 0008  OC-3540 RapidFire HSTR 100/16/4 Adapter",
+"	0011  OC-2315",
+"	0012  OC-2325",
+"	0013  OC-2183/2185",
+"	0014  OC-2326",
+"	0019  OC-2327/2250 10/100 Ethernet Adapter",
+"		108d 0016  OC-2327 Rapidfire 10/100 Ethernet Adapter",
+"		108d 0017  OC-2250 GoCard 10/100 Ethernet Adapter",
+"	0021  OC-6151/6152 [RapidFire ATM 155]",
+"	0022  ATM Adapter",
+"108e  Sun Microsystems Computer Corp.",
+"	0001  EBUS",
+"	1000  EBUS",
+"	1001  Happy Meal",
+"	1100  RIO EBUS",
+"	1101  RIO GEM",
+"	1102  RIO 1394",
+"	1103  RIO USB",
+"	1648  [bge] Gigabit Ethernet",
+"	2bad  GEM",
+"	5000  Simba Advanced PCI Bridge",
+"	5043  SunPCI Co-processor",
+"	8000  Psycho PCI Bus Module",
+"	8001  Schizo PCI Bus Module",
+"	8002  Schizo+ PCI Bus Module",
+"	a000  Ultra IIi",
+"	a001  Ultra IIe",
+"	a801  Tomatillo PCI Bus Module",
+"	abba  Cassini 10/100/1000",
+"108f  Systemsoft",
+"1090  Compro Computer Services, Inc.",
+"1091  Intergraph Corporation",
+"	0020  3D graphics processor",
+"	0021  3D graphics processor w/Texturing",
+"	0040  3D graphics frame buffer",
+"	0041  3D graphics frame buffer",
+"	0060  Proprietary bus bridge",
+"	00e4  Powerstorm 4D50T",
+"	0720  Motion JPEG codec",
+"	07a0  Sun Expert3D-Lite Graphics Accelerator",
+"	1091  Sun Expert3D Graphics Accelerator",
+"1092  Diamond Multimedia Systems",
+"	00a0  Speedstar Pro SE",
+"	00a8  Speedstar 64",
+"	0550  Viper V550",
+"	08d4  Supra 2260 Modem",
+"	094c  SupraExpress 56i Pro",
+"	1092  Viper V330",
+"	6120  Maximum DVD",
+"	8810  Stealth SE",
+"	8811  Stealth 64/SE",
+"	8880  Stealth",
+"	8881  Stealth",
+"	88b0  Stealth 64",
+"	88b1  Stealth 64",
+"	88c0  Stealth 64",
+"	88c1  Stealth 64",
+"	88d0  Stealth 64",
+"	88d1  Stealth 64",
+"	88f0  Stealth 64",
+"	88f1  Stealth 64",
+"	9999  DMD-I0928-1 'Monster sound' sound chip",
+"1093  National Instruments",
+"	0160  PCI-DIO-96",
+"	0162  PCI-MIO-16XE-50",
+"	1150  PCI-DIO-32HS High Speed Digital I/O Board",
+"	1170  PCI-MIO-16XE-10",
+"	1180  PCI-MIO-16E-1",
+"	1190  PCI-MIO-16E-4",
+"	1310  PCI-6602",
+"	1330  PCI-6031E",
+"	1350  PCI-6071E",
+"	14e0  PCI-6110",
+"	14f0  PCI-6111",
+"	17d0  PCI-6503",
+"	1870  PCI-6713",
+"	1880  PCI-6711",
+"	18b0  PCI-6052E",
+"	2410  PCI-6733",
+"	2890  PCI-6036E",
+"	2a60  PCI-6023E",
+"	2a70  PCI-6024E",
+"	2a80  PCI-6025E",
+"	2c80  PCI-6035E",
+"	2ca0  PCI-6034E",
+"	70a9  PCI-6528 (Digital I/O at 60V)",
+"	70b8  PCI-6251 [M Series - High Speed Multifunction DAQ]",
+"	b001  IMAQ-PCI-1408",
+"	b011  IMAQ-PXI-1408",
+"	b021  IMAQ-PCI-1424",
+"	b031  IMAQ-PCI-1413",
+"	b041  IMAQ-PCI-1407",
+"	b051  IMAQ-PXI-1407",
+"	b061  IMAQ-PCI-1411",
+"	b071  IMAQ-PCI-1422",
+"	b081  IMAQ-PXI-1422",
+"	b091  IMAQ-PXI-1411",
+"	c801  PCI-GPIB",
+"	c831  PCI-GPIB bridge",
+"1094  First International Computers [FIC]",
+"1095  Silicon Image, Inc.",
+"	0240  Adaptec AAR-1210SA SATA HostRAID Controller",
+"	0640  PCI0640",
+"	0643  PCI0643",
+"	0646  PCI0646",
+"	0647  PCI0647",
+"	0648  PCI0648",
+"		1043 8025  CUBX motherboard",
+"	0649  SiI 0649 Ultra ATA/100 PCI to ATA Host Controller",
+"		0e11 005d  Integrated Ultra ATA-100 Dual Channel Controller",
+"		0e11 007e  Integrated Ultra ATA-100 IDE RAID Controller",
+"		101e 0649  AMI MegaRAID IDE 100 Controller",
+"	0650  PBC0650A",
+"	0670  USB0670",
+"		1095 0670  USB0670",
+"	0673  USB0673",
+"	0680  PCI0680 Ultra ATA-133 Host Controller",
+"		1095 3680  Winic W-680 (Silicon Image 680 based)",
+"	3112  SiI 3112 [SATALink/SATARaid] Serial ATA Controller",
+"		1095 3112  SiI 3112 SATALink Controller",
+"		1095 6112  SiI 3112 SATARaid Controller",
+"		9005 0250  SATAConnect 1205SA Host Controller",
+"	3114  SiI 3114 [SATALink/SATARaid] Serial ATA Controller",
+"		1095 3114  SiI 3114 SATALink Controller",
+"		1095 6114  SiI 3114 SATARaid Controller",
+"	3124  SiI 3124 PCI-X Serial ATA Controller",
+"		1095 3124  SiI 3124 PCI-X Serial ATA Controller",
+"	3132  SiI 3132 Serial ATA Raid II Controller",
+"	3512  SiI 3512 [SATALink/SATARaid] Serial ATA Controller",
+"		1095 3512  SiI 3512 SATALink Controller",
+"		1095 6512  SiI 3512 SATARaid Controller",
+"1096  Alacron",
+"1097  Appian Technology",
+"1098  Quantum Designs (H.K.) Ltd",
+"	0001  QD-8500",
+"	0002  QD-8580",
+"1099  Samsung Electronics Co., Ltd",
+"109a  Packard Bell",
+"109b  Gemlight Computer Ltd.",
+"109c  Megachips Corporation",
+"109d  Zida Technologies Ltd.",
+"109e  Brooktree Corporation",
+"	032e  Bt878 Video Capture",
+"	0350  Bt848 Video Capture",
+"	0351  Bt849A Video capture",
+"	0369  Bt878 Video Capture",
+"		1002 0001  TV-Wonder",
+"		1002 0003  TV-Wonder/VE",
+"	036c  Bt879(??) Video Capture",
+"		13e9 0070  Win/TV (Video Section)",
+"	036e  Bt878 Video Capture",
+"		0070 13eb  WinTV Series",
+"		0070 ff01  Viewcast Osprey 200",
+"		0071 0101  DigiTV PCI",
+"		107d 6606  WinFast TV 2000",
+"		11bd 0012  PCTV pro (TV + FM stereo receiver)",
+"		11bd 001c  PCTV Sat (DBC receiver)",
+"		127a 0001  Bt878 Mediastream Controller NTSC",
+"		127a 0002  Bt878 Mediastream Controller PAL BG",
+"		127a 0003  Bt878a Mediastream Controller PAL BG",
+"		127a 0048  Bt878/832 Mediastream Controller",
+"		144f 3000  MagicTView CPH060 - Video",
+"		1461 0002  TV98 Series (TV/No FM/Remote)",
+"		1461 0003  AverMedia UltraTV PCI 350",
+"		1461 0004  AVerTV WDM Video Capture",
+"		1461 0761  AverTV DVB-T",
+"		14f1 0001  Bt878 Mediastream Controller NTSC",
+"		14f1 0002  Bt878 Mediastream Controller PAL BG",
+"		14f1 0003  Bt878a Mediastream Controller PAL BG",
+"		14f1 0048  Bt878/832 Mediastream Controller",
+"		1822 0001  VisionPlus DVB card",
+"		1851 1850  FlyVideo'98 - Video",
+"		1851 1851  FlyVideo II",
+"		1852 1852  FlyVideo'98 - Video (with FM Tuner)",
+"		18ac d500  DViCO FusionHDTV5 Lite",
+"		270f fc00  Digitop DTT-1000",
+"		bd11 1200  PCTV pro (TV + FM stereo receiver)",
+"	036f  Bt879 Video Capture",
+"		127a 0044  Bt879 Video Capture NTSC",
+"		127a 0122  Bt879 Video Capture PAL I",
+"		127a 0144  Bt879 Video Capture NTSC",
+"		127a 0222  Bt879 Video Capture PAL BG",
+"		127a 0244  Bt879a Video Capture NTSC",
+"		127a 0322  Bt879 Video Capture NTSC",
+"		127a 0422  Bt879 Video Capture NTSC",
+"		127a 1122  Bt879 Video Capture PAL I",
+"		127a 1222  Bt879 Video Capture PAL BG",
+"		127a 1322  Bt879 Video Capture NTSC",
+"		127a 1522  Bt879a Video Capture PAL I",
+"		127a 1622  Bt879a Video Capture PAL BG",
+"		127a 1722  Bt879a Video Capture NTSC",
+"		14f1 0044  Bt879 Video Capture NTSC",
+"		14f1 0122  Bt879 Video Capture PAL I",
+"		14f1 0144  Bt879 Video Capture NTSC",
+"		14f1 0222  Bt879 Video Capture PAL BG",
+"		14f1 0244  Bt879a Video Capture NTSC",
+"		14f1 0322  Bt879 Video Capture NTSC",
+"		14f1 0422  Bt879 Video Capture NTSC",
+"		14f1 1122  Bt879 Video Capture PAL I",
+"		14f1 1222  Bt879 Video Capture PAL BG",
+"		14f1 1322  Bt879 Video Capture NTSC",
+"		14f1 1522  Bt879a Video Capture PAL I",
+"		14f1 1622  Bt879a Video Capture PAL BG",
+"		14f1 1722  Bt879a Video Capture NTSC",
+"		1851 1850  FlyVideo'98 - Video",
+"		1851 1851  FlyVideo II",
+"		1852 1852  FlyVideo'98 - Video (with FM Tuner)",
+"	0370  Bt880 Video Capture",
+"		1851 1850  FlyVideo'98",
+"		1851 1851  FlyVideo'98 EZ - video",
+"		1852 1852  FlyVideo'98 (with FM Tuner)",
+"	0878  Bt878 Audio Capture",
+"		0070 13eb  WinTV Series",
+"		0070 ff01  Viewcast Osprey 200",
+"		0071 0101  DigiTV PCI",
+"		1002 0001  TV-Wonder",
+"		1002 0003  TV-Wonder/VE",
+"		11bd 0012  PCTV pro (TV + FM stereo receiver, audio section)",
+"		11bd 001c  PCTV Sat (DBC receiver)",
+"		127a 0001  Bt878 Video Capture (Audio Section)",
+"		127a 0002  Bt878 Video Capture (Audio Section)",
+"		127a 0003  Bt878 Video Capture (Audio Section)",
+"		127a 0048  Bt878 Video Capture (Audio Section)",
+"		13e9 0070  Win/TV (Audio Section)",
+"		144f 3000  MagicTView CPH060 - Audio",
+"		1461 0002  Avermedia PCTV98 Audio Capture",
+"		1461 0004  AVerTV WDM Audio Capture",
+"		1461 0761  AVerTV DVB-T",
+"		14f1 0001  Bt878 Video Capture (Audio Section)",
+"		14f1 0002  Bt878 Video Capture (Audio Section)",
+"		14f1 0003  Bt878 Video Capture (Audio Section)",
+"		14f1 0048  Bt878 Video Capture (Audio Section)",
+"		1822 0001  VisionPlus DVB Card",
+"		18ac d500  DViCO FusionHDTV5 Lite",
+"		270f fc00  Digitop DTT-1000",
+"		bd11 1200  PCTV pro (TV + FM stereo receiver, audio section)",
+"	0879  Bt879 Audio Capture",
+"		127a 0044  Bt879 Video Capture (Audio Section)",
+"		127a 0122  Bt879 Video Capture (Audio Section)",
+"		127a 0144  Bt879 Video Capture (Audio Section)",
+"		127a 0222  Bt879 Video Capture (Audio Section)",
+"		127a 0244  Bt879 Video Capture (Audio Section)",
+"		127a 0322  Bt879 Video Capture (Audio Section)",
+"		127a 0422  Bt879 Video Capture (Audio Section)",
+"		127a 1122  Bt879 Video Capture (Audio Section)",
+"		127a 1222  Bt879 Video Capture (Audio Section)",
+"		127a 1322  Bt879 Video Capture (Audio Section)",
+"		127a 1522  Bt879 Video Capture (Audio Section)",
+"		127a 1622  Bt879 Video Capture (Audio Section)",
+"		127a 1722  Bt879 Video Capture (Audio Section)",
+"		14f1 0044  Bt879 Video Capture (Audio Section)",
+"		14f1 0122  Bt879 Video Capture (Audio Section)",
+"		14f1 0144  Bt879 Video Capture (Audio Section)",
+"		14f1 0222  Bt879 Video Capture (Audio Section)",
+"		14f1 0244  Bt879 Video Capture (Audio Section)",
+"		14f1 0322  Bt879 Video Capture (Audio Section)",
+"		14f1 0422  Bt879 Video Capture (Audio Section)",
+"		14f1 1122  Bt879 Video Capture (Audio Section)",
+"		14f1 1222  Bt879 Video Capture (Audio Section)",
+"		14f1 1322  Bt879 Video Capture (Audio Section)",
+"		14f1 1522  Bt879 Video Capture (Audio Section)",
+"		14f1 1622  Bt879 Video Capture (Audio Section)",
+"		14f1 1722  Bt879 Video Capture (Audio Section)",
+"	0880  Bt880 Audio Capture",
+"	2115  BtV 2115 Mediastream controller",
+"	2125  BtV 2125 Mediastream controller",
+"	2164  BtV 2164",
+"	2165  BtV 2165",
+"	8230  Bt8230 ATM Segment/Reassembly Ctrlr (SRC)",
+"	8472  Bt8472",
+"	8474  Bt8474",
+"109f  Trigem Computer Inc.",
+"10a0  Meidensha Corporation",
+"10a1  Juko Electronics Ind. Co. Ltd",
+"10a2  Quantum Corporation",
+"10a3  Everex Systems Inc",
+"10a4  Globe Manufacturing Sales",
+"10a5  Smart Link Ltd.",
+"	3052  SmartPCI562 56K Modem",
+"	5449  SmartPCI561 modem",
+"10a6  Informtech Industrial Ltd.",
+"10a7  Benchmarq Microelectronics",
+"10a8  Sierra Semiconductor",
+"	0000  STB Horizon 64",
+"10a9  Silicon Graphics, Inc.",
+"	0001  Crosstalk to PCI Bridge",
+"	0002  Linc I/O controller",
+"	0003  IOC3 I/O controller",
+"	0004  O2 MACE",
+"	0005  RAD Audio",
+"	0006  HPCEX",
+"	0007  RPCEX",
+"	0008  DiVO VIP",
+"	0009  AceNIC Gigabit Ethernet",
+"		10a9 8002  AceNIC Gigabit Ethernet",
+"	0010  AMP Video I/O",
+"	0011  GRIP",
+"	0012  SGH PSHAC GSN",
+"	1001  Magic Carpet",
+"	1002  Lithium",
+"	1003  Dual JPEG 1",
+"	1004  Dual JPEG 2",
+"	1005  Dual JPEG 3",
+"	1006  Dual JPEG 4",
+"	1007  Dual JPEG 5",
+"	1008  Cesium",
+"	100a  IOC4 I/O controller",
+"	2001  Fibre Channel",
+"	2002  ASDE",
+"	4001  TIO-CE PCI Express Bridge",
+"	4002  TIO-CE PCI Express Port",
+"	8001  O2 1394",
+"	8002  G-net NT",
+"	8010  Broadcom e-net [SGI IO9/IO10 BaseIO]",
+"	8018  Broadcom e-net [SGI A330 Server BaseIO]",
+"10aa  ACC Microelectronics",
+"	0000  ACCM 2188",
+"10ab  Digicom",
+"10ac  Honeywell IAC",
+"10ad  Symphony Labs",
+"	0001  W83769F",
+"	0003  SL82C103",
+"	0005  SL82C105",
+"	0103  SL82c103",
+"	0105  SL82c105",
+"	0565  W83C553",
+"10ae  Cornerstone Technology",
+"10af  Micro Computer Systems Inc",
+"10b0  CardExpert Technology",
+"10b1  Cabletron Systems Inc",
+"10b2  Raytheon Company",
+"10b3  Databook Inc",
+"	3106  DB87144",
+"	b106  DB87144",
+"10b4  STB Systems Inc",
+"	1b1d  Velocity 128 3D",
+"		10b4 237e  Velocity 4400",
+"10b5  PLX Technology, Inc.",
+"	0001  i960 PCI bus interface",
+"	1042  Brandywine / jxi2, Inc. - PMC-SyncClock32, IRIG A & B, Nasa 36",
+"	1076  VScom 800 8 port serial adaptor",
+"	1077  VScom 400 4 port serial adaptor",
+"	1078  VScom 210 2 port serial and 1 port parallel adaptor",
+"	1103  VScom 200 2 port serial adaptor",
+"	1146  VScom 010 1 port parallel adaptor",
+"	1147  VScom 020 2 port parallel adaptor",
+"	2540  IXXAT CAN-Interface PC-I 04/PCI",
+"	2724  Thales PCSM Security Card",
+"	6540  PCI6540/6466 PCI-PCI bridge (transparent mode)",
+"		4c53 10e0  PSL09 PrPMC",
+"	6541  PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side)",
+"		4c53 10e0  PSL09 PrPMC",
+"	6542  PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side)",
+"		4c53 10e0  PSL09 PrPMC",
+"	8111  PEX 8111 PCI Express-to-PCI Bridge",
+"	8114  PEX 8114 PCI Express-to-PCI/PCI-X Bridge",
+"	8516  PEX 8516  Versatile PCI Express Switch",
+"	8532  PEX 8532  Versatile PCI Express Switch",
+"	9030  PCI <-> IOBus Bridge Hot Swap",
+"		10b5 2862  Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board",
+"		10b5 2906  Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board",
+"		10b5 2940  Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board",
+"		10b5 2977  IXXAT iPC-I XC16/PCI CAN Board",
+"		10b5 2978  SH ARC-PCIu SOHARD ARCNET card",
+"		10b5 3025  Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board",
+"		10b5 3068  Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board",
+"		1397 3136  4xS0-ISDN PCI Adapter",
+"		1397 3137  S2M-E1-ISDN PCI Adapter",
+"		1518 0200  Kontron ThinkIO-C",
+"		15ed 1002  MCCS 8-port Serial Hot Swap",
+"		15ed 1003  MCCS 16-port Serial Hot Swap",
+"	9036  9036",
+"	9050  PCI <-> IOBus Bridge",
+"		10b5 1067  IXXAT CAN i165",
+"		10b5 1172  IK220 (Heidenhain)",
+"		10b5 2036  SatPak GPS",
+"		10b5 2221  Alpermann+Velte PCL PCI LV: Timecode Reader Board",
+"		10b5 2273  SH ARC-PCI SOHARD ARCNET card",
+"		10b5 2431  Alpermann+Velte PCL PCI D: Timecode Reader Board",
+"		10b5 2905  Alpermann+Velte PCI TS: Time Synchronisation Board",
+"		10b5 9050  MP9050",
+"		1498 0362  TPMC866 8 Channel Serial Card",
+"		1522 0001  RockForce 4 Port V.90 Data/Fax/Voice Modem",
+"		1522 0002  RockForce 2 Port V.90 Data/Fax/Voice Modem",
+"		1522 0003  RockForce 6 Port V.90 Data/Fax/Voice Modem",
+"		1522 0004  RockForce 8 Port V.90 Data/Fax/Voice Modem",
+"		1522 0010  RockForce2000 4 Port V.90 Data/Fax/Voice Modem",
+"		1522 0020  RockForce2000 2 Port V.90 Data/Fax/Voice Modem",
+"		15ed 1000  Macrolink MCCS 8-port Serial",
+"		15ed 1001  Macrolink MCCS 16-port Serial",
+"		15ed 1002  Macrolink MCCS 8-port Serial Hot Swap",
+"		15ed 1003  Macrolink MCCS 16-port Serial Hot Swap",
+"		5654 2036  OpenSwitch 6 Telephony card",
+"		5654 3132  OpenSwitch 12 Telephony card",
+"		5654 5634  OpenLine4 Telephony Card",
+"		d531 c002  PCIntelliCAN 2xSJA1000 CAN bus",
+"		d84d 4006  EX-4006 1P",
+"		d84d 4008  EX-4008 1P EPP/ECP",
+"		d84d 4014  EX-4014 2P",
+"		d84d 4018  EX-4018 3P EPP/ECP",
+"		d84d 4025  EX-4025 1S(16C550) RS-232",
+"		d84d 4027  EX-4027 1S(16C650) RS-232",
+"		d84d 4028  EX-4028 1S(16C850) RS-232",
+"		d84d 4036  EX-4036 2S(16C650) RS-232",
+"		d84d 4037  EX-4037 2S(16C650) RS-232",
+"		d84d 4038  EX-4038 2S(16C850) RS-232",
+"		d84d 4052  EX-4052 1S(16C550) RS-422/485",
+"		d84d 4053  EX-4053 2S(16C550) RS-422/485",
+"		d84d 4055  EX-4055 4S(16C550) RS-232",
+"		d84d 4058  EX-4055 4S(16C650) RS-232",
+"		d84d 4065  EX-4065 8S(16C550) RS-232",
+"		d84d 4068  EX-4068 8S(16C650) RS-232",
+"		d84d 4078  EX-4078 2S(16C552) RS-232+1P",
+"	9054  PCI <-> IOBus Bridge",
+"		10b5 2455  Wessex Techology PHIL-PCI",
+"		10b5 2696  Innes Corp AM Radcap card",
+"		10b5 2717  Innes Corp Auricon card",
+"		10b5 2844  Innes Corp TVS Encoder card",
+"		12c7 4001  Intel Dialogic DM/V960-4T1 PCI",
+"		12d9 0002  PCI Prosody Card rev 1.5",
+"		16df 0011  PIKA PrimeNet MM PCI",
+"		16df 0012  PIKA PrimeNet MM cPCI 8",
+"		16df 0013  PIKA PrimeNet MM cPCI 8 (without CAS Signaling)",
+"		16df 0014  PIKA PrimeNet MM cPCI 4",
+"		16df 0015  PIKA Daytona MM",
+"		16df 0016  PIKA InLine MM",
+"	9056  Francois",
+"		10b5 2979  CellinkBlade 11 - CPCI board VoATM AAL1",
+"	9060  9060",
+"	906d  9060SD",
+"		125c 0640  Aries 16000P",
+"	906e  9060ES",
+"	9080  9080",
+"		103c 10eb  (Agilent) E2777B 83K Series Optical Communication Interface",
+"		103c 10ec  (Agilent) E6978-66442 PCI CIC",
+"		10b5 9080  9080 [real subsystem ID not set]",
+"		129d 0002  Aculab PCI Prosidy card",
+"		12d9 0002  PCI Prosody Card",
+"		12df 4422  4422PCI ['Do-All' Telemetry Data Aquisition System]",
+"	bb04  B&B 3PCIOSD1A Isolated PCI Serial",
+"10b6  Madge Networks",
+"	0001  Smart 16/4 PCI Ringnode",
+"	0002  Smart 16/4 PCI Ringnode Mk2",
+"		10b6 0002  Smart 16/4 PCI Ringnode Mk2",
+"		10b6 0006  16/4 CardBus Adapter",
+"	0003  Smart 16/4 PCI Ringnode Mk3",
+"		0e11 b0fd  Compaq NC4621 PCI, 4/16, WOL",
+"		10b6 0003  Smart 16/4 PCI Ringnode Mk3",
+"		10b6 0007  Presto PCI Plus Adapter",
+"	0004  Smart 16/4 PCI Ringnode Mk1",
+"	0006  16/4 Cardbus Adapter",
+"		10b6 0006  16/4 CardBus Adapter",
+"	0007  Presto PCI Adapter",
+"		10b6 0007  Presto PCI",
+"	0009  Smart 100/16/4 PCI-HS Ringnode",
+"		10b6 0009  Smart 100/16/4 PCI-HS Ringnode",
+"	000a  Smart 100/16/4 PCI Ringnode",
+"		10b6 000a  Smart 100/16/4 PCI Ringnode",
+"	000b  16/4 CardBus Adapter Mk2",
+"		10b6 0008  16/4 CardBus Adapter Mk2",
+"		10b6 000b  16/4 Cardbus Adapter Mk2",
+"	000c  RapidFire 3140V2 16/4 TR Adapter",
+"		10b6 000c  RapidFire 3140V2 16/4 TR Adapter",
+"	1000  Collage 25/155 ATM Client Adapter",
+"	1001  Collage 155 ATM Server Adapter",
+"10b7  3Com Corporation",
+"	0001  3c985 1000BaseSX (SX/TX)",
+"	0013  AR5212 802.11abg NIC (3CRDAG675)",
+"		10b7 2031  3CRDAG675 11a/b/g Wireless PCI Adapter",
+"	0910  3C910-A01",
+"	1006  MINI PCI type 3B Data Fax Modem",
+"	1007  Mini PCI 56k Winmodem",
+"		10b7 615c  Mini PCI 56K Modem",
+"	1201  3c982-TXM 10/100baseTX Dual Port A [Hydra]",
+"	1202  3c982-TXM 10/100baseTX Dual Port B [Hydra]",
+"	1700  3c940 10/100/1000Base-T [Marvell]",
+"		1043 80eb  A7V600/P4P800/K8V motherboard",
+"		10b7 0010  3C940 Gigabit LOM Ethernet Adapter",
+"		10b7 0020  3C941 Gigabit LOM Ethernet Adapter",
+"		147b 1407  KV8-MAX3 motherboard",
+"	3390  3c339 TokenLink Velocity",
+"	3590  3c359 TokenLink Velocity XL",
+"		10b7 3590  TokenLink Velocity XL Adapter (3C359/359B)",
+"	4500  3c450 HomePNA [Tornado]",
+"	5055  3c555 Laptop Hurricane",
+"	5057  3c575 Megahertz 10/100 LAN CardBus [Boomerang]",
+"		10b7 5a57  3C575 Megahertz 10/100 LAN Cardbus PC Card",
+"	5157  3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone]",
+"		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card",
+"	5257  3cCFE575CT CardBus [Cyclone]",
+"		10b7 5c57  FE575C-3Com 10/100 LAN CardBus-Fast Ethernet",
+"	5900  3c590 10BaseT [Vortex]",
+"	5920  3c592 EISA 10mbps Demon/Vortex",
+"	5950  3c595 100BaseTX [Vortex]",
+"	5951  3c595 100BaseT4 [Vortex]",
+"	5952  3c595 100Base-MII [Vortex]",
+"	5970  3c597 EISA Fast Demon/Vortex",
+"	5b57  3c595 Megahertz 10/100 LAN CardBus [Boomerang]",
+"		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card",
+"	6000  3CRSHPW796 [OfficeConnect Wireless CardBus]",
+"	6001  3com 3CRWE154G72 [Office Connect Wireless LAN Adapter]",
+"	6055  3c556 Hurricane CardBus [Cyclone]",
+"	6056  3c556B CardBus [Tornado]",
+"		10b7 6556  10/100 Mini PCI Ethernet Adapter",
+"	6560  3cCFE656 CardBus [Cyclone]",
+"		10b7 656a  3CCFEM656 10/100 LAN+56K Modem CardBus",
+"	6561  3cCFEM656 10/100 LAN+56K Modem CardBus",
+"		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus",
+"	6562  3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone]",
+"		10b7 656b  3CCFEM656B 10/100 LAN+56K Modem CardBus",
+"	6563  3cCFEM656B 10/100 LAN+56K Modem CardBus",
+"		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus",
+"	6564  3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado]",
+"	7646  3cSOHO100-TX Hurricane",
+"	7770  3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect]",
+"	7940  3c803 FDDILink UTP Controller",
+"	7980  3c804 FDDILink SAS Controller",
+"	7990  3c805 FDDILink DAS Controller",
+"	80eb  3c940B 10/100/1000Base-T",
+"	8811  Token ring",
+"	9000  3c900 10BaseT [Boomerang]",
+"	9001  3c900 10Mbps Combo [Boomerang]",
+"	9004  3c900B-TPO Etherlink XL [Cyclone]",
+"		10b7 9004  3C900B-TPO Etherlink XL TPO 10Mb",
+"	9005  3c900B-Combo Etherlink XL [Cyclone]",
+"		10b7 9005  3C900B-Combo Etherlink XL Combo",
+"	9006  3c900B-TPC Etherlink XL [Cyclone]",
+"	900a  3c900B-FL 10base-FL [Cyclone]",
+"	9050  3c905 100BaseTX [Boomerang]",
+"	9051  3c905 100BaseT4 [Boomerang]",
+"	9055  3c905B 100BaseTX [Cyclone]",
+"		1028 0080  3C905B Fast Etherlink XL 10/100",
+"		1028 0081  3C905B Fast Etherlink XL 10/100",
+"		1028 0082  3C905B Fast Etherlink XL 10/100",
+"		1028 0083  3C905B Fast Etherlink XL 10/100",
+"		1028 0084  3C905B Fast Etherlink XL 10/100",
+"		1028 0085  3C905B Fast Etherlink XL 10/100",
+"		1028 0086  3C905B Fast Etherlink XL 10/100",
+"		1028 0087  3C905B Fast Etherlink XL 10/100",
+"		1028 0088  3C905B Fast Etherlink XL 10/100",
+"		1028 0089  3C905B Fast Etherlink XL 10/100",
+"		1028 0090  3C905B Fast Etherlink XL 10/100",
+"		1028 0091  3C905B Fast Etherlink XL 10/100",
+"		1028 0092  3C905B Fast Etherlink XL 10/100",
+"		1028 0093  3C905B Fast Etherlink XL 10/100",
+"		1028 0094  3C905B Fast Etherlink XL 10/100",
+"		1028 0095  3C905B Fast Etherlink XL 10/100",
+"		1028 0096  3C905B Fast Etherlink XL 10/100",
+"		1028 0097  3C905B Fast Etherlink XL 10/100",
+"		1028 0098  3C905B Fast Etherlink XL 10/100",
+"		1028 0099  3C905B Fast Etherlink XL 10/100",
+"		10b7 9055  3C905B Fast Etherlink XL 10/100",
+"	9056  3c905B-T4 Fast EtherLink XL [Cyclone]",
+"	9058  3c905B Deluxe Etherlink 10/100/BNC [Cyclone]",
+"	905a  3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone]",
+"	9200  3c905C-TX/TX-M [Tornado]",
+"		1028 0095  3C920 Integrated Fast Ethernet Controller",
+"		1028 0097  3C920 Integrated Fast Ethernet Controller",
+"		1028 00fe  Optiplex GX240",
+"		1028 012a  3C920 Integrated Fast Ethernet Controller [Latitude C640]",
+"		10b7 1000  3C905C-TX Fast Etherlink for PC Management NIC",
+"		10b7 7000  10/100 Mini PCI Ethernet Adapter",
+"		10f1 2466  Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller)",
+"	9201  3C920B-EMB Integrated Fast Ethernet Controller [Tornado]",
+"		1043 80ab  A7N8X Deluxe onboard 3C920B-EMB Integrated Fast Ethernet Controller",
+"	9202  3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller",
+"	9210  3C920B-EMB-WNM Integrated Fast Ethernet Controller",
+"	9300  3CSOHO100B-TX 910-A01 [tulip]",
+"	9800  3c980-TX Fast Etherlink XL Server Adapter [Cyclone]",
+"		10b7 9800  3c980-TX Fast Etherlink XL Server Adapter",
+"	9805  3c980-C 10/100baseTX NIC [Python-T]",
+"		10b7 1201  EtherLink Server 10/100 Dual Port A",
+"		10b7 1202  EtherLink Server 10/100 Dual Port B",
+"		10b7 9805  3c980 10/100baseTX NIC [Python-T]",
+"		10f1 2462  Thunder K7 S2462",
+"	9900  3C990-TX [Typhoon]",
+"	9902  3CR990-TX-95 [Typhoon 56-bit]",
+"	9903  3CR990-TX-97 [Typhoon 168-bit]",
+"	9904  3C990B-TX-M/3C990BSVR [Typhoon2]",
+"		10b7 1000  3CR990B-TX-M [Typhoon2]",
+"		10b7 2000  3CR990BSVR [Typhoon2 Server]",
+"	9905  3CR990-FX-95/97/95 [Typhon Fiber]",
+"		10b7 1101  3CR990-FX-95 [Typhoon Fiber 56-bit]",
+"		10b7 1102  3CR990-FX-97 [Typhoon Fiber 168-bit]",
+"		10b7 2101  3CR990-FX-95 Server [Typhoon Fiber 56-bit]",
+"		10b7 2102  3CR990-FX-97 Server [Typhoon Fiber 168-bit]",
+"	9908  3CR990SVR95 [Typhoon Server 56-bit]",
+"	9909  3CR990SVR97 [Typhoon Server 168-bit]",
+"	990a  3C990SVR [Typhoon Server]",
+"	990b  3C990SVR [Typhoon Server]",
+"10b8  Standard Microsystems Corp [SMC]",
+"	0005  83c170 EPIC/100 Fast Ethernet Adapter",
+"		1055 e000  LANEPIC 10/100 [EVB171Q-PCI]",
+"		1055 e002  LANEPIC 10/100 [EVB171G-PCI]",
+"		10b8 a011  EtherPower II 10/100",
+"		10b8 a014  EtherPower II 10/100",
+"		10b8 a015  EtherPower II 10/100",
+"		10b8 a016  EtherPower II 10/100",
+"		10b8 a017  EtherPower II 10/100",
+"	0006  83c175 EPIC/100 Fast Ethernet Adapter",
+"		1055 e100  LANEPIC Cardbus Fast Ethernet Adapter",
+"		1055 e102  LANEPIC Cardbus Fast Ethernet Adapter",
+"		1055 e300  LANEPIC Cardbus Fast Ethernet Adapter",
+"		1055 e302  LANEPIC Cardbus Fast Ethernet Adapter",
+"		10b8 a012  LANEPIC Cardbus Fast Ethernet Adapter",
+"		13a2 8002  LANEPIC Cardbus Fast Ethernet Adapter",
+"		13a2 8006  LANEPIC Cardbus Fast Ethernet Adapter",
+"	1000  FDC 37c665",
+"	1001  FDC 37C922",
+"	2802  SMC2802W [EZ Connect g]",
+"	a011  83C170QF",
+"	b106  SMC34C90",
+"10b9  ALi Corporation",
+"	0101  CMI8338/C3DX PCI Audio Device",
+"	0111  C-Media CMI8738/C3DX Audio Device (OEM)",
+"		10b9 0111  C-Media CMI8738/C3DX Audio Device (OEM)",
+"	0780  Multi-IO Card",
+"	0782  Multi-IO Card",
+"	1435  M1435",
+"	1445  M1445",
+"	1449  M1449",
+"	1451  M1451",
+"	1461  M1461",
+"	1489  M1489",
+"	1511  M1511 [Aladdin]",
+"	1512  M1512 [Aladdin]",
+"	1513  M1513 [Aladdin]",
+"	1521  M1521 [Aladdin III]",
+"		10b9 1521  ALI M1521 Aladdin III CPU Bridge",
+"	1523  M1523",
+"		10b9 1523  ALI M1523 ISA Bridge",
+"	1531  M1531 [Aladdin IV]",
+"	1533  M1533/M1535 PCI to ISA Bridge [Aladdin IV/V/V+]",
+"		1014 053b  ThinkPad R40e (2684-HVG) PCI to ISA Bridge",
+"		10b9 1533  ALi M1533 Aladdin IV/V ISA Bridge",
+"	1541  M1541",
+"		10b9 1541  ALI M1541 Aladdin V/V+ AGP System Controller",
+"	1543  M1543",
+"	1563  M1563 HyperTransport South Bridge",
+"	1573  PCI to LPC Controller",
+"	1621  M1621",
+"	1631  ALI M1631 PCI North Bridge Aladdin Pro III",
+"	1632  M1632M Northbridge+Trident",
+"	1641  ALI M1641 PCI North Bridge Aladdin Pro IV",
+"	1644  M1644/M1644T Northbridge+Trident",
+"	1646  M1646 Northbridge+Trident",
+"	1647  M1647 Northbridge [MAGiK 1 / MobileMAGiK 1]",
+"	1651  M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM]",
+"	1671  M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR]",
+"	1672  M1672 Northbridge [CyberALADDiN-P4]",
+"	1681  M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR]",
+"	1687  M1687 K8 Northbridge [AGP8X and HyperTransport]",
+"	1689  M1689 K8 Northbridge [Super K8 Single Chip]",
+"	1695  M1695 K8 Northbridge [PCI Express and HyperTransport]",
+"	1697  M1697 HTT Host Bridge",
+"	3141  M3141",
+"	3143  M3143",
+"	3145  M3145",
+"	3147  M3147",
+"	3149  M3149",
+"	3151  M3151",
+"	3307  M3307",
+"	3309  M3309",
+"	3323  M3325 Video/Audio Decoder",
+"	5212  M4803",
+"	5215  MS4803",
+"	5217  M5217H",
+"	5219  M5219",
+"	5225  M5225",
+"	5228  M5228 ALi ATA/RAID Controller",
+"	5229  M5229 IDE",
+"		1014 050f  ThinkPad R30",
+"		1014 053d  ThinkPad R40e (2684-HVG) builtin IDE",
+"		103c 0024  Pavilion ze4400 builtin IDE",
+"		1043 8053  A7A266 Motherboard IDE",
+"	5235  M5225",
+"	5237  USB 1.1 Controller",
+"		1014 0540  ThinkPad R40e (2684-HVG) builtin USB",
+"		103c 0024  Pavilion ze4400 builtin USB",
+"		104d 810f  VAIO PCG-U1 USB/OHCI Revision 1.0",
+"	5239  USB 2.0 Controller",
+"	5243  M1541 PCI to AGP Controller",
+"	5246  AGP8X Controller",
+"	5247  PCI to AGP Controller",
+"	5249  M5249 HTT to PCI Bridge",
+"	524b  PCI Express Root Port",
+"	524c  PCI Express Root Port",
+"	524d  PCI Express Root Port",
+"	524e  PCI Express Root Port",
+"	5251  M5251 P1394 OHCI 1.0 Controller",
+"	5253  M5253 P1394 OHCI 1.1 Controller",
+"	5261  M5261 Ethernet Controller",
+"	5263  M5263 Ethernet Controller",
+"	5281  ALi M5281 Serial ATA / RAID Host Controller",
+"	5287  ULi 5287 SATA",
+"	5288  ULi M5288 SATA",
+"	5289  ULi 5289 SATA",
+"	5450  Lucent Technologies Soft Modem AMR",
+"	5451  M5451 PCI AC-Link Controller Audio Device",
+"		1014 0506  ThinkPad R30",
+"		1014 053e  ThinkPad R40e (2684-HVG) builtin Audio",
+"		103c 0024  Pavilion ze4400 builtin Audio",
+"		10b9 5451  HP Compaq nc4010 (DY885AA#ABN)",
+"	5453  M5453 PCI AC-Link Controller Modem Device",
+"	5455  M5455 PCI AC-Link Controller Audio Device",
+"	5457  M5457 AC'97 Modem Controller",
+"		1014 0535  ThinkPad R40e (2684-HVG) builtin modem",
+"		103c 0024  Pavilion ze4400 builtin Modem Device",
+"	5459  SmartLink SmartPCI561 56K Modem",
+"	545a  SmartLink SmartPCI563 56K Modem",
+"	5461  High Definition Audio/AC'97 Host Controller",
+"	5471  M5471 Memory Stick Controller",
+"	5473  M5473 SD-MMC Controller",
+"	7101  M7101 Power Management Controller [PMU]",
+"		1014 0510  ThinkPad R30",
+"		1014 053c  ThinkPad R40e (2684-HVG) Power Management Controller",
+"		103c 0024  Pavilion ze4400",
+"10ba  Mitsubishi Electric Corp.",
+"	0301  AccelGraphics AccelECLIPSE",
+"	0304  AccelGALAXY A2100 [OEM Evans & Sutherland]",
+"	0308  Tornado 3000 [OEM Evans & Sutherland]",
+"	1002  VG500 [VolumePro Volume Rendering Accelerator]",
+"10bb  Dapha Electronics Corporation",
+"10bc  Advanced Logic Research",
+"10bd  Surecom Technology",
+"	0e34  NE-34",
+"10be  Tseng Labs International Co.",
+"10bf  Most Inc",
+"10c0  Boca Research Inc.",
+"10c1  ICM Co., Ltd.",
+"10c2  Auspex Systems Inc.",
+"10c3  Samsung Semiconductors, Inc.",
+"	1100  Smartether100 SC1100 LAN Adapter (i82557B)",
+"10c4  Award Software International Inc.",
+"10c5  Xerox Corporation",
+"10c6  Rambus Inc.",
+"10c7  Media Vision",
+"10c8  Neomagic Corporation",
+"	0001  NM2070 [MagicGraph 128]",
+"	0002  NM2090 [MagicGraph 128V]",
+"	0003  NM2093 [MagicGraph 128ZV]",
+"	0004  NM2160 [MagicGraph 128XD]",
+"		1014 00ba  MagicGraph 128XD",
+"		1025 1007  MagicGraph 128XD",
+"		1028 0074  MagicGraph 128XD",
+"		1028 0075  MagicGraph 128XD",
+"		1028 007d  MagicGraph 128XD",
+"		1028 007e  MagicGraph 128XD",
+"		1033 802f  MagicGraph 128XD",
+"		104d 801b  MagicGraph 128XD",
+"		104d 802f  MagicGraph 128XD",
+"		104d 830b  MagicGraph 128XD",
+"		10ba 0e00  MagicGraph 128XD",
+"		10c8 0004  MagicGraph 128XD",
+"		10cf 1029  MagicGraph 128XD",
+"		10f7 8308  MagicGraph 128XD",
+"		10f7 8309  MagicGraph 128XD",
+"		10f7 830b  MagicGraph 128XD",
+"		10f7 830d  MagicGraph 128XD",
+"		10f7 8312  MagicGraph 128XD",
+"	0005  NM2200 [MagicGraph 256AV]",
+"		1014 00dd  ThinkPad 570",
+"		1028 0088  Latitude CPi A",
+"	0006  NM2360 [MagicMedia 256ZX]",
+"	0016  NM2380 [MagicMedia 256XL+]",
+"		10c8 0016  MagicMedia 256XL+",
+"	0025  NM2230 [MagicGraph 256AV+]",
+"	0083  NM2093 [MagicGraph 128ZV+]",
+"	8005  NM2200 [MagicMedia 256AV Audio]",
+"		0e11 b0d1  MagicMedia 256AV Audio Device on Discovery",
+"		0e11 b126  MagicMedia 256AV Audio Device on Durango",
+"		1014 00dd  MagicMedia 256AV Audio Device on BlackTip Thinkpad",
+"		1025 1003  MagicMedia 256AV Audio Device on TravelMate 720",
+"		1028 0088  Latitude CPi A",
+"		1028 008f  MagicMedia 256AV Audio Device on Colorado Inspiron",
+"		103c 0007  MagicMedia 256AV Audio Device on Voyager II",
+"		103c 0008  MagicMedia 256AV Audio Device on Voyager III",
+"		103c 000d  MagicMedia 256AV Audio Device on Omnibook 900",
+"		10c8 8005  MagicMedia 256AV Audio Device on FireAnt",
+"		110a 8005  MagicMedia 256AV Audio Device",
+"		14c0 0004  MagicMedia 256AV Audio Device",
+"	8006  NM2360 [MagicMedia 256ZX Audio]",
+"	8016  NM2380 [MagicMedia 256XL+ Audio]",
+"10c9  Dataexpert Corporation",
+"10ca  Fujitsu Microelectr., Inc.",
+"10cb  Omron Corporation",
+"10cc  Mai Logic Incorporated",
+"	0660  Articia S Host Bridge",
+"	0661  Articia S PCI Bridge",
+"10cd  Advanced System Products, Inc",
+"	1100  ASC1100",
+"	1200  ASC1200 [(abp940) Fast SCSI-II]",
+"	1300  ABP940-U / ABP960-U",
+"		10cd 1310  ASC1300 SCSI Adapter",
+"	2300  ABP940-UW",
+"	2500  ABP940-U2W",
+"10ce  Radius",
+"10cf  Fujitsu Limited.",
+"	2001  mb86605",
+"10d1  FuturePlus Systems Corp.",
+"10d2  Molex Incorporated",
+"10d3  Jabil Circuit Inc",
+"10d4  Hualon Microelectronics",
+"10d5  Autologic Inc.",
+"10d6  Cetia",
+"10d7  BCM Advanced Research",
+"10d8  Advanced Peripherals Labs",
+"10d9  Macronix, Inc. [MXIC]",
+"	0431  MX98715",
+"	0512  MX98713",
+"	0531  MX987x5",
+"		1186 1200  DFE-540TX ProFAST 10/100 Adapter",
+"	8625  MX86250",
+"	8626  Macronix MX86251 + 3Dfx Voodoo Rush",
+"	8888  MX86200",
+"10da  Compaq IPG-Austin",
+"	0508  TC4048 Token Ring 4/16",
+"	3390  Tl3c3x9",
+"10db  Rohm LSI Systems, Inc.",
+"10dc  CERN/ECP/EDU",
+"	0001  STAR/RD24 SCI-PCI (PMC)",
+"	0002  TAR/RD24 SCI-PCI (PMC)",
+"	0021  HIPPI destination",
+"	0022  HIPPI source",
+"	10dc  ATT2C15-3 FPGA",
+"10dd  Evans & Sutherland",
+"	0100  Lightning 1200",
+"10de  nVidia Corporation",
+"	0008  NV1 [EDGE 3D]",
+"	0009  NV1 [EDGE 3D]",
+"	0010  NV2 [Mutara V08]",
+"	0020  NV4 [RIVA TNT]",
+"		1043 0200  V3400 TNT",
+"		1048 0c18  Erazor II SGRAM",
+"		1048 0c19  Erazor II",
+"		1048 0c1b  Erazor II",
+"		1048 0c1c  Erazor II",
+"		1092 0550  Viper V550",
+"		1092 0552  Viper V550",
+"		1092 4804  Viper V550",
+"		1092 4808  Viper V550",
+"		1092 4810  Viper V550",
+"		1092 4812  Viper V550",
+"		1092 4815  Viper V550",
+"		1092 4820  Viper V550 with TV out",
+"		1092 4822  Viper V550",
+"		1092 4904  Viper V550",
+"		1092 4914  Viper V550",
+"		1092 8225  Viper V550",
+"		10b4 273d  Velocity 4400",
+"		10b4 273e  Velocity 4400",
+"		10b4 2740  Velocity 4400",
+"		10de 0020  Riva TNT",
+"		1102 1015  Graphics Blaster CT6710",
+"		1102 1016  Graphics Blaster RIVA TNT",
+"	0028  NV5 [RIVA TNT2/TNT2 Pro]",
+"		1043 0200  AGP-V3800 SGRAM",
+"		1043 0201  AGP-V3800 SDRAM",
+"		1043 0205  PCI-V3800",
+"		1043 4000  AGP-V3800PRO",
+"		1048 0c21  Synergy II",
+"		1048 0c28  Erazor III",
+"		1048 0c29  Erazor III",
+"		1048 0c2a  Erazor III",
+"		1048 0c2b  Erazor III",
+"		1048 0c31  Erazor III Pro",
+"		1048 0c32  Erazor III Pro",
+"		1048 0c33  Erazor III Pro",
+"		1048 0c34  Erazor III Pro",
+"		107d 2134  WinFast 3D S320 II + TV-Out",
+"		1092 4804  Viper V770",
+"		1092 4a00  Viper V770",
+"		1092 4a02  Viper V770 Ultra",
+"		1092 5a00  RIVA TNT2/TNT2 Pro",
+"		1092 6a02  Viper V770 Ultra",
+"		1092 7a02  Viper V770 Ultra",
+"		10de 0005  RIVA TNT2 Pro",
+"		10de 000f  Compaq NVIDIA TNT2 Pro",
+"		1102 1020  3D Blaster RIVA TNT2",
+"		1102 1026  3D Blaster RIVA TNT2 Digital",
+"		14af 5810  Maxi Gamer Xentor",
+"	0029  NV5 [RIVA TNT2 Ultra]",
+"		1043 0200  AGP-V3800 Deluxe",
+"		1043 0201  AGP-V3800 Ultra SDRAM",
+"		1043 0205  PCI-V3800 Ultra",
+"		1048 0c2e  Erazor III Ultra",
+"		1048 0c2f  Erazor III Ultra",
+"		1048 0c30  Erazor III Ultra",
+"		1102 1021  3D Blaster RIVA TNT2 Ultra",
+"		1102 1029  3D Blaster RIVA TNT2 Ultra",
+"		1102 102f  3D Blaster RIVA TNT2 Ultra",
+"		14af 5820  Maxi Gamer Xentor 32",
+"	002a  NV5 [Riva TnT2]",
+"	002b  NV5 [Riva TnT2]",
+"	002c  NV6 [Vanta/Vanta LT]",
+"		1043 0200  AGP-V3800 Combat SDRAM",
+"		1043 0201  AGP-V3800 Combat",
+"		1048 0c20  TNT2 Vanta",
+"		1048 0c21  TNT2 Vanta",
+"		1092 6820  Viper V730",
+"		1102 1031  CT6938 VANTA 8MB",
+"		1102 1034  CT6894 VANTA 16MB",
+"		14af 5008  Maxi Gamer Phoenix 2",
+"	002d  NV5M64 [RIVA TNT2 Model 64/Model 64 Pro]",
+"		1043 0200  AGP-V3800M",
+"		1043 0201  AGP-V3800M",
+"		1048 0c3a  Erazor III LT",
+"		1048 0c3b  Erazor III LT",
+"		10de 001e  M64 AGP4x",
+"		1102 1023  CT6892 RIVA TNT2 Value",
+"		1102 1024  CT6932 RIVA TNT2 Value 32Mb",
+"		1102 102c  CT6931 RIVA TNT2 Value [Jumper]",
+"		1462 8808  MSI-8808",
+"		1554 1041  Pixelview RIVA TNT2 M64",
+"		1569 002d  Palit Microsystems Daytona TNT2 M64",
+"	002e  NV6 [Vanta]",
+"	002f  NV6 [Vanta]",
+"	0034  MCP04 SMBus",
+"	0035  MCP04 IDE",
+"	0036  MCP04 Serial ATA Controller",
+"	0037  MCP04 Ethernet Controller",
+"	0038  MCP04 Ethernet Controller",
+"	003a  MCP04 AC'97 Audio Controller",
+"	003b  MCP04 USB Controller",
+"	003c  MCP04 USB Controller",
+"	003d  MCP04 PCI Bridge",
+"	003e  MCP04 Serial ATA Controller",
+"	0040  NV40 [GeForce 6800 Ultra]",
+"	0041  NV40 [GeForce 6800]",
+"		1043 817b  V9999 Gamer Edition",
+"	0042  NV40.2 [GeForce 6800 LE]",
+"	0043  NV40.3",
+"	0044  NV40 [GeForce 6800 XT]",
+"	0045  NV40 [GeForce 6800 GT]",
+"	0047  NV40 [GeForce 6800 GS]",
+"		1682 2109  GeForce 6800 GS",
+"	0049  NV40GL",
+"	004e  NV40GL [Quadro FX 4000]",
+"	0050  CK804 ISA Bridge",
+"		1043 815a  K8N4-E Mainboard",
+"		1458 0c11  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	0051  CK804 ISA Bridge",
+"	0052  CK804 SMBus",
+"		1043 815a  K8N4-E Mainboard",
+"		1458 0c11  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	0053  CK804 IDE",
+"		1043 815a  K8N4-E Mainboard",
+"		1458 5002  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	0054  CK804 Serial ATA Controller",
+"		1458 b003  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	0055  CK804 Serial ATA Controller",
+"		1043 815a  K8N4-E Mainboard",
+"		1458 b003  GA-K8N Ultra-9 Mainboard",
+"	0056  CK804 Ethernet Controller",
+"	0057  CK804 Ethernet Controller",
+"		1043 8141  K8N4-E Mainboard",
+"		1458 e000  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	0058  CK804 AC'97 Modem",
+"	0059  CK804 AC'97 Audio Controller",
+"		1043 812a  K8N4-E Mainboard",
+"	005a  CK804 USB Controller",
+"		1043 815a  K8N4-E Mainboard",
+"		1458 5004  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	005b  CK804 USB Controller",
+"		1043 815a  K8N4-E Mainboard",
+"		1458 5004  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	005c  CK804 PCI Bridge",
+"	005d  CK804 PCIE Bridge",
+"	005e  CK804 Memory Controller",
+"		10f1 2891  Thunder K8SRE Mainboard",
+"		1458 5000  GA-K8N Ultra-9 Mainboard",
+"		1462 7100  MSI K8N Diamond",
+"	005f  CK804 Memory Controller",
+"	0060  nForce2 ISA Bridge",
+"		1043 80ad  A7N8X Mainboard",
+"		a0a0 03ba  UK79G-1394 motherboard",
+"	0064  nForce2 SMBus (MCP)",
+"		a0a0 03bb  UK79G-1394 motherboard",
+"	0065  nForce2 IDE",
+"		a0a0 03b2  UK79G-1394 motherboard",
+"	0066  nForce2 Ethernet Controller",
+"		1043 80a7  A7N8X Mainboard onboard nForce2 Ethernet",
+"	0067  nForce2 USB Controller",
+"		1043 0c11  A7N8X Mainboard",
+"	0068  nForce2 USB Controller",
+"		1043 0c11  A7N8X Mainboard",
+"		a0a0 03b4  UK79G-1394 motherboard",
+"	006a  nForce2 AC97 Audio Controler (MCP)",
+"		a0a0 0304  UK79G-1394 motherboard",
+"	006b  nForce Audio Processing Unit",
+"		10de 006b  nForce2 MCP Audio Processing Unit",
+"	006c  nForce2 External PCI Bridge",
+"	006d  nForce2 PCI Bridge",
+"	006e  nForce2 FireWire (IEEE 1394) Controller",
+"		a0a0 0306  UK79G-1394 motherboard",
+"	0080  MCP2A ISA bridge",
+"		147b 1c09  NV7 Motherboard",
+"	0084  MCP2A SMBus",
+"		147b 1c09  NV7 Motherboard",
+"	0085  MCP2A IDE",
+"		147b 1c09  NV7 Motherboard",
+"	0086  MCP2A Ethernet Controller",
+"	0087  MCP2A USB Controller",
+"		147b 1c09  NV7 Motherboard",
+"	0088  MCP2A USB Controller",
+"		147b 1c09  NV7 Motherboard",
+"	008a  MCP2S AC'97 Audio Controller",
+"		147b 1c09  NV7 Motherboard",
+"	008b  MCP2A PCI Bridge",
+"	008c  MCP2A Ethernet Controller",
+"	008e  nForce2 Serial ATA Controller",
+"	0090  G70 [GeForce 7800 GTX]",
+"	0091  G70 [GeForce 7800 GTX]",
+"	0092  G70 [GeForce 7800 GT]",
+"	0093  G70 [GeForce 7800 GS]",
+"	0098  GeForce Go 7800",
+"	0099  GE Force Go 7800 GTX",
+"	009d  G70GL [Quadro FX4500]",
+"	00a0  NV5 [Aladdin TNT2]",
+"		14af 5810  Maxi Gamer Xentor",
+"	00c0  NV41 [GeForce 6800 GS]",
+"	00c1  NV41.1 [GeForce 6800]",
+"	00c2  NV41.2 [GeForce 6800 LE]",
+"	00c3  NV42 [Geforce 6800 XT]",
+"	00c8  NV41.8 [GeForce Go 6800]",
+"	00c9  NV41.9 [GeForce Go 6800 Ultra]",
+"	00cc  NV41 [Quadro FX Go1400]",
+"	00cd  NV41 [Quadro FX 3450/4000 SDI]",
+"	00ce  NV41GL [Quadro FX 1400]",
+"	00d0  nForce3 LPC Bridge",
+"	00d1  nForce3 Host Bridge",
+"	00d2  nForce3 AGP Bridge",
+"	00d3  CK804 Memory Controller",
+"	00d4  nForce3 SMBus",
+"	00d5  nForce3 IDE",
+"	00d6  nForce3 Ethernet",
+"	00d7  nForce3 USB 1.1",
+"	00d8  nForce3 USB 2.0",
+"	00d9  nForce3 Audio",
+"	00da  nForce3 Audio",
+"	00dd  nForce3 PCI Bridge",
+"	00df  CK8S Ethernet Controller",
+"		147b 1c0b  NF8 Mainboard",
+"	00e0  nForce3 250Gb LPC Bridge",
+"		147b 1c0b  NF8 Mainboard",
+"	00e1  nForce3 250Gb Host Bridge",
+"		147b 1c0b  NF8 Mainboard",
+"	00e2  nForce3 250Gb AGP Host to PCI Bridge",
+"	00e3  CK8S Serial ATA Controller (v2.5)",
+"		147b 1c0b  NF8 Mainboard",
+"	00e4  nForce 250Gb PCI System Management",
+"		147b 1c0b  NF8 Mainboard",
+"	00e5  CK8S Parallel ATA Controller (v2.5)",
+"		147b 1c0b  NF8 Mainboard",
+"	00e6  CK8S Ethernet Controller",
+"	00e7  CK8S USB Controller",
+"		147b 1c0b  NF8 Mainboard",
+"	00e8  nForce3 EHCI USB 2.0 Controller",
+"		147b 1c0b  NF8 Mainboard",
+"	00ea  nForce3 250Gb AC'97 Audio Controller",
+"		147b 1c0b  NF8 Mainboard",
+"	00ed  nForce3 250Gb PCI-to-PCI Bridge",
+"	00ee  CK8S Serial ATA Controller (v2.5)",
+"	00f0  NV40 [GeForce 6800/GeForce 6800 Ultra]",
+"	00f1  NV43 [GeForce 6600/GeForce 6600 GT]",
+"		1043 81a6  N6600GT TD 128M AGP",
+"		1682 2119  GeForce 6600 GT AGP 128MB DDR3 DUAL DVI TV",
+"	00f2  NV43 [GeForce 6600/GeForce 6600 GT]",
+"		1682 211c  GeForce 6600 256MB DDR DUAL DVI TV",
+"	00f3  NV43 [GeForce 6200]",
+"	00f4  NV43 [GeForce 6600 LE]",
+"	00f5  G70 [GeForce 7800 GS]",
+"	00f6  NV43 [GeForce 6600 GS]",
+"	00f8  NV45GL [Quadro FX 3400/4400]",
+"	00f9  NV40 [GeForce 6800 Ultra/GeForce 6800 GT]",
+"		1682 2120  GEFORCE 6800 GT PCI-E",
+"	00fa  NV36 [GeForce PCX 5750]",
+"	00fb  NV35 [GeForce PCX 5900]",
+"	00fc  NV37GL [Quadro FX 330/GeForce PCX 5300]",
+"	00fd  NV37GL [Quadro FX 330/Quadro NVS280]",
+"	00fe  NV38GL [Quadro FX 1300]",
+"	00ff  NV18 [GeForce PCX 4300]",
+"	0100  NV10 [GeForce 256 SDR]",
+"		1043 0200  AGP-V6600 SGRAM",
+"		1043 0201  AGP-V6600 SDRAM",
+"		1043 4008  AGP-V6600 SGRAM",
+"		1043 4009  AGP-V6600 SDRAM",
+"		1048 0c41  Erazor X",
+"		1048 0c43  ERAZOR X PCI",
+"		1048 0c48  Synergy Force",
+"		1102 102d  CT6941 GeForce 256",
+"		14af 5022  3D Prophet SE",
+"	0101  NV10DDR [GeForce 256 DDR]",
+"		1043 0202  AGP-V6800 DDR",
+"		1043 400a  AGP-V6800 DDR SGRAM",
+"		1043 400b  AGP-V6800 DDR SDRAM",
+"		1048 0c42  Erazor X",
+"		107d 2822  WinFast GeForce 256",
+"		1102 102e  CT6971 GeForce 256 DDR",
+"		14af 5021  3D Prophet DDR-DVI",
+"	0103  NV10GL [Quadro]",
+"		1048 0c40  GLoria II-64",
+"		1048 0c44  GLoria II",
+"		1048 0c45  GLoria II",
+"		1048 0c4a  GLoria II-64 Pro",
+"		1048 0c4b  GLoria II-64 Pro DVII",
+"	0110  NV11 [GeForce2 MX/MX 400]",
+"		1043 4015  AGP-V7100 Pro",
+"		1043 4031  V7100 Pro with TV output",
+"		1048 0c60  Gladiac MX",
+"		1048 0c61  Gladiac 511PCI",
+"		1048 0c63  Gladiac 511TV-OUT 32MB",
+"		1048 0c64  Gladiac 511TV-OUT 64MB",
+"		1048 0c65  Gladiac 511TWIN",
+"		1048 0c66  Gladiac 311",
+"		10de 0091  Dell OEM GeForce 2 MX 400",
+"		10de 00a1  Apple OEM GeForce2 MX",
+"		1462 8817  MSI GeForce2 MX400 Pro32S [MS-8817]",
+"		14af 7102  3D Prophet II MX",
+"		14af 7103  3D Prophet II MX Dual-Display",
+"	0111  NV11DDR [GeForce2 MX 100 DDR/200 DDR]",
+"	0112  NV11 [GeForce2 Go]",
+"	0113  NV11GL [Quadro2 MXR/EX/Go]",
+"	0140  NV43 [GeForce 6600 GT]",
+"	0141  NV43 [GeForce 6600]",
+"		1458 3124  GV-NX66128DP Turbo Force Edition",
+"	0142  NV43 [GeForce 6600 PCIe]",
+"	0144  NV43 [GeForce Go 6600]",
+"	0145  NV43 [GeForce 6610 XL]",
+"	0146  NV43 [Geforce Go 6600TE/6200TE]",
+"	0148  NV43 [GeForce Go 6600]",
+"	0149  NV43 [GeForce Go 6600 GT]",
+"	014a  Quadro NVS 440",
+"	014c  Quadro FX 550",
+"	014e  NV43GL [Quadro FX 540]",
+"	014f  NV43 [GeForce 6200]",
+"	0150  NV15 [GeForce2 GTS/Pro]",
+"		1043 4016  V7700 AGP Video Card",
+"		1048 0c50  Gladiac",
+"		1048 0c52  Gladiac-64",
+"		107d 2840  WinFast GeForce2 GTS with TV output",
+"		107d 2842  WinFast GeForce 2 Pro",
+"		1462 8831  Creative GeForce2 Pro",
+"	0151  NV15DDR [GeForce2 Ti]",
+"		1043 405f  V7700Ti",
+"		1462 5506  Creative 3D Blaster Geforce2 Titanium",
+"	0152  NV15BR [GeForce2 Ultra, Bladerunner]",
+"		1048 0c56  GLADIAC Ultra",
+"	0153  NV15GL [Quadro2 Pro]",
+"	0161  GeForce 6200 TurboCache(TM)",
+"	0162  NV43 [GeForce 6200 SE]",
+"	0164  NV44 [GeForce Go 6200]",
+"	0165  NV44 [Quadro NVS 285]",
+"	0166  NV43 [GeForce Go 6400]",
+"	0167  GeForce Go 6200 TurboCache",
+"	0168  NV43 [GeForce Go 6200 TurboCache]",
+"	0170  NV17 [GeForce4 MX 460]",
+"	0171  NV17 [GeForce4 MX 440]",
+"		10b0 0002  Gainward Pro/600 TV",
+"		10de 0008  Apple OEM GeForce4 MX 440",
+"		1462 8661  G4MX440-VTP",
+"		1462 8730  MX440SES-T (MS-8873)",
+"		1462 8852  GeForce4 MX440 PCI",
+"		147b 8f00  Abit Siluro GeForce4MX440",
+"	0172  NV17 [GeForce4 MX 420]",
+"	0173  NV17 [GeForce4 MX 440-SE]",
+"	0174  NV17 [GeForce4 440 Go]",
+"	0175  NV17 [GeForce4 420 Go]",
+"	0176  NV17 [GeForce4 420 Go 32M]",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"	0177  NV17 [GeForce4 460 Go]",
+"	0178  NV17GL [Quadro4 550 XGL]",
+"	0179  NV17 [GeForce4 420 Go 32M]",
+"		10de 0179  GeForce4 MX (Mac)",
+"	017a  NV17GL [Quadro4 200/400 NVS]",
+"	017b  NV17GL [Quadro4 550 XGL]",
+"	017c  NV17GL [Quadro4 500 GoGL]",
+"	017d  NV17 [GeForce4 410 Go 16M]",
+"	0181  NV18 [GeForce4 MX 440 AGP 8x]",
+"		1043 806f  V9180 Magic",
+"		1462 8880  MS-StarForce GeForce4 MX 440 with AGP8X",
+"		1462 8900  MS-8890 GeForce 4 MX440 AGP8X",
+"		1462 9350  MSI Geforce4 MX T8X with AGP8X",
+"		147b 8f0d  Siluro GF4 MX-8X",
+"	0182  NV18 [GeForce4 MX 440SE AGP 8x]",
+"	0183  NV18 [GeForce4 MX 420 AGP 8x]",
+"	0185  NV18 [GeForce4 MX 4000 AGP 8x]",
+"	0186  NV18M [GeForce4 448 Go]",
+"	0187  NV18M [GeForce4 488 Go]",
+"	0188  NV18GL [Quadro4 580 XGL]",
+"	018a  NV18GL [Quadro4 NVS AGP 8x]",
+"	018b  NV18GL [Quadro4 380 XGL]",
+"	018c  Quadro NVS 50 PCI",
+"	018d  NV18M [GeForce4 448 Go]",
+"	01a0  NVCrush11 [GeForce2 MX Integrated Graphics]",
+"	01a4  nForce CPU bridge",
+"	01ab  nForce 420 Memory Controller (DDR)",
+"	01ac  nForce 220/420 Memory Controller",
+"	01ad  nForce 220/420 Memory Controller",
+"	01b0  nForce Audio",
+"	01b1  nForce Audio",
+"	01b2  nForce ISA Bridge",
+"	01b4  nForce PCI System Management",
+"	01b7  nForce AGP to PCI Bridge",
+"	01b8  nForce PCI-to-PCI bridge",
+"	01bc  nForce IDE",
+"	01c1  nForce AC'97 Modem Controller",
+"	01c2  nForce USB Controller",
+"	01c3  nForce Ethernet Controller",
+"	01d1  GeForce 7300 LE",
+"	01d7  Quadro NVS 110M / GeForce Go 7300",
+"	01d8  GeForce Go 7400",
+"	01da  Quadro NVS 110M",
+"	01de  Quadro FX 350",
+"		10de 01dc  Quadro  FX Go350M",
+"	01df  GeForce 7300 GS",
+"	01e0  nForce2 AGP (different version?)",
+"		147b 1c09  NV7 Motherboard",
+"	01e8  nForce2 AGP",
+"	01ea  nForce2 Memory Controller 0",
+"		a0a0 03b9  UK79G-1394 motherboard",
+"	01eb  nForce2 Memory Controller 1",
+"		a0a0 03b9  UK79G-1394 motherboard",
+"	01ec  nForce2 Memory Controller 2",
+"		a0a0 03b9  UK79G-1394 motherboard",
+"	01ed  nForce2 Memory Controller 3",
+"		a0a0 03b9  UK79G-1394 motherboard",
+"	01ee  nForce2 Memory Controller 4",
+"		a0a0 03b9  UK79G-1394 motherboard",
+"	01ef  nForce2 Memory Controller 5",
+"		a0a0 03b9  UK79G-1394 motherboard",
+"	01f0  NV18 [GeForce4 MX - nForce GPU]",
+"		a0a0 03b5  UK79G-1394 motherboard",
+"	0200  NV20 [GeForce3]",
+"		1043 402f  AGP-V8200 DDR",
+"		1048 0c70  GLADIAC 920",
+"	0201  NV20 [GeForce3 Ti 200]",
+"	0202  NV20 [GeForce3 Ti 500]",
+"		1043 405b  V8200 T5",
+"		1545 002f  Xtasy 6964",
+"	0203  NV20DCC [Quadro DCC]",
+"	0211  NV40 [GeForce 6800]",
+"	0212  NV40 [GeForce 6800 LE]",
+"	0215  NV40 [GeForce 6800 GT]",
+"	0218  NV40 [GeForce 6800 XT]",
+"	0221  NV43 [GeForce 6200]",
+"	0240  C51PV [GeForce 6150]",
+"		1462 7207  K8NGM2 series",
+"	0241  C51 PCI Express Bridge",
+"	0242  C51G [GeForce 6100]",
+"	0243  C51 PCI Express Bridge",
+"	0244  C51 PCI Express Bridge",
+"	0245  C51 PCI Express Bridge",
+"	0246  C51 PCI Express Bridge",
+"	0247  C51 PCI Express Bridge",
+"	0248  C51 PCI Express Bridge",
+"	0249  C51 PCI Express Bridge",
+"	024a  C51 PCI Express Bridge",
+"	024b  C51 PCI Express Bridge",
+"	024c  C51 PCI Express Bridge",
+"	024d  C51 PCI Express Bridge",
+"	024e  C51 PCI Express Bridge",
+"	024f  C51 PCI Express Bridge",
+"	0250  NV25 [GeForce4 Ti 4600]",
+"	0251  NV25 [GeForce4 Ti 4400]",
+"		1043 8023  v8440 GeForce 4 Ti4400",
+"	0252  NV25 [GeForce4 Ti]",
+"	0253  NV25 [GeForce4 Ti 4200]",
+"		107d 2896  WinFast A250 LE TD (Dual VGA/TV-out/DVI)",
+"		147b 8f09  Siluro (Dual VGA/TV-out/DVI)",
+"	0258  NV25GL [Quadro4 900 XGL]",
+"	0259  NV25GL [Quadro4 750 XGL]",
+"	025b  NV25GL [Quadro4 700 XGL]",
+"	0260  MCP51 LPC Bridge",
+"		1462 7207  K8NGM2 series",
+"	0261  MCP51 LPC Bridge",
+"	0262  MCP51 LPC Bridge",
+"	0263  MCP51 LPC Bridge",
+"	0264  MCP51 SMBus",
+"		1462 7207  K8NGM2 series",
+"	0265  MCP51 IDE",
+"		1462 7207  K8NGM2 series",
+"	0266  MCP51 Serial ATA Controller",
+"		1462 7207  K8NGM2 series",
+"	0267  MCP51 Serial ATA Controller",
+"		1462 7207  K8NGM2 series",
+"	0268  MCP51 Ethernet Controller",
+"	0269  MCP51 Ethernet Controller",
+"		1462 7207  K8NGM2 series",
+"	026a  MCP51 MCI",
+"	026b  MCP51 AC97 Audio Controller",
+"	026c  MCP51 High Definition Audio",
+"		1462 7207  K8NGM2 series",
+"	026d  MCP51 USB Controller",
+"		1462 7207  K8NGM2 series",
+"	026e  MCP51 USB Controller",
+"		1462 7207  K8NGM2 series",
+"	026f  MCP51 PCI Bridge",
+"	0270  MCP51 Host Bridge",
+"		1462 7207  K8NGM2 series",
+"	0271  MCP51 PMU",
+"	0272  MCP51 Memory Controller 0",
+"	027e  C51 Memory Controller 2",
+"		1462 7207  K8NGM2 series",
+"	027f  C51 Memory Controller 3",
+"		1462 7207  K8NGM2 series",
+"	0280  NV28 [GeForce4 Ti 4800]",
+"	0281  NV28 [GeForce4 Ti 4200 AGP 8x]",
+"	0282  NV28 [GeForce4 Ti 4800 SE]",
+"	0286  NV28 [GeForce4 Ti 4200 Go AGP 8x]",
+"	0288  NV28GL [Quadro4 980 XGL]",
+"	0289  NV28GL [Quadro4 780 XGL]",
+"	028c  NV28GLM [Quadro4 700 GoGL]",
+"	0290  GeForce 7900 GTX",
+"	0291  GeForce 7900 GT",
+"	029a  G71 [Quadro FX 2500M]",
+"	029b  G71 [Quadro FX 1500M]",
+"	029c  Quadro FX 5500",
+"	029d  Quadro FX 3500",
+"	029e  Quadro FX 1500",
+"	02a0  NV2A [XGPU]",
+"	02e1  GeForce 7600 GS",
+"	02f0  C51 Host Bridge",
+"		1462 7207  K8NGM2 series",
+"	02f1  C51 Host Bridge",
+"	02f2  C51 Host Bridge",
+"	02f3  C51 Host Bridge",
+"	02f4  C51 Host Bridge",
+"	02f5  C51 Host Bridge",
+"	02f6  C51 Host Bridge",
+"	02f7  C51 Host Bridge",
+"	02f8  C51 Memory Controller 5",
+"		1462 7207  K8NGM2 series",
+"	02f9  C51 Memory Controller 4",
+"		1462 7207  K8NGM2 series",
+"	02fa  C51 Memory Controller 0",
+"		1462 7207  K8NGM2 series",
+"	02fb  C51 PCI Express Bridge",
+"	02fc  C51 PCI Express Bridge",
+"	02fd  C51 PCI Express Bridge",
+"	02fe  C51 Memory Controller 1",
+"		1462 7207  K8NGM2 series",
+"	02ff  C51 Host Bridge",
+"		1462 7207  K8NGM2 series",
+"	0300  NV30 [GeForce FX]",
+"	0301  NV30 [GeForce FX 5800 Ultra]",
+"	0302  NV30 [GeForce FX 5800]",
+"	0308  NV30GL [Quadro FX 2000]",
+"	0309  NV30GL [Quadro FX 1000]",
+"	0311  NV31 [GeForce FX 5600 Ultra]",
+"	0312  NV31 [GeForce FX 5600]",
+"	0313  NV31",
+"	0314  NV31 [GeForce FX 5600XT]",
+"		1043 814a  V9560XT/TD",
+"	0316  NV31M",
+"	0317  NV31M Pro",
+"	031a  NV31M [GeForce FX Go5600]",
+"	031b  NV31M [GeForce FX Go5650]",
+"	031c  NVIDIA Quadro FX Go700",
+"	031d  NV31GLM",
+"	031e  NV31GLM Pro",
+"	031f  NV31GLM Pro",
+"	0320  NV34 [GeForce FX 5200]",
+"	0321  NV34 [GeForce FX 5200 Ultra]",
+"	0322  NV34 [GeForce FX 5200]",
+"		1462 9171  MS-8917 (FX5200-T128)",
+"		1462 9360  MS-8936 (FX5200-T128)",
+"	0323  NV34 [GeForce FX 5200LE]",
+"	0324  NV34M [GeForce FX Go5200]",
+"		1028 0196  Inspiron 5160",
+"		1071 8160  MIM2000",
+"	0325  NV34M [GeForce FX Go5250]",
+"	0326  NV34 [GeForce FX 5500]",
+"	0327  NV34 [GeForce FX 5100]",
+"	0328  NV34M [GeForce FX Go5200 32M/64M]",
+"	0329  NV34M [GeForce FX Go5200]",
+"	032a  NV34GL [Quadro NVS 280 PCI]",
+"	032b  NV34GL [Quadro FX 500/600 PCI]",
+"	032c  NV34GLM [GeForce FX Go 5300]",
+"	032d  NV34 [GeForce FX Go5100]",
+"	032f  NV34GL",
+"	0330  NV35 [GeForce FX 5900 Ultra]",
+"	0331  NV35 [GeForce FX 5900]",
+"		1043 8145  V9950GE",
+"	0332  NV35 [GeForce FX 5900XT]",
+"	0333  NV38 [GeForce FX 5950 Ultra]",
+"	0334  NV35 [GeForce FX 5900ZT]",
+"	0338  NV35GL [Quadro FX 3000]",
+"	033f  NV35GL [Quadro FX 700]",
+"	0341  NV36.1 [GeForce FX 5700 Ultra]",
+"	0342  NV36.2 [GeForce FX 5700]",
+"	0343  NV36 [GeForce FX 5700LE]",
+"	0344  NV36.4 [GeForce FX 5700VE]",
+"	0345  NV36.5",
+"	0347  NV36 [GeForce FX Go5700]",
+"		103c 006a  NX9500",
+"	0348  NV36 [GeForce FX Go5700]",
+"	0349  NV36M Pro",
+"	034b  NV36MAP",
+"	034c  NV36 [Quadro FX Go1000]",
+"	034e  NV36GL [Quadro FX 1100]",
+"	034f  NV36GL",
+"	0360  MCP55 LPC Bridge",
+"	0361  MCP55 LPC Bridge",
+"	0362  MCP55 LPC Bridge",
+"	0363  MCP55 LPC Bridge",
+"	0364  MCP55 LPC Bridge",
+"	0365  MCP55 LPC Bridge",
+"	0366  MCP55 LPC Bridge",
+"	0367  MCP55 LPC Bridge",
+"	0368  MCP55 SMBus",
+"	0369  MCP55 Memory Controller",
+"	036a  MCP55 Memory Controller",
+"	036c  MCP55 USB Controller",
+"	036d  MCP55 USB Controller",
+"	036e  MCP55 IDE",
+"	0371  MCP55 High Definition Audio",
+"	0372  MCP55 Ethernet",
+"	0373  MCP55 Ethernet",
+"	037a  MCP55 Memory Controller",
+"	037e  MCP55 SATA Controller",
+"	037f  MCP55 SATA Controller",
+"	0391  G70 [GeForce 7600 GT]",
+"	0392  G70 [GeForce 7600 GS]",
+"	0398  G70 [GeForce Go 7600]",
+"	039e  Quadro FX 560",
+"	03e0  MCP61 LPC Bridge",
+"	03e1  MCP61 LPC Bridge",
+"	03e2  MCP61 LPC Bridge",
+"	03e3  MCP61 LPC Bridge",
+"	03e4  MCP61 High Definition Audio",
+"	03e5  MCP61 Ethernet",
+"	03e6  MCP61 Ethernet",
+"	03e7  MCP61 SATA Controller",
+"	03ea  MCP61 Memory Controller",
+"	03eb  MCP61 SMBus",
+"	03ec  MCP61 IDE",
+"	03ee  MCP61 Ethernet",
+"	03ef  MCP61 Ethernet",
+"	03f0  MCP61 High Definition Audio",
+"	03f1  MCP61 USB Controller",
+"	03f2  MCP61 USB Controller",
+"	03f5  MCP61 Memory Controller",
+"	03f6  MCP61 SATA Controller",
+"	03f7  MCP61 SATA Controller",
+"10df  Emulex Corporation",
+"	1ae5  LP6000 Fibre Channel Host Adapter",
+"	f085  LP850 Fibre Channel Host Adapter",
+"	f095  LP952 Fibre Channel Host Adapter",
+"	f098  LP982 Fibre Channel Host Adapter",
+"	f0a1  Thor LightPulse Fibre Channel Host Adapter",
+"	f0a5  Thor LightPulse Fibre Channel Host Adapter",
+"	f0b5  Viper LightPulse Fibre Channel Host Adapter",
+"	f0d1  Helios LightPulse Fibre Channel Host Adapter",
+"	f0d5  Helios LightPulse Fibre Channel Host Adapter",
+"	f0e1  Zephyr LightPulse Fibre Channel Host Adapter",
+"	f0e5  Zephyr LightPulse Fibre Channel Host Adapter",
+"	f0f5  Neptune LightPulse Fibre Channel Host Adapter",
+"	f700  LP7000 Fibre Channel Host Adapter",
+"	f701  LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)",
+"	f800  LP8000 Fibre Channel Host Adapter",
+"	f801  LP8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)",
+"	f900  LP9000 Fibre Channel Host Adapter",
+"	f901  LP9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)",
+"	f980  LP9802 Fibre Channel Host Adapter",
+"	f981  LP9802 Fibre Channel Host Adapter Alternate ID",
+"	f982  LP9802 Fibre Channel Host Adapter Alternate ID",
+"	fa00  Thor-X LightPulse Fibre Channel Host Adapter",
+"	fb00  Viper LightPulse Fibre Channel Host Adapter",
+"	fc00  Thor-X LightPulse Fibre Channel Host Adapter",
+"	fc10  Helios-X LightPulse Fibre Channel Host Adapter",
+"	fc20  Zephyr-X LightPulse Fibre Channel Host Adapter",
+"	fd00  Helios-X LightPulse Fibre Channel Host Adapter",
+"	fe00  Zephyr-X LightPulse Fibre Channel Host Adapter",
+"	ff00  Neptune LightPulse Fibre Channel Host Adapter",
+"10e0  Integrated Micro Solutions Inc.",
+"	5026  IMS5026/27/28",
+"	5027  IMS5027",
+"	5028  IMS5028",
+"	8849  IMS8849",
+"	8853  IMS8853",
+"	9128  IMS9128 [Twin turbo 128]",
+"10e1  Tekram Technology Co.,Ltd.",
+"	0391  TRM-S1040",
+"		10e1 0391  DC-315U SCSI-3 Host Adapter",
+"	690c  DC-690c",
+"	dc29  DC-290",
+"10e2  Aptix Corporation",
+"10e3  Tundra Semiconductor Corp.",
+"	0000  CA91C042 [Universe]",
+"	0148  Tsi148 [Tempe]",
+"	0860  CA91C860 [QSpan]",
+"	0862  CA91C862A [QSpan-II]",
+"	8260  CA91L8200B [Dual PCI PowerSpan II]",
+"	8261  CA91L8260B [Single PCI PowerSpan II]",
+"10e4  Tandem Computers",
+"	8029  Realtek 8029 Network Card",
+"10e5  Micro Industries Corporation",
+"10e6  Gainbery Computer Products Inc.",
+"10e7  Vadem",
+"10e8  Applied Micro Circuits Corp.",
+"	1072  INES GPIB-PCI (AMCC5920 based)",
+"	2011  Q-Motion Video Capture/Edit board",
+"	4750  S5930 [Matchmaker]",
+"	5920  S5920",
+"	8043  LANai4.x [Myrinet LANai interface chip]",
+"	8062  S5933_PARASTATION",
+"	807d  S5933 [Matchmaker]",
+"	8088  Kongsberg Spacetec Format Synchronizer",
+"	8089  Kongsberg Spacetec Serial Output Board",
+"	809c  S5933_HEPC3",
+"	80d7  PCI-9112",
+"	80d9  PCI-9118",
+"	80da  PCI-9812",
+"	811a  PCI-IEEE1355-DS-DE Interface",
+"	814c  Fastcom ESCC-PCI (Commtech, Inc.)",
+"	8170  S5933 [Matchmaker] (Chipset Development Tool)",
+"	81e6  Multimedia video controller",
+"	8291  Fastcom 232/8-PCI (Commtech, Inc.)",
+"	82c4  Fastcom 422/4-PCI (Commtech, Inc.)",
+"	82c5  Fastcom 422/2-PCI (Commtech, Inc.)",
+"	82c6  Fastcom IG422/1-PCI (Commtech, Inc.)",
+"	82c7  Fastcom IG232/2-PCI (Commtech, Inc.)",
+"	82ca  Fastcom 232/4-PCI (Commtech, Inc.)",
+"	82db  AJA HDNTV HD SDI Framestore",
+"	82e2  Fastcom DIO24H-PCI (Commtech, Inc.)",
+"	8851  S5933 on Innes Corp FM Radio Capture card",
+"10e9  Alps Electric Co., Ltd.",
+"10ea  Intergraphics Systems",
+"	1680  IGA-1680",
+"	1682  IGA-1682",
+"	1683  IGA-1683",
+"	2000  CyberPro 2000",
+"	2010  CyberPro 2000A",
+"	5000  CyberPro 5000",
+"	5050  CyberPro 5050",
+"	5202  CyberPro 5202",
+"	5252  CyberPro5252",
+"10eb  Artists Graphics",
+"	0101  3GA",
+"	8111  Twist3 Frame Grabber",
+"10ec  Realtek Semiconductor Co., Ltd.",
+"	0139  Zonet Zen3200",
+"	8029  RTL-8029(AS)",
+"		10b8 2011  EZ-Card (SMC1208)",
+"		10ec 8029  RTL-8029(AS)",
+"		1113 1208  EN1208",
+"		1186 0300  DE-528",
+"		1259 2400  AT-2400",
+"	8129  RTL-8129",
+"		10ec 8129  RT8129 Fast Ethernet Adapter",
+"	8138  RT8139 (B/C) Cardbus Fast Ethernet Adapter",
+"		10ec 8138  RT8139 (B/C) Fast Ethernet Adapter",
+"	8139  RTL-8139/8139C/8139C+",
+"		0357 000a  TTP-Monitoring Card V2.0",
+"		1025 005a  TravelMate 290",
+"		1025 8920  ALN-325",
+"		1025 8921  ALN-325",
+"		103c 006a  NX9500",
+"		1043 8109  P5P800-MX Mainboard",
+"		1071 8160  MIM2000",
+"		10bd 0320  EP-320X-R",
+"		10ec 8139  RT8139",
+"		1113 ec01  FNC-0107TX",
+"		1186 1300  DFE-538TX",
+"		1186 1320  SN5200",
+"		1186 8139  DRN-32TX",
+"		11f6 8139  FN22-3(A) LinxPRO Ethernet Adapter",
+"		1259 2500  AT-2500TX",
+"		1259 2503  AT-2500TX/ACPI",
+"		1429 d010  ND010",
+"		1432 9130  EN-9130TX",
+"		1436 8139  RT8139",
+"		1458 e000  GA-7VM400M/7VT600 Motherboard",
+"		1462 788c  865PE Neo2-V Mainboard",
+"		146c 1439  FE-1439TX",
+"		1489 6001  GF100TXRII",
+"		1489 6002  GF100TXRA",
+"		149c 139a  LFE-8139ATX",
+"		149c 8139  LFE-8139TX",
+"		14cb 0200  LNR-100 Family 10/100 Base-TX Ethernet",
+"		1695 9001  Onboard RTL8101L 10/100 MBit",
+"		1799 5000  F5D5000 PCI Card/Desktop Network PCI Card",
+"		1904 8139  RTL8139D Fast Ethernet Adapter",
+"		2646 0001  EtheRx",
+"		8e2e 7000  KF-230TX",
+"		8e2e 7100  KF-230TX/2",
+"		a0a0 0007  ALN-325C",
+"	8169  RTL-8169 Gigabit Ethernet",
+"		1025 0079  Aspire 5024WLMi",
+"		1259 c107  CG-LAPCIGT",
+"		1371 434e  ProG-2000L",
+"		1458 e000  GA-8I915ME-G Mainboard",
+"		1462 702c  K8T NEO 2 motherboard",
+"	8180  RTL8180L 802.11b MAC",
+"	8185  RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller",
+"	8197  SmartLAN56 56K Modem",
+"10ed  Ascii Corporation",
+"	7310  V7310",
+"10ee  Xilinx Corporation",
+"	0205  Wildcard TE205P",
+"	0210  Wildcard TE210P",
+"	0314  Wildcard TE405P/TE410P (1st Gen)",
+"	0405  Wildcard TE405P (2nd Gen)",
+"	0410  Wildcard TE410P (2nd Gen)",
+"	3fc0  RME Digi96",
+"	3fc1  RME Digi96/8",
+"	3fc2  RME Digi96/8 Pro",
+"	3fc3  RME Digi96/8 Pad",
+"	3fc4  RME Digi9652 (Hammerfall)",
+"	3fc5  RME Hammerfall DSP",
+"	3fc6  RME Hammerfall DSP MADI",
+"	8381  Ellips Santos Frame Grabber",
+"	d154  Copley Controls CAN card (PCI-CAN-02)",
+"10ef  Racore Computer Products, Inc.",
+"	8154  M815x Token Ring Adapter",
+"10f0  Peritek Corporation",
+"10f1  Tyan Computer",
+"	2865  Tyan Thunder K8E S2865",
+"10f2  Achme Computer, Inc.",
+"10f3  Alaris, Inc.",
+"10f4  S-MOS Systems, Inc.",
+"10f5  NKK Corporation",
+"	a001  NDR4000 [NR4600 Bridge]",
+"10f6  Creative Electronic Systems SA",
+"10f7  Matsushita Electric Industrial Co., Ltd.",
+"10f8  Altos India Ltd",
+"10f9  PC Direct",
+"10fa  Truevision",
+"	000c  TARGA 1000",
+"10fb  Thesys Gesellschaft fuer Mikroelektronik mbH",
+"	186f  TH 6255",
+"10fc  I-O Data Device, Inc.",
+"	0003  Cardbus IDE Controller",
+"	0005  Cardbus SCSI CBSC II",
+"10fd  Soyo Computer, Inc",
+"10fe  Fast Multimedia AG",
+"10ff  NCube",
+"1100  Jazz Multimedia",
+"1101  Initio Corporation",
+"	1060  INI-A100U2W",
+"	9100  INI-9100/9100W",
+"	9400  INI-940",
+"	9401  INI-950",
+"	9500  360P",
+"	9502  Initio INI-9100UW Ultra Wide SCSI Controller INIC-950P chip",
+"1102  Creative Labs",
+"	0002  SB Live! EMU10k1",
+"		1102 0020  CT4850 SBLive! Value",
+"		1102 0021  CT4620 SBLive!",
+"		1102 002f  SBLive! mainboard implementation",
+"		1102 100a  SB Live! 5.1 Digital OEM [SB0220]",
+"		1102 4001  E-mu APS",
+"		1102 8022  CT4780 SBLive! Value",
+"		1102 8023  CT4790 SoundBlaster PCI512",
+"		1102 8024  CT4760 SBLive!",
+"		1102 8025  SBLive! Mainboard Implementation",
+"		1102 8026  CT4830 SBLive! Value",
+"		1102 8027  CT4832 SBLive! Value",
+"		1102 8028  CT4760 SBLive! OEM version",
+"		1102 8031  CT4831 SBLive! Value",
+"		1102 8040  CT4760 SBLive!",
+"		1102 8051  CT4850 SBLive! Value",
+"		1102 8061  SBLive! Player 5.1",
+"		1102 8064  SBLive! 5.1 Model SB0100",
+"		1102 8065  SBLive! 5.1 Digital Model SB0220",
+"		1102 8067  SBLive! 5.1 eMicro 28028",
+"	0004  SB Audigy",
+"		1102 0051  SB0090 Audigy Player",
+"		1102 0053  SB0090 Audigy Player/OEM",
+"		1102 0058  SB0090 Audigy Player/OEM",
+"		1102 1007  SB0240 Audigy 2 Platinum 6.1",
+"		1102 2002  SB Audigy 2 ZS (SB0350)",
+"	0006  [SB Live! Value] EMU10k1X",
+"	0007  SB Audigy LS",
+"		1102 0007  SBLive! 24bit",
+"		1102 1001  SB0310 Audigy LS",
+"		1102 1002  SB0312 Audigy LS",
+"		1102 1006  SB0410 SBLive! 24-bit",
+"		1462 1009  K8N Diamond",
+"	0008  SB0400 Audigy2 Value",
+"		1102 0008  EMU0404 Digital Audio System",
+"	4001  SB Audigy FireWire Port",
+"		1102 0010  SB Audigy FireWire Port",
+"	7002  SB Live! Game Port",
+"		1102 0020  Gameport Joystick",
+"	7003  SB Audigy Game Port",
+"		1102 0040  SB Audigy MIDI/Game Port",
+"	7004  [SB Live! Value] Input device controller",
+"	7005  SB Audigy LS Game Port",
+"		1102 1001  SB0310 Audigy LS MIDI/Game port",
+"		1102 1002  SB0312 Audigy LS MIDI/Game port",
+"	8064  SB0100 [SBLive! 5.1 OEM]",
+"	8938  Ectiva EV1938",
+"		1033 80e5  SlimTower-Jim (NEC)",
+"		1071 7150  Mitac 7150",
+"		110a 5938  Siemens Scenic Mobile 510PIII",
+"		13bd 100c  Ceres-C (Sharp, Intel BX)",
+"		13bd 100d  Sharp, Intel Banister",
+"		13bd 100e  TwinHead P09S/P09S3 (Sharp)",
+"		13bd f6f1  Marlin (Sharp)",
+"		14ff 0e70  P88TE (TWINHEAD INTERNATIONAL Corp)",
+"		14ff c401  Notebook 9100/9200/2000 (TWINHEAD INTERNATIONAL Corp)",
+"		156d b400  G400 - Geo (AlphaTop (Taiwan))",
+"		156d b550  G560  (AlphaTop (Taiwan))",
+"		156d b560  G560  (AlphaTop (Taiwan))",
+"		156d b700  G700/U700  (AlphaTop (Taiwan))",
+"		156d b795  G795  (AlphaTop (Taiwan))",
+"		156d b797  G797  (AlphaTop (Taiwan))",
+"1103  Triones Technologies, Inc.",
+"	0003  HPT343/345/346/363",
+"	0004  HPT366/368/370/370A/372/372N",
+"		1103 0001  HPT370A",
+"		1103 0004  HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4)",
+"		1103 0005  HPT370 UDMA100",
+"	0005  HPT372A/372N",
+"	0006  HPT302/302N",
+"	0007  HPT371/371N",
+"	0008  HPT374",
+"	0009  HPT372N",
+"1104  RasterOps Corp.",
+"1105  Sigma Designs, Inc.",
+"	1105  REALmagic Xcard MPEG 1/2/3/4 DVD Decoder",
+"	8300  REALmagic Hollywood Plus DVD Decoder",
+"	8400  EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder",
+"	8401  EM8401 REALmagic DVD/MPEG-2 A/V Decoder",
+"	8470  EM8470 REALmagic DVD/MPEG-4 A/V Decoder",
+"	8471  EM8471 REALmagic DVD/MPEG-4 A/V Decoder",
+"	8475  EM8475 REALmagic DVD/MPEG-4 A/V Decoder",
+"		1105 0001  REALmagic X-Card",
+"	8476  EM8476 REALmagic DVD/MPEG-4 A/V Decoder",
+"		127d 0000  CineView II",
+"	8485  EM8485 REALmagic DVD/MPEG-4 A/V Decoder",
+"	8486  EM8486 REALmagic DVD/MPEG-4 A/V Decoder",
+"1106  VIA Technologies, Inc.",
+"	0102  Embedded VIA Ethernet Controller",
+"	0130  VT6305 1394.A Controller",
+"	0204  K8M800 Host Bridge",
+"	0208  PT890 Host Bridge",
+"	0238  K8T890 Host Bridge",
+"	0258  PT880 Host Bridge",
+"	0259  CN400/PM880 Host Bridge",
+"	0269  KT880 Host Bridge",
+"	0282  K8T800Pro Host Bridge",
+"		1043 80a3  A8V Deluxe",
+"	0290  K8M890 Host Bridge",
+"	0293  PM896 Host Bridge",
+"	0296  P4M800 Host Bridge",
+"	0305  VT8363/8365 [KT133/KM133]",
+"		1019 0987  K7VZA Mainboard",
+"		1043 8033  A7V Mainboard",
+"		1043 803e  A7V-E Mainboard",
+"		1043 8042  A7V133/A7V133-C Mainboard",
+"		147b a401  KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard",
+"	0308  PT894 Host Bridge",
+"	0314  CN700/VN800/P4M800CE/Pro Host Bridge",
+"	0324  CX700 Host Bridge",
+"	0327  P4M890 Host Bridge",
+"	0336  K8M890CE Host Bridge",
+"	0340  PT900 Host Bridge",
+"	0351  VT3351 Host Bridge",
+"	0364  P4M900 Host Bridge",
+"	0391  VT8371 [KX133]",
+"	0501  VT8501 [Apollo MVP4]",
+"	0505  VT82C505",
+"	0561  VT82C576MV",
+"	0571  VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE",
+"		1019 0985  P6VXA Motherboard",
+"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
+"		1043 8052  VT8233A Bus Master ATA100/66/33 IDE",
+"		1043 808c  A7V8X / A7V333 motherboard",
+"		1043 80a1  A7V8X-X motherboard rev. 1.01",
+"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
+"		1106 0571  VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE",
+"		1179 0001  Magnia Z310",
+"		1297 f641  FX41 motherboard",
+"		1458 5002  GA-7VAX Mainboard",
+"		1462 7020  K8T NEO 2 motherboard",
+"		147b 1407  KV8-MAX3 motherboard",
+"		1849 0571  K7VT2/K7VT6 motherboard",
+"	0576  VT82C576 3V [Apollo Master]",
+"	0585  VT82C585VP [Apollo VP1/VPX]",
+"	0586  VT82C586/A/B PCI-to-ISA [Apollo VP]",
+"		1106 0000  MVP3 ISA Bridge",
+"	0591  VT8237A SATA 2-Port Controller",
+"	0595  VT82C595 [Apollo VP2]",
+"	0596  VT82C596 ISA [Mobile South]",
+"		1106 0000  VT82C596/A/B PCI to ISA Bridge",
+"		1458 0596  VT82C596/A/B PCI to ISA Bridge",
+"	0597  VT82C597 [Apollo VP3]",
+"	0598  VT82C598 [Apollo MVP3]",
+"	0601  VT8601 [Apollo ProMedia]",
+"	0605  VT8605 [ProSavage PM133]",
+"		1043 802c  CUV4X mainboard",
+"	0680  VT82C680 [Apollo P6]",
+"	0686  VT82C686 [Apollo Super South]",
+"		1019 0985  P6VXA Motherboard",
+"		1043 802c  CUV4X mainboard",
+"		1043 8033  A7V Mainboard",
+"		1043 803e  A7V-E Mainboard",
+"		1043 8040  A7M266 Mainboard",
+"		1043 8042  A7V133/A7V133-C Mainboard",
+"		1106 0000  VT82C686/A PCI to ISA Bridge",
+"		1106 0686  VT82C686/A PCI to ISA Bridge",
+"		1179 0001  Magnia Z310",
+"		147b a702  KG7-Lite Mainboard",
+"	0691  VT82C693A/694x [Apollo PRO133x]",
+"		1019 0985  P6VXA Motherboard",
+"		1179 0001  Magnia Z310",
+"		1458 0691  VT82C691 Apollo Pro System Controller",
+"	0693  VT82C693 [Apollo Pro Plus]",
+"	0698  VT82C693A [Apollo Pro133 AGP]",
+"	0926  VT82C926 [Amazon]",
+"	1000  VT82C570MV",
+"	1106  VT82C570MV",
+"	1204  K8M800 Host Bridge",
+"	1208  PT890 Host Bridge",
+"	1238  K8T890 Host Bridge",
+"	1258  PT880 Host Bridge",
+"	1259  CN400/PM880 Host Bridge",
+"	1269  KT880 Host Bridge",
+"	1282  K8T800Pro Host Bridge",
+"	1290  K8M890 Host Bridge",
+"	1293  PM896 Host Bridge",
+"	1296  P4M800 Host Bridge",
+"	1308  PT894 Host Bridge",
+"	1314  CN700/VN800/P4M800CE/Pro Host Bridge",
+"	1324  CX700 Host Bridge",
+"	1327  P4M890 Host Bridge",
+"	1336  K8M890CE Host Bridge",
+"	1340  PT900 Host Bridge",
+"	1351  VT3351 Host Bridge",
+"	1364  P4M900 Host Bridge",
+"	1571  VT82C576M/VT82C586",
+"	1595  VT82C595/97 [Apollo VP2/97]",
+"	2204  K8M800 Host Bridge",
+"	2208  PT890 Host Bridge",
+"	2238  K8T890 Host Bridge",
+"	2258  PT880 Host Bridge",
+"	2259  CN400/PM880 Host Bridge",
+"	2269  KT880 Host Bridge",
+"	2282  K8T800Pro Host Bridge",
+"	2290  K8M890 Host Bridge",
+"	2293  PM896 Host Bridge",
+"	2296  P4M800 Host Bridge",
+"	2308  PT894 Host Bridge",
+"	2314  CN700/VN800/P4M800CE/Pro Host Bridge",
+"	2324  CX700 Host Bridge",
+"	2327  P4M890 Host Bridge",
+"	2336  K8M890CE Host Bridge",
+"	2340  PT900 Host Bridge",
+"	2351  VT3351 Host Bridge",
+"	2364  P4M900 Host Bridge",
+"	287a  VT8251 PCI to PCI Bridge",
+"	287b  VT8251 Host Bridge",
+"	287c  VT8251 PCIE Root Port",
+"	287d  VT8251 PCIE Root Port",
+"	287e  VT8251 Ultra VLINK Controller",
+"	3022  CLE266",
+"	3038  VT82xxxxx UHCI USB 1.1 Controller",
+"		0925 1234  USB Controller",
+"		1019 0985  P6VXA Motherboard",
+"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
+"		1043 8080  A7V333 motherboard",
+"		1043 808c  VT6202 USB2.0 4 port controller",
+"		1043 80a1  A7V8X-X motherboard",
+"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
+"		1179 0001  Magnia Z310",
+"		1458 5004  GA-7VAX Mainboard",
+"		1462 7020  K8T NEO 2 motherboard",
+"		147b 1407  KV8-MAX3 motherboard",
+"		182d 201d  CN-029 USB2.0 4 port PCI Card",
+"		1849 3038  K7VT6",
+"	3040  VT82C586B ACPI",
+"	3043  VT86C100A [Rhine]",
+"		10bd 0000  VT86C100A Fast Ethernet Adapter",
+"		1106 0100  VT86C100A Fast Ethernet Adapter",
+"		1186 1400  DFE-530TX rev A",
+"	3044  IEEE 1394 Host Controller",
+"		1025 005a  TravelMate 290",
+"		1043 808a  A8V Deluxe",
+"		1458 1000  GA-7VT600-1394 Motherboard",
+"		1462 207d  K8NGM2 series motherboard",
+"		1462 702d  K8T NEO 2 motherboard",
+"		1462 971d  MS-6917",
+"	3050  VT82C596 Power Management",
+"	3051  VT82C596 Power Management",
+"	3053  VT6105M [Rhine-III]",
+"	3057  VT82C686 [Apollo Super ACPI]",
+"		1019 0985  P6VXA Motherboard",
+"		1019 0987  K7VZA Motherboard",
+"		1043 8033  A7V Mainboard",
+"		1043 803e  A7V-E Mainboard",
+"		1043 8040  A7M266 Mainboard",
+"		1043 8042  A7V133/A7V133-C Mainboard",
+"		1179 0001  Magnia Z310",
+"	3058  VT82C686 AC97 Audio Controller",
+"		0e11 0097  SoundMax Digital Integrated Audio",
+"		0e11 b194  Soundmax integrated digital audio",
+"		1019 0985  P6VXA Motherboard",
+"		1019 0987  K7VZA Motherboard",
+"		1043 1106  A7V133/A7V133-C Mainboard",
+"		1106 4511  Onboard Audio on EP7KXA",
+"		1458 7600  Onboard Audio",
+"		1462 3091  MS-6309 Onboard Audio",
+"		1462 3300  MS-6330 Onboard Audio",
+"		15dd 7609  Onboard Audio",
+"	3059  VT8233/A/8235/8237 AC97 Audio Controller",
+"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
+"		1043 8095  A7V8X Motherboard (Realtek ALC650 codec)",
+"		1043 80a1  A7V8X-X Motherboard",
+"		1043 80b0  A7V600/K8V Deluxe motherboard (ADI AD1980 codec [SoundMAX])",
+"		1043 812a  A8V Deluxe motherboard (Realtek ALC850 codec)",
+"		1106 3059  L7VMM2 Motherboard",
+"		1106 4161  K7VT2 motherboard",
+"		1106 4170  PCPartner P4M800-8237R Motherboard",
+"		1106 4552  Soyo KT-600 Dragon Plus (Realtek ALC 650)",
+"		1297 c160  FX41 motherboard (Realtek ALC650 codec)",
+"		1458 a002  GA-7VAX Onboard Audio (Realtek ALC650)",
+"		1462 0080  K8T NEO 2 motherboard",
+"		1462 3800  KT266 onboard audio",
+"		147b 1407  KV8-MAX3 motherboard",
+"		1849 9761  K7VT6 motherboard",
+"		4005 4710  MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P)",
+"		a0a0 01b6  AK77-8XN onboard audio",
+"	3065  VT6102 [Rhine-II]",
+"		1043 80a1  A7V8X-X Motherboard",
+"		1106 0102  VT6102 [Rhine II] Embeded Ethernet Controller on VT8235",
+"		1186 1400  DFE-530TX rev A",
+"		1186 1401  DFE-530TX rev B",
+"		13b9 1421  LD-10/100AL PCI Fast Ethernet Adapter (rev.B)",
+"		147b 1c09  NV7 Motherboard",
+"		1695 3005  VT6103",
+"		1695 300c  Realtek ALC655 sound chip",
+"		1849 3065  K7VT6 motherboard",
+"	3068  AC'97 Modem Controller",
+"		1462 309e  MS-6309 Saturn Motherboard",
+"	3074  VT8233 PCI to ISA Bridge",
+"		1043 8052  VT8233A",
+"	3091  VT8633 [Apollo Pro266]",
+"	3099  VT8366/A/7 [Apollo KT266/A/333]",
+"		1043 8064  A7V266-E Mainboard",
+"		1043 807f  A7V333 Mainboard",
+"		1849 3099  K7VT2 motherboard",
+"	3101  VT8653 Host Bridge",
+"	3102  VT8662 Host Bridge",
+"	3103  VT8615 Host Bridge",
+"	3104  USB 2.0",
+"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
+"		1043 808c  A7V8X motherboard",
+"		1043 80a1  A7V8X-X motherboard rev 1.01",
+"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
+"		1297 f641  FX41 motherboard",
+"		1458 5004  GA-7VAX Mainboard",
+"		1462 7020  K8T NEO 2 motherboard",
+"		147b 1407  KV8-MAX3 motherboard",
+"		182d 201d  CN-029 USB 2.0 4 port PCI Card",
+"		1849 3104  K7VT6 motherboard",
+"	3106  VT6105 [Rhine-III]",
+"		1186 1403  DFE-530TX rev C",
+"	3108  S3 Unichrome Pro VGA Adapter",
+"	3109  VT8233C PCI to ISA Bridge",
+"	3112  VT8361 [KLE133] Host Bridge",
+"	3113  VPX/VPX2 PCI to PCI Bridge Controller",
+"	3116  VT8375 [KM266/KL266] Host Bridge",
+"		1297 f641  FX41 motherboard",
+"	3118  S3 Unichrome Pro VGA Adapter",
+"	3119  VT6120/VT6121/VT6122 Gigabit Ethernet Adapter",
+"	3122  VT8623 [Apollo CLE266] integrated CastleRock graphics",
+"	3123  VT8623 [Apollo CLE266]",
+"	3128  VT8753 [P4X266 AGP]",
+"	3133  VT3133 Host Bridge",
+"	3147  VT8233A ISA Bridge",
+"		1043 808c  A7V333 motherboard",
+"	3148  P4M266 Host Bridge",
+"	3149  VIA VT6420 SATA RAID Controller",
+"		1043 80ed  A7V600/K8V Deluxe/K8V-X/A8V Deluxe motherboard",
+"		1458 b003  GA-7VM400AM(F) Motherboard",
+"		1462 7020  K8T Neo 2 Motherboard",
+"		147b 1407  KV8-MAX3 motherboard",
+"		147b 1408  KV7",
+"		1849 3149  K7VT6 motherboard",
+"	3156  P/KN266 Host Bridge",
+"	3164  VT6410 ATA133 RAID controller",
+"		1043 80f4  P4P800 Mainboard Deluxe ATX",
+"		1462 7028  915P/G Neo2",
+"	3168  VT8374 P4X400 Host Controller/AGP Bridge",
+"	3177  VT8235 ISA Bridge",
+"		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)",
+"		1043 808c  A7V8X motherboard",
+"		1043 80a1  A7V8X-X motherboard",
+"		1297 f641  FX41 motherboard",
+"		1458 5001  GA-7VAX Mainboard",
+"		1849 3177  K7VT2 motherboard",
+"	3178  ProSavageDDR P4N333 Host Bridge",
+"	3188  VT8385 [K8T800 AGP] Host Bridge",
+"		1043 80a3  K8V Deluxe/K8V-X motherboard",
+"		147b 1407  KV8-MAX3 motherboard",
+"	3189  VT8377 [KT400/KT600 AGP] Host Bridge",
+"		1043 807f  A7V8X motherboard",
+"		1458 5000  GA-7VAX Mainboard",
+"		1849 3189  K7VT6 motherboard",
+"	3204  K8M800 Host Bridge",
+"	3205  VT8378 [KM400/A] Chipset Host Bridge",
+"		1458 5000  GA-7VM400M Motherboard",
+"	3208  PT890 Host Bridge",
+"	3213  VPX/VPX2 PCI to PCI Bridge Controller",
+"	3218  K8T800M Host Bridge",
+"	3227  VT8237 ISA bridge [KT600/K8T800/K8T890 South]",
+"		1043 80ed  A7V600/K8V-X/A8V Deluxe motherboard",
+"		1106 3227  DFI KT600-AL Motherboard",
+"		1458 5001  GA-7VT600 Motherboard",
+"		147b 1407  KV8-MAX3 motherboard",
+"		1849 3227  K7VT4 motherboard",
+"	3238  K8T890 Host Bridge",
+"	3249  VT6421 IDE RAID Controller",
+"	324a  CX700 PCI to PCI Bridge",
+"	324b  CX700 Host Bridge",
+"	324e  CX700 Internal Module Bus",
+"	3258  PT880 Host Bridge",
+"	3259  CN400/PM880 Host Bridge",
+"	3269  KT880 Host Bridge",
+"	3282  K8T800Pro Host Bridge",
+"	3287  VT8251 PCI to ISA Bridge",
+"	3288  VIA High Definition Audio Controller",
+"	3290  K8M890 Host Bridge",
+"	3296  P4M800 Host Bridge",
+"	3324  CX700 Host Bridge",
+"	3327  P4M890 Host Bridge",
+"	3336  K8M890CE Host Bridge",
+"	3337  VT8237A PCI to ISA Bridge",
+"	3340  PT900 Host Bridge",
+"	3344  UniChrome Pro IGP",
+"	3349  VT8251 AHCI/SATA 4-Port Controller",
+"	3351  VT3351 Host Bridge",
+"	3364  P4M900 Host Bridge",
+"	337a  VT8237A PCI to PCI Bridge",
+"	337b  VT8237A Host Bridge",
+"	4149  VIA VT6420 (ATA133) Controller",
+"	4204  K8M800 Host Bridge",
+"	4208  PT890 Host Bridge",
+"	4238  K8T890 Host Bridge",
+"	4258  PT880 Host Bridge",
+"	4259  CN400/PM880 Host Bridge",
+"	4269  KT880 Host Bridge",
+"	4282  K8T800Pro Host Bridge",
+"	4290  K8M890 Host Bridge",
+"	4293  PM896 Host Bridge",
+"	4296  P4M800 Host Bridge",
+"	4308  PT894 Host Bridge",
+"	4314  CN700/VN800/P4M800CE/Pro Host Bridge",
+"	4324  CX700 Host Bridge",
+"	4327  P4M890 Host Bridge",
+"	4336  K8M890CE Host Bridge",
+"	4340  PT900 Host Bridge",
+"	4351  VT3351 Host Bridge",
+"	4364  P4M900 Host Bridge",
+"	5030  VT82C596 ACPI [Apollo PRO]",
+"	5208  PT890 I/O APIC Interrupt Controller",
+"	5238  K8T890 I/O APIC Interrupt Controller",
+"	5290  K8M890 I/O APIC Interrupt Controller",
+"	5308  PT894 I/O APIC Interrupt Controller",
+"	5327  P4M890 I/O APIC Interrupt Controller",
+"	5336  K8M890CE I/O APIC Interrupt Controller",
+"	5340  PT900 I/O APIC Interrupt Controller",
+"	5351  VT3351 I/O APIC Interrupt Controller",
+"	5364  P4M900 I/O APIC Interrupt Controller",
+"	6100  VT85C100A [Rhine II]",
+"	6327  P4M890 Security Device",
+"	7204  K8M800 Host Bridge",
+"	7205  VT8378 [S3 UniChrome] Integrated Video",
+"		1458 d000  Gigabyte GA-7VM400(A)M(F) Motherboard",
+"	7208  PT890 Host Bridge",
+"	7238  K8T890 Host Bridge",
+"	7258  PT880 Host Bridge",
+"	7259  CN400/PM880 Host Bridge",
+"	7269  KT880 Host Bridge",
+"	7282  K8T800Pro Host Bridge",
+"	7290  K8M890 Host Bridge",
+"	7293  PM896 Host Bridge",
+"	7296  P4M800 Host Bridge",
+"	7308  PT894 Host Bridge",
+"	7314  CN700/VN800/P4M800CE/Pro Host Bridge",
+"	7324  CX700 Host Bridge",
+"	7327  P4M890 Host Bridge",
+"	7336  K8M890CE Host Bridge",
+"	7340  PT900 Host Bridge",
+"	7351  VT3351 Host Bridge",
+"	7364  P4M900 Host Bridge",
+"	8231  VT8231 [PCI-to-ISA Bridge]",
+"	8235  VT8235 ACPI",
+"	8305  VT8363/8365 [KT133/KM133 AGP]",
+"	8324  CX700 PCI to ISA Bridge",
+"	8391  VT8371 [KX133 AGP]",
+"	8501  VT8501 [Apollo MVP4 AGP]",
+"	8596  VT82C596 [Apollo PRO AGP]",
+"	8597  VT82C597 [Apollo VP3 AGP]",
+"	8598  VT82C598/694x [Apollo MVP3/Pro133x AGP]",
+"		1019 0985  P6VXA Motherboard",
+"	8601  VT8601 [Apollo ProMedia AGP]",
+"	8605  VT8605 [PM133 AGP]",
+"	8691  VT82C691 [Apollo Pro]",
+"	8693  VT82C693 [Apollo Pro Plus] PCI Bridge",
+"	a208  PT890 PCI to PCI Bridge Controller",
+"	a238  K8T890 PCI to PCI Bridge Controller",
+"	a327  P4M890 PCI to PCI Bridge Controller",
+"	a364  P4M900 PCI to PCI Bridge Controller",
+"	b091  VT8633 [Apollo Pro266 AGP]",
+"	b099  VT8366/A/7 [Apollo KT266/A/333 AGP]",
+"	b101  VT8653 AGP Bridge",
+"	b102  VT8362 AGP Bridge",
+"	b103  VT8615 AGP Bridge",
+"	b112  VT8361 [KLE133] AGP Bridge",
+"	b113  VPX/VPX2 I/O APIC Interrupt Controller",
+"	b115  VT8363/8365 [KT133/KM133] PCI Bridge",
+"	b168  VT8235 PCI Bridge",
+"	b188  VT8237 PCI bridge [K8T800/K8T890 South]",
+"		147b 1407  KV8-MAX3 motherboard",
+"	b198  VT8237 PCI Bridge",
+"	b213  VPX/VPX2 I/O APIC Interrupt Controller",
+"	b999  [K8T890 North / VT8237 South] PCI Bridge",
+"	c208  PT890 PCI to PCI Bridge Controller",
+"	c238  K8T890 PCI to PCI Bridge Controller",
+"	c327  P4M890 PCI to PCI Bridge Controller",
+"	c340  PT900 PCI to PCI Bridge Controller",
+"	c364  P4M900 PCI to PCI Bridge Controller",
+"	d104  VT8237 Integrated Fast Ethernet Controller",
+"	d208  PT890 PCI to PCI Bridge Controller",
+"	d213  VPX/VPX2 PCI to PCI Bridge Controller",
+"	d238  K8T890 PCI to PCI Bridge Controller",
+"	d340  PT900 PCI to PCI Bridge Controller",
+"	e208  PT890 PCI to PCI Bridge Controller",
+"	e238  K8T890 PCI to PCI Bridge Controller",
+"	e340  PT900 PCI to PCI Bridge Controller",
+"	f208  PT890 PCI to PCI Bridge Controller",
+"	f238  K8T890 PCI to PCI Bridge Controller",
+"	f340  PT900 PCI to PCI Bridge Controller",
+"1107  Stratus Computers",
+"	0576  VIA VT82C570MV [Apollo] (Wrong vendor ID!)",
+"1108  Proteon, Inc.",
+"	0100  p1690plus_AA",
+"	0101  p1690plus_AB",
+"	0105  P1690Plus",
+"	0108  P1690Plus",
+"	0138  P1690Plus",
+"	0139  P1690Plus",
+"	013c  P1690Plus",
+"	013d  P1690Plus",
+"1109  Cogent Data Technologies, Inc.",
+"	1400  EM110TX [EX110TX]",
+"110a  Siemens Nixdorf AG",
+"	0002  Pirahna 2-port",
+"	0005  Tulip controller, power management, switch extender",
+"	0006  FSC PINC (I/O-APIC)",
+"	0015  FSC Multiprocessor Interrupt Controller",
+"	001d  FSC Copernicus Management Controller",
+"	007b  FSC Remote Service Controller, mailbox device",
+"	007c  FSC Remote Service Controller, shared memory device",
+"	007d  FSC Remote Service Controller, SMIC device",
+"	2101  HST SAPHIR V Primary PCI (ISDN/PMx)",
+"	2102  DSCC4 PEB/PEF 20534 DMA Supported Serial Communication Controller with 4 Channels",
+"	2104  Eicon Diva 2.02 compatible passive ISDN card",
+"	3142  SIMATIC NET CP 5613A1 (Profibus Adapter)",
+"	4021  SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter)",
+"	4029  SIMATIC NET CP 5613A2 (Profibus Adapter)",
+"	4942  FPGA I-Bus Tracer for MBD",
+"	6120  SZB6120",
+"110b  Chromatic Research Inc.",
+"	0001  Mpact Media Processor",
+"	0004  Mpact 2",
+"110c  Mini-Max Technology, Inc.",
+"110d  Znyx Advanced Systems",
+"110e  CPU Technology",
+"110f  Ross Technology",
+"1110  Powerhouse Systems",
+"	6037  Firepower Powerized SMP I/O ASIC",
+"	6073  Firepower Powerized SMP I/O ASIC",
+"1111  Santa Cruz Operation",
+"1112  Osicom Technologies Inc",
+"	2200  FDDI Adapter",
+"	2300  Fast Ethernet Adapter",
+"	2340  4 Port Fast Ethernet Adapter",
+"	2400  ATM Adapter",
+"1113  Accton Technology Corporation",
+"	1211  SMC2-1211TX",
+"		103c 1207  EN-1207D Fast Ethernet Adapter",
+"		1113 1211  EN-1207D Fast Ethernet Adapter",
+"	1216  EN-1216 Ethernet Adapter",
+"		1113 2242  EN2242 10/100 Ethernet Mini-PCI Card",
+"		111a 1020  SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?]",
+"	1217  EN-1217 Ethernet Adapter",
+"	5105  10Mbps Network card",
+"	9211  EN-1207D Fast Ethernet Adapter",
+"		1113 9211  EN-1207D Fast Ethernet Adapter",
+"	9511  21x4x DEC-Tulip compatible Fast Ethernet",
+"	d301  CPWNA100 (Philips wireless PCMCIA)",
+"	ec02  SMC 1244TX v3",
+"1114  Atmel Corporation",
+"	0506  at76c506 802.11b Wireless Network Adaptor",
+"1115  3D Labs",
+"1116  Data Translation",
+"	0022  DT3001",
+"	0023  DT3002",
+"	0024  DT3003",
+"	0025  DT3004",
+"	0026  DT3005",
+"	0027  DT3001-PGL",
+"	0028  DT3003-PGL",
+"1117  Datacube, Inc",
+"	9500  Max-1C SVGA card",
+"	9501  Max-1C image processing",
+"1118  Berg Electronics",
+"1119  ICP Vortex Computersysteme GmbH",
+"	0000  GDT 6000/6020/6050",
+"	0001  GDT 6000B/6010",
+"	0002  GDT 6110/6510",
+"	0003  GDT 6120/6520",
+"	0004  GDT 6530",
+"	0005  GDT 6550",
+"	0006  GDT 6117/6517",
+"	0007  GDT 6127/6527",
+"	0008  GDT 6537",
+"	0009  GDT 6557/6557-ECC",
+"	000a  GDT 6115/6515",
+"	000b  GDT 6125/6525",
+"	000c  GDT 6535",
+"	000d  GDT 6555",
+"	0010  GDT 6115/6515",
+"	0011  GDT 6125/6525",
+"	0012  GDT 6535",
+"	0013  GDT 6555/6555-ECC",
+"	0100  GDT 6117RP/6517RP",
+"	0101  GDT 6127RP/6527RP",
+"	0102  GDT 6537RP",
+"	0103  GDT 6557RP",
+"	0104  GDT 6111RP/6511RP",
+"	0105  GDT 6121RP/6521RP",
+"	0110  GDT 6117RD/6517RD",
+"	0111  GDT 6127RD/6527RD",
+"	0112  GDT 6537RD",
+"	0113  GDT 6557RD",
+"	0114  GDT 6111RD/6511RD",
+"	0115  GDT 6121RD/6521RD",
+"	0118  GDT 6118RD/6518RD/6618RD",
+"	0119  GDT 6128RD/6528RD/6628RD",
+"	011a  GDT 6538RD/6638RD",
+"	011b  GDT 6558RD/6658RD",
+"	0120  GDT 6117RP2/6517RP2",
+"	0121  GDT 6127RP2/6527RP2",
+"	0122  GDT 6537RP2",
+"	0123  GDT 6557RP2",
+"	0124  GDT 6111RP2/6511RP2",
+"	0125  GDT 6121RP2/6521RP2",
+"	0136  GDT 6113RS/6513RS",
+"	0137  GDT 6123RS/6523RS",
+"	0138  GDT 6118RS/6518RS/6618RS",
+"	0139  GDT 6128RS/6528RS/6628RS",
+"	013a  GDT 6538RS/6638RS",
+"	013b  GDT 6558RS/6658RS",
+"	013c  GDT 6533RS/6633RS",
+"	013d  GDT 6543RS/6643RS",
+"	013e  GDT 6553RS/6653RS",
+"	013f  GDT 6563RS/6663RS",
+"	0166  GDT 7113RN/7513RN/7613RN",
+"	0167  GDT 7123RN/7523RN/7623RN",
+"	0168  GDT 7118RN/7518RN/7518RN",
+"	0169  GDT 7128RN/7528RN/7628RN",
+"	016a  GDT 7538RN/7638RN",
+"	016b  GDT 7558RN/7658RN",
+"	016c  GDT 7533RN/7633RN",
+"	016d  GDT 7543RN/7643RN",
+"	016e  GDT 7553RN/7653RN",
+"	016f  GDT 7563RN/7663RN",
+"	01d6  GDT 4x13RZ",
+"	01d7  GDT 4x23RZ",
+"	01f6  GDT 8x13RZ",
+"	01f7  GDT 8x23RZ",
+"	01fc  GDT 8x33RZ",
+"	01fd  GDT 8x43RZ",
+"	01fe  GDT 8x53RZ",
+"	01ff  GDT 8x63RZ",
+"	0210  GDT 6519RD/6619RD",
+"	0211  GDT 6529RD/6629RD",
+"	0260  GDT 7519RN/7619RN",
+"	0261  GDT 7529RN/7629RN",
+"	02ff  GDT MAXRP",
+"	0300  GDT NEWRX",
+"111a  Efficient Networks, Inc",
+"	0000  155P-MF1 (FPGA)",
+"	0002  155P-MF1 (ASIC)",
+"	0003  ENI-25P ATM",
+"		111a 0000  ENI-25p Miniport ATM Adapter",
+"	0005  SpeedStream (LANAI)",
+"		111a 0001  ENI-3010 ATM",
+"		111a 0009  ENI-3060 ADSL (VPI=0)",
+"		111a 0101  ENI-3010 ATM",
+"		111a 0109  ENI-3060CO ADSL (VPI=0)",
+"		111a 0809  ENI-3060 ADSL (VPI=0 or 8)",
+"		111a 0909  ENI-3060CO ADSL (VPI=0 or 8)",
+"		111a 0a09  ENI-3060 ADSL (VPI=<0..15>)",
+"	0007  SpeedStream ADSL",
+"		111a 1001  ENI-3061 ADSL [ASIC]",
+"	1203  SpeedStream 1023 Wireless PCI Adapter",
+"111b  Teledyne Electronic Systems",
+"111c  Tricord Systems Inc.",
+"	0001  Powerbis Bridge",
+"111d  Integrated Device Technology, Inc.",
+"	0001  IDT77201/77211 155Mbps ATM SAR Controller [NICStAR]",
+"	0003  IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller",
+"	0004  IDT77V252 155Mbps ATM MICRO ABR SAR Controller",
+"	0005  IDT77V222 155Mbps ATM MICRO ABR SAR Controller",
+"111e  Eldec",
+"111f  Precision Digital Images",
+"	4a47  Precision MX Video engine interface",
+"	5243  Frame capture bus interface",
+"1120  EMC Corporation",
+"1121  Zilog",
+"1122  Multi-tech Systems, Inc.",
+"1123  Excellent Design, Inc.",
+"1124  Leutron Vision AG",
+"	2581  Picport Monochrome",
+"1125  Eurocore",
+"1126  Vigra",
+"1127  FORE Systems Inc",
+"	0200  ForeRunner PCA-200 ATM",
+"	0210  PCA-200PC",
+"	0250  ATM",
+"	0300  ForeRunner PCA-200EPC ATM",
+"	0310  ATM",
+"	0400  ForeRunnerHE ATM Adapter",
+"		1127 0400  ForeRunnerHE ATM",
+"1129  Firmworks",
+"112a  Hermes Electronics Company, Ltd.",
+"112b  Linotype - Hell AG",
+"112c  Zenith Data Systems",
+"112d  Ravicad",
+"112e  Infomedia Microelectronics Inc.",
+"112f  Imaging Technology Inc",
+"	0000  MVC IC-PCI",
+"	0001  MVC IM-PCI Video frame grabber/processor",
+"	0008  PC-CamLink PCI framegrabber",
+"1130  Computervision",
+"1131  Philips Semiconductors",
+"	1561  USB 1.1 Host Controller",
+"	1562  USB 2.0 Host Controller",
+"	3400  SmartPCI56(UCB1500) 56K Modem",
+"	5400  TriMedia TM1000/1100",
+"	5402  TriMedia TM-1300",
+"		1244 0f00  Fritz!Card DSL",
+"	5405  TriMedia TM1500",
+"	5406  TriMedia TM1700",
+"	7130  SAA7130 Video Broadcast Decoder",
+"		102b 48d0  Matrox CronosPlus",
+"		1048 226b  ELSA EX-VISION 300TV",
+"		1131 2001  10MOONS PCI TV CAPTURE CARD",
+"		1131 2005  Techcom (India) TV Tuner Card (SSD-TV-670)",
+"		1461 050c  Nagase Sangyo TransGear 3000TV",
+"		1461 10ff  AVerMedia DVD EZMaker",
+"		1461 2108  AverMedia AverTV/305",
+"		1461 2115  AverMedia AverTV Studio 305",
+"		153b 1152  Terratec Cinergy 200 TV",
+"		185b c100  Compro VideoMate TV PVR/FM",
+"		185b c901  Videomate DVB-T200",
+"		5168 0138  LifeView FlyVIDEO2000",
+"	7133  SAA7133/SAA7135 Video Broadcast Decoder",
+"		0000 4091  Beholder BeholdTV 409 FM",
+"		1019 4cb5  Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)",
+"		1043 0210  FlyTV mini Asus Digimatrix",
+"		1043 4843  ASUS TV-FM 7133",
+"		1043 4845  TV-FM 7135",
+"		1043 4862  P7131 Dual",
+"		1131 2001  Proteus Pro [philips reference design]",
+"		1131 2018  Tiger reference design",
+"		1131 4ee9  MonsterTV Mobile",
+"		11bd 002b  PCTV Stereo",
+"		11bd 002e  PCTV 110i (saa7133)",
+"		12ab 0800  PURPLE TV",
+"		1421 0335  Instant TV DVB-T Cardbus",
+"		1421 1370  Instant TV (saa7135)",
+"		1435 7330  VFG7330",
+"		1435 7350  VFG7350",
+"		1461 1044  AVerTVHD MCE A180",
+"		1461 f31f  Avermedia AVerTV GO 007 FM",
+"		1462 6231  TV@Anywhere plus",
+"		1489 0214  LifeView FlyTV Platinum FM",
+"		14c0 1212  LifeView FlyTV Platinum Mini2",
+"		153b 1160  Cinergy 250 PCI TV",
+"		153b 1162  Terratec Cinergy 400 mobile",
+"		185b c100  VideoMate TV",
+"		5168 0306  LifeView FlyDVB-T DUO",
+"		5168 0319  LifeView FlyDVB Trio",
+"	7134  SAA7134/SAA7135HL Video Broadcast Decoder",
+"		1019 4cb4  Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM)",
+"		1043 0210  Digimatrix TV",
+"		1043 4840  ASUS TV-FM 7134",
+"		1131 2004  EUROPA V3 reference design",
+"		1131 4e85  SKNet Monster TV",
+"		1131 6752  EMPRESS",
+"		11bd 002b  PCTV Stereo",
+"		11bd 002d  PCTV 300i DVB-T + PAL",
+"		1461 2c00  AverTV Hybrid+FM PCI",
+"		1461 9715  AVerTV Studio 307",
+"		1461 a70a  Avermedia AVerTV 307",
+"		1461 a70b  AverMedia M156 / Medion 2819",
+"		1461 d6ee  Cardbus TV/Radio (E500)",
+"		1471 b7e9  AVerTV Cardbus plus",
+"		153b 1142  Terratec Cinergy 400 TV",
+"		153b 1143  Terratec Cinergy 600 TV",
+"		153b 1158  Terratec Cinergy 600 TV MK3",
+"		1540 9524  ProVideo PV952",
+"		16be 0003  Medion 7134",
+"		185b c200  Compro VideoMate Gold+ Pal",
+"		185b c900  Videomate DVB-T300",
+"		1894 a006  KNC One TV-Station DVR",
+"		1894 fe01  KNC One TV-Station RDS / Typhoon TV Tuner RDS",
+"	7145  SAA7145",
+"	7146  SAA7146",
+"		110a 0000  Fujitsu/Siemens DVB-C card rev1.5",
+"		110a ffff  Fujitsu/Siemens DVB-C card rev1.5",
+"		1131 4f56  KNC1 DVB-S Budget",
+"		1131 4f60  Fujitsu-Siemens Activy DVB-S Budget Rev AL",
+"		1131 4f61  Activy DVB-S Budget Rev GR",
+"		1131 5f61  Activy DVB-T Budget",
+"		114b 2003  DVRaptor Video Edit/Capture Card",
+"		11bd 0006  DV500 Overlay",
+"		11bd 000a  DV500 Overlay",
+"		11bd 000f  DV500 Overlay",
+"		13c2 0000  Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5",
+"		13c2 0001  Technotrend/Hauppauge DVB card rev1.3 or rev1.6",
+"		13c2 0002  Technotrend/Hauppauge DVB card rev2.1",
+"		13c2 0003  Technotrend/Hauppauge DVB card rev2.1",
+"		13c2 0004  Technotrend/Hauppauge DVB card rev2.1",
+"		13c2 0006  Technotrend/Hauppauge DVB card rev1.3 or rev1.6",
+"		13c2 0008  Technotrend/Hauppauge DVB-T",
+"		13c2 000a  Octal/Technotrend DVB-C for iTV",
+"		13c2 1003  Technotrend-Budget/Hauppauge WinTV-NOVA-S DVB card",
+"		13c2 1004  Technotrend-Budget/Hauppauge WinTV-NOVA-C DVB card",
+"		13c2 1005  Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card",
+"		13c2 100c  Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card",
+"		13c2 100f  Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card",
+"		13c2 1011  Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card",
+"		13c2 1013  SATELCO Multimedia DVB",
+"		13c2 1016  WinTV-NOVA-SE DVB card",
+"		13c2 1102  Technotrend/Hauppauge DVB card rev2.1",
+"		153b 1156  Terratec Cynergy 1200C",
+"	9730  SAA9730 Integrated Multimedia and Peripheral Controller",
+"1132  Mitel Corp.",
+"1133  Eicon Networks Corporation",
+"	7901  EiconCard S90",
+"	7902  EiconCard S90",
+"	7911  EiconCard S91",
+"	7912  EiconCard S91",
+"	7941  EiconCard S94",
+"	7942  EiconCard S94",
+"	7943  EiconCard S94",
+"	7944  EiconCard S94",
+"	b921  EiconCard P92",
+"	b922  EiconCard P92",
+"	b923  EiconCard P92",
+"	e001  Diva Pro 2.0 S/T",
+"	e002  Diva 2.0 S/T PCI",
+"	e003  Diva Pro 2.0 U",
+"	e004  Diva 2.0 U PCI",
+"	e005  Diva 2.01 S/T PCI",
+"	e006  Diva CT S/T PCI",
+"	e007  Diva CT U PCI",
+"	e008  Diva CT Lite S/T PCI",
+"	e009  Diva CT Lite U PCI",
+"	e00a  Diva ISDN+V.90 PCI",
+"	e00b  Diva 2.02 PCI S/T",
+"	e00c  Diva 2.02 PCI U",
+"	e00d  Diva ISDN Pro 3.0 PCI",
+"	e00e  Diva ISDN+CT S/T PCI Rev 2",
+"	e010  Diva Server BRI-2M PCI",
+"		110a 0021  Fujitsu Siemens ISDN S0",
+"	e011  Diva Server BRI S/T Rev 2",
+"	e012  Diva Server 4BRI-8M PCI",
+"	e013  Diva Server 4BRI Rev 2",
+"		1133 1300  Diva Server V-4BRI-8",
+"		1133 e013  Diva Server 4BRI-8M 2.0 PCI",
+"	e014  Diva Server PRI-30M PCI",
+"	e015  DIVA Server PRI Rev 2",
+"		1133 e015  Diva Server PRI 2.0 PCI",
+"	e016  Diva Server Voice 4BRI PCI",
+"	e017  Diva Server Voice 4BRI Rev 2",
+"		1133 e017  Diva Server Voice 4BRI-8M 2.0 PCI",
+"	e018  Diva Server BRI-2M 2.0 PCI",
+"		1133 1800  Diva Server V-BRI-2",
+"		1133 e018  Diva Server BRI-2M 2.0 PCI",
+"	e019  Diva Server Voice PRI Rev 2",
+"		1133 e019  Diva Server Voice PRI 2.0 PCI",
+"	e01a  Diva Server 2FX",
+"	e01b  Diva Server Voice BRI-2M 2.0 PCI",
+"		1133 e01b  Diva Server Voice BRI-2M 2.0 PCI",
+"	e01c  Diva Server PRI Rev 3",
+"		1133 1c01  Diva Server PRI/E1/T1-8",
+"		1133 1c02  Diva Server PRI/T1-24",
+"		1133 1c03  Diva Server PRI/E1-30",
+"		1133 1c04  Diva Server PRI/E1/T1",
+"		1133 1c05  Diva Server V-PRI/T1-24",
+"		1133 1c06  Diva Server V-PRI/E1-30",
+"		1133 1c07  Diva Server PRI/E1/T1-8 Cornet NQ",
+"		1133 1c08  Diva Server PRI/T1-24 Cornet NQ",
+"		1133 1c09  Diva Server PRI/E1-30 Cornet NQ",
+"		1133 1c0a  Diva Server PRI/E1/T1 Cornet NQ",
+"		1133 1c0b  Diva Server V-PRI/T1-24 Cornet NQ",
+"		1133 1c0c  Diva Server V-PRI/E1-30 Cornet NQ",
+"	e01e  Diva Server 2PRI",
+"	e020  Diva Server 4PRI",
+"	e022  Diva Server Analog-2P",
+"	e024  Diva Server Analog-4P",
+"		1133 2400  Diva Server V-Analog-4P",
+"		1133 e024  Diva Server Analog-4P",
+"	e028  Diva Server Analog-8P",
+"		1133 2800  Diva Server V-Analog-8P",
+"		1133 e028  Diva Server Analog-8P",
+"	e02a  Diva Server IPM-300",
+"	e02c  Diva Server IPM-600",
+"1134  Mercury Computer Systems",
+"	0001  Raceway Bridge",
+"	0002  Dual PCI to RapidIO Bridge",
+"1135  Fuji Xerox Co Ltd",
+"	0001  Printer controller",
+"1136  Momentum Data Systems",
+"1137  Cisco Systems Inc",
+"1138  Ziatech Corporation",
+"	8905  8905 [STD 32 Bridge]",
+"1139  Dynamic Pictures, Inc",
+"	0001  VGA Compatable 3D Graphics",
+"113a  FWB Inc",
+"113b  Network Computing Devices",
+"113c  Cyclone Microsystems, Inc.",
+"	0000  PCI-9060 i960 Bridge",
+"	0001  PCI-SDK [PCI i960 Evaluation Platform]",
+"	0911  PCI-911 [i960Jx-based Intelligent I/O Controller]",
+"	0912  PCI-912 [i960CF-based Intelligent I/O Controller]",
+"	0913  PCI-913",
+"	0914  PCI-914 [I/O Controller w/ secondary PCI bus]",
+"113d  Leading Edge Products Inc",
+"113e  Sanyo Electric Co - Computer Engineering Dept",
+"113f  Equinox Systems, Inc.",
+"	0808  SST-64P Adapter",
+"	1010  SST-128P Adapter",
+"	80c0  SST-16P DB Adapter",
+"	80c4  SST-16P RJ Adapter",
+"	80c8  SST-16P Adapter",
+"	8888  SST-4P Adapter",
+"	9090  SST-8P Adapter",
+"1140  Intervoice Inc",
+"1141  Crest Microsystem Inc",
+"1142  Alliance Semiconductor Corporation",
+"	3210  AP6410",
+"	6422  ProVideo 6422",
+"	6424  ProVideo 6424",
+"	6425  ProMotion AT25",
+"	643d  ProMotion AT3D",
+"1143  NetPower, Inc",
+"1144  Cincinnati Milacron",
+"	0001  Noservo controller",
+"1145  Workbit Corporation",
+"	8007  NinjaSCSI-32 Workbit",
+"	f007  NinjaSCSI-32 KME",
+"	f010  NinjaSCSI-32 Workbit",
+"	f012  NinjaSCSI-32 Logitec",
+"	f013  NinjaSCSI-32 Logitec",
+"	f015  NinjaSCSI-32 Melco",
+"	f020  NinjaSCSI-32 Sony PCGA-DVD51",
+"1146  Force Computers",
+"1147  Interface Corp",
+"1148  SysKonnect",
+"	4000  FDDI Adapter",
+"		0e11 b03b  Netelligent 100 FDDI DAS Fibre SC",
+"		0e11 b03c  Netelligent 100 FDDI SAS Fibre SC",
+"		0e11 b03d  Netelligent 100 FDDI DAS UTP",
+"		0e11 b03e  Netelligent 100 FDDI SAS UTP",
+"		0e11 b03f  Netelligent 100 FDDI SAS Fibre MIC",
+"		1148 5521  FDDI SK-5521 (SK-NET FDDI-UP)",
+"		1148 5522  FDDI SK-5522 (SK-NET FDDI-UP DAS)",
+"		1148 5541  FDDI SK-5541 (SK-NET FDDI-FP)",
+"		1148 5543  FDDI SK-5543 (SK-NET FDDI-LP)",
+"		1148 5544  FDDI SK-5544 (SK-NET FDDI-LP DAS)",
+"		1148 5821  FDDI SK-5821 (SK-NET FDDI-UP64)",
+"		1148 5822  FDDI SK-5822 (SK-NET FDDI-UP64 DAS)",
+"		1148 5841  FDDI SK-5841 (SK-NET FDDI-FP64)",
+"		1148 5843  FDDI SK-5843 (SK-NET FDDI-LP64)",
+"		1148 5844  FDDI SK-5844 (SK-NET FDDI-LP64 DAS)",
+"	4200  Token Ring adapter",
+"	4300  SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)",
+"		1148 9821  SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T)",
+"		1148 9822  SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link)",
+"		1148 9841  SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX)",
+"		1148 9842  SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link)",
+"		1148 9843  SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX)",
+"		1148 9844  SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link)",
+"		1148 9861  SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition)",
+"		1148 9862  SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link)",
+"		1148 9871  SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX)",
+"		1148 9872  SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)",
+"		1259 2970  AT-2970SX Gigabit Ethernet Adapter",
+"		1259 2971  AT-2970LX Gigabit Ethernet Adapter",
+"		1259 2972  AT-2970TX Gigabit Ethernet Adapter",
+"		1259 2973  AT-2971SX Gigabit Ethernet Adapter",
+"		1259 2974  AT-2971T Gigabit Ethernet Adapter",
+"		1259 2975  AT-2970SX/2SC Gigabit Ethernet Adapter",
+"		1259 2976  AT-2970LX/2SC Gigabit Ethernet Adapter",
+"		1259 2977  AT-2970TX/2TX Gigabit Ethernet Adapter",
+"	4320  SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter, PCI64, Fiber ZX/SC",
+"		1148 0121  Marvell RDK-8001 Adapter",
+"		1148 0221  Marvell RDK-8002 Adapter",
+"		1148 0321  Marvell RDK-8003 Adapter",
+"		1148 0421  Marvell RDK-8004 Adapter",
+"		1148 0621  Marvell RDK-8006 Adapter",
+"		1148 0721  Marvell RDK-8007 Adapter",
+"		1148 0821  Marvell RDK-8008 Adapter",
+"		1148 0921  Marvell RDK-8009 Adapter",
+"		1148 1121  Marvell RDK-8011 Adapter",
+"		1148 1221  Marvell RDK-8012 Adapter",
+"		1148 3221  SK-9521 V2.0 10/100/1000Base-T Adapter",
+"		1148 5021  SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter",
+"		1148 5041  SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter",
+"		1148 5043  SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter",
+"		1148 5051  SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter",
+"		1148 5061  SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter",
+"		1148 5071  SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter",
+"		1148 9521  SK-9521 10/100/1000Base-T Adapter",
+"	4400  SK-9Dxx Gigabit Ethernet Adapter",
+"	4500  SK-9Mxx Gigabit Ethernet Adapter",
+"	9000  SK-9S21 10/100/1000Base-T Server Adapter, PCI-X, Copper RJ-45",
+"	9843  [Fujitsu] Gigabit Ethernet",
+"	9e00  SK-9E21D 10/100/1000Base-T Adapter, Copper RJ-45",
+"		1148 2100  SK-9E21 Server Adapter",
+"		1148 21d0  SK-9E21D 10/100/1000Base-T Adapter",
+"		1148 2200  SK-9E22 Server Adapter",
+"		1148 8100  SK-9E81 Server Adapter",
+"		1148 8200  SK-9E82 Server Adapter",
+"		1148 9100  SK-9E91 Server Adapter",
+"		1148 9200  SK-9E92 Server Adapter",
+"1149  Win System Corporation",
+"114a  VMIC",
+"	5579  VMIPCI-5579 (Reflective Memory Card)",
+"	5587  VMIPCI-5587 (Reflective Memory Card)",
+"	6504  VMIC PCI 7755 FPGA",
+"	7587  VMIVME-7587",
+"114b  Canopus Co., Ltd",
+"114c  Annabooks",
+"114d  IC Corporation",
+"114e  Nikon Systems Inc",
+"114f  Digi International",
+"	0002  AccelePort EPC",
+"	0003  RightSwitch SE-6",
+"	0004  AccelePort Xem",
+"	0005  AccelePort Xr",
+"	0006  AccelePort Xr,C/X",
+"	0009  AccelePort Xr/J",
+"	000a  AccelePort EPC/J",
+"	000c  DataFirePRIme T1 (1-port)",
+"	000d  SyncPort 2-Port (x.25/FR)",
+"	0011  AccelePort 8r EIA-232 (IBM)",
+"	0012  AccelePort 8r EIA-422",
+"	0014  AccelePort 8r EIA-422",
+"	0015  AccelePort Xem",
+"	0016  AccelePort EPC/X",
+"	0017  AccelePort C/X",
+"	001a  DataFirePRIme E1 (1-port)",
+"	001b  AccelePort C/X (IBM)",
+"	001d  DataFire RAS T1/E1/PRI",
+"		114f 0050  DataFire RAS E1 Adapter",
+"		114f 0051  DataFire RAS Dual E1 Adapter",
+"		114f 0052  DataFire RAS T1 Adapter",
+"		114f 0053  DataFire RAS Dual T1 Adapter",
+"	0023  AccelePort RAS",
+"	0024  DataFire RAS B4 ST/U",
+"		114f 0030  DataFire RAS BRI U Adapter",
+"		114f 0031  DataFire RAS BRI S/T Adapter",
+"	0026  AccelePort 4r 920",
+"	0027  AccelePort Xr 920",
+"	0028  ClassicBoard 4",
+"	0029  ClassicBoard 8",
+"	0034  AccelePort 2r 920",
+"	0035  DataFire DSP T1/E1/PRI cPCI",
+"	0040  AccelePort Xp",
+"	0042  AccelePort 2p",
+"	0043  AccelePort 4p",
+"	0044  AccelePort 8p",
+"	0045  AccelePort 16p",
+"	004e  AccelePort 32p",
+"	0070  Datafire Micro V IOM2 (Europe)",
+"	0071  Datafire Micro V (Europe)",
+"	0072  Datafire Micro V IOM2 (North America)",
+"	0073  Datafire Micro V (North America)",
+"	00b0  Digi Neo 4",
+"	00b1  Digi Neo 8",
+"	00c8  Digi Neo 2 DB9",
+"	00c9  Digi Neo 2 DB9 PRI",
+"	00ca  Digi Neo 2 RJ45",
+"	00cb  Digi Neo 2 RJ45 PRI",
+"	00d0  ClassicBoard 4 422",
+"	00d1  ClassicBoard 8 422",
+"	6001  Avanstar",
+"1150  Thinking Machines Corp",
+"1151  JAE Electronics Inc.",
+"1152  Megatek",
+"1153  Land Win Electronic Corp",
+"1154  Melco Inc",
+"1155  Pine Technology Ltd",
+"1156  Periscope Engineering",
+"1157  Avsys Corporation",
+"1158  Voarx R & D Inc",
+"	3011  Tokenet/vg 1001/10m anylan",
+"	9050  Lanfleet/Truevalue",
+"	9051  Lanfleet/Truevalue",
+"1159  Mutech Corp",
+"	0001  MV-1000",
+"115a  Harlequin Ltd",
+"115b  Parallax Graphics",
+"115c  Photron Ltd.",
+"115d  Xircom",
+"	0003  Cardbus Ethernet 10/100",
+"		1014 0181  10/100 EtherJet Cardbus Adapter",
+"		1014 1181  10/100 EtherJet Cardbus Adapter",
+"		1014 8181  10/100 EtherJet Cardbus Adapter",
+"		1014 9181  10/100 EtherJet Cardbus Adapter",
+"		115d 0181  Cardbus Ethernet 10/100",
+"		115d 0182  RealPort2 CardBus Ethernet 10/100 (R2BE-100)",
+"		115d 1181  Cardbus Ethernet 10/100",
+"		1179 0181  Cardbus Ethernet 10/100",
+"		8086 8181  EtherExpress PRO/100 Mobile CardBus 32 Adapter",
+"		8086 9181  EtherExpress PRO/100 Mobile CardBus 32 Adapter",
+"	0005  Cardbus Ethernet 10/100",
+"		1014 0182  10/100 EtherJet Cardbus Adapter",
+"		1014 1182  10/100 EtherJet Cardbus Adapter",
+"		115d 0182  Cardbus Ethernet 10/100",
+"		115d 1182  Cardbus Ethernet 10/100",
+"	0007  Cardbus Ethernet 10/100",
+"		1014 0182  10/100 EtherJet Cardbus Adapter",
+"		1014 1182  10/100 EtherJet Cardbus Adapter",
+"		115d 0182  Cardbus Ethernet 10/100",
+"		115d 1182  Cardbus Ethernet 10/100",
+"	000b  Cardbus Ethernet 10/100",
+"		1014 0183  10/100 EtherJet Cardbus Adapter",
+"		115d 0183  Cardbus Ethernet 10/100",
+"	000c  Mini-PCI V.90 56k Modem",
+"	000f  Cardbus Ethernet 10/100",
+"		1014 0183  10/100 EtherJet Cardbus Adapter",
+"		115d 0183  Cardbus Ethernet 10/100",
+"	00d4  Mini-PCI K56Flex Modem",
+"	0101  Cardbus 56k modem",
+"		115d 1081  Cardbus 56k Modem",
+"	0103  Cardbus Ethernet + 56k Modem",
+"		1014 9181  Cardbus 56k Modem",
+"		1115 1181  Cardbus Ethernet 100 + 56k Modem",
+"		115d 1181  CBEM56G-100 Ethernet + 56k Modem",
+"		8086 9181  PRO/100 LAN + Modem56 CardBus",
+"115e  Peer Protocols Inc",
+"115f  Maxtor Corporation",
+"1160  Megasoft Inc",
+"1161  PFU Limited",
+"1162  OA Laboratory Co Ltd",
+"1163  Rendition",
+"	0001  Verite 1000",
+"	2000  Verite V2000/V2100/V2200",
+"		1092 2000  Stealth II S220",
+"1164  Advanced Peripherals Technologies",
+"1165  Imagraph Corporation",
+"	0001  Motion TPEG Recorder/Player with audio",
+"1166  Broadcom",
+"	0000  CMIC-LE",
+"	0005  CNB20-LE Host Bridge",
+"	0006  CNB20HE Host Bridge",
+"	0007  CNB20-LE Host Bridge",
+"	0008  CNB20HE Host Bridge",
+"	0009  CNB20LE Host Bridge",
+"	0010  CIOB30",
+"	0011  CMIC-HE",
+"	0012  CMIC-WS Host Bridge (GC-LE chipset)",
+"	0013  CNB20-HE Host Bridge",
+"	0014  CMIC-LE Host Bridge (GC-LE chipset)",
+"	0015  CMIC-GC Host Bridge",
+"	0016  CMIC-GC Host Bridge",
+"	0017  GCNB-LE Host Bridge",
+"	0036  HT1000 PCI/PCI-X bridge",
+"	0101  CIOB-X2 PCI-X I/O Bridge",
+"	0104  HT1000 PCI/PCI-X bridge",
+"	0110  CIOB-E I/O Bridge with Gigabit Ethernet",
+"	0130  HT1000 PCI-X bridge",
+"	0132  HT1000 PCI-Express bridge",
+"	0200  OSB4 South Bridge",
+"	0201  CSB5 South Bridge",
+"		4c53 1080  CT8 mainboard",
+"	0203  CSB6 South Bridge",
+"		1734 1012  Primergy RX300",
+"	0205  HT1000 Legacy South Bridge",
+"	0211  OSB4 IDE Controller",
+"	0212  CSB5 IDE Controller",
+"		4c53 1080  CT8 mainboard",
+"	0213  CSB6 RAID/IDE Controller",
+"		1028 c134  Poweredge SC600",
+"		1734 1012  Primergy RX300",
+"	0214  HT1000 Legacy IDE controller",
+"	0217  CSB6 IDE Controller",
+"		1028 4134  Poweredge SC600",
+"	0220  OSB4/CSB5 OHCI USB Controller",
+"		4c53 1080  CT8 mainboard",
+"	0221  CSB6 OHCI USB Controller",
+"		1734 1012  Primergy RX300",
+"	0223  HT1000 USB Controller",
+"	0225  CSB5 LPC bridge",
+"	0227  GCLE-2 Host Bridge",
+"		1734 1012  Primergy RX300",
+"	0230  CSB5 LPC bridge",
+"		4c53 1080  CT8 mainboard",
+"	0234  HT1000 LPC Bridge",
+"	0240  K2 SATA",
+"	0241  RAIDCore RC4000",
+"	0242  RAIDCore BC4000",
+"	024a  BCM5785 (HT1000) SATA Native SATA Mode",
+"	024b  BCM5785 (HT1000) PATA/IDE Mode",
+"1167  Mutoh Industries Inc",
+"1168  Thine Electronics Inc",
+"1169  Centre for Development of Advanced Computing",
+"116a  Polaris Communications",
+"	6100  Bus/Tag Channel",
+"	6800  Escon Channel",
+"	7100  Bus/Tag Channel",
+"	7800  Escon Channel",
+"116b  Connectware Inc",
+"116c  Intelligent Resources Integrated Systems",
+"116d  Martin-Marietta",
+"116e  Electronics for Imaging",
+"116f  Workstation Technology",
+"1170  Inventec Corporation",
+"1171  Loughborough Sound Images Plc",
+"1172  Altera Corporation",
+"1173  Adobe Systems, Inc",
+"1174  Bridgeport Machines",
+"1175  Mitron Computer Inc.",
+"1176  SBE Incorporated",
+"1177  Silicon Engineering",
+"1178  Alfa, Inc.",
+"	afa1  Fast Ethernet Adapter",
+"1179  Toshiba America Info Systems",
+"	0102  Extended IDE Controller",
+"	0103  EX-IDE Type-B",
+"	0404  DVD Decoder card",
+"	0406  Tecra Video Capture device",
+"	0407  DVD Decoder card (Version 2)",
+"	0601  CPU to PCI bridge",
+"		1179 0001  Satellite Pro",
+"	0603  ToPIC95 PCI to CardBus Bridge for Notebooks",
+"	060a  ToPIC95",
+"		1179 0001  Satellite Pro",
+"	060f  ToPIC97",
+"	0617  ToPIC100 PCI to Cardbus Bridge with ZV Support",
+"	0618  CPU to PCI and PCI to ISA bridge",
+"	0701  FIR Port",
+"	0804  TC6371AF SmartMedia Controller",
+"	0805  SD TypA Controller",
+"	0d01  FIR Port Type-DO",
+"		1179 0001  FIR Port Type-DO",
+"117a  A-Trend Technology",
+"117b  L G Electronics, Inc.",
+"117c  Atto Technology",
+"	0030  Ultra320 SCSI Host Adapter",
+"		117c 8013  ExpressPCI UL4D",
+"		117c 8014  ExpressPCI UL4S",
+"117d  Becton & Dickinson",
+"117e  T/R Systems",
+"117f  Integrated Circuit Systems",
+"1180  Ricoh Co Ltd",
+"	0465  RL5c465",
+"	0466  RL5c466",
+"	0475  RL5c475",
+"		144d c006  vpr Matrix 170B4 CardBus bridge",
+"	0476  RL5c476 II",
+"		1014 0185  ThinkPad A/T/X Series",
+"		1028 0188  Inspiron 6000 laptop",
+"		1043 1967  V6800V",
+"		1043 1987  Asus A4K and Z81K notebooks, possibly others ( mid-2005 machines )",
+"		104d 80df  Vaio PCG-FX403",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		144d c00c  P35 notebook",
+"		14ef 0220  PCD-RP-220S",
+"		17aa 201c  Thinkpad X60s",
+"	0477  RL5c477",
+"	0478  RL5c478",
+"		1014 0184  ThinkPad A30p (2653-64G)",
+"	0511  R5C511",
+"	0522  R5C522 IEEE 1394 Controller",
+"		1014 01cf  ThinkPad A30p (2653-64G)",
+"		1043 1967  V6800V",
+"	0551  R5C551 IEEE 1394 Controller",
+"		144d c006  vpr Matrix 170B4",
+"	0552  R5C552 IEEE 1394 Controller",
+"		1014 0511  ThinkPad A/T/X Series",
+"		1028 0188  Inspiron 6000 laptop",
+"		144d c00c  P35 notebook",
+"		17aa 201e  Thinkpad X60s",
+"	0554  R5C554",
+"	0575  R5C575 SD Bus Host Adapter",
+"	0576  R5C576 SD Bus Host Adapter",
+"	0592  R5C592 Memory Stick Bus Host Adapter",
+"		1043 1967  V6800V",
+"		144d c018  X20 IV",
+"	0811  R5C811",
+"	0822  R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter",
+"		1014 0556  Thinkpad X40",
+"		1014 0598  Thinkpad Z60m",
+"		1028 0188  Inspiron 6000 laptop",
+"		1028 01a2  Inspiron 9200",
+"		1043 1967  ASUS V6800V",
+"		144d c018  X20 IV",
+"		17aa 201d  Thinkpad X60s",
+"	0841  R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394",
+"	0852  xD-Picture Card Controller",
+"		1043 1967  V6800V",
+"1181  Telmatics International",
+"1183  Fujikura Ltd",
+"1184  Forks Inc",
+"1185  Dataworld International Ltd",
+"1186  D-Link System Inc",
+"	0100  DC21041",
+"	1002  DL10050 Sundance Ethernet",
+"		1186 1002  DFE-550TX",
+"		1186 1012  DFE-580TX",
+"	1025  AirPlus Xtreme G DWL-G650 Adapter",
+"	1026  AirXpert DWL-AG650 Wireless Cardbus Adapter",
+"	1043  AirXpert DWL-AG650 Wireless Cardbus Adapter",
+"	1300  RTL8139 Ethernet",
+"		1186 1300  DFE-538TX 10/100 Ethernet Adapter",
+"		1186 1301  DFE-530TX+ 10/100 Ethernet Adapter",
+"		1186 1303  DFE-528TX 10/100 Fast Ethernet PCI Adapter",
+"	1340  DFE-690TXD CardBus PC Card",
+"	1541  DFE-680TXD CardBus PC Card",
+"	1561  DRP-32TXD Cardbus PC Card",
+"	2027  AirPlus Xtreme G DWL-G520 Adapter",
+"	3203  AirPlus Xtreme G DWL-G520 Adapter",
+"	3300  DWL-510 2.4GHz Wireless PCI Adapter",
+"	3a03  AirPro DWL-A650 Wireless Cardbus Adapter(rev.B)",
+"	3a04  AirPro DWL-AB650 Multimode Wireless Cardbus Adapter",
+"	3a05  AirPro DWL-AB520 Multimode Wireless PCI Adapter",
+"	3a07  AirXpert DWL-AG650 Wireless Cardbus Adapter",
+"	3a08  AirXpert DWL-AG520 Wireless PCI Adapter",
+"	3a10  AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B)",
+"	3a11  AirXpert DWL-AG520 Wireless PCI Adapter(rev.B)",
+"	3a12  AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)",
+"	3a13  AirPlus DWL-G520 Wireless PCI Adapter(rev.B)",
+"	3a14  AirPremier DWL-AG530 Wireless PCI Adapter",
+"	3a63  AirXpert DWL-AG660 Wireless Cardbus Adapter",
+"	4000  DL2000-based Gigabit Ethernet",
+"	4300  DGE-528T Gigabit Ethernet Adapter",
+"	4b01  DGE-530T Gigabit Ethernet Adapter (rev 11)",
+"	4c00  Gigabit Ethernet Adapter",
+"		1186 4c00  DGE-530T Gigabit Ethernet Adapter",
+"	8400  D-Link DWL-650+ CardBus PC Card",
+"1187  Advanced Technology Laboratories, Inc.",
+"1188  Shima Seiki Manufacturing Ltd.",
+"1189  Matsushita Electronics Co Ltd",
+"118a  Hilevel Technology",
+"118b  Hypertec Pty Limited",
+"118c  Corollary, Inc",
+"	0014  PCIB [C-bus II to PCI bus host bridge chip]",
+"	1117  Intel 8-way XEON Profusion Chipset [Cache Coherency Filter]",
+"118d  BitFlow Inc",
+"	0001  Raptor-PCI framegrabber",
+"	0012  Model 12 Road Runner Frame Grabber",
+"	0014  Model 14 Road Runner Frame Grabber",
+"	0024  Model 24 Road Runner Frame Grabber",
+"	0044  Model 44 Road Runner Frame Grabber",
+"	0112  Model 12 Road Runner Frame Grabber",
+"	0114  Model 14 Road Runner Frame Grabber",
+"	0124  Model 24 Road Runner Frame Grabber",
+"	0144  Model 44 Road Runner Frame Grabber",
+"	0212  Model 12 Road Runner Frame Grabber",
+"	0214  Model 14 Road Runner Frame Grabber",
+"	0224  Model 24 Road Runner Frame Grabber",
+"	0244  Model 44 Road Runner Frame Grabber",
+"	0312  Model 12 Road Runner Frame Grabber",
+"	0314  Model 14 Road Runner Frame Grabber",
+"	0324  Model 24 Road Runner Frame Grabber",
+"	0344  Model 44 Road Runner Frame Grabber",
+"118e  Hermstedt GmbH",
+"118f  Green Logic",
+"1190  Tripace",
+"	c731  TP-910/920/940 PCI Ultra(Wide) SCSI Adapter",
+"1191  Artop Electronic Corp",
+"	0003  SCSI Cache Host Adapter",
+"	0004  ATP8400",
+"	0005  ATP850UF",
+"	0006  ATP860 NO-BIOS",
+"	0007  ATP860",
+"	0008  ATP865 NO-ROM",
+"	0009  ATP865",
+"	8002  AEC6710 SCSI-2 Host Adapter",
+"	8010  AEC6712UW SCSI",
+"	8020  AEC6712U SCSI",
+"	8030  AEC6712S SCSI",
+"	8040  AEC6712D SCSI",
+"	8050  AEC6712SUW SCSI",
+"	8060  AEC6712 SCSI",
+"	8080  AEC67160 SCSI",
+"	8081  AEC67160S SCSI",
+"	808a  AEC67162 2-ch. LVD SCSI",
+"1192  Densan Company Ltd",
+"1193  Zeitnet Inc.",
+"	0001  1221",
+"	0002  1225",
+"1194  Toucan Technology",
+"1195  Ratoc System Inc",
+"1196  Hytec Electronics Ltd",
+"1197  Gage Applied Sciences, Inc.",
+"	010c  CompuScope 82G 8bit 2GS/s Analog Input Card",
+"1198  Lambda Systems Inc",
+"1199  Attachmate Corporation",
+"119a  Mind Share, Inc.",
+"119b  Omega Micro Inc.",
+"	1221  82C092G",
+"119c  Information Technology Inst.",
+"119d  Bug, Inc. Sapporo Japan",
+"119e  Fujitsu Microelectronics Ltd.",
+"	0001  FireStream 155",
+"	0003  FireStream 50",
+"119f  Bull HN Information Systems",
+"11a0  Convex Computer Corporation",
+"11a1  Hamamatsu Photonics K.K.",
+"11a2  Sierra Research and Technology",
+"11a3  Deuretzbacher GmbH & Co. Eng. KG",
+"11a4  Barco Graphics NV",
+"11a5  Microunity Systems Eng. Inc",
+"11a6  Pure Data Ltd.",
+"11a7  Power Computing Corp.",
+"11a8  Systech Corp.",
+"11a9  InnoSys Inc.",
+"	4240  AMCC S933Q Intelligent Serial Card",
+"11aa  Actel",
+"11ab  Marvell Technology Group Ltd.",
+"	0146  GT-64010/64010A System Controller",
+"	138f  W8300 802.11 Adapter (rev 07)",
+"	1fa6  Marvell W8300 802.11 Adapter",
+"	1fa7  88W8310 and 88W8000G [Libertas] 802.11g client chipset",
+"	1faa  88w8335 [Libertas] 802.11b/g Wireless",
+"		1385 4e00  WG511 v2 54MBit/ Wireless PC-Card",
+"	4320  88E8001 Gigabit Ethernet Controller",
+"		1019 0f38  Marvell 88E8001 Gigabit Ethernet Controller (ECS)",
+"		1019 8001  Marvell 88E8001 Gigabit Ethernet Controller (ECS)",
+"		1043 173c  Marvell 88E8001 Gigabit Ethernet Controller (Asus)",
+"		1043 811a  Marvell 88E8001 Gigabit Ethernet Controller (Asus)",
+"		105b 0c19  Marvell 88E8001 Gigabit Ethernet Controller (Foxconn)",
+"		10b8 b452  EZ Card 1000 (SMC9452TXV.2)",
+"		11ab 0121  Marvell RDK-8001",
+"		11ab 0321  Marvell RDK-8003",
+"		11ab 1021  Marvell RDK-8010",
+"		11ab 4320  Marvell Yukon Gigabit Ethernet 10/100/1000Baset-T Constroller (Asus)",
+"		11ab 5021  Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (64 bit)",
+"		11ab 9521  Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (32 bit)",
+"		1458 e000  Marvell 88E8001 Gigabit Ethernet Controller (Gigabyte)",
+"		147b 1406  Marvell 88E8001 Gigabit Ethernet Controller (Abit)",
+"		15d4 0047  Marvell 88E8001 Gigabit Ethernet Controller (Iwill)",
+"		1695 9025  Marvell 88E8001 Gigabit Ethernet Controller (Epox)",
+"		17f2 1c03  Marvell 88E8001 Gigabit Ethernet Controller (Albatron)",
+"		270f 2803  Marvell 88E8001 Gigabit Ethernet Controller (Chaintech)",
+"	4340  88E8021 PCI-X IPMI Gigabit Ethernet Controller",
+"	4341  88E8022 PCI-X IPMI Gigabit Ethernet Controller",
+"	4342  88E8061 PCI-E IPMI Gigabit Ethernet Controller",
+"	4343  88E8062 PCI-E IPMI Gigabit Ethernet Controller",
+"	4344  88E8021 PCI-X IPMI Gigabit Ethernet Controller",
+"	4345  88E8022 PCI-X IPMI Gigabit Ethernet Controller",
+"	4346  88E8061 PCI-E IPMI Gigabit Ethernet Controller",
+"	4347  88E8062 PCI-E IPMI Gigabit Ethernet Controller",
+"	4350  88E8035 PCI-E Fast Ethernet Controller",
+"		1179 0001  Marvell 88E8035 Fast Ethernet Controller (Toshiba)",
+"		11ab 3521  Marvell RDK-8035",
+"		1854 000d  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 000e  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 000f  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 0011  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 0012  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 0016  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 0017  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 0018  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 0019  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 001c  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 001e  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"		1854 0020  Marvell 88E8035 Fast Ethernet Controller (LGE)",
+"	4351  88E8036 PCI-E Fast Ethernet Controller",
+"		107b 4009  Marvell 88E8036 Fast Ethernet Controller (Wistron)",
+"		10f7 8338  Marvell 88E8036 Fast Ethernet Controller (Panasonic)",
+"		1179 0001  Marvell 88E8036 Fast Ethernet Controller (Toshiba)",
+"		1179 ff00  Marvell 88E8036 Fast Ethernet Controller (Compal)",
+"		1179 ff10  Marvell 88E8036 Fast Ethernet Controller (Inventec)",
+"		11ab 3621  Marvell RDK-8036",
+"		13d1 ac12  Abocom EFE3K - 10/100 Ethernet Expresscard",
+"		161f 203d  Marvell 88E8036 Fast Ethernet Controller (Arima)",
+"		1854 000d  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 000e  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 000f  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 0011  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 0012  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 0016  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 0017  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 0018  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 0019  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 001c  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 001e  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"		1854 0020  Marvell 88E8036 Fast Ethernet Controller (LGE)",
+"	4352  88E8038 PCI-E Fast Ethernet Controller",
+"	4360  88E8052 PCI-E ASF Gigabit Ethernet Controller",
+"		1043 8134  Marvell 88E8052 Gigabit Ethernet Controller (Asus)",
+"		107b 4009  Marvell 88E8052 Gigabit Ethernet Controller (Wistron)",
+"		11ab 5221  Marvell RDK-8052",
+"		1458 e000  Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte)",
+"		1462 052c  Marvell 88E8052 Gigabit Ethernet Controller (MSI)",
+"		1849 8052  Marvell 88E8052 Gigabit Ethernet Controller (ASRock)",
+"		a0a0 0509  Marvell 88E8052 Gigabit Ethernet Controller (Aopen)",
+"	4361  88E8050 PCI-E ASF Gigabit Ethernet Controller",
+"		107b 3015  Marvell 88E8050 Gigabit Ethernet Controller (Gateway)",
+"		11ab 5021  Marvell 88E8050 Gigabit Ethernet Controller (Intel)",
+"		8086 3063  D925XCVLK mainboard",
+"		8086 3439  Marvell 88E8050 Gigabit Ethernet Controller (Intel)",
+"	4362  88E8053 PCI-E Gigabit Ethernet Controller",
+"		103c 2a0d  Marvell 88E8053 Gigabit Ethernet Controller (Asus)",
+"		1043 8142  Marvell 88E8053 Gigabit Ethernet controller PCIe (Asus)",
+"		109f 3197  Marvell 88E8053 Gigabit Ethernet Controller (Trigem)",
+"		10f7 8338  Marvell 88E8053 Gigabit Ethernet Controller (Panasonic)",
+"		10fd a430  Marvell 88E8053 Gigabit Ethernet Controller (SOYO)",
+"		1179 0001  Marvell 88E8053 Gigabit Ethernet Controller (Toshiba)",
+"		1179 ff00  Marvell 88E8053 Gigabit Ethernet Controller (Compal)",
+"		1179 ff10  Marvell 88E8053 Gigabit Ethernet Controller (Inventec)",
+"		11ab 5321  Marvell RDK-8053",
+"		1297 c240  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
+"		1297 c241  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
+"		1297 c242  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
+"		1297 c243  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
+"		1297 c244  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)",
+"		13d1 ac11  EGE5K - Giga Ethernet Expresscard",
+"		1458 e000  Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte)",
+"		1462 058c  Marvell 88E8053 Gigabit Ethernet Controller (MSI)",
+"		14c0 0012  Marvell 88E8053 Gigabit Ethernet Controller (Compal)",
+"		1558 04a0  Marvell 88E8053 Gigabit Ethernet Controller (Clevo)",
+"		15bd 1003  Marvell 88E8053 Gigabit Ethernet Controller (DFI)",
+"		161f 203c  Marvell 88E8053 Gigabit Ethernet Controller (Arima)",
+"		161f 203d  Marvell 88E8053 Gigabit Ethernet Controller (Arima)",
+"		1695 9029  Marvell 88E8053 Gigabit Ethernet Controller (Epox)",
+"		17f2 2c08  Marvell 88E8053 Gigabit Ethernet Controller (Albatron)",
+"		17ff 0585  Marvell 88E8053 Gigabit Ethernet Controller (Quanta)",
+"		1849 8053  Marvell 88E8053 Gigabit Ethernet Controller (ASRock)",
+"		1854 000b  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 000c  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 0010  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 0013  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 0014  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 0015  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 001a  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 001b  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 001d  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 001f  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 0021  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		1854 0022  Marvell 88E8053 Gigabit Ethernet Controller (LGE)",
+"		270f 2801  Marvell 88E8053 Gigabit Ethernet Controller (Chaintech)",
+"		a0a0 0506  Marvell 88E8053 Gigabit Ethernet Controller (Aopen)",
+"	4363  88E8055 PCI-E Gigabit Ethernet Controller",
+"	4611  GT-64115 System Controller",
+"	4620  GT-64120/64120A/64121A System Controller",
+"	4801  GT-48001",
+"	5005  Belkin F5D5005 Gigabit Desktop Network PCI Card",
+"	5040  MV88SX5040 4-port SATA I PCI-X Controller",
+"	5041  MV88SX5041 4-port SATA I PCI-X Controller",
+"	5080  MV88SX5080 8-port SATA I PCI-X Controller",
+"	5081  MV88SX5081 8-port SATA I PCI-X Controller",
+"	6041  MV88SX6041 4-port SATA II PCI-X Controller",
+"	6081  MV88SX6081 8-port SATA II PCI-X Controller",
+"	6460  MV64360/64361/64362 System Controller",
+"	6480  MV64460/64461/64462 System Controller",
+"	f003  GT-64010 Primary Image Piranha Image Generator",
+"11ac  Canon Information Systems Research Aust.",
+"11ad  Lite-On Communications Inc",
+"	0002  LNE100TX",
+"		11ad 0002  LNE100TX",
+"		11ad 0003  LNE100TX",
+"		11ad f003  LNE100TX",
+"		11ad ffff  LNE100TX",
+"		1385 f004  FA310TX",
+"	c115  LNE100TX [Linksys EtherFast 10/100]",
+"		11ad c001  LNE100TX [ver 2.0]",
+"11ae  Aztech System Ltd",
+"11af  Avid Technology Inc.",
+"	0001  Cinema",
+"	ee40  Digidesign Audiomedia III",
+"11b0  V3 Semiconductor Inc.",
+"	0002  V300PSC",
+"	0292  V292PBC [Am29030/40 Bridge]",
+"	0960  V96xPBC",
+"	c960  V96DPC",
+"11b1  Apricot Computers",
+"11b2  Eastman Kodak",
+"11b3  Barr Systems Inc.",
+"11b4  Leitch Technology International",
+"11b5  Radstone Technology Plc",
+"11b6  United Video Corp",
+"11b7  Motorola",
+"11b8  XPoint Technologies, Inc",
+"	0001  Quad PeerMaster",
+"11b9  Pathlight Technology Inc.",
+"	c0ed  SSA Controller",
+"11ba  Videotron Corp",
+"11bb  Pyramid Technology",
+"11bc  Network Peripherals Inc",
+"	0001  NP-PCI",
+"11bd  Pinnacle Systems Inc.",
+"	002e  PCTV 40i",
+"	bede  AV/DV Studio Capture Card",
+"11be  International Microcircuits Inc",
+"11bf  Astrodesign, Inc.",
+"11c0  Hewlett Packard",
+"11c1  Agere Systems",
+"	0440  56k WinModem",
+"		1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		1033 8047  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		1033 804f  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		10cf 102c  LB LT Modem V.90 56k",
+"		10cf 104a  BIBLO LT Modem 56k",
+"		10cf 105f  LB2 LT Modem V.90 56k",
+"		1179 0001  Internal V.90 Modem",
+"		11c1 0440  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		122d 4101  MDP7800-U Modem",
+"		122d 4102  MDP7800SP-U Modem",
+"		13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		13e0 0440  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		13e0 0441  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		13e0 0450  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		13e0 f100  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		13e0 f101  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		144d 2101  LT56PV Modem",
+"		149f 0440  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"	0441  56k WinModem",
+"		1033 804d  LT WinModem 56k Data+Fax",
+"		1033 8065  LT WinModem 56k Data+Fax",
+"		1092 0440  Supra 56i",
+"		1179 0001  Internal V.90 Modem",
+"		11c1 0440  LT WinModem 56k Data+Fax",
+"		11c1 0441  LT WinModem 56k Data+Fax",
+"		122d 4100  MDP7800-U Modem",
+"		13e0 0040  LT WinModem 56k Data+Fax",
+"		13e0 0100  LT WinModem 56k Data+Fax",
+"		13e0 0410  LT WinModem 56k Data+Fax",
+"		13e0 0420  TelePath Internet 56k WinModem",
+"		13e0 0440  LT WinModem 56k Data+Fax",
+"		13e0 0443  LT WinModem 56k Data+Fax",
+"		13e0 f102  LT WinModem 56k Data+Fax",
+"		1416 9804  CommWave 56k Modem",
+"		141d 0440  LT WinModem 56k Data+Fax",
+"		144f 0441  Lucent 56k V.90 DF Modem",
+"		144f 0449  Lucent 56k V.90 DF Modem",
+"		144f 110d  Lucent Win Modem",
+"		1468 0441  Presario 56k V.90 DF Modem",
+"		1668 0440  Lucent Win Modem",
+"	0442  56k WinModem",
+"		11c1 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		11c1 0442  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		13e0 0412  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		13e0 0442  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		13fc 2471  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		144d 2104  LT56PT Modem",
+"		144f 1104  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		149f 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		1668 0440  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"	0443  LT WinModem",
+"	0444  LT WinModem",
+"	0445  LT WinModem",
+"		8086 2203  PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card)",
+"		8086 2204  PRO/100+ MiniPCI on Armada E500",
+"	0446  LT WinModem",
+"	0447  LT WinModem",
+"	0448  WinModem 56k",
+"		1014 0131  Lucent Win Modem",
+"		1033 8066  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		13e0 0030  56k Voice Modem",
+"		13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd",
+"		1668 2400  LT WinModem 56k (MiniPCI Ethernet+Modem)",
+"	0449  WinModem 56k",
+"		0e11 b14d  56k V.90 Modem",
+"		13e0 0020  LT WinModem 56k Data+Fax",
+"		13e0 0041  TelePath Internet 56k WinModem",
+"		1436 0440  Lucent Win Modem",
+"		144f 0449  Lucent 56k V.90 DFi Modem",
+"		1468 0410  IBM ThinkPad T23 (2647-4MG)",
+"		1468 0440  Lucent Win Modem",
+"		1468 0449  Presario 56k V.90 DFi Modem",
+"	044a  F-1156IV WinModem (V90, 56KFlex)",
+"		10cf 1072  LB Global LT Modem",
+"		13e0 0012  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		13e0 0042  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"		144f 1005  LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd",
+"	044b  LT WinModem",
+"	044c  LT WinModem",
+"	044d  LT WinModem",
+"	044e  LT WinModem",
+"	044f  V90 WildWire Modem",
+"	0450  LT WinModem",
+"		1033 80a8  Versa Note Vxi",
+"		144f 4005  Magnia SG20",
+"		1468 0450  Evo N600c",
+"		4005 144f  LifeBook C Series",
+"	0451  LT WinModem",
+"	0452  LT WinModem",
+"	0453  LT WinModem",
+"	0454  LT WinModem",
+"	0455  LT WinModem",
+"	0456  LT WinModem",
+"	0457  LT WinModem",
+"	0458  LT WinModem",
+"	0459  LT WinModem",
+"	045a  LT WinModem",
+"	045c  LT WinModem",
+"	0461  V90 WildWire Modem",
+"	0462  V90 WildWire Modem",
+"	0480  Venus Modem (V90, 56KFlex)",
+"	048c  V.92 56K WinModem",
+"	048f  V.92 56k WinModem",
+"	5801  USB",
+"	5802  USS-312 USB Controller",
+"	5803  USS-344S USB Controller",
+"	5811  FW323",
+"		8086 524c  D865PERL mainboard",
+"		dead 0800  FireWire Host Bus Adapter",
+"	8110  T8110 H.100/H.110 TDM switch",
+"		12d9 000c  E1/T1 PMXc cPCI carrier card",
+"	ab10  WL60010 Wireless LAN MAC",
+"	ab11  WL60040 Multimode Wireles LAN MAC",
+"		11c1 ab12  WaveLAN 11abg Cardbus card (Model 1102)",
+"		11c1 ab13  WaveLAN 11abg MiniPCI card (Model 0512)",
+"		11c1 ab15  WaveLAN 11abg Cardbus card (Model 1106)",
+"		11c1 ab16  WaveLAN 11abg MiniPCI card (Model 0516)",
+"	ab20  ORiNOCO PCI Adapter",
+"	ab21  Agere Wireless PCI Adapter",
+"	ab30  Hermes2 Mini-PCI WaveLAN a/b/g",
+"		14cd 2012  Hermes2 Mini-PCI WaveLAN a/b/g",
+"	ed00  ET-131x PCI-E Ethernet Controller",
+"11c2  Sand Microelectronics",
+"11c3  NEC Corporation",
+"11c4  Document Technologies, Inc",
+"11c5  Shiva Corporation",
+"11c6  Dainippon Screen Mfg. Co. Ltd",
+"11c7  D.C.M. Data Systems",
+"11c8  Dolphin Interconnect Solutions AS",
+"	0658  PSB32 SCI-Adapter D31x",
+"	d665  PSB64 SCI-Adapter D32x",
+"	d667  PSB66 SCI-Adapter D33x",
+"11c9  Magma",
+"	0010  16-line serial port w/- DMA",
+"	0011  4-line serial port w/- DMA",
+"11ca  LSI Systems, Inc",
+"11cb  Specialix Research Ltd.",
+"	2000  PCI_9050",
+"		11cb 0200  SX",
+"		11cb b008  I/O8+",
+"	4000  SUPI_1",
+"	8000  T225",
+"11cc  Michels & Kleberhoff Computer GmbH",
+"11cd  HAL Computer Systems, Inc.",
+"11ce  Netaccess",
+"11cf  Pioneer Electronic Corporation",
+"11d0  Lockheed Martin Federal Systems-Manassas",
+"11d1  Auravision",
+"	01f7  VxP524",
+"11d2  Intercom Inc.",
+"11d3  Trancell Systems Inc",
+"11d4  Analog Devices",
+"	1535  Blackfin BF535 processor",
+"	1805  SM56 PCI modem",
+"	1889  AD1889 sound chip",
+"	1986  AD1986A sound chip",
+"	5340  AD1881 sound chip",
+"11d5  Ikon Corporation",
+"	0115  10115",
+"	0117  10117",
+"11d6  Tekelec Telecom",
+"11d7  Trenton Technology, Inc.",
+"11d8  Image Technologies Development",
+"11d9  TEC Corporation",
+"11da  Novell",
+"11db  Sega Enterprises Ltd",
+"11dc  Questra Corporation",
+"11dd  Crosfield Electronics Limited",
+"11de  Zoran Corporation",
+"	6057  ZR36057PQC Video cutting chipset",
+"		1031 7efe  DC10 Plus",
+"		1031 fc00  MiroVIDEO DC50, Motion JPEG Capture/CODEC Board",
+"		12f8 8a02  Tekram Video Kit",
+"		13ca 4231  JPEG/TV Card",
+"	6120  ZR36120",
+"		1328 f001  Cinemaster C DVD Decoder",
+"		13c2 0000  MediaFocus Satellite TV Card",
+"		1de1 9fff  Video Kit C210",
+"11df  New Wave PDG",
+"11e0  Cray Communications A/S",
+"11e1  GEC Plessey Semi Inc.",
+"11e2  Samsung Information Systems America",
+"11e3  Quicklogic Corporation",
+"	0001  COM-ON-AIR Dosch&Amand DECT",
+"	5030  PC Watchdog",
+"11e4  Second Wave Inc",
+"11e5  IIX Consulting",
+"11e6  Mitsui-Zosen System Research",
+"11e7  Toshiba America, Elec. Company",
+"11e8  Digital Processing Systems Inc.",
+"11e9  Highwater Designs Ltd.",
+"11ea  Elsag Bailey",
+"11eb  Formation Inc.",
+"11ec  Coreco Inc",
+"11ed  Mediamatics",
+"11ee  Dome Imaging Systems Inc",
+"11ef  Nicolet Technologies B.V.",
+"11f0  Compu-Shack",
+"	4231  FDDI",
+"	4232  FASTline UTP Quattro",
+"	4233  FASTline FO",
+"	4234  FASTline UTP",
+"	4235  FASTline-II UTP",
+"	4236  FASTline-II FO",
+"	4731  GIGAline",
+"11f1  Symbios Logic Inc",
+"11f2  Picture Tel Japan K.K.",
+"11f3  Keithley Metrabyte",
+"11f4  Kinetic Systems Corporation",
+"	2915  CAMAC controller",
+"11f5  Computing Devices International",
+"11f6  Compex",
+"	0112  ENet100VG4",
+"	0113  FreedomLine 100",
+"	1401  ReadyLink 2000",
+"	2011  RL100-ATX 10/100",
+"		11f6 2011  RL100-ATX",
+"	2201  ReadyLink 100TX (Winbond W89C840)",
+"		11f6 2011  ReadyLink 100TX",
+"	9881  RL100TX Fast Ethernet",
+"11f7  Scientific Atlanta",
+"11f8  PMC-Sierra Inc.",
+"	7375  PM7375 [LASAR-155 ATM SAR]",
+"11f9  I-Cube Inc",
+"11fa  Kasan Electronics Company, Ltd.",
+"11fb  Datel Inc",
+"11fc  Silicon Magic",
+"11fd  High Street Consultants",
+"11fe  Comtrol Corporation",
+"	0001  RocketPort 32 port w/external I/F",
+"	0002  RocketPort 8 port w/external I/F",
+"	0003  RocketPort 16 port w/external I/F",
+"	0004  RocketPort 4 port w/quad cable",
+"	0005  RocketPort 8 port w/octa cable",
+"	0006  RocketPort 8 port w/RJ11 connectors",
+"	0007  RocketPort 4 port w/RJ11 connectors",
+"	0008  RocketPort 8 port w/ DB78 SNI (Siemens) connector",
+"	0009  RocketPort 16 port w/ DB78 SNI (Siemens) connector",
+"	000a  RocketPort Plus 4 port",
+"	000b  RocketPort Plus 8 port",
+"	000c  RocketModem 6 port",
+"	000d  RocketModem 4-port",
+"	000e  RocketPort Plus 2 port RS232",
+"	000f  RocketPort Plus 2 port RS422",
+"	0801  RocketPort UPCI 32 port w/external I/F",
+"	0802  RocketPort UPCI 8 port w/external I/F",
+"	0803  RocketPort UPCI 16 port w/external I/F",
+"	0805  RocketPort UPCI 8 port w/octa cable",
+"	080c  RocketModem III 8 port",
+"	080d  RocketModem III 4 port",
+"	0812  RocketPort UPCI Plus 8 port RS422",
+"	0903  RocketPort Compact PCI 16 port w/external I/F",
+"	8015  RocketPort 4-port UART 16954",
+"11ff  Scion Corporation",
+"	0003  AG-5",
+"1200  CSS Corporation",
+"1201  Vista Controls Corp",
+"1202  Network General Corp.",
+"	4300  Gigabit Ethernet Adapter",
+"		1202 9841  SK-9841 LX",
+"		1202 9842  SK-9841 LX dual link",
+"		1202 9843  SK-9843 SX",
+"		1202 9844  SK-9843 SX dual link",
+"1203  Bayer Corporation, Agfa Division",
+"1204  Lattice Semiconductor Corporation",
+"1205  Array Corporation",
+"1206  Amdahl Corporation",
+"1208  Parsytec GmbH",
+"	4853  HS-Link Device",
+"1209  SCI Systems Inc",
+"120a  Synaptel",
+"120b  Adaptive Solutions",
+"120c  Technical Corp.",
+"120d  Compression Labs, Inc.",
+"120e  Cyclades Corporation",
+"	0100  Cyclom-Y below first megabyte",
+"	0101  Cyclom-Y above first megabyte",
+"	0102  Cyclom-4Y below first megabyte",
+"	0103  Cyclom-4Y above first megabyte",
+"	0104  Cyclom-8Y below first megabyte",
+"	0105  Cyclom-8Y above first megabyte",
+"	0200  Cyclades-Z below first megabyte",
+"	0201  Cyclades-Z above first megabyte",
+"	0300  PC300/RSV or /X21 (2 ports)",
+"	0301  PC300/RSV or /X21 (1 port)",
+"	0310  PC300/TE (2 ports)",
+"	0311  PC300/TE (1 port)",
+"	0320  PC300/TE-M (2 ports)",
+"	0321  PC300/TE-M (1 port)",
+"	0400  PC400",
+"120f  Essential Communications",
+"	0001  Roadrunner serial HIPPI",
+"1210  Hyperparallel Technologies",
+"1211  Braintech Inc",
+"1212  Kingston Technology Corp.",
+"1213  Applied Intelligent Systems, Inc.",
+"1214  Performance Technologies, Inc.",
+"1215  Interware Co., Ltd",
+"1216  Purup Prepress A/S",
+"1217  O2 Micro, Inc.",
+"	6729  OZ6729",
+"	673a  OZ6730",
+"	6832  OZ6832/6833 CardBus Controller",
+"	6836  OZ6836/6860 CardBus Controller",
+"	6872  OZ6812 CardBus Controller",
+"	6925  OZ6922 CardBus Controller",
+"	6933  OZ6933/711E1 CardBus/SmartCardBus Controller",
+"		1025 1016  Travelmate 612 TX",
+"	6972  OZ601/6912/711E0 CardBus/SmartCardBus Controller",
+"		1014 020c  ThinkPad R30",
+"		1179 0001  Magnia Z310",
+"	7110  OZ711Mx 4-in-1 MemoryCardBus Accelerator",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1734 106c  Amilo A1645",
+"	7112  OZ711EC1/M1 SmartCardBus/MemoryCardBus Controller",
+"	7113  OZ711EC1 SmartCardBus Controller",
+"	7114  OZ711M1/MC1 4-in-1 MemoryCardBus Controller",
+"	7134  OZ711MP1/MS1 MemoryCardBus Controller",
+"	71e2  OZ711E2 SmartCardBus Controller",
+"	7212  OZ711M2 4-in-1 MemoryCardBus Controller",
+"	7213  OZ6933E CardBus Controller",
+"	7223  OZ711M3/MC3 4-in-1 MemoryCardBus Controller",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"	7233  OZ711MP3/MS3 4-in-1 MemoryCardBus Controller",
+"1218  Hybricon Corp.",
+"1219  First Virtual Corporation",
+"121a  3Dfx Interactive, Inc.",
+"	0001  Voodoo",
+"	0002  Voodoo 2",
+"	0003  Voodoo Banshee",
+"		1092 0003  Monster Fusion",
+"		1092 4000  Monster Fusion",
+"		1092 4002  Monster Fusion",
+"		1092 4801  Monster Fusion AGP",
+"		1092 4803  Monster Fusion AGP",
+"		1092 8030  Monster Fusion",
+"		1092 8035  Monster Fusion AGP",
+"		10b0 0001  Dragon 4000",
+"		1102 1018  3D Blaster Banshee VE",
+"		121a 0001  Voodoo Banshee AGP",
+"		121a 0003  Voodoo Banshee AGP SGRAM",
+"		121a 0004  Voodoo Banshee",
+"		139c 0016  Raven",
+"		139c 0017  Raven",
+"		14af 0002  Maxi Gamer Phoenix",
+"	0004  Voodoo Banshee [Velocity 100]",
+"	0005  Voodoo 3",
+"		121a 0004  Voodoo3 AGP",
+"		121a 0030  Voodoo3 AGP",
+"		121a 0031  Voodoo3 AGP",
+"		121a 0034  Voodoo3 AGP",
+"		121a 0036  Voodoo3 2000 PCI",
+"		121a 0037  Voodoo3 AGP",
+"		121a 0038  Voodoo3 AGP",
+"		121a 003a  Voodoo3 AGP",
+"		121a 0044  Voodoo3",
+"		121a 004b  Velocity 100",
+"		121a 004c  Velocity 200",
+"		121a 004d  Voodoo3 AGP",
+"		121a 004e  Voodoo3 AGP",
+"		121a 0051  Voodoo3 AGP",
+"		121a 0052  Voodoo3 AGP",
+"		121a 0057  Voodoo3 3000 PCI",
+"		121a 0060  Voodoo3 3500 TV (NTSC)",
+"		121a 0061  Voodoo3 3500 TV (PAL)",
+"		121a 0062  Voodoo3 3500 TV (SECAM)",
+"	0009  Voodoo 4 / Voodoo 5",
+"		121a 0003  Voodoo5 PCI 5500",
+"		121a 0009  Voodoo5 AGP 5500/6000",
+"	0057  Voodoo 3/3000 [Avenger]",
+"121b  Advanced Telecommunications Modules",
+"121c  Nippon Texaco., Ltd",
+"121d  Lippert Automationstechnik GmbH",
+"121e  CSPI",
+"	0201  Myrinet 2000 Scalable Cluster Interconnect",
+"121f  Arcus Technology, Inc.",
+"1220  Ariel Corporation",
+"	1220  AMCC 5933 TMS320C80 DSP/Imaging board",
+"1221  Contec Co., Ltd",
+"1222  Ancor Communications, Inc.",
+"1223  Artesyn Communication Products",
+"	0003  PM/Link",
+"	0004  PM/T1",
+"	0005  PM/E1",
+"	0008  PM/SLS",
+"	0009  BajaSpan Resource Target",
+"	000a  BajaSpan Section 0",
+"	000b  BajaSpan Section 1",
+"	000c  BajaSpan Section 2",
+"	000d  BajaSpan Section 3",
+"	000e  PM/PPC",
+"1224  Interactive Images",
+"1225  Power I/O, Inc.",
+"1227  Tech-Source",
+"	0006  Raptor GFX 8P",
+"	0023  Raptor GFX [1100T]",
+"1228  Norsk Elektro Optikk A/S",
+"1229  Data Kinesis Inc.",
+"122a  Integrated Telecom",
+"122b  LG Industrial Systems Co., Ltd",
+"122c  Sican GmbH",
+"122d  Aztech System Ltd",
+"	1206  368DSP",
+"	1400  Trident PCI288-Q3DII (NX)",
+"	50dc  3328 Audio",
+"		122d 0001  3328 Audio",
+"	80da  3328 Audio",
+"		122d 0001  3328 Audio",
+"122e  Xyratex",
+"122f  Andrew Corporation",
+"1230  Fishcamp Engineering",
+"1231  Woodward McCoach, Inc.",
+"1232  GPT Limited",
+"1233  Bus-Tech, Inc.",
+"1234  Technical Corp.",
+"1235  Risq Modular Systems, Inc.",
+"1236  Sigma Designs Corporation",
+"	0000  RealMagic64/GX",
+"	6401  REALmagic 64/GX (SD 6425)",
+"1237  Alta Technology Corporation",
+"1238  Adtran",
+"1239  3DO Company",
+"123a  Visicom Laboratories, Inc.",
+"123b  Seeq Technology, Inc.",
+"123c  Century Systems, Inc.",
+"123d  Engineering Design Team, Inc.",
+"	0000  EasyConnect 8/32",
+"	0002  EasyConnect 8/64",
+"	0003  EasyIO",
+"123e  Simutech, Inc.",
+"123f  C-Cube Microsystems",
+"	00e4  MPEG",
+"	8120  E4?",
+"		11bd 0006  DV500 E4",
+"		11bd 000a  DV500 E4",
+"		11bd 000f  DV500 E4",
+"		1809 0016  Emuzed MAUI-III PCI PVR FM TV",
+"	8888  Cinemaster C 3.0 DVD Decoder",
+"		1002 0001  Cinemaster C 3.0 DVD Decoder",
+"		1002 0002  Cinemaster C 3.0 DVD Decoder",
+"		1328 0001  Cinemaster C 3.0 DVD Decoder",
+"1240  Marathon Technologies Corp.",
+"1241  DSC Communications",
+"1242  JNI Corporation",
+"	1560  JNIC-1560 PCI-X Fibre Channel Controller",
+"		1242 6562  FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter",
+"		1242 656a  FCX-6562 PCI-X Fibre Channel Adapter",
+"	4643  FCI-1063 Fibre Channel Adapter",
+"	6562  FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter",
+"	656a  FCX-6562 PCI-X Fibre Channel Adapter",
+"1243  Delphax",
+"1244  AVM Audiovisuelles MKTG & Computer System GmbH",
+"	0700  B1 ISDN",
+"	0800  C4 ISDN",
+"	0a00  A1 ISDN [Fritz]",
+"		1244 0a00  FRITZ!Card ISDN Controller",
+"	0e00  Fritz!PCI v2.0 ISDN",
+"	1100  C2 ISDN",
+"	1200  T1 ISDN",
+"	2700  Fritz!Card DSL SL",
+"	2900  Fritz!Card DSL v2.0",
+"1245  A.P.D., S.A.",
+"1246  Dipix Technologies, Inc.",
+"1247  Xylon Research, Inc.",
+"1248  Central Data Corporation",
+"1249  Samsung Electronics Co., Ltd.",
+"124a  AEG Electrocom GmbH",
+"124b  SBS/Greenspring Modular I/O",
+"	0040  PCI-40A or cPCI-200 Quad IndustryPack carrier",
+"		124b 9080  PCI9080 Bridge",
+"124c  Solitron Technologies, Inc.",
+"124d  Stallion Technologies, Inc.",
+"	0000  EasyConnection 8/32",
+"	0002  EasyConnection 8/64",
+"	0003  EasyIO",
+"	0004  EasyConnection/RA",
+"124e  Cylink",
+"124f  Infortrend Technology, Inc.",
+"	0041  IFT-2000 Series RAID Controller",
+"1250  Hitachi Microcomputer System Ltd",
+"1251  VLSI Solutions Oy",
+"1253  Guzik Technical Enterprises",
+"1254  Linear Systems Ltd.",
+"1255  Optibase Ltd",
+"	1110  MPEG Forge",
+"	1210  MPEG Fusion",
+"	2110  VideoPlex",
+"	2120  VideoPlex CC",
+"	2130  VideoQuest",
+"1256  Perceptive Solutions, Inc.",
+"	4201  PCI-2220I",
+"	4401  PCI-2240I",
+"	5201  PCI-2000",
+"1257  Vertex Networks, Inc.",
+"1258  Gilbarco, Inc.",
+"1259  Allied Telesyn International",
+"	2560  AT-2560 Fast Ethernet Adapter (i82557B)",
+"	a117  RTL81xx Fast Ethernet",
+"	a120  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"125a  ABB Power Systems",
+"125b  Asix Electronics Corporation",
+"	1400  ALFA GFC2204 Fast Ethernet",
+"		1186 1100  AX8814X Based PCI Fast Ethernet Adapter",
+"125c  Aurora Technologies, Inc.",
+"	0101  Saturn 4520P",
+"	0640  Aries 16000P",
+"125d  ESS Technology",
+"	0000  ES336H Fax Modem (Early Model)",
+"	1948  Solo?",
+"	1968  ES1968 Maestro 2",
+"		1028 0085  ES1968 Maestro-2 PCI",
+"		1033 8051  ES1968 Maestro-2 Audiodrive",
+"	1969  ES1969 Solo-1 Audiodrive",
+"		1014 0166  ES1969 SOLO-1 AudioDrive on IBM Aptiva Mainboard",
+"		125d 8888  Solo-1 Audio Adapter",
+"		153b 111b  Terratec 128i PCI",
+"	1978  ES1978 Maestro 2E",
+"		0e11 b112  Armada M700/E500",
+"		1033 803c  ES1978 Maestro-2E Audiodrive",
+"		1033 8058  ES1978 Maestro-2E Audiodrive",
+"		1092 4000  Monster Sound MX400",
+"		1179 0001  ES1978 Maestro-2E Audiodrive",
+"	1988  ES1988 Allegro-1",
+"		0e11 0098  Evo N600c",
+"		1092 4100  Sonic Impact S100",
+"		125d 1988  ESS Allegro-1 Audiodrive",
+"	1989  ESS Modem",
+"		125d 1989  ESS Modem",
+"	1998  ES1983S Maestro-3i PCI Audio Accelerator",
+"		1028 00b1  Latitude C600",
+"		1028 00e6  ES1983S Maestro-3i (Dell Inspiron 8100)",
+"	1999  ES1983S Maestro-3i PCI Modem Accelerator",
+"	199a  ES1983S Maestro-3i PCI Audio Accelerator",
+"	199b  ES1983S Maestro-3i PCI Modem Accelerator",
+"	2808  ES336H Fax Modem (Later Model)",
+"	2838  ES2838/2839 SuperLink Modem",
+"	2898  ES2898 Modem",
+"		125d 0424  ES56-PI Data Fax Modem",
+"		125d 0425  ES56T-PI Data Fax Modem",
+"		125d 0426  ES56V-PI Data Fax Modem",
+"		125d 0427  VW-PI Data Fax Modem",
+"		125d 0428  ES56ST-PI Data Fax Modem",
+"		125d 0429  ES56SV-PI Data Fax Modem",
+"		147a c001  ES56-PI Data Fax Modem",
+"		14fe 0428  ES56-PI Data Fax Modem",
+"		14fe 0429  ES56-PI Data Fax Modem",
+"125e  Specialvideo Engineering SRL",
+"125f  Concurrent Technologies, Inc.",
+"1260  Intersil Corporation",
+"	3872  Prism 2.5 Wavelan chipset",
+"		1468 0202  LAN-Express IEEE 802.11b Wireless LAN",
+"	3873  Prism 2.5 Wavelan chipset",
+"		1186 3501  DWL-520 Wireless PCI Adapter",
+"		1186 3700  DWL-520 Wireless PCI Adapter, Rev E1",
+"		1385 4105  MA311 802.11b wireless adapter",
+"		1668 0414  HWP01170-01 802.11b PCI Wireless Adapter",
+"		16a5 1601  AIR.mate PC-400 PCI Wireless LAN Adapter",
+"		1737 3874  WMP11 Wireless 802.11b PCI Adapter",
+"		8086 2513  Wireless 802.11b MiniPCI Adapter",
+"	3886  ISL3886 [Prism Javelin/Prism Xbow]",
+"		17cf 0037  XG-901 and clones Wireless Adapter",
+"	3890  ISL3890 [Prism GT/Prism Duette]/ISL3886 [Prism Javelin/Prism Xbow]",
+"		10b8 2802  SMC2802W Wireless PCI Adapter",
+"		10b8 2835  SMC2835W Wireless Cardbus Adapter",
+"		10b8 a835  SMC2835W V2 Wireless Cardbus Adapter",
+"		1113 4203  WN4201B",
+"		1113 ee03  SMC2802W V2 Wireless PCI Adapter [ISL3886]",
+"		1113 ee08  SMC2835W V3 EU Wireless Cardbus Adapter",
+"		1186 3202  DWL-G650 A1 Wireless Adapter",
+"		1259 c104  CG-WLCB54GT Wireless Adapter",
+"		1385 4800  WG511 Wireless Adapter",
+"		16a5 1605  ALLNET ALL0271 Wireless PCI Adapter",
+"		17cf 0014  XG-600 and clones Wireless Adapter",
+"		17cf 0020  XG-900 and clones Wireless Adapter",
+"	8130  HMP8130 NTSC/PAL Video Decoder",
+"	8131  HMP8131 NTSC/PAL Video Decoder",
+"	ffff  ISL3886IK",
+"		1260 0000  Senao 3054MP+ (J) mini-PCI WLAN 802.11g adapter",
+"1261  Matsushita-Kotobuki Electronics Industries, Ltd.",
+"1262  ES Computer Company, Ltd.",
+"1263  Sonic Solutions",
+"1264  Aval Nagasaki Corporation",
+"1265  Casio Computer Co., Ltd.",
+"1266  Microdyne Corporation",
+"	0001  NE10/100 Adapter (i82557B)",
+"	1910  NE2000Plus (RT8029) Ethernet Adapter",
+"		1266 1910  NE2000Plus Ethernet Adapter",
+"1267  S. A. Telecommunications",
+"	5352  PCR2101",
+"	5a4b  Telsat Turbo",
+"1268  Tektronix",
+"1269  Thomson-CSF/TTM",
+"126a  Lexmark International, Inc.",
+"126b  Adax, Inc.",
+"126c  Northern Telecom",
+"	1211  10/100BaseTX [RTL81xx]",
+"	126c  802.11b Wireless Ethernet Adapter",
+"126d  Splash Technology, Inc.",
+"126e  Sumitomo Metal Industries, Ltd.",
+"126f  Silicon Motion, Inc.",
+"	0501  SM501 VoyagerGX Rev. AA",
+"	0510  SM501 VoyagerGX Rev. B",
+"	0710  SM710 LynxEM",
+"	0712  SM712 LynxEM+",
+"	0720  SM720 Lynx3DM",
+"	0730  SM731 Cougar3DR",
+"	0810  SM810 LynxE",
+"	0811  SM811 LynxE",
+"	0820  SM820 Lynx3D",
+"	0910  SM910",
+"1270  Olympus Optical Co., Ltd.",
+"1271  GW Instruments",
+"1272  Telematics International",
+"1273  Hughes Network Systems",
+"	0002  DirecPC",
+"1274  Ensoniq",
+"	1171  ES1373 [AudioPCI] (also Creative Labs CT5803)",
+"	1371  ES1371 [AudioPCI-97]",
+"		0e11 0024  AudioPCI on Motherboard Compaq Deskpro",
+"		0e11 b1a7  ES1371, ES1373 AudioPCI",
+"		1033 80ac  ES1371, ES1373 AudioPCI",
+"		1042 1854  Tazer",
+"		107b 8054  Tabor2",
+"		1274 1371  Creative Sound Blaster AudioPCI64V, AudioPCI128",
+"		1274 8001  CT4751 board",
+"		1462 6470  ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A",
+"		1462 6560  ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10",
+"		1462 6630  ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A",
+"		1462 6631  ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A",
+"		1462 6632  ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A",
+"		1462 6633  ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A",
+"		1462 6820  ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00",
+"		1462 6822  ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A",
+"		1462 6830  ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00",
+"		1462 6880  ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00",
+"		1462 6900  ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00",
+"		1462 6910  ES1371, ES1373 AudioPCI On Motherboard MS-6191",
+"		1462 6930  ES1371, ES1373 AudioPCI On Motherboard MS-6193",
+"		1462 6990  ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A",
+"		1462 6991  ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A",
+"		14a4 2077  ES1371, ES1373 AudioPCI On Motherboard KR639",
+"		14a4 2105  ES1371, ES1373 AudioPCI On Motherboard MR800",
+"		14a4 2107  ES1371, ES1373 AudioPCI On Motherboard MR801",
+"		14a4 2172  ES1371, ES1373 AudioPCI On Motherboard DR739",
+"		1509 9902  ES1371, ES1373 AudioPCI On Motherboard KW11",
+"		1509 9903  ES1371, ES1373 AudioPCI On Motherboard KW31",
+"		1509 9904  ES1371, ES1373 AudioPCI On Motherboard KA11",
+"		1509 9905  ES1371, ES1373 AudioPCI On Motherboard KC13",
+"		152d 8801  ES1371, ES1373 AudioPCI On Motherboard CP810E",
+"		152d 8802  ES1371, ES1373 AudioPCI On Motherboard CP810",
+"		152d 8803  ES1371, ES1373 AudioPCI On Motherboard P3810E",
+"		152d 8804  ES1371, ES1373 AudioPCI On Motherboard P3810-S",
+"		152d 8805  ES1371, ES1373 AudioPCI On Motherboard P3820-S",
+"		270f 2001  ES1371, ES1373 AudioPCI On Motherboard 6CTR",
+"		270f 2200  ES1371, ES1373 AudioPCI On Motherboard 6WTX",
+"		270f 3000  ES1371, ES1373 AudioPCI On Motherboard 6WSV",
+"		270f 3100  ES1371, ES1373 AudioPCI On Motherboard 6WIV2",
+"		270f 3102  ES1371, ES1373 AudioPCI On Motherboard 6WIV",
+"		270f 7060  ES1371, ES1373 AudioPCI On Motherboard 6ASA2",
+"		8086 4249  ES1371, ES1373 AudioPCI On Motherboard BI440ZX",
+"		8086 424c  ES1371, ES1373 AudioPCI On Motherboard BL440ZX",
+"		8086 425a  ES1371, ES1373 AudioPCI On Motherboard BZ440ZX",
+"		8086 4341  ES1371, ES1373 AudioPCI On Motherboard Cayman",
+"		8086 4343  ES1371, ES1373 AudioPCI On Motherboard Cape Cod",
+"		8086 4541  D815EEA Motherboard",
+"		8086 4649  ES1371, ES1373 AudioPCI On Motherboard Fire Island",
+"		8086 464a  ES1371, ES1373 AudioPCI On Motherboard FJ440ZX",
+"		8086 4d4f  ES1371, ES1373 AudioPCI On Motherboard Montreal",
+"		8086 4f43  ES1371, ES1373 AudioPCI On Motherboard OC440LX",
+"		8086 5243  ES1371, ES1373 AudioPCI On Motherboard RC440BX",
+"		8086 5352  ES1371, ES1373 AudioPCI On Motherboard SunRiver",
+"		8086 5643  ES1371, ES1373 AudioPCI On Motherboard Vancouver",
+"		8086 5753  ES1371, ES1373 AudioPCI On Motherboard WS440BX",
+"	5000  ES1370 [AudioPCI]",
+"	5880  5880 AudioPCI",
+"		1274 2000  Creative Sound Blaster AudioPCI128",
+"		1274 2003  Creative SoundBlaster AudioPCI 128",
+"		1274 5880  Creative Sound Blaster AudioPCI128",
+"		1274 8001  Sound Blaster 16PCI 4.1ch",
+"		1458 a000  5880 AudioPCI On Motherboard 6OXET",
+"		1462 6880  5880 AudioPCI On Motherboard MS-6188 1.00",
+"		270f 2001  5880 AudioPCI On Motherboard 6CTR",
+"		270f 2200  5880 AudioPCI On Motherboard 6WTX",
+"		270f 7040  5880 AudioPCI On Motherboard 6ATA4",
+"1275  Network Appliance Corporation",
+"1276  Switched Network Technologies, Inc.",
+"1277  Comstream",
+"1278  Transtech Parallel Systems Ltd.",
+"	0701  TPE3/TM3 PowerPC Node",
+"	0710  TPE5 PowerPC PCI board",
+"1279  Transmeta Corporation",
+"	0060  TM8000 Northbridge",
+"	0061  TM8000 AGP bridge",
+"	0295  Northbridge",
+"	0395  LongRun Northbridge",
+"	0396  SDRAM controller",
+"	0397  BIOS scratchpad",
+"127a  Rockwell International",
+"	1002  HCF 56k Data/Fax Modem",
+"		1092 094c  SupraExpress 56i PRO [Diamond SUP2380]",
+"		122d 4002  HPG / MDP3858-U",
+"		122d 4005  MDP3858-E",
+"		122d 4007  MDP3858-A/-NZ",
+"		122d 4012  MDP3858-SA",
+"		122d 4017  MDP3858-W",
+"		122d 4018  MDP3858-W",
+"		127a 1002  Rockwell 56K D/F HCF Modem",
+"	1003  HCF 56k Data/Fax Modem",
+"		0e11 b0bc  229-DF Zephyr",
+"		0e11 b114  229-DF Cheetah",
+"		1033 802b  229-DF",
+"		13df 1003  PCI56RX Modem",
+"		13e0 0117  IBM",
+"		13e0 0147  IBM F-1156IV+/R3 Spain V.90 Modem",
+"		13e0 0197  IBM",
+"		13e0 01c7  IBM F-1156IV+/R3 WW V.90 Modem",
+"		13e0 01f7  IBM",
+"		1436 1003  IBM",
+"		1436 1103  IBM 5614PM3G V.90 Modem",
+"		1436 1602  Compaq 229-DF Ducati",
+"	1004  HCF 56k Data/Fax/Voice Modem",
+"		1048 1500  MicroLink 56k Modem",
+"		10cf 1059  Fujitsu 229-DFRT",
+"	1005  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"		1005 127a  AOpen FM56-P",
+"		1033 8029  229-DFSV",
+"		1033 8054  Modem",
+"		10cf 103c  Fujitsu",
+"		10cf 1055  Fujitsu 229-DFSV",
+"		10cf 1056  Fujitsu 229-DFSV",
+"		122d 4003  MDP3858SP-U",
+"		122d 4006  Packard Bell MDP3858V-E",
+"		122d 4008  MDP3858SP-A/SP-NZ",
+"		122d 4009  MDP3858SP-E",
+"		122d 4010  MDP3858V-U",
+"		122d 4011  MDP3858SP-SA",
+"		122d 4013  MDP3858V-A/V-NZ",
+"		122d 4015  MDP3858SP-W",
+"		122d 4016  MDP3858V-W",
+"		122d 4019  MDP3858V-SA",
+"		13df 1005  PCI56RVP Modem",
+"		13e0 0187  IBM",
+"		13e0 01a7  IBM",
+"		13e0 01b7  IBM DF-1156IV+/R3 Spain V.90 Modem",
+"		13e0 01d7  IBM DF-1156IV+/R3 WW V.90 Modem",
+"		1436 1005  IBM",
+"		1436 1105  IBM",
+"		1437 1105  IBM 5614PS3G V.90 Modem",
+"	1022  HCF 56k Modem",
+"		1436 1303  M3-5614PM3G V.90 Modem",
+"	1023  HCF 56k Data/Fax Modem",
+"		122d 4020  Packard Bell MDP3858-WE",
+"		122d 4023  MDP3858-UE",
+"		13e0 0247  IBM F-1156IV+/R6 Spain V.90 Modem",
+"		13e0 0297  IBM",
+"		13e0 02c7  IBM F-1156IV+/R6 WW V.90 Modem",
+"		1436 1203  IBM",
+"		1436 1303  IBM",
+"	1024  HCF 56k Data/Fax/Voice Modem",
+"	1025  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"		10cf 106a  Fujitsu 235-DFSV",
+"		122d 4021  Packard Bell MDP3858V-WE",
+"		122d 4022  MDP3858SP-WE",
+"		122d 4024  MDP3858V-UE",
+"		122d 4025  MDP3858SP-UE",
+"	1026  HCF 56k PCI Speakerphone Modem",
+"	1032  HCF 56k Modem",
+"	1033  HCF 56k Modem",
+"	1034  HCF 56k Modem",
+"	1035  HCF 56k PCI Speakerphone Modem",
+"	1036  HCF 56k Modem",
+"	1085  HCF 56k Volcano PCI Modem",
+"	2005  HCF 56k Data/Fax Modem",
+"		104d 8044  229-DFSV",
+"		104d 8045  229-DFSV",
+"		104d 8055  PBE/Aztech 235W-DFSV",
+"		104d 8056  235-DFSV",
+"		104d 805a  Modem",
+"		104d 805f  Modem",
+"		104d 8074  Modem",
+"	2013  HSF 56k Data/Fax Modem",
+"		1179 0001  Modem",
+"		1179 ff00  Modem",
+"	2014  HSF 56k Data/Fax/Voice Modem",
+"		10cf 1057  Fujitsu Citicorp III",
+"		122d 4050  MSP3880-U",
+"		122d 4055  MSP3880-W",
+"	2015  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"		10cf 1063  Fujitsu",
+"		10cf 1064  Fujitsu",
+"		1468 2015  Fujitsu",
+"	2016  HSF 56k Data/Fax/Voice/Spkp Modem",
+"		122d 4051  MSP3880V-W",
+"		122d 4052  MSP3880SP-W",
+"		122d 4054  MSP3880V-U",
+"		122d 4056  MSP3880SP-U",
+"		122d 4057  MSP3880SP-A",
+"	4311  Riptide HSF 56k PCI Modem",
+"		127a 4311  Ring Modular? Riptide HSF RT HP Dom",
+"		13e0 0210  HP-GVC",
+"	4320  Riptide PCI Audio Controller",
+"		1235 4320  Riptide PCI Audio Controller",
+"	4321  Riptide HCF 56k PCI Modem",
+"		1235 4321  Hewlett Packard DF",
+"		1235 4324  Hewlett Packard DF",
+"		13e0 0210  Hewlett Packard DF",
+"		144d 2321  Riptide",
+"	4322  Riptide PCI Game Controller",
+"		1235 4322  Riptide PCI Game Controller",
+"	8234  RapidFire 616X ATM155 Adapter",
+"		108d 0022  RapidFire 616X ATM155 Adapter",
+"		108d 0027  RapidFire 616X ATM155 Adapter",
+"127b  Pixera Corporation",
+"127c  Crosspoint Solutions, Inc.",
+"127d  Vela Research",
+"127e  Winnov, L.P.",
+"127f  Fujifilm",
+"1280  Photoscript Group Ltd.",
+"1281  Yokogawa Electric Corporation",
+"1282  Davicom Semiconductor, Inc.",
+"	9009  Ethernet 100/10 MBit",
+"	9100  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	9102  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	9132  Ethernet 100/10 MBit",
+"1283  Integrated Technology Express, Inc.",
+"	673a  IT8330G",
+"	8211  ITE 8211F Single Channel UDMA 133 (ASUS 8211 (ITE IT8212 ATA RAID Controller))",
+"		1043 8138  P5GD1-VW Mainboard",
+"	8212  IT/ITE8212 Dual channel ATA RAID controller (PCI version seems to be IT8212, embedded seems to be ITE8212)",
+"		1283 0001  IT/ITE8212 Dual channel ATA RAID controller",
+"	8330  IT8330G",
+"	8872  IT8874F PCI Dual Serial Port Controller",
+"	8888  IT8888F PCI to ISA Bridge with SMB",
+"	8889  IT8889F PCI to ISA Bridge",
+"	e886  IT8330G",
+"1284  Sahara Networks, Inc.",
+"1285  Platform Technologies, Inc.",
+"	0100  AGOGO sound chip (aka ESS Maestro 1)",
+"1286  Mazet GmbH",
+"1287  M-Pact, Inc.",
+"	001e  LS220D DVD Decoder",
+"	001f  LS220C DVD Decoder",
+"1288  Timestep Corporation",
+"1289  AVC Technology, Inc.",
+"128a  Asante Technologies, Inc.",
+"128b  Transwitch Corporation",
+"128c  Retix Corporation",
+"128d  G2 Networks, Inc.",
+"	0021  ATM155 Adapter",
+"128e  Hoontech Corporation/Samho Multi Tech Ltd.",
+"	0008  ST128 WSS/SB",
+"	0009  ST128 SAM9407",
+"	000a  ST128 Game Port",
+"	000b  ST128 MPU Port",
+"	000c  ST128 Ctrl Port",
+"128f  Tateno Dennou, Inc.",
+"1290  Sord Computer Corporation",
+"1291  NCS Computer Italia",
+"1292  Tritech Microelectronics Inc",
+"1293  Media Reality Technology",
+"1294  Rhetorex, Inc.",
+"1295  Imagenation Corporation",
+"1296  Kofax Image Products",
+"1297  Holco Enterprise Co, Ltd/Shuttle Computer",
+"1298  Spellcaster Telecommunications Inc.",
+"1299  Knowledge Technology Lab.",
+"129a  VMetro, inc.",
+"	0615  PBT-615 PCI-X Bus Analyzer",
+"129b  Image Access",
+"129c  Jaycor",
+"129d  Compcore Multimedia, Inc.",
+"129e  Victor Company of Japan, Ltd.",
+"129f  OEC Medical Systems, Inc.",
+"12a0  Allen-Bradley Company",
+"12a1  Simpact Associates, Inc.",
+"12a2  Newgen Systems Corporation",
+"12a3  Lucent Technologies",
+"	8105  T8105 H100 Digital Switch",
+"12a4  NTT Electronics Technology Company",
+"12a5  Vision Dynamics Ltd.",
+"12a6  Scalable Networks, Inc.",
+"12a7  AMO GmbH",
+"12a8  News Datacom",
+"12a9  Xiotech Corporation",
+"12aa  SDL Communications, Inc.",
+"12ab  Yuan Yuan Enterprise Co., Ltd.",
+"	0002  AU8830 [Vortex2] Based Sound Card With A3D Support",
+"	3000  MPG-200C PCI DVD Decoder Card",
+"12ac  Measurex Corporation",
+"12ad  Multidata GmbH",
+"12ae  Alteon Networks Inc.",
+"	0001  AceNIC Gigabit Ethernet",
+"		1014 0104  Gigabit Ethernet-SX PCI Adapter",
+"		12ae 0001  Gigabit Ethernet-SX (Universal)",
+"		1410 0104  Gigabit Ethernet-SX PCI Adapter",
+"	0002  AceNIC Gigabit Ethernet (Copper)",
+"		10a9 8002  Acenic Gigabit Ethernet",
+"		12ae 0002  Gigabit Ethernet-T (3C986-T)",
+"	00fa  Farallon PN9100-T Gigabit Ethernet",
+"12af  TDK USA Corp",
+"12b0  Jorge Scientific Corp",
+"12b1  GammaLink",
+"12b2  General Signal Networks",
+"12b3  Inter-Face Co Ltd",
+"12b4  FutureTel Inc",
+"12b5  Granite Systems Inc.",
+"12b6  Natural Microsystems",
+"12b7  Cognex Modular Vision Systems Div. - Acumen Inc.",
+"12b8  Korg",
+"12b9  3Com Corp, Modem Division",
+"	1006  WinModem",
+"		12b9 005c  USR 56k Internal Voice WinModem (Model 3472)",
+"		12b9 005e  USR 56k Internal WinModem (Models 662975)",
+"		12b9 0062  USR 56k Internal Voice WinModem (Model 662978)",
+"		12b9 0068  USR 56k Internal Voice WinModem (Model 5690)",
+"		12b9 007a  USR 56k Internal Voice WinModem (Model 662974)",
+"		12b9 007f  USR 56k Internal WinModem (Models 5698, 5699)",
+"		12b9 0080  USR 56k Internal WinModem (Models 2975, 3528)",
+"		12b9 0081  USR 56k Internal Voice WinModem (Models 2974, 3529)",
+"		12b9 0091  USR 56k Internal Voice WinModem (Model 2978)",
+"	1007  USR 56k Internal WinModem",
+"		12b9 00a3  USR 56k Internal WinModem (Model 3595)",
+"	1008  56K FaxModem Model 5610",
+"		12b9 00a2  USR 56k Internal FAX Modem (Model 2977)",
+"		12b9 00aa  USR 56k Internal Voice Modem (Model 2976)",
+"		12b9 00ab  USR 56k Internal Voice Modem (Model 5609)",
+"		12b9 00ac  USR 56k Internal Voice Modem (Model 3298)",
+"		12b9 00ad  USR 56k Internal FAX Modem (Model 5610)",
+"12ba  BittWare, Inc.",
+"12bb  Nippon Unisoft Corporation",
+"12bc  Array Microsystems",
+"12bd  Computerm Corp.",
+"12be  Anchor Chips Inc.",
+"	3041  AN3041Q CO-MEM",
+"	3042  AN3042Q CO-MEM Lite",
+"		12be 3042  Anchor Chips Lite Evaluation Board",
+"12bf  Fujifilm Microdevices",
+"12c0  Infimed",
+"12c1  GMM Research Corp",
+"12c2  Mentec Limited",
+"12c3  Holtek Microelectronics Inc",
+"	0058  PCI NE2K Ethernet",
+"	5598  PCI NE2K Ethernet",
+"12c4  Connect Tech Inc",
+"	0001  Blue HEAT/PCI 8 (RS232/CL/RJ11)",
+"	0002  Blue HEAT/PCI 4 (RS232)",
+"	0003  Blue HEAT/PCI 2 (RS232)",
+"	0004  Blue HEAT/PCI 8 (UNIV, RS485)",
+"	0005  Blue HEAT/PCI 4+4/6+2 (UNIV, RS232/485)",
+"	0006  Blue HEAT/PCI 4 (OPTO, RS485)",
+"	0007  Blue HEAT/PCI 2+2 (RS232/485)",
+"	0008  Blue HEAT/PCI 2 (OPTO, Tx, RS485)",
+"	0009  Blue HEAT/PCI 2+6 (RS232/485)",
+"	000a  Blue HEAT/PCI 8 (Tx, RS485)",
+"	000b  Blue HEAT/PCI 4 (Tx, RS485)",
+"	000c  Blue HEAT/PCI 2 (20 MHz, RS485)",
+"	000d  Blue HEAT/PCI 2 PTM",
+"	0100  NT960/PCI",
+"	0201  cPCI Titan - 2 Port",
+"	0202  cPCI Titan - 4 Port",
+"	0300  CTI PCI UART 2 (RS232)",
+"	0301  CTI PCI UART 4 (RS232)",
+"	0302  CTI PCI UART 8 (RS232)",
+"	0310  CTI PCI UART 1+1 (RS232/485)",
+"	0311  CTI PCI UART 2+2 (RS232/485)",
+"	0312  CTI PCI UART 4+4 (RS232/485)",
+"	0320  CTI PCI UART 2",
+"	0321  CTI PCI UART 4",
+"	0322  CTI PCI UART 8",
+"	0330  CTI PCI UART 2 (RS485)",
+"	0331  CTI PCI UART 4 (RS485)",
+"	0332  CTI PCI UART 8 (RS485)",
+"12c5  Picture Elements Incorporated",
+"	007e  Imaging/Scanning Subsystem Engine",
+"	007f  Imaging/Scanning Subsystem Engine",
+"	0081  PCIVST [Grayscale Thresholding Engine]",
+"	0085  Video Simulator/Sender",
+"	0086  THR2 Multi-scale Thresholder",
+"12c6  Mitani Corporation",
+"12c7  Dialogic Corp",
+"12c8  G Force Co, Ltd",
+"12c9  Gigi Operations",
+"12ca  Integrated Computing Engines",
+"12cb  Antex Electronics Corporation",
+"12cc  Pluto Technologies International",
+"12cd  Aims Lab",
+"12ce  Netspeed Inc.",
+"12cf  Prophet Systems, Inc.",
+"12d0  GDE Systems, Inc.",
+"12d1  PSITech",
+"12d2  NVidia / SGS Thomson (Joint Venture)",
+"	0008  NV1",
+"	0009  DAC64",
+"	0018  Riva128",
+"		1048 0c10  VICTORY Erazor",
+"		107b 8030  STB Velocity 128",
+"		1092 0350  Viper V330",
+"		1092 1092  Viper V330",
+"		10b4 1b1b  STB Velocity 128",
+"		10b4 1b1d  STB Velocity 128",
+"		10b4 1b1e  STB Velocity 128, PAL TV-Out",
+"		10b4 1b20  STB Velocity 128 Sapphire",
+"		10b4 1b21  STB Velocity 128",
+"		10b4 1b22  STB Velocity 128 AGP, NTSC TV-Out",
+"		10b4 1b23  STB Velocity 128 AGP, PAL TV-Out",
+"		10b4 1b27  STB Velocity 128 DVD",
+"		10b4 1b88  MVP Pro 128",
+"		10b4 222a  STB Velocity 128 AGP",
+"		10b4 2230  STB Velocity 128",
+"		10b4 2232  STB Velocity 128",
+"		10b4 2235  STB Velocity 128 AGP",
+"		2a15 54a3  3DVision-SAGP / 3DexPlorer 3000",
+"	0019  Riva128ZX",
+"	0020  TNT",
+"	0028  TNT2",
+"	0029  UTNT2",
+"	002c  VTNT2",
+"	00a0  ITNT2",
+"12d3  Vingmed Sound A/S",
+"12d4  Ulticom (Formerly DGM&S)",
+"	0200  T1 Card",
+"12d5  Equator Technologies Inc",
+"	0003  BSP16",
+"	1000  BSP15",
+"12d6  Analogic Corp",
+"12d7  Biotronic SRL",
+"12d8  Pericom Semiconductor",
+"	8150  PCI to PCI Bridge",
+"12d9  Aculab PLC",
+"	0002  PCI Prosody",
+"	0004  cPCI Prosody",
+"	0005  Aculab E1/T1 PCI card",
+"	1078  Prosody X class e1000 device",
+"		12d9 000d  Prosody X PCI",
+"12da  True Time Inc.",
+"12db  Annapolis Micro Systems, Inc",
+"12dc  Symicron Computer Communication Ltd.",
+"12dd  Management Graphics",
+"12de  Rainbow Technologies",
+"	0200  CryptoSwift CS200",
+"12df  SBS Technologies Inc",
+"12e0  Chase Research",
+"	0010  ST16C654 Quad UART",
+"	0020  ST16C654 Quad UART",
+"	0030  ST16C654 Quad UART",
+"12e1  Nintendo Co, Ltd",
+"12e2  Datum Inc. Bancomm-Timing Division",
+"12e3  Imation Corp - Medical Imaging Systems",
+"12e4  Brooktrout Technology Inc",
+"12e5  Apex Semiconductor Inc",
+"12e6  Cirel Systems",
+"12e7  Sunsgroup Corporation",
+"12e8  Crisc Corp",
+"12e9  GE Spacenet",
+"12ea  Zuken",
+"12eb  Aureal Semiconductor",
+"	0001  Vortex 1",
+"		104d 8036  AU8820 Vortex Digital Audio Processor",
+"		1092 2000  Sonic Impact A3D",
+"		1092 2100  Sonic Impact A3D",
+"		1092 2110  Sonic Impact A3D",
+"		1092 2200  Sonic Impact A3D",
+"		122d 1002  AU8820 Vortex Digital Audio Processor",
+"		12eb 0001  AU8820 Vortex Digital Audio Processor",
+"		5053 3355  Montego",
+"	0002  Vortex 2",
+"		104d 8049  AU8830 Vortex 3D Digital Audio Processor",
+"		104d 807b  AU8830 Vortex 3D Digital Audio Processor",
+"		1092 3000  Monster Sound II",
+"		1092 3001  Monster Sound II",
+"		1092 3002  Monster Sound II",
+"		1092 3003  Monster Sound II",
+"		1092 3004  Monster Sound II",
+"		12eb 0002  AU8830 Vortex 3D Digital Audio Processor",
+"		12eb 0088  AU8830 Vortex 3D Digital Audio Processor",
+"		144d 3510  AU8830 Vortex 3D Digital Audio Processor",
+"		5053 3356  Montego II",
+"	0003  AU8810 Vortex Digital Audio Processor",
+"		104d 8049  AU8810 Vortex Digital Audio Processor",
+"		104d 8077  AU8810 Vortex Digital Audio Processor",
+"		109f 1000  AU8810 Vortex Digital Audio Processor",
+"		12eb 0003  AU8810 Vortex Digital Audio Processor",
+"		1462 6780  AU8810 Vortex Digital Audio Processor",
+"		14a4 2073  AU8810 Vortex Digital Audio Processor",
+"		14a4 2091  AU8810 Vortex Digital Audio Processor",
+"		14a4 2104  AU8810 Vortex Digital Audio Processor",
+"		14a4 2106  AU8810 Vortex Digital Audio Processor",
+"	8803  Vortex 56k Software Modem",
+"		12eb 8803  Vortex 56k Software Modem",
+"12ec  3A International, Inc.",
+"12ed  Optivision Inc.",
+"12ee  Orange Micro",
+"12ef  Vienna Systems",
+"12f0  Pentek",
+"12f1  Sorenson Vision Inc",
+"12f2  Gammagraphx, Inc.",
+"12f3  Radstone Technology",
+"12f4  Megatel",
+"12f5  Forks",
+"12f6  Dawson France",
+"12f7  Cognex",
+"12f8  Electronic Design GmbH",
+"	0002  VideoMaker",
+"12f9  Four Fold Ltd",
+"12fb  Spectrum Signal Processing",
+"	0001  PMC-MAI",
+"	00f5  F5 Dakar",
+"	02ad  PMC-2MAI",
+"	2adc  ePMC-2ADC",
+"	3100  PRO-3100",
+"	3500  PRO-3500",
+"	4d4f  Modena",
+"	8120  ePMC-8120",
+"	da62  Daytona C6201 PCI (Hurricane)",
+"	db62  Ingliston XBIF",
+"	dc62  Ingliston PLX9054",
+"	dd62  Ingliston JTAG/ISP",
+"	eddc  ePMC-MSDDC",
+"	fa01  ePMC-FPGA",
+"12fc  Capital Equipment Corp",
+"12fd  I2S",
+"12fe  ESD Electronic System Design GmbH",
+"12ff  Lexicon",
+"1300  Harman International Industries Inc",
+"1302  Computer Sciences Corp",
+"1303  Innovative Integration",
+"1304  Juniper Networks",
+"1305  Netphone, Inc",
+"1306  Duet Technologies",
+"1307  Measurement Computing",
+"	0001  PCI-DAS1602/16",
+"	000b  PCI-DIO48H",
+"	000c  PCI-PDISO8",
+"	000d  PCI-PDISO16",
+"	000f  PCI-DAS1200",
+"	0010  PCI-DAS1602/12",
+"	0014  PCI-DIO24H",
+"	0015  PCI-DIO24H/CTR3",
+"	0016  PCI-DIO48H/CTR15",
+"	0017  PCI-DIO96H",
+"	0018  PCI-CTR05",
+"	0019  PCI-DAS1200/JR",
+"	001a  PCI-DAS1001",
+"	001b  PCI-DAS1002",
+"	001c  PCI-DAS1602JR/16",
+"	001d  PCI-DAS6402/16",
+"	001e  PCI-DAS6402/12",
+"	001f  PCI-DAS16/M1",
+"	0020  PCI-DDA02/12",
+"	0021  PCI-DDA04/12",
+"	0022  PCI-DDA08/12",
+"	0023  PCI-DDA02/16",
+"	0024  PCI-DDA04/16",
+"	0025  PCI-DDA08/16",
+"	0026  PCI-DAC04/12-HS",
+"	0027  PCI-DAC04/16-HS",
+"	0028  PCI-DIO24",
+"	0029  PCI-DAS08",
+"	002c  PCI-INT32",
+"	0033  PCI-DUAL-AC5",
+"	0034  PCI-DAS-TC",
+"	0035  PCI-DAS64/M1/16",
+"	0036  PCI-DAS64/M2/16",
+"	0037  PCI-DAS64/M3/16",
+"	004c  PCI-DAS1000",
+"	004d  PCI-QUAD04",
+"	0052  PCI-DAS4020/12",
+"	0054  PCI-DIO96",
+"	005e  PCI-DAS6025",
+"1308  Jato Technologies Inc.",
+"	0001  NetCelerator Adapter",
+"		1308 0001  NetCelerator Adapter",
+"1309  AB Semiconductor Ltd",
+"130a  Mitsubishi Electric Microcomputer",
+"130b  Colorgraphic Communications Corp",
+"130c  Ambex Technologies, Inc",
+"130d  Accelerix Inc",
+"130e  Yamatake-Honeywell Co. Ltd",
+"130f  Advanet Inc",
+"1310  Gespac",
+"1311  Videoserver, Inc",
+"1312  Acuity Imaging, Inc",
+"1313  Yaskawa Electric Co.",
+"1316  Teradyne Inc",
+"1317  Linksys",
+"	0981  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	0985  NC100 Network Everywhere Fast Ethernet 10/100",
+"		1734 100c  Scenic N300 ADMtek AN983 10/100 Mbps PCI Adapter",
+"	1985  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	2850  HSP MicroModem 56",
+"	5120  ADMtek ADM5120 OpenGate System-on-Chip",
+"	8201  ADMtek ADM8211 802.11b Wireless Interface",
+"		10b8 2635  SMC2635W 802.11b (11Mbps) wireless lan pcmcia (cardbus) card",
+"		1317 8201  SMC2635W 802.11b (11mbps) wireless lan pcmcia (cardbus) card",
+"	8211  ADMtek ADM8211 802.11b Wireless Interface",
+"	9511  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"1318  Packet Engines Inc.",
+"	0911  GNIC-II PCI Gigabit Ethernet [Hamachi]",
+"1319  Fortemedia, Inc",
+"	0801  Xwave QS3000A [FM801]",
+"		1319 1319  FM801 PCI Audio",
+"	0802  Xwave QS3000A [FM801 game port]",
+"		1319 1319  FM801 PCI Joystick",
+"	1000  FM801 PCI Audio",
+"	1001  FM801 PCI Joystick",
+"131a  Finisar Corp.",
+"131c  Nippon Electro-Sensory Devices Corp",
+"131d  Sysmic, Inc.",
+"131e  Xinex Networks Inc",
+"131f  Siig Inc",
+"	1000  CyberSerial (1-port) 16550",
+"	1001  CyberSerial (1-port) 16650",
+"	1002  CyberSerial (1-port) 16850",
+"	1010  Duet 1S(16550)+1P",
+"	1011  Duet 1S(16650)+1P",
+"	1012  Duet 1S(16850)+1P",
+"	1020  CyberParallel (1-port)",
+"	1021  CyberParallel (2-port)",
+"	1030  CyberSerial (2-port) 16550",
+"	1031  CyberSerial (2-port) 16650",
+"	1032  CyberSerial (2-port) 16850",
+"	1034  Trio 2S(16550)+1P",
+"	1035  Trio 2S(16650)+1P",
+"	1036  Trio 2S(16850)+1P",
+"	1050  CyberSerial (4-port) 16550",
+"	1051  CyberSerial (4-port) 16650",
+"	1052  CyberSerial (4-port) 16850",
+"	2000  CyberSerial (1-port) 16550",
+"	2001  CyberSerial (1-port) 16650",
+"	2002  CyberSerial (1-port) 16850",
+"	2010  Duet 1S(16550)+1P",
+"	2011  Duet 1S(16650)+1P",
+"	2012  Duet 1S(16850)+1P",
+"	2020  CyberParallel (1-port)",
+"	2021  CyberParallel (2-port)",
+"	2030  CyberSerial (2-port) 16550",
+"		131f 2030  PCI Serial Card",
+"	2031  CyberSerial (2-port) 16650",
+"	2032  CyberSerial (2-port) 16850",
+"	2040  Trio 1S(16550)+2P",
+"	2041  Trio 1S(16650)+2P",
+"	2042  Trio 1S(16850)+2P",
+"	2050  CyberSerial (4-port) 16550",
+"	2051  CyberSerial (4-port) 16650",
+"	2052  CyberSerial (4-port) 16850",
+"	2060  Trio 2S(16550)+1P",
+"	2061  Trio 2S(16650)+1P",
+"	2062  Trio 2S(16850)+1P",
+"	2081  CyberSerial (8-port) ST16654",
+"1320  Crypto AG",
+"1321  Arcobel Graphics BV",
+"1322  MTT Co., Ltd",
+"1323  Dome Inc",
+"1324  Sphere Communications",
+"1325  Salix Technologies, Inc",
+"1326  Seachange international",
+"1327  Voss scientific",
+"1328  quadrant international",
+"1329  Productivity Enhancement",
+"132a  Microcom Inc.",
+"132b  Broadband Technologies",
+"132c  Micrel Inc",
+"132d  Integrated Silicon Solution, Inc.",
+"1330  MMC Networks",
+"1331  Radisys Corp.",
+"	0030  ENP-2611",
+"	8200  82600 Host Bridge",
+"	8201  82600 IDE",
+"	8202  82600 USB",
+"	8210  82600 PCI Bridge",
+"1332  Micro Memory",
+"	5415  MM-5415CN PCI Memory Module with Battery Backup",
+"	5425  MM-5425CN PCI 64/66 Memory Module with Battery Backup",
+"	6140  MM-6140D",
+"1334  Redcreek Communications, Inc",
+"1335  Videomail, Inc",
+"1337  Third Planet Publishing",
+"1338  BT Electronics",
+"133a  Vtel Corp",
+"133b  Softcom Microsystems",
+"133c  Holontech Corp",
+"133d  SS Technologies",
+"133e  Virtual Computer Corp",
+"133f  SCM Microsystems",
+"1340  Atalla Corp",
+"1341  Kyoto Microcomputer Co",
+"1342  Promax Systems Inc",
+"1343  Phylon Communications Inc",
+"1344  Crucial Technology",
+"1345  Arescom Inc",
+"1347  Odetics",
+"1349  Sumitomo Electric Industries, Ltd.",
+"134a  DTC Technology Corp.",
+"	0001  Domex 536",
+"	0002  Domex DMX3194UP SCSI Adapter",
+"134b  ARK Research Corp.",
+"134c  Chori Joho System Co. Ltd",
+"134d  PCTel Inc",
+"	2189  HSP56 MicroModem",
+"	2486  2304WT V.92 MDC Modem",
+"	7890  HSP MicroModem 56",
+"		134d 0001  PCT789 adapter",
+"	7891  HSP MicroModem 56",
+"		134d 0001  HSP MicroModem 56",
+"	7892  HSP MicroModem 56",
+"	7893  HSP MicroModem 56",
+"	7894  HSP MicroModem 56",
+"	7895  HSP MicroModem 56",
+"	7896  HSP MicroModem 56",
+"	7897  HSP MicroModem 56",
+"134e  CSTI",
+"134f  Algo System Co Ltd",
+"1350  Systec Co. Ltd",
+"1351  Sonix Inc",
+"1353  Thales Idatys",
+"	0002  Proserver",
+"	0003  PCI-FUT",
+"	0004  PCI-S0",
+"	0005  PCI-FUT-S0",
+"1354  Dwave System Inc",
+"1355  Kratos Analytical Ltd",
+"1356  The Logical Co",
+"1359  Prisa Networks",
+"135a  Brain Boxes",
+"135b  Giganet Inc",
+"135c  Quatech Inc",
+"	0010  QSC-100",
+"	0020  DSC-100",
+"	0030  DSC-200/300",
+"	0040  QSC-200/300",
+"	0050  ESC-100D",
+"	0060  ESC-100M",
+"	00f0  MPAC-100 Syncronous Serial Card (Zilog 85230)",
+"	0170  QSCLP-100",
+"	0180  DSCLP-100",
+"	0190  SSCLP-100",
+"	01a0  QSCLP-200/300",
+"	01b0  DSCLP-200/300",
+"	01c0  SSCLP-200/300",
+"135d  ABB Network Partner AB",
+"135e  Sealevel Systems Inc",
+"	5101  Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32)",
+"	7101  Single Port RS-232/422/485/530",
+"	7201  Dual Port RS-232/422/485 Interface",
+"	7202  Dual Port RS-232 Interface",
+"	7401  Four Port RS-232 Interface",
+"	7402  Four Port RS-422/485 Interface",
+"	7801  Eight Port RS-232 Interface",
+"	7804  Eight Port RS-232/422/485 Interface",
+"	8001  8001 Digital I/O Adapter",
+"135f  I-Data International A-S",
+"1360  Meinberg Funkuhren",
+"	0101  PCI32 DCF77 Radio Clock",
+"	0102  PCI509 DCF77 Radio Clock",
+"	0103  PCI510 DCF77 Radio Clock",
+"	0104  PCI511 DCF77 Radio Clock",
+"	0201  GPS167PCI GPS Receiver",
+"	0202  GPS168PCI GPS Receiver",
+"	0203  GPS169PCI GPS Receiver",
+"	0204  GPS170PCI GPS Receiver",
+"	0301  TCR510PCI IRIG Timecode Reader",
+"	0302  TCR167PCI IRIG Timecode Reader",
+"1361  Soliton Systems K.K.",
+"1362  Fujifacom Corporation",
+"1363  Phoenix Technology Ltd",
+"1364  ATM Communications Inc",
+"1365  Hypercope GmbH",
+"1366  Teijin Seiki Co. Ltd",
+"1367  Hitachi Zosen Corporation",
+"1368  Skyware Corporation",
+"1369  Digigram",
+"136a  High Soft Tech",
+"136b  Kawasaki Steel Corporation",
+"	ff01  KL5A72002 Motion JPEG",
+"136c  Adtek System Science Co Ltd",
+"136d  Gigalabs Inc",
+"136f  Applied Magic Inc",
+"1370  ATL Products",
+"1371  CNet Technology Inc",
+"	434e  GigaCard Network Adapter",
+"		1371 434e  N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L)",
+"1373  Silicon Vision Inc",
+"1374  Silicom Ltd.",
+"	0024  Silicom Dual port Giga Ethernet BGE Bypass Server Adapter",
+"	0025  Silicom Quad port Giga Ethernet BGE Bypass Server Adapter",
+"	0026  Silicom Dual port Fiber Giga Ethernet 546 Bypass Server Adapter",
+"	0027  Silicom Dual port Fiber LX Giga Ethernet 546 Bypass Server Adapter",
+"	0029  Silicom Dual port Copper Giga Ethernet 546GB Bypass Server Adapter",
+"	002a  Silicom Dual port Fiber Giga Ethernet 546 TAP/Bypass Server Adapter",
+"	002b  Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter (PXE2TBI)",
+"	002c  Silicom Quad port Copper Giga Ethernet 546GB Bypass Server Adapter (PXG4BPI)",
+"	002d  Silicom Quad port Fiber-SX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI)",
+"	002e  Silicom Quad port Fiber-LX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI-LX)",
+"	002f  Silicom Dual port Fiber-SX Giga Ethernet 546GB Low profile Bypass Server Adapter (PXG2BPFIL)",
+"	0030  Silicom Dual port Fiber-LX Giga Ethernet 546GB Low profile Bypass Server Adapter",
+"	0031  Silicom Quad port Copper Giga Ethernet PCI-E Bypass Server Adapter",
+"	0032  Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter",
+"	0034  Silicom Dual port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter",
+"	0035  Silicom Quad port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter",
+"	0036  Silicom Dual port Fiber Giga Ethernet PCI-E BGE Bypass Server Adapter",
+"	0037  Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter",
+"	0038  Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter",
+"	0039  Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter",
+"	003a  Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter",
+"1375  Argosystems Inc",
+"1376  LMC",
+"1377  Electronic Equipment Production & Distribution GmbH",
+"1378  Telemann Co. Ltd",
+"1379  Asahi Kasei Microsystems Co Ltd",
+"137a  Mark of the Unicorn Inc",
+"	0001  PCI-324 Audiowire Interface",
+"137b  PPT Vision",
+"137c  Iwatsu Electric Co Ltd",
+"137d  Dynachip Corporation",
+"137e  Patriot Scientific Corporation",
+"137f  Japan Satellite Systems Inc",
+"1380  Sanritz Automation Co Ltd",
+"1381  Brains Co. Ltd",
+"1382  Marian - Electronic & Software",
+"	0001  ARC88 audio recording card",
+"	2008  Prodif 96 Pro sound system",
+"	2048  Prodif Plus sound system",
+"	2088  Marc 8 Midi sound system",
+"	20c8  Marc A sound system",
+"	4008  Marc 2 sound system",
+"	4010  Marc 2 Pro sound system",
+"	4048  Marc 4 MIDI sound system",
+"	4088  Marc 4 Digi sound system",
+"	4248  Marc X sound system",
+"	4424  TRACE D4 Sound System",
+"1383  Controlnet Inc",
+"1384  Reality Simulation Systems Inc",
+"1385  Netgear",
+"	0013  WG311T 108 Mbps Wireless PCI Adapter",
+"	311a  GA511 Gigabit Ethernet",
+"	4100  802.11b Wireless Adapter (MA301)",
+"	4105  MA311 802.11b wireless adapter",
+"	4251  WG111T 108 Mbps Wireless USB 2.0 Adapter",
+"	4400  WAG511 802.11a/b/g Dual Band Wireless PC Card",
+"	4600  WAG511 802.11a/b/g Dual Band Wireless PC Card",
+"	4601  WAG511 802.11a/b/g Dual Band Wireless PC Card",
+"	4610  WAG511 802.11a/b/g Dual Band Wireless PC Card",
+"	4800  WG511(v1) 54 Mbps Wireless PC Card",
+"	4900  WG311v1 54 Mbps Wireless PCI Adapter",
+"	4a00  WAG311 802.11a/g Wireless PCI Adapter",
+"	4b00  WG511T 108 Mbps Wireless PC Card",
+"	4c00  WG311v2 54 Mbps Wireless PCI Adapter",
+"	4d00  WG311T 108 Mbps Wireless PCI Adapter",
+"	4e00  WG511v2 54 Mbps Wireless PC Card",
+"	4f00  WG511U Double 108 Mbps  Wireless PC Card",
+"	5200  GA511 Gigabit PC Card",
+"	620a  GA620 Gigabit Ethernet",
+"	622a  GA622",
+"	630a  GA630 Gigabit Ethernet",
+"	6b00  WG311v3 54 Mbps Wireless PCI Adapter",
+"	6d00  WPNT511 RangeMax 240 Mbps Wireless PC Card",
+"	f004  FA310TX",
+"1386  Video Domain Technologies",
+"1387  Systran Corp",
+"1388  Hitachi Information Technology Co Ltd",
+"1389  Applicom International",
+"	0001  PCI1500PFB [Intelligent fieldbus adaptor]",
+"138a  Fusion Micromedia Corp",
+"138b  Tokimec Inc",
+"138c  Silicon Reality",
+"138d  Future Techno Designs pte Ltd",
+"138e  Basler GmbH",
+"138f  Patapsco Designs Inc",
+"1390  Concept Development Inc",
+"1391  Development Concepts Inc",
+"1392  Medialight Inc",
+"1393  Moxa Technologies Co Ltd",
+"	1040  Smartio C104H/PCI",
+"	1141  Industrio CP-114",
+"	1680  Smartio C168H/PCI",
+"	2040  Intellio CP-204J",
+"	2180  Intellio C218 Turbo PCI",
+"	3200  Intellio C320 Turbo PCI",
+"1394  Level One Communications",
+"	0001  LXT1001 Gigabit Ethernet",
+"		1394 0001  NetCelerator Adapter",
+"1395  Ambicom Inc",
+"1396  Cipher Systems Inc",
+"1397  Cologne Chip Designs GmbH",
+"	08b4  ISDN network Controller [HFC-4S]",
+"		1397 b520  HFC-4S [IOB4ST]",
+"		1397 b540  HFC-4S [Swyx 4xS0 SX2 QuadBri]",
+"	16b8  ISDN network Controller [HFC-8S]",
+"	2bd0  ISDN network controller [HFC-PCI]",
+"		0675 1704  ISDN Adapter (PCI Bus, D, C)",
+"		0675 1708  ISDN Adapter (PCI Bus, D, C, ACPI)",
+"		1397 2bd0  ISDN Board",
+"		e4bf 1000  CI1-1-Harp",
+"1398  Clarion co. Ltd",
+"1399  Rios systems Co Ltd",
+"139a  Alacritech Inc",
+"	0001  Quad Port 10/100 Server Accelerator",
+"	0003  Single Port 10/100 Server Accelerator",
+"	0005  Single Port Gigabit Server Accelerator",
+"139b  Mediasonic Multimedia Systems Ltd",
+"139c  Quantum 3d Inc",
+"139d  EPL limited",
+"139e  Media4",
+"139f  Aethra s.r.l.",
+"13a0  Crystal Group Inc",
+"13a1  Kawasaki Heavy Industries Ltd",
+"13a2  Ositech Communications Inc",
+"13a3  Hifn Inc.",
+"	0005  7751 Security Processor",
+"	0006  6500 Public Key Processor",
+"	0007  7811 Security Processor",
+"	0012  7951 Security Processor",
+"	0014  78XX Security Processor",
+"	0016  8065 Security Processor",
+"	0017  8165 Security Processor",
+"	0018  8154 Security Processor",
+"	001d  7956 Security Processor",
+"	0020  7955 Security Processor",
+"	0026  8155 Security Processor",
+"13a4  Rascom Inc",
+"13a5  Audio Digital Imaging Inc",
+"13a6  Videonics Inc",
+"13a7  Teles AG",
+"13a8  Exar Corp.",
+"	0152  XR17C/D152 Dual PCI UART",
+"	0154  XR17C154 Quad UART",
+"	0158  XR17C158 Octal UART",
+"13a9  Siemens Medical Systems, Ultrasound Group",
+"13aa  Broadband Networks Inc",
+"13ab  Arcom Control Systems Ltd",
+"13ac  Motion Media Technology Ltd",
+"13ad  Nexus Inc",
+"13ae  ALD Technology Ltd",
+"13af  T.Sqware",
+"13b0  Maxspeed Corp",
+"13b1  Tamura corporation",
+"13b2  Techno Chips Co. Ltd",
+"13b3  Lanart Corporation",
+"13b4  Wellbean Co Inc",
+"13b5  ARM",
+"13b6  Dlog GmbH",
+"13b7  Logic Devices Inc",
+"13b8  Nokia Telecommunications oy",
+"13b9  Elecom Co Ltd",
+"13ba  Oxford Instruments",
+"13bb  Sanyo Technosound Co Ltd",
+"13bc  Bitran Corporation",
+"13bd  Sharp corporation",
+"13be  Miroku Jyoho Service Co. Ltd",
+"13bf  Sharewave Inc",
+"13c0  Microgate Corporation",
+"	0010  SyncLink Adapter v1",
+"	0020  SyncLink SCC Adapter",
+"	0030  SyncLink Multiport Adapter",
+"	0210  SyncLink Adapter v2",
+"13c1  3ware Inc",
+"	1000  5xxx/6xxx-series PATA-RAID",
+"	1001  7xxx/8xxx-series PATA/SATA-RAID",
+"		13c1 1001  7xxx/8xxx-series PATA/SATA-RAID",
+"	1002  9xxx-series SATA-RAID",
+"	1003  9550SX SATA-RAID",
+"13c2  Technotrend Systemtechnik GmbH",
+"	000e  Technotrend/Hauppauge DVB card rev2.3",
+"13c3  Janz Computer AG",
+"13c4  Phase Metrics",
+"13c5  Alphi Technology Corp",
+"13c6  Condor Engineering Inc",
+"	0520  CEI-520 A429 Card",
+"	0620  CEI-620 A429 Card",
+"	0820  CEI-820 A429 Card",
+"13c7  Blue Chip Technology Ltd",
+"13c8  Apptech Inc",
+"13c9  Eaton Corporation",
+"13ca  Iomega Corporation",
+"13cb  Yano Electric Co Ltd",
+"13cc  Metheus Corporation",
+"13cd  Compatible Systems Corporation",
+"13ce  Cocom A/S",
+"13cf  Studio Audio & Video Ltd",
+"13d0  Techsan Electronics Co Ltd",
+"	2103  B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card",
+"	2200  B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card",
+"13d1  Abocom Systems Inc",
+"	ab02  ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter",
+"	ab03  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	ab06  RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter",
+"	ab08  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"13d2  Shark Multimedia Inc",
+"13d3  IMC Networks",
+"13d4  Graphics Microsystems Inc",
+"13d5  Media 100 Inc",
+"13d6  K.I. Technology Co Ltd",
+"13d7  Toshiba Engineering Corporation",
+"13d8  Phobos corporation",
+"13d9  Apex PC Solutions Inc",
+"13da  Intresource Systems pte Ltd",
+"13db  Janich & Klass Computertechnik GmbH",
+"13dc  Netboost Corporation",
+"13dd  Multimedia Bundle Inc",
+"13de  ABB Robotics Products AB",
+"13df  E-Tech Inc",
+"	0001  PCI56RVP Modem",
+"		13df 0001  PCI56RVP Modem",
+"13e0  GVC Corporation",
+"13e1  Silicom Multimedia Systems Inc",
+"13e2  Dynamics Research Corporation",
+"13e3  Nest Inc",
+"13e4  Calculex Inc",
+"13e5  Telesoft Design Ltd",
+"13e6  Argosy research Inc",
+"13e7  NAC Incorporated",
+"13e8  Chip Express Corporation",
+"13e9  Intraserver Technology Inc",
+"13ea  Dallas Semiconductor",
+"13eb  Hauppauge Computer Works Inc",
+"13ec  Zydacron Inc",
+"	000a  NPC-RC01 Remote control receiver",
+"13ed  Raytheion E-Systems",
+"13ee  Hayes Microcomputer Products Inc",
+"13ef  Coppercom Inc",
+"13f0  Sundance Technology Inc / IC Plus Corp",
+"	0200  IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY",
+"	0201  ST201 Sundance Ethernet",
+"	1023  IC Plus IP1000 Family Gigabit Ethernet",
+"13f1  Oce' - Technologies B.V.",
+"13f2  Ford Microelectronics Inc",
+"13f3  Mcdata Corporation",
+"13f4  Troika Networks, Inc.",
+"	1401  Zentai Fibre Channel Adapter",
+"13f5  Kansai Electric Co. Ltd",
+"13f6  C-Media Electronics Inc",
+"	0011  CMI8738",
+"	0100  CM8338A",
+"		13f6 ffff  CMI8338/C3DX PCI Audio Device",
+"	0101  CM8338B",
+"		13f6 0101  CMI8338-031 PCI Audio Device",
+"	0111  CM8738",
+"		1019 0970  P6STP-FL motherboard",
+"		1043 8035  CUSI-FX motherboard",
+"		1043 8077  CMI8738 6-channel audio controller",
+"		1043 80e2  CMI8738 6ch-MX",
+"		13f6 0111  CMI8738/C3DX PCI Audio Device",
+"		1681 a000  Gamesurround MUSE XL",
+"	0211  CM8738",
+"13f7  Wildfire Communications",
+"13f8  Ad Lib Multimedia Inc",
+"13f9  NTT Advanced Technology Corp.",
+"13fa  Pentland Systems Ltd",
+"13fb  Aydin Corp",
+"13fc  Computer Peripherals International",
+"13fd  Micro Science Inc",
+"13fe  Advantech Co. Ltd",
+"	1240  PCI-1240 4-channel stepper motor controller card",
+"	1600  PCI-1612 4-port RS-232/422/485 PCI communication card",
+"	1733  PCI-1733 32-channel isolated digital input card",
+"	1752  PCI-1752",
+"	1754  PCI-1754",
+"	1756  PCI-1756",
+"13ff  Silicon Spice Inc",
+"1400  Artx Inc",
+"	1401  9432 TX",
+"1401  CR-Systems A/S",
+"1402  Meilhaus Electronic GmbH",
+"1403  Ascor Inc",
+"1404  Fundamental Software Inc",
+"1405  Excalibur Systems Inc",
+"1406  Oce' Printing Systems GmbH",
+"1407  Lava Computer mfg Inc",
+"	0100  Lava Dual Serial",
+"	0101  Lava Quatro A",
+"	0102  Lava Quatro B",
+"	0110  Lava DSerial-PCI Port A",
+"	0111  Lava DSerial-PCI Port B",
+"	0120  Quattro-PCI A",
+"	0121  Quattro-PCI B",
+"	0180  Lava Octo A",
+"	0181  Lava Octo B",
+"	0200  Lava Port Plus",
+"	0201  Lava Quad A",
+"	0202  Lava Quad B",
+"	0220  Lava Quattro PCI Ports A/B",
+"	0221  Lava Quattro PCI Ports C/D",
+"	0500  Lava Single Serial",
+"	0600  Lava Port 650",
+"	8000  Lava Parallel",
+"	8001  Dual parallel port controller A",
+"	8002  Lava Dual Parallel port A",
+"	8003  Lava Dual Parallel port B",
+"	8800  BOCA Research IOPPAR",
+"1408  Aloka Co. Ltd",
+"1409  Timedia Technology Co Ltd",
+"	7168  PCI2S550 (Dual 16550 UART)",
+"140a  DSP Research Inc",
+"140b  Ramix Inc",
+"140c  Elmic Systems Inc",
+"140d  Matsushita Electric Works Ltd",
+"140e  Goepel Electronic GmbH",
+"140f  Salient Systems Corp",
+"1410  Midas lab Inc",
+"1411  Ikos Systems Inc",
+"1412  VIA Technologies Inc.",
+"	1712  ICE1712 [Envy24] PCI Multi-Channel I/O Controller",
+"		1412 1712  Hoontech ST Audio DSP 24",
+"		1412 d630  M-Audio Delta 1010",
+"		1412 d631  M-Audio Delta DiO",
+"		1412 d632  M-Audio Delta 66",
+"		1412 d633  M-Audio Delta 44",
+"		1412 d634  M-Audio Delta Audiophile",
+"		1412 d635  M-Audio Delta TDIF",
+"		1412 d637  M-Audio Delta RBUS",
+"		1412 d638  M-Audio Delta 410",
+"		1412 d63b  M-Audio Delta 1010LT",
+"		1412 d63c  Digigram VX442",
+"		1416 1712  Hoontech ST Audio DSP 24 Media 7.1",
+"		153b 1115  EWS88 MT",
+"		153b 1125  EWS88 MT (Master)",
+"		153b 112b  EWS88 D",
+"		153b 112c  EWS88 D (Master)",
+"		153b 1130  EWX 24/96",
+"		153b 1138  DMX 6fire 24/96",
+"		153b 1151  PHASE88",
+"		16ce 1040  Edirol DA-2496",
+"	1724  VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller",
+"		1412 1724  Albatron PX865PE 7.1",
+"		1412 3630  M-Audio Revolution 7.1",
+"		1412 3631  M-Audio Revolution 5.1",
+"		153b 1145  Aureon 7.1 Space",
+"		153b 1147  Aureon 5.1 Sky",
+"		153b 1153  Aureon 7.1 Universe",
+"		270f f641  ZNF3-150",
+"		270f f645  ZNF3-250",
+"1413  Addonics",
+"1414  Microsoft Corporation",
+"1415  Oxford Semiconductor Ltd",
+"	8403  VScom 011H-EP1 1 port parallel adaptor",
+"	9501  OX16PCI954 (Quad 16950 UART) function 0",
+"		131f 2050  CyberPro (4-port)",
+"		131f 2051  CyberSerial 4S Plus",
+"		15ed 2000  MCCR Serial p0-3 of 8",
+"		15ed 2001  MCCR Serial p0-3 of 16",
+"	950a  EXSYS EX-41092 Dual 16950 Serial adapter",
+"	950b  OXCB950 Cardbus 16950 UART",
+"	9510  OX16PCI954 (Quad 16950 UART) function 1 (Disabled)",
+"	9511  OX16PCI954 (Quad 16950 UART) function 1",
+"		15ed 2000  MCCR Serial p4-7 of 8",
+"		15ed 2001  MCCR Serial p4-15 of 16",
+"	9521  OX16PCI952 (Dual 16950 UART)",
+"	9523  OX16PCI952 Integrated Parallel Port",
+"1416  Multiwave Innovation pte Ltd",
+"1417  Convergenet Technologies Inc",
+"1418  Kyushu electronics systems Inc",
+"1419  Excel Switching Corp",
+"141a  Apache Micro Peripherals Inc",
+"141b  Zoom Telephonics Inc",
+"141d  Digitan Systems Inc",
+"141e  Fanuc Ltd",
+"141f  Visiontech Ltd",
+"1420  Psion Dacom plc",
+"	8002  Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part)",
+"	8003  Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part)",
+"1421  Ads Technologies Inc",
+"1422  Ygrec Systems Co Ltd",
+"1423  Custom Technology Corp.",
+"1424  Videoserver Connections",
+"1425  Chelsio Communications Inc",
+"	000b  T210 Protocol Engine",
+"1426  Storage Technology Corp.",
+"1427  Better On-Line Solutions",
+"1428  Edec Co Ltd",
+"1429  Unex Technology Corp.",
+"142a  Kingmax Technology Inc",
+"142b  Radiolan",
+"142c  Minton Optic Industry Co Ltd",
+"142d  Pix stream Inc",
+"142e  Vitec Multimedia",
+"	4020  VM2-2 [Video Maker 2] MPEG1/2 Encoder",
+"	4337  VM2-2-C7 [Video Maker 2 rev. C7] MPEG1/2 Encoder",
+"142f  Radicom Research Inc",
+"1430  ITT Aerospace/Communications Division",
+"1431  Gilat Satellite Networks",
+"1432  Edimax Computer Co.",
+"	9130  RTL81xx Fast Ethernet",
+"1433  Eltec Elektronik GmbH",
+"1435  RTD Embedded Technologies, Inc.",
+"1436  CIS Technology Inc",
+"1437  Nissin Inc Co",
+"1438  Atmel-dream",
+"1439  Outsource Engineering & Mfg. Inc",
+"143a  Stargate Solutions Inc",
+"143b  Canon Research Center, America",
+"143c  Amlogic Inc",
+"143d  Tamarack Microelectronics Inc",
+"143e  Jones Futurex Inc",
+"143f  Lightwell Co Ltd - Zax Division",
+"1440  ALGOL Corp.",
+"1441  AGIE Ltd",
+"1442  Phoenix Contact GmbH & Co.",
+"1443  Unibrain S.A.",
+"1444  TRW",
+"1445  Logical DO Ltd",
+"1446  Graphin Co Ltd",
+"1447  AIM GmBH",
+"1448  Alesis Studio Electronics",
+"1449  TUT Systems Inc",
+"144a  Adlink Technology",
+"	7296  PCI-7296",
+"	7432  PCI-7432",
+"	7433  PCI-7433",
+"	7434  PCI-7434",
+"	7841  PCI-7841",
+"	8133  PCI-8133",
+"	8164  PCI-8164",
+"	8554  PCI-8554",
+"	9111  PCI-9111",
+"	9113  PCI-9113",
+"	9114  PCI-9114",
+"144b  Loronix Information Systems Inc",
+"144c  Catalina Research Inc",
+"144d  Samsung Electronics Co Ltd",
+"	c00c  P35 laptop",
+"144e  OLITEC",
+"144f  Askey Computer Corp.",
+"1450  Octave Communications Ind.",
+"1451  SP3D Chip Design GmBH",
+"1453  MYCOM Inc",
+"1454  Altiga Networks",
+"1455  Logic Plus Plus Inc",
+"1456  Advanced Hardware Architectures",
+"1457  Nuera Communications Inc",
+"1458  Giga-byte Technology",
+"	0c11  K8NS Pro Mainboard",
+"	e911  GN-WIAG02",
+"1459  DOOIN Electronics",
+"145a  Escalate Networks Inc",
+"145b  PRAIM SRL",
+"145c  Cryptek",
+"145d  Gallant Computer Inc",
+"145e  Aashima Technology B.V.",
+"145f  Baldor Electric Company",
+"	0001  NextMove PCI",
+"1460  DYNARC INC",
+"1461  Avermedia Technologies Inc",
+"	f436  AVerTV Hybrid+FM",
+"1462  Micro-Star International Co., Ltd.",
+"	5501  nVidia NV15DDR [GeForce2 Ti]",
+"	6819  Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G]",
+"	6825  PCI Card wireless 11g [PC54G]",
+"	6834  RaLink RT2500 802.11g [PC54G2]",
+"	7125  K8N motherboard",
+"	8725  NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter",
+"	9000  NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter",
+"	9110  GeFORCE FX5200",
+"	9119  NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter",
+"	9123  NVIDIA NV31 [GeForce FX 5600] FX5600-VTDR128 [MS-8912]",
+"	9591  nVidia Corporation NV36 [GeForce FX 5700LE]",
+"1463  Fast Corporation",
+"1464  Interactive Circuits & Systems Ltd",
+"1465  GN NETTEST Telecom DIV.",
+"1466  Designpro Inc.",
+"1467  DIGICOM SPA",
+"1468  AMBIT Microsystem Corp.",
+"1469  Cleveland Motion Controls",
+"146a  IFR",
+"146b  Parascan Technologies Ltd",
+"146c  Ruby Tech Corp.",
+"	1430  FE-1430TX Fast Ethernet PCI Adapter",
+"146d  Tachyon, INC.",
+"146e  Williams Electronics Games, Inc.",
+"146f  Multi Dimensional Consulting Inc",
+"1470  Bay Networks",
+"1471  Integrated Telecom Express Inc",
+"1472  DAIKIN Industries, Ltd",
+"1473  ZAPEX Technologies Inc",
+"1474  Doug Carson & Associates",
+"1475  PICAZO Communications",
+"1476  MORTARA Instrument Inc",
+"1477  Net Insight",
+"1478  DIATREND Corporation",
+"1479  TORAY Industries Inc",
+"147a  FORMOSA Industrial Computing",
+"147b  ABIT Computer Corp.",
+"147c  AWARE, Inc.",
+"147d  Interworks Computer Products",
+"147e  Matsushita Graphic Communication Systems, Inc.",
+"147f  NIHON UNISYS, Ltd.",
+"1480  SCII Telecom",
+"1481  BIOPAC Systems Inc",
+"1482  ISYTEC - Integrierte Systemtechnik GmBH",
+"1483  LABWAY Corporation",
+"1484  Logic Corporation",
+"1485  ERMA - Electronic GmBH",
+"1486  L3 Communications Telemetry & Instrumentation",
+"1487  MARQUETTE Medical Systems",
+"1488  KONTRON Electronik GmBH",
+"1489  KYE Systems Corporation",
+"148a  OPTO",
+"148b  INNOMEDIALOGIC Inc.",
+"148c  C.P. Technology Co. Ltd",
+"148d  DIGICOM Systems, Inc.",
+"	1003  HCF 56k Data/Fax Modem",
+"148e  OSI Plus Corporation",
+"148f  Plant Equipment, Inc.",
+"1490  Stone Microsystems PTY Ltd.",
+"1491  ZEAL Corporation",
+"1492  Time Logic Corporation",
+"1493  MAKER Communications",
+"1494  WINTOP Technology, Inc.",
+"1495  TOKAI Communications Industry Co. Ltd",
+"1496  JOYTECH Computer Co., Ltd.",
+"1497  SMA Regelsysteme GmBH",
+"	1497  SMA Technologie AG",
+"1498  TEWS Datentechnik GmBH",
+"	0330  TPMC816 2 Channel CAN bus controller.",
+"	0385  TPMC901 Extended CAN bus with 2/4/6 CAN controller",
+"	21cd  TCP461 CompactPCI 8 Channel Serial Interface RS232/RS422",
+"	30c8  TPCI200",
+"1499  EMTEC CO., Ltd",
+"149a  ANDOR Technology Ltd",
+"149b  SEIKO Instruments Inc",
+"149c  OVISLINK Corp.",
+"149d  NEWTEK Inc",
+"	0001  Video Toaster for PC",
+"149e  Mapletree Networks Inc.",
+"149f  LECTRON Co Ltd",
+"14a0  SOFTING GmBH",
+"14a1  Systembase Co Ltd",
+"14a2  Millennium Engineering Inc",
+"14a3  Maverick Networks",
+"14a4  GVC/BCM Advanced Research",
+"14a5  XIONICS Document Technologies Inc",
+"14a6  INOVA Computers GmBH & Co KG",
+"14a7  MYTHOS Systems Inc",
+"14a8  FEATRON Technologies Corporation",
+"14a9  HIVERTEC Inc",
+"14aa  Advanced MOS Technology Inc",
+"14ab  Mentor Graphics Corp.",
+"14ac  Novaweb Technologies Inc",
+"14ad  Time Space Radio AB",
+"14ae  CTI, Inc",
+"14af  Guillemot Corporation",
+"	7102  3D Prophet II MX",
+"14b0  BST Communication Technology Ltd",
+"14b1  Nextcom K.K.",
+"14b2  ENNOVATE Networks Inc",
+"14b3  XPEED Inc",
+"	0000  DSL NIC",
+"14b4  PHILIPS Business Electronics B.V.",
+"14b5  Creamware GmBH",
+"	0200  Scope",
+"	0300  Pulsar",
+"	0400  PulsarSRB",
+"	0600  Pulsar2",
+"	0800  DSP-Board",
+"	0900  DSP-Board",
+"	0a00  DSP-Board",
+"	0b00  DSP-Board",
+"14b6  Quantum Data Corp.",
+"14b7  PROXIM Inc",
+"	0001  Symphony 4110",
+"14b8  Techsoft Technology Co Ltd",
+"14b9  AIRONET Wireless Communications",
+"	0001  PC4800",
+"	0340  PC4800",
+"	0350  PC4800",
+"	4500  PC4500",
+"	4800  Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800",
+"	a504  Cisco Aironet Wireless 802.11b",
+"	a505  Cisco Aironet CB20a 802.11a Wireless LAN Adapter",
+"	a506  Cisco Aironet Mini PCI b/g",
+"14ba  INTERNIX Inc.",
+"14bb  SEMTECH Corporation",
+"14bc  Globespan Semiconductor Inc.",
+"14bd  CARDIO Control N.V.",
+"14be  L3 Communications",
+"14bf  SPIDER Communications Inc.",
+"14c0  COMPAL Electronics Inc",
+"14c1  MYRICOM Inc.",
+"	0008  Myri-10G Dual-Protocol Interconnect",
+"	8043  Myrinet 2000 Scalable Cluster Interconnect",
+"14c2  DTK Computer",
+"14c3  MEDIATEK Corp.",
+"14c4  IWASAKI Information Systems Co Ltd",
+"14c5  Automation Products AB",
+"14c6  Data Race Inc",
+"14c7  Modular Technology Holdings Ltd",
+"14c8  Turbocomm Tech. Inc.",
+"14c9  ODIN Telesystems Inc",
+"14ca  PE Logic Corp.",
+"14cb  Billionton Systems Inc",
+"14cc  NAKAYO Telecommunications Inc",
+"14cd  Universal Scientific Ind.",
+"14ce  Whistle Communications",
+"14cf  TEK Microsystems Inc.",
+"14d0  Ericsson Axe R & D",
+"14d1  Computer Hi-Tech Co Ltd",
+"14d2  Titan Electronics Inc",
+"	8001  VScom 010L 1 port parallel adaptor",
+"	8002  VScom 020L 2 port parallel adaptor",
+"	8010  VScom 100L 1 port serial adaptor",
+"	8011  VScom 110L 1 port serial and 1 port parallel adaptor",
+"	8020  VScom 200L 1 port serial adaptor",
+"	8021  VScom 210L 2 port serial and 1 port parallel adaptor",
+"	8040  VScom 400L 4 port serial adaptor",
+"	8080  VScom 800L 8 port serial adaptor",
+"	a000  VScom 010H 1 port parallel adaptor",
+"	a001  VScom 100H 1 port serial adaptor",
+"	a003  VScom 400H 4 port serial adaptor",
+"	a004  VScom 400HF1 4 port serial adaptor",
+"	a005  VScom 200H 2 port serial adaptor",
+"	e001  VScom 010HV2 1 port parallel adaptor",
+"	e010  VScom 100HV2 1 port serial adaptor",
+"	e020  VScom 200HV2 2 port serial adaptor",
+"14d3  CIRTECH (UK) Ltd",
+"14d4  Panacom Technology Corp",
+"14d5  Nitsuko Corporation",
+"14d6  Accusys Inc",
+"14d7  Hirakawa Hewtech Corp",
+"14d8  HOPF Elektronik GmBH",
+"14d9  Alliance Semiconductor Corporation",
+"	0010  AP1011/SP1011 HyperTransport-PCI Bridge [Sturgeon]",
+"	9000  AS90L10204/10208 HyperTransport to PCI-X Bridge",
+"14da  National Aerospace Laboratories",
+"14db  AFAVLAB Technology Inc",
+"	2120  TK9902",
+"	2182  AFAVLAB Technology Inc. 8-port serial card",
+"14dc  Amplicon Liveline Ltd",
+"	0000  PCI230",
+"	0001  PCI242",
+"	0002  PCI244",
+"	0003  PCI247",
+"	0004  PCI248",
+"	0005  PCI249",
+"	0006  PCI260",
+"	0007  PCI224",
+"	0008  PCI234",
+"	0009  PCI236",
+"	000a  PCI272",
+"	000b  PCI215",
+"14dd  Boulder Design Labs Inc",
+"14de  Applied Integration Corporation",
+"14df  ASIC Communications Corp",
+"14e1  INVERTEX",
+"14e2  INFOLIBRIA",
+"14e3  AMTELCO",
+"14e4  Broadcom Corporation",
+"	0800  Sentry5 Chipcommon I/O Controller",
+"	0804  Sentry5 PCI Bridge",
+"	0805  Sentry5 MIPS32 CPU",
+"	0806  Sentry5 Ethernet Controller",
+"	080b  Sentry5 Crypto Accelerator",
+"	080f  Sentry5 DDR/SDR RAM Controller",
+"	0811  Sentry5 External Interface Core",
+"	0816  BCM3302 Sentry5 MIPS32 CPU",
+"	1600  NetXtreme BCM5752 Gigabit Ethernet PCI Express",
+"	1601  NetXtreme BCM5752M Gigabit Ethernet PCI Express",
+"	1644  NetXtreme BCM5700 Gigabit Ethernet",
+"		1014 0277  Broadcom Vigil B5700 1000Base-T",
+"		1028 00d1  Broadcom BCM5700",
+"		1028 0106  Broadcom BCM5700",
+"		1028 0109  Broadcom BCM5700 1000Base-T",
+"		1028 010a  Broadcom BCM5700 1000BaseTX",
+"		10b7 1000  3C996-T 1000Base-T",
+"		10b7 1001  3C996B-T 1000Base-T",
+"		10b7 1002  3C996C-T 1000Base-T",
+"		10b7 1003  3C997-T 1000Base-T Dual Port",
+"		10b7 1004  3C996-SX 1000Base-SX",
+"		10b7 1005  3C997-SX 1000Base-SX Dual Port",
+"		10b7 1008  3C942 Gigabit LOM (31X31)",
+"		14e4 0002  NetXtreme 1000Base-SX",
+"		14e4 0003  NetXtreme 1000Base-SX",
+"		14e4 0004  NetXtreme 1000Base-T",
+"		14e4 1028  NetXtreme 1000BaseTX",
+"		14e4 1644  BCM5700 1000Base-T",
+"	1645  NetXtreme BCM5701 Gigabit Ethernet",
+"		0e11 007c  NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)",
+"		0e11 007d  NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)",
+"		0e11 0085  NC7780 Gigabit Server Adapter (embedded, WOL)",
+"		0e11 0099  NC7780 Gigabit Server Adapter (embedded, WOL)",
+"		0e11 009a  NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)",
+"		0e11 00c1  NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)",
+"		1028 0121  Broadcom BCM5701 1000Base-T",
+"		103c 128a  1000Base-T (PCI) [A7061A]",
+"		103c 128b  1000Base-SX (PCI) [A7073A]",
+"		103c 12a4  Core Lan 1000Base-T",
+"		103c 12c1  IOX Core Lan 1000Base-T [A7109AX]",
+"		103c 1300  Core LAN/SCSI Combo [A6794A]",
+"		10a9 8010  IO9/IO10 Gigabit Ethernet (Copper)",
+"		10a9 8011  Gigabit Ethernet (Copper)",
+"		10a9 8012  Gigabit Ethernet (Fiber)",
+"		10b7 1004  3C996-SX 1000Base-SX",
+"		10b7 1006  3C996B-T 1000Base-T",
+"		10b7 1007  3C1000-T 1000Base-T",
+"		10b7 1008  3C940-BR01 1000Base-T",
+"		14e4 0001  BCM5701 1000Base-T",
+"		14e4 0005  BCM5701 1000Base-T",
+"		14e4 0006  BCM5701 1000Base-T",
+"		14e4 0007  BCM5701 1000Base-SX",
+"		14e4 0008  BCM5701 1000Base-T",
+"		14e4 8008  BCM5701 1000Base-T",
+"	1646  NetXtreme BCM5702 Gigabit Ethernet",
+"		0e11 00bb  NC7760 1000BaseTX",
+"		1028 0126  Broadcom BCM5702 1000BaseTX",
+"		14e4 8009  BCM5702 1000BaseTX",
+"	1647  NetXtreme BCM5703 Gigabit Ethernet",
+"		0e11 0099  NC7780 1000BaseTX",
+"		0e11 009a  NC7770 1000BaseTX",
+"		10a9 8010  SGI IO9 Gigabit Ethernet (Copper)",
+"		14e4 0009  BCM5703 1000BaseTX",
+"		14e4 000a  BCM5703 1000BaseSX",
+"		14e4 000b  BCM5703 1000BaseTX",
+"		14e4 8009  BCM5703 1000BaseTX",
+"		14e4 800a  BCM5703 1000BaseTX",
+"	1648  NetXtreme BCM5704 Gigabit Ethernet",
+"		0e11 00cf  NC7772 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
+"		0e11 00d0  NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
+"		0e11 00d1  NC7783 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
+"		10b7 2000  3C998-T Dual Port 10/100/1000 PCI-X",
+"		10b7 3000  3C999-T Quad Port 10/100/1000 PCI-X",
+"		1166 1648  NetXtreme CIOB-E 1000Base-T",
+"		1734 100b  Primergy RX300",
+"	164a  NetXtreme II BCM5706 Gigabit Ethernet",
+"		103c 3101  NC370T MultifuNCtion Gigabit Server Adapter",
+"	164c  NetXtreme II BCM5708 Gigabit Ethernet",
+"	164d  NetXtreme BCM5702FE Gigabit Ethernet",
+"	1653  NetXtreme BCM5705 Gigabit Ethernet",
+"		0e11 00e3  NC7761 Gigabit Server Adapter",
+"	1654  NetXtreme BCM5705_2 Gigabit Ethernet",
+"		0e11 00e3  NC7761 Gigabit Server Adapter",
+"		103c 3100  NC1020 HP ProLiant Gigabit Server Adapter 32 PCI",
+"		103c 3226  NC150T 4-port Gigabit Combo Switch & Adapter",
+"	1659  NetXtreme BCM5721 Gigabit Ethernet PCI Express",
+"		1014 02c6  eServer xSeries server mainboard",
+"		103c 7031  NC320T PCIe Gigabit Server Adapter",
+"		103c 7032  NC320i PCIe Gigabit Server Adapter",
+"		1734 1061  Primergy RX300 S2",
+"	165d  NetXtreme BCM5705M Gigabit Ethernet",
+"		1028 865d  Latitude D400",
+"	165e  NetXtreme BCM5705M_2 Gigabit Ethernet",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		103c 099c  NX6110/NC6120",
+"	1668  NetXtreme BCM5714 Gigabit Ethernet",
+"		103c 7039  NC324i PCIe Dual Port Gigabit Server Adapter",
+"	1669  NetXtreme 5714S Gigabit Ethernet",
+"	166a  NetXtreme BCM5780 Gigabit Ethernet",
+"	166b  NetXtreme BCM5780S Gigabit Ethernet",
+"	166e  570x 10/100 Integrated Controller",
+"	1672  NetXtreme BCM5754M Gigabit Ethernet PCI Express",
+"	1673  NetXtreme BCM5755M Gigabit Ethernet PCI Express",
+"	1677  NetXtreme BCM5751 Gigabit Ethernet PCI Express",
+"		1028 0179  Optiplex GX280",
+"		1028 0182  Latitude D610",
+"		1028 0187  Precision M70",
+"		1028 01ad  Optiplex GX620",
+"		103c 3006  DC7100 SFF(DX878AV)",
+"		1734 105d  Scenic W620",
+"	1678  NetXtreme BCM5715 Gigabit Ethernet",
+"	1679  NetXtreme 5715S Gigabit Ethernet",
+"		103c 703c  NC326i PCIe Dual Port Gigabit Server Adapter",
+"	167a  NetXtreme BCM5754 Gigabit Ethernet PCI Express",
+"	167b  NetXtreme BCM5755 Gigabit Ethernet PCI Express",
+"	167d  NetXtreme BCM5751M Gigabit Ethernet PCI Express",
+"	167e  NetXtreme BCM5751F Fast Ethernet PCI Express",
+"	1693  NetLink BCM5787M Gigabit Ethernet PCI Express",
+"	1696  NetXtreme BCM5782 Gigabit Ethernet",
+"		103c 12bc  HP d530 CMT (DG746A)",
+"		14e4 000d  NetXtreme BCM5782 1000Base-T",
+"	169b  NetLink BCM5787 Gigabit Ethernet PCI Express",
+"	169c  NetXtreme BCM5788 Gigabit Ethernet",
+"		103c 308b  MX6125",
+"	169d  NetLink BCM5789 Gigabit Ethernet PCI Express",
+"	16a6  NetXtreme BCM5702X Gigabit Ethernet",
+"		0e11 00bb  NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T)",
+"		1028 0126  BCM5702 1000Base-T",
+"		14e4 000c  BCM5702 1000Base-T",
+"		14e4 8009  BCM5702 1000Base-T",
+"	16a7  NetXtreme BCM5703X Gigabit Ethernet",
+"		0e11 00ca  NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
+"		0e11 00cb  NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
+"		14e4 0009  NetXtreme BCM5703 1000Base-T",
+"		14e4 000a  NetXtreme BCM5703 1000Base-SX",
+"		14e4 000b  NetXtreme BCM5703 1000Base-T",
+"		14e4 800a  NetXtreme BCM5703 1000Base-T",
+"	16a8  NetXtreme BCM5704S Gigabit Ethernet",
+"		10b7 2001  3C998-SX Dual Port 1000-SX PCI-X",
+"	16aa  NetXtreme II BCM5706S Gigabit Ethernet",
+"		103c 3102  NC370F MultifuNCtion Gigabit Server Adapter",
+"	16ac  NetXtreme II BCM5708S Gigabit Ethernet",
+"	16c6  NetXtreme BCM5702A3 Gigabit Ethernet",
+"		10b7 1100  3C1000B-T 10/100/1000 PCI",
+"		14e4 000c  BCM5702 1000Base-T",
+"		14e4 8009  BCM5702 1000Base-T",
+"	16c7  NetXtreme BCM5703 Gigabit Ethernet",
+"		0e11 00ca  NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
+"		0e11 00cb  NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)",
+"		103c 12c3  Combo FC/GigE-SX [A9782A]",
+"		103c 12ca  Combo FC/GigE-T [A9784A]",
+"		14e4 0009  NetXtreme BCM5703 1000Base-T",
+"		14e4 000a  NetXtreme BCM5703 1000Base-SX",
+"	16dd  NetLink BCM5781 Gigabit Ethernet PCI Express",
+"	16f7  NetXtreme BCM5753 Gigabit Ethernet PCI Express",
+"	16fd  NetXtreme BCM5753M Gigabit Ethernet PCI Express",
+"	16fe  NetXtreme BCM5753F Fast Ethernet PCI Express",
+"	170c  BCM4401-B0 100Base-TX",
+"		1028 0188  Inspiron 6000 laptop",
+"		1028 0196  Inspiron 5160",
+"		103c 099c  NX6110/NC6120",
+"	170d  NetXtreme BCM5901 100Base-TX",
+"		1014 0545  ThinkPad R40e (2684-HVG) builtin ethernet controller",
+"	170e  NetXtreme BCM5901 100Base-TX",
+"	3352  BCM3352",
+"	3360  BCM3360",
+"	4210  BCM4210 iLine10 HomePNA 2.0",
+"	4211  BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem",
+"	4212  BCM4212 v.90 56k modem",
+"	4301  BCM4303 802.11b Wireless LAN Controller",
+"		1028 0407  TrueMobile 1180 Onboard WLAN",
+"		1043 0120  WL-103b Wireless LAN PC Card",
+"	4305  BCM4307 V.90 56k Modem",
+"	4306  BCM4307 Ethernet Controller",
+"	4307  BCM4307 802.11b Wireless LAN Controller",
+"	4310  BCM4310 Chipcommon I/OController",
+"	4312  BCM4310 UART",
+"	4313  BCM4310 Ethernet Controller",
+"	4315  BCM4310 USB Controller",
+"	4318  BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller",
+"		103c 1356  MX6125",
+"		1043 120f  A6U notebook embedded card",
+"		1468 0311  Aspire 3022WLMi, 5024WLMi",
+"		1468 0312  TravelMate 2410",
+"		14e4 0449  Gateway 7510GX",
+"		14e4 4318  WPC54G version 3 [Wireless-G Notebook Adapter] 802.11g Wireless Lan Controller",
+"		16ec 0119  U.S.Robotics Wireless MAXg PC Card",
+"		1737 0048  WPC54G-EU version 3 [Wireless-G Notebook Adapter]",
+"	4319  Dell Wireless 1470 DualBand WLAN",
+"	4320  BCM4306 802.11b/g Wireless LAN Controller",
+"		1028 0001  TrueMobile 1300 WLAN Mini-PCI Card",
+"		1028 0003  Wireless 1350 WLAN Mini-PCI Card",
+"		103c 12f4  NX9500 Built-in Wireless",
+"		103c 12fa  Presario R3000 802.11b/g",
+"		1043 100f  WL-100G",
+"		1057 7025  WN825G",
+"		106b 004e  AirPort Extreme",
+"		1154 0330  Buffalo WLI2-PCI-G54S High Speed Mode Wireless Desktop Adapter",
+"		144f 7050  eMachines M6805 802.11g Built-in Wireless",
+"		14e4 4320  Linksys WMP54G PCI",
+"		1737 4320  WPC54G",
+"		1799 7001  Belkin F5D7001 High-Speed Mode Wireless G Network Card",
+"		1799 7010  Belkin F5D7010 54g Wireless Network card",
+"		185f 1220  TravelMate 290E WLAN Mini-PCI Card",
+"	4321  BCM4306 802.11a Wireless LAN Controller",
+"	4322  BCM4306 UART",
+"	4324  BCM4309 802.11a/b/g",
+"		1028 0001  Truemobile 1400",
+"		1028 0003  Truemobile 1450 MiniPCI",
+"	4325  BCM43xG 802.11b/g",
+"		1414 0003  Wireless Notebook Adapter MN-720",
+"		1414 0004  Wireless PCI Adapter MN-730",
+"	4326  BCM4307 Chipcommon I/O Controller?",
+"	4401  BCM4401 100Base-T",
+"		1043 80a8  A7V8X motherboard",
+"	4402  BCM4402 Integrated 10/100BaseT",
+"	4403  BCM4402 V.90 56k Modem",
+"	4410  BCM4413 iLine32 HomePNA 2.0",
+"	4411  BCM4413 V.90 56k modem",
+"	4412  BCM4412 10/100BaseT",
+"	4430  BCM44xx CardBus iLine32 HomePNA 2.0",
+"	4432  BCM4432 CardBus 10/100BaseT",
+"	4610  BCM4610 Sentry5 PCI to SB Bridge",
+"	4611  BCM4610 Sentry5 iLine32 HomePNA 1.0",
+"	4612  BCM4610 Sentry5 V.90 56k Modem",
+"	4613  BCM4610 Sentry5 Ethernet Controller",
+"	4614  BCM4610 Sentry5 External Interface",
+"	4615  BCM4610 Sentry5 USB Controller",
+"	4704  BCM4704 PCI to SB Bridge",
+"	4705  BCM4704 Sentry5 802.11b Wireless LAN Controller",
+"	4706  BCM4704 Sentry5 Ethernet Controller",
+"	4707  BCM4704 Sentry5 USB Controller",
+"	4708  BCM4704 Crypto Accelerator",
+"	4710  BCM4710 Sentry5 PCI to SB Bridge",
+"	4711  BCM47xx Sentry5 iLine32 HomePNA 2.0",
+"	4712  BCM47xx V.92 56k modem",
+"	4713  Sentry5 Ethernet Controller",
+"	4714  BCM47xx Sentry5 External Interface",
+"	4715  Sentry5 USB Controller",
+"	4716  BCM47xx Sentry5 USB Host Controller",
+"	4717  BCM47xx Sentry5 USB Device Controller",
+"	4718  Sentry5 Crypto Accelerator",
+"	4719  BCM47xx/53xx RoboSwitch Core",
+"	4720  BCM4712 MIPS CPU",
+"	5365  BCM5365P Sentry5 Host Bridge",
+"	5600  BCM5600 StrataSwitch 24+2 Ethernet Switch Controller",
+"	5605  BCM5605 StrataSwitch 24+2 Ethernet Switch Controller",
+"	5615  BCM5615 StrataSwitch 24+2 Ethernet Switch Controller",
+"	5625  BCM5625 StrataSwitch 24+2 Ethernet Switch Controller",
+"	5645  BCM5645 StrataSwitch 24+2 Ethernet Switch Controller",
+"	5670  BCM5670 8-Port 10GE Ethernet Switch Fabric",
+"	5680  BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller",
+"	5690  BCM5690 12-port Multi-Layer Gigabit Ethernet Switch",
+"	5691  BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller",
+"	5692  BCM5692 12-port Multi-Layer Gigabit Ethernet Switch",
+"	5820  BCM5820 Crypto Accelerator",
+"	5821  BCM5821 Crypto Accelerator",
+"	5822  BCM5822 Crypto Accelerator",
+"	5823  BCM5823 Crypto Accelerator",
+"	5824  BCM5824 Crypto Accelerator",
+"	5840  BCM5840 Crypto Accelerator",
+"	5841  BCM5841 Crypto Accelerator",
+"	5850  BCM5850 Crypto Accelerator",
+"14e5  Pixelfusion Ltd",
+"14e6  SHINING Technology Inc",
+"14e7  3CX",
+"14e8  RAYCER Inc",
+"14e9  GARNETS System CO Ltd",
+"14ea  Planex Communications, Inc",
+"	ab06  FNW-3603-TX CardBus Fast Ethernet",
+"	ab07  RTL81xx RealTek Ethernet",
+"	ab08  FNW-3602-TX CardBus Fast Ethernet",
+"14eb  SEIKO EPSON Corp",
+"14ec  ACQIRIS",
+"14ed  DATAKINETICS Ltd",
+"14ee  MASPRO KENKOH Corp",
+"14ef  CARRY Computer ENG. CO Ltd",
+"14f0  CANON RESEACH CENTRE FRANCE",
+"14f1  Conexant",
+"	1002  HCF 56k Modem",
+"	1003  HCF 56k Modem",
+"	1004  HCF 56k Modem",
+"	1005  HCF 56k Modem",
+"	1006  HCF 56k Modem",
+"	1022  HCF 56k Modem",
+"	1023  HCF 56k Modem",
+"	1024  HCF 56k Modem",
+"	1025  HCF 56k Modem",
+"	1026  HCF 56k Modem",
+"	1032  HCF 56k Modem",
+"	1033  HCF 56k Data/Fax Modem",
+"		1033 8077  NEC",
+"		122d 4027  Dell Zeus - MDP3880-W(B) Data Fax Modem",
+"		122d 4030  Dell Mercury - MDP3880-U(B) Data Fax Modem",
+"		122d 4034  Dell Thor - MDP3880-W(U) Data Fax Modem",
+"		13e0 020d  Dell Copper",
+"		13e0 020e  Dell Silver",
+"		13e0 0261  IBM",
+"		13e0 0290  Compaq Goldwing",
+"		13e0 02a0  IBM",
+"		13e0 02b0  IBM",
+"		13e0 02c0  Compaq Scooter",
+"		13e0 02d0  IBM",
+"		144f 1500  IBM P85-DF (1)",
+"		144f 1501  IBM P85-DF (2)",
+"		144f 150a  IBM P85-DF (3)",
+"		144f 150b  IBM P85-DF Low Profile (1)",
+"		144f 1510  IBM P85-DF Low Profile (2)",
+"	1034  HCF 56k Data/Fax/Voice Modem",
+"	1035  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"		10cf 1098  Fujitsu P85-DFSV",
+"	1036  HCF 56k Data/Fax/Voice/Spkp Modem",
+"		104d 8067  HCF 56k Modem",
+"		122d 4029  MDP3880SP-W",
+"		122d 4031  MDP3880SP-U",
+"		13e0 0209  Dell Titanium",
+"		13e0 020a  Dell Graphite",
+"		13e0 0260  Gateway Red Owl",
+"		13e0 0270  Gateway White Horse",
+"	1052  HCF 56k Data/Fax Modem (Worldwide)",
+"	1053  HCF 56k Data/Fax Modem (Worldwide)",
+"	1054  HCF 56k Data/Fax/Voice Modem (Worldwide)",
+"	1055  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide)",
+"	1056  HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)",
+"	1057  HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)",
+"	1059  HCF 56k Data/Fax/Voice Modem (Worldwide)",
+"	1063  HCF 56k Data/Fax Modem",
+"	1064  HCF 56k Data/Fax/Voice Modem",
+"	1065  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"	1066  HCF 56k Data/Fax/Voice/Spkp Modem",
+"		122d 4033  Dell Athena - MDP3900V-U",
+"	1085  HCF V90 56k Data/Fax/Voice/Spkp PCI Modem",
+"	1433  HCF 56k Data/Fax Modem",
+"	1434  HCF 56k Data/Fax/Voice Modem",
+"	1435  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"	1436  HCF 56k Data/Fax Modem",
+"	1453  HCF 56k Data/Fax Modem",
+"		13e0 0240  IBM",
+"		13e0 0250  IBM",
+"		144f 1502  IBM P95-DF (1)",
+"		144f 1503  IBM P95-DF (2)",
+"	1454  HCF 56k Data/Fax/Voice Modem",
+"	1455  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"	1456  HCF 56k Data/Fax/Voice/Spkp Modem",
+"		122d 4035  Dell Europa - MDP3900V-W",
+"		122d 4302  Dell MP3930V-W(C) MiniPCI",
+"	1610  ADSL AccessRunner PCI Arbitration Device",
+"	1611  AccessRunner PCI ADSL Interface Device",
+"	1620  AccessRunner V2 PCI ADSL Arbitration Device",
+"	1621  AccessRunner V2 PCI ADSL Interface Device",
+"	1622  AccessRunner V2 PCI ADSL Yukon WAN Adapter",
+"	1803  HCF 56k Modem",
+"		0e11 0023  623-LAN Grizzly",
+"		0e11 0043  623-LAN Yogi",
+"	1811  Conextant MiniPCI Network Adapter",
+"	1815  HCF 56k Modem",
+"		0e11 0022  Grizzly",
+"		0e11 0042  Yogi",
+"	2003  HSF 56k Data/Fax Modem",
+"	2004  HSF 56k Data/Fax/Voice Modem",
+"	2005  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"	2006  HSF 56k Data/Fax/Voice/Spkp Modem",
+"	2013  HSF 56k Data/Fax Modem",
+"		0e11 b195  Bear",
+"		0e11 b196  Seminole 1",
+"		0e11 b1be  Seminole 2",
+"		1025 8013  Acer",
+"		1033 809d  NEC",
+"		1033 80bc  NEC",
+"		155d 6793  HP",
+"		155d 8850  E Machines",
+"	2014  HSF 56k Data/Fax/Voice Modem",
+"	2015  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem",
+"	2016  HSF 56k Data/Fax/Voice/Spkp Modem",
+"	2043  HSF 56k Data/Fax Modem (WorldW SmartDAA)",
+"	2044  HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA)",
+"	2045  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA)",
+"		14f1 2045  Generic SoftK56",
+"	2046  HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA)",
+"	2063  HSF 56k Data/Fax Modem (SmartDAA)",
+"	2064  HSF 56k Data/Fax/Voice Modem (SmartDAA)",
+"	2065  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA)",
+"	2066  HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA)",
+"	2093  HSF 56k Modem",
+"		155d 2f07  Legend",
+"	2143  HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA)",
+"	2144  HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA)",
+"	2145  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA)",
+"	2146  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA)",
+"	2163  HSF 56k Data/Fax/Cell Modem (Mob SmartDAA)",
+"	2164  HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA)",
+"	2165  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA)",
+"	2166  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA)",
+"	2343  HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA)",
+"	2344  HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA)",
+"	2345  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA)",
+"	2346  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA)",
+"	2363  HSF 56k Data/Fax CardBus Modem (Mob SmartDAA)",
+"	2364  HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA)",
+"	2365  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA)",
+"	2366  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA)",
+"	2443  HSF 56k Data/Fax Modem (Mob WorldW SmartDAA)",
+"		104d 8075  Modem",
+"		104d 8083  Modem",
+"		104d 8097  Modem",
+"	2444  HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA)",
+"	2445  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA)",
+"	2446  HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA)",
+"	2463  HSF 56k Data/Fax Modem (Mob SmartDAA)",
+"	2464  HSF 56k Data/Fax/Voice Modem (Mob SmartDAA)",
+"	2465  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA)",
+"	2466  HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA)",
+"	2bfa  HDAudio Soft Data Fax Modem with SmartCP",
+"	2f00  HSF 56k HSFi Modem",
+"		13e0 8d84  IBM HSFi V.90",
+"		13e0 8d85  Compaq Stinger",
+"		14f1 2004  Dynalink 56PMi",
+"	2f02  HSF 56k HSFi Data/Fax",
+"	2f11  HSF 56k HSFi Modem",
+"	2f20  HSF 56k Data/Fax Modem",
+"	8234  RS8234 ATM SAR Controller [ServiceSAR Plus]",
+"	8800  CX23880/1/2/3 PCI Video and Audio Decoder",
+"		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models",
+"		0070 3401  Hauppauge WinTV 34xxx models",
+"		0070 9001  Nova-T DVB-T",
+"		0070 9200  Nova-SE2 DVB-S",
+"		0070 9202  Nova-S-Plus DVB-S",
+"		0070 9402  WinTV-HVR1100 DVB-T/Hybrid",
+"		0070 9802  WinTV-HVR1100 DVB-T/Hybrid (Low Profile)",
+"		1002 00f8  ATI TV Wonder Pro",
+"		1002 a101  HDTV Wonder",
+"		1043 4823  ASUS PVR-416",
+"		107d 6613  Leadtek Winfast 2000XP Expert",
+"		107d 6620  Leadtek Winfast DV2000",
+"		107d 663c  Leadtek PVR 2000",
+"		107d 665f  WinFast DTV1000-T",
+"		10fc d003  IODATA GV-VCP3/PCI",
+"		10fc d035  IODATA GV/BCTV7E",
+"		1421 0334  Instant TV DVB-T PCI",
+"		1461 000a  AVerTV 303 (M126)",
+"		1461 000b  AverTV Studio 303 (M126)",
+"		1461 8011  UltraTV Media Center PCI 550",
+"		1462 8606  MSI TV-@nywhere Master",
+"		14c7 0107  GDI Black Gold",
+"		14f1 0187  Conexant DVB-T reference design",
+"		14f1 0342  Digital-Logic MICROSPACE Entertainment Center (MEC)",
+"		153b 1166  Cinergy 1400 DVB-T",
+"		1540 2580  Provideo PV259",
+"		1554 4811  PixelView",
+"		1554 4813  Club 3D  ZAP1000 MCE Edition",
+"		17de 08a1  KWorld/VStream XPert DVB-T with cx22702",
+"		17de 08a6  KWorld/VStream XPert DVB-T",
+"		17de 08b2  KWorld DVB-S 100",
+"		17de a8a6  digitalnow DNTV Live! DVB-T",
+"		1822 0025  digitalnow DNTV Live! DVB-T Pro",
+"		18ac d500  FusionHDTV 5 Gold",
+"		18ac d810  FusionHDTV 3 Gold-Q",
+"		18ac d820  FusionHDTV 3 Gold-T",
+"		18ac db00  FusionHDTV DVB-T1",
+"		18ac db11  FusionHDTV DVB-T Plus",
+"		18ac db50  FusionHDTV DVB-T Dual Digital",
+"		7063 3000  pcHDTV HD3000 HDTV",
+"	8801  CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]",
+"		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models",
+"	8802  CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port]",
+"		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models",
+"		0070 9002  Nova-T DVB-T Model 909",
+"		1043 4823  ASUS PVR-416",
+"		107d 663c  Leadtek PVR 2000",
+"		14f1 0187  Conexant DVB-T reference design",
+"		17de 08a1  XPert DVB-T PCI BDA DVBT 23880 Transport Stream Capture",
+"		17de 08a6  KWorld/VStream XPert DVB-T",
+"		18ac d500  DViCO FusionHDTV5 Gold",
+"		18ac d810  DViCO FusionHDTV3 Gold-Q",
+"		18ac d820  DViCO FusionHDTV3 Gold-T",
+"		18ac db00  DVICO FusionHDTV DVB-T1",
+"		18ac db10  DVICO FusionHDTV DVB-T Plus",
+"		7063 3000  pcHDTV HD3000 HDTV",
+"	8804  CX23880/1/2/3 PCI Video and Audio Decoder [IR Port]",
+"		0070 9002  Nova-T DVB-T Model 909",
+"	8811  CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]",
+"		0070 3401  Hauppauge WinTV 34xxx models",
+"		1462 8606  MSI TV-@nywhere Master",
+"		18ac d500  DViCO FusionHDTV5 Gold",
+"		18ac d810  DViCO FusionHDTV3 Gold-Q",
+"		18ac d820  DViCO FusionHDTV3 Gold-T",
+"		18ac db00  DVICO FusionHDTV DVB-T1",
+"14f2  MOBILITY Electronics",
+"	0120  EV1000 bridge",
+"	0121  EV1000 Parallel port",
+"	0122  EV1000 Serial port",
+"	0123  EV1000 Keyboard controller",
+"	0124  EV1000 Mouse controller",
+"14f3  BroadLogic",
+"	2030  2030 DVB-S Satellite Reciever",
+"	2050  2050 DVB-T Terrestrial (Cable) Reciever",
+"	2060  2060 ATSC Terrestrial (Cable) Reciever",
+"14f4  TOKYO Electronic Industry CO Ltd",
+"14f5  SOPAC Ltd",
+"14f6  COYOTE Technologies LLC",
+"14f7  WOLF Technology Inc",
+"14f8  AUDIOCODES Inc",
+"	2077  TP-240 dual span E1 VoIP PCI card",
+"14f9  AG COMMUNICATIONS",
+"14fa  WANDEL & GOLTERMANN",
+"14fb  TRANSAS MARINE (UK) Ltd",
+"14fc  Quadrics Ltd",
+"	0000  QsNet Elan3 Network Adapter",
+"	0001  QsNetII Elan4 Network Adapter",
+"	0002  QsNetIII Elan5 Network Adapter",
+"14fd  JAPAN Computer Industry Inc",
+"14fe  ARCHTEK TELECOM Corp",
+"14ff  TWINHEAD INTERNATIONAL Corp",
+"1500  DELTA Electronics, Inc",
+"	1360  RTL81xx RealTek Ethernet",
+"1501  BANKSOFT CANADA Ltd",
+"1502  MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd",
+"1503  KAWASAKI LSI USA Inc",
+"1504  KAISER Electronics",
+"1505  ITA INGENIEURBURO FUR TESTAUFGABEN GmbH",
+"1506  CHAMELEON Systems Inc",
+"1507  Motorola ?? / HTEC",
+"	0001  MPC105 [Eagle]",
+"	0002  MPC106 [Grackle]",
+"	0003  MPC8240 [Kahlua]",
+"	0100  MC145575 [HFC-PCI]",
+"	0431  KTI829c 100VG",
+"	4801  Raven",
+"	4802  Falcon",
+"	4803  Hawk",
+"	4806  CPX8216",
+"1508  HONDA CONNECTORS/MHOTRONICS Inc",
+"1509  FIRST INTERNATIONAL Computer Inc",
+"150a  FORVUS RESEARCH Inc",
+"150b  YAMASHITA Systems Corp",
+"150c  KYOPAL CO Ltd",
+"150d  WARPSPPED Inc",
+"150e  C-PORT Corp",
+"150f  INTEC GmbH",
+"1510  BEHAVIOR TECH Computer Corp",
+"1511  CENTILLIUM Technology Corp",
+"1512  ROSUN Technologies Inc",
+"1513  Raychem",
+"1514  TFL LAN Inc",
+"1515  Advent design",
+"1516  MYSON Technology Inc",
+"	0800  MTD-8xx 100/10M Ethernet PCI Adapter",
+"	0803  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter",
+"		1320 10bd  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter",
+"	0891  MTD-8xx 100/10M Ethernet PCI Adapter",
+"1517  ECHOTEK Corp",
+"1518  PEP MODULAR Computers GmbH",
+"1519  TELEFON AKTIEBOLAGET LM Ericsson",
+"151a  Globetek",
+"	1002  PCI-1002",
+"	1004  PCI-1004",
+"	1008  PCI-1008",
+"151b  COMBOX Ltd",
+"151c  DIGITAL AUDIO LABS Inc",
+"	0003  Prodif T 2496",
+"	4000  Prodif 88",
+"151d  Fujitsu Computer Products Of America",
+"151e  MATRIX Corp",
+"151f  TOPIC SEMICONDUCTOR Corp",
+"	0000  TP560 Data/Fax/Voice 56k modem",
+"1520  CHAPLET System Inc",
+"1521  BELL Corp",
+"1522  MainPine Ltd",
+"	0100  PCI <-> IOBus Bridge",
+"		1522 0200  RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem",
+"		1522 0300  RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem",
+"		1522 0400  RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem",
+"		1522 0500  RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem",
+"		1522 0600  RockForce+ 2 Port V.90 Data/Fax/Voice Modem",
+"		1522 0700  RockForce+ 4 Port V.90 Data/Fax/Voice Modem",
+"		1522 0800  RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem",
+"		1522 0c00  RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem",
+"		1522 0d00  RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem",
+"		1522 1d00  RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem",
+"		1522 2000  RockForceD1 1 Port V.90 Data Modem",
+"		1522 2100  RockForceF1 1 Port V.34 Super-G3 Fax Modem",
+"		1522 2200  RockForceD2 2 Port V.90 Data Modem",
+"		1522 2300  RockForceF2 2 Port V.34 Super-G3 Fax Modem",
+"		1522 2400  RockForceD4 4 Port V.90 Data Modem",
+"		1522 2500  RockForceF4 4 Port V.34 Super-G3 Fax Modem",
+"		1522 2600  RockForceD8 8 Port V.90 Data Modem",
+"		1522 2700  RockForceF8 8 Port V.34 Super-G3 Fax Modem",
+"1523  MUSIC Semiconductors",
+"1524  ENE Technology Inc",
+"	0510  CB710 Memory Card Reader Controller",
+"		103c 006a  NX9500",
+"	0520  FLASH memory: ENE Technology Inc:",
+"	0530  ENE PCI Memory Stick Card Reader Controller",
+"	0550  ENE PCI Secure Digital Card Reader Controller",
+"	0610  PCI Smart Card Reader Controller",
+"	1211  CB1211 Cardbus Controller",
+"	1225  CB1225 Cardbus Controller",
+"	1410  CB1410 Cardbus Controller",
+"		1025 003c  CL50 motherboard",
+"		1025 005a  TravelMate 290",
+"	1411  CB-710/2/4 Cardbus Controller",
+"		103c 006a  NX9500",
+"	1412  CB-712/4 Cardbus Controller",
+"	1420  CB1420 Cardbus Controller",
+"	1421  CB-720/2/4 Cardbus Controller",
+"	1422  CB-722/4 Cardbus Controller",
+"1525  IMPACT Technologies",
+"1526  ISS, Inc",
+"1527  SOLECTRON",
+"1528  ACKSYS",
+"1529  AMERICAN MICROSystems Inc",
+"152a  QUICKTURN DESIGN Systems",
+"152b  FLYTECH Technology CO Ltd",
+"152c  MACRAIGOR Systems LLC",
+"152d  QUANTA Computer Inc",
+"152e  MELEC Inc",
+"152f  PHILIPS - CRYPTO",
+"1530  ACQIS Technology Inc",
+"1531  CHRYON Corp",
+"1532  ECHELON Corp",
+"	0020  LonWorks PCLTA-20 PCI LonTalk Adapter",
+"1533  BALTIMORE",
+"1534  ROAD Corp",
+"1535  EVERGREEN Technologies Inc",
+"1537  DATALEX COMMUNCATIONS",
+"1538  ARALION Inc",
+"	0303  ARS106S Ultra ATA 133/100/66 Host Controller",
+"1539  ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A.",
+"153a  ONO SOKKI",
+"153b  TERRATEC Electronic GmbH",
+"	1144  Aureon 5.1",
+"	1147  Aureon 5.1 Sky",
+"	1158  Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV]",
+"153c  ANTAL Electronic",
+"153d  FILANET Corp",
+"153e  TECHWELL Inc",
+"153f  MIPS Technologies, Inc.",
+"	0001  SOC-it 101 System Controller",
+"1540  PROVIDEO MULTIMEDIA Co Ltd",
+"1541  MACHONE Communications",
+"1542  Concurrent Computer Corporation",
+"1543  SILICON Laboratories",
+"	3052  Intel 537 [Winmodem]",
+"	4c22  Si3036 MC'97 DAA",
+"1544  DCM DATA Systems",
+"1545  VISIONTEK",
+"1546  IOI Technology Corp",
+"1547  MITUTOYO Corp",
+"1548  JET PROPULSION Laboratory",
+"1549  INTERCONNECT Systems Solutions",
+"154a  MAX Technologies Inc",
+"154b  COMPUTEX Co Ltd",
+"154c  VISUAL Technology Inc",
+"154d  PAN INTERNATIONAL Industrial Corp",
+"154e  SERVOTEST Ltd",
+"154f  STRATABEAM Technology",
+"1550  OPEN NETWORK Co Ltd",
+"1551  SMART Electronic DEVELOPMENT GmBH",
+"1552  RACAL AIRTECH Ltd",
+"1553  CHICONY Electronics Co Ltd",
+"1554  PROLINK Microsystems Corp",
+"1555  GESYTEC GmBH",
+"1556  PLD APPLICATIONS",
+"1557  MEDIASTAR Co Ltd",
+"1558  CLEVO/KAPOK Computer",
+"1559  SI LOGIC Ltd",
+"155a  INNOMEDIA Inc",
+"155b  PROTAC INTERNATIONAL Corp",
+"155c  Cemax-Icon Inc",
+"155d  Mac System Co Ltd",
+"155e  LP Elektronik GmbH",
+"155f  Perle Systems Ltd",
+"1560  Terayon Communications Systems",
+"1561  Viewgraphics Inc",
+"1562  Symbol Technologies",
+"1563  A-Trend Technology Co Ltd",
+"1564  Yamakatsu Electronics Industry Co Ltd",
+"1565  Biostar Microtech Int'l Corp",
+"1566  Ardent Technologies Inc",
+"1567  Jungsoft",
+"1568  DDK Electronics Inc",
+"1569  Palit Microsystems Inc.",
+"156a  Avtec Systems",
+"156b  2wire Inc",
+"156c  Vidac Electronics GmbH",
+"156d  Alpha-Top Corp",
+"156e  Alfa Inc",
+"156f  M-Systems Flash Disk Pioneers Ltd",
+"1570  Lecroy Corp",
+"1571  Contemporary Controls",
+"	a001  CCSI PCI20-485 ARCnet",
+"	a002  CCSI PCI20-485D ARCnet",
+"	a003  CCSI PCI20-485X ARCnet",
+"	a004  CCSI PCI20-CXB ARCnet",
+"	a005  CCSI PCI20-CXS ARCnet",
+"	a006  CCSI PCI20-FOG-SMA ARCnet",
+"	a007  CCSI PCI20-FOG-ST ARCnet",
+"	a008  CCSI PCI20-TB5 ARCnet",
+"	a009  CCSI PCI20-5-485 5Mbit ARCnet",
+"	a00a  CCSI PCI20-5-485D 5Mbit ARCnet",
+"	a00b  CCSI PCI20-5-485X 5Mbit ARCnet",
+"	a00c  CCSI PCI20-5-FOG-ST 5Mbit ARCnet",
+"	a00d  CCSI PCI20-5-FOG-SMA 5Mbit ARCnet",
+"	a201  CCSI PCI22-485 10Mbit ARCnet",
+"	a202  CCSI PCI22-485D 10Mbit ARCnet",
+"	a203  CCSI PCI22-485X 10Mbit ARCnet",
+"	a204  CCSI PCI22-CHB 10Mbit ARCnet",
+"	a205  CCSI PCI22-FOG_ST 10Mbit ARCnet",
+"	a206  CCSI PCI22-THB 10Mbit ARCnet",
+"1572  Otis Elevator Company",
+"1573  Lattice - Vantis",
+"1574  Fairchild Semiconductor",
+"1575  Voltaire Advanced Data Security Ltd",
+"1576  Viewcast COM",
+"1578  HITT",
+"	5615  VPMK3 [Video Processor Mk III]",
+"1579  Dual Technology Corp",
+"157a  Japan Elecronics Ind Inc",
+"157b  Star Multimedia Corp",
+"157c  Eurosoft (UK)",
+"	8001  Fix2000 PCI Y2K Compliance Card",
+"157d  Gemflex Networks",
+"157e  Transition Networks",
+"157f  PX Instruments Technology Ltd",
+"1580  Primex Aerospace Co",
+"1581  SEH Computertechnik GmbH",
+"1582  Cytec Corp",
+"1583  Inet Technologies Inc",
+"1584  Uniwill Computer Corp",
+"1585  Logitron",
+"1586  Lancast Inc",
+"1587  Konica Corp",
+"1588  Solidum Systems Corp",
+"1589  Atlantek Microsystems Pty Ltd",
+"158a  Digalog Systems Inc",
+"158b  Allied Data Technologies",
+"158c  Hitachi Semiconductor & Devices Sales Co Ltd",
+"158d  Point Multimedia Systems",
+"158e  Lara Technology Inc",
+"158f  Ditect Coop",
+"1590  3pardata Inc",
+"1591  ARN",
+"1592  Syba Tech Ltd",
+"	0781  Multi-IO Card",
+"	0782  Parallel Port Card 2xEPP",
+"	0783  Multi-IO Card",
+"	0785  Multi-IO Card",
+"	0786  Multi-IO Card",
+"	0787  Multi-IO Card",
+"	0788  Multi-IO Card",
+"	078a  Multi-IO Card",
+"1593  Bops Inc",
+"1594  Netgame Ltd",
+"1595  Diva Systems Corp",
+"1596  Folsom Research Inc",
+"1597  Memec Design Services",
+"1598  Granite Microsystems",
+"1599  Delta Electronics Inc",
+"159a  General Instrument",
+"159b  Faraday Technology Corp",
+"159c  Stratus Computer Systems",
+"159d  Ningbo Harrison Electronics Co Ltd",
+"159e  A-Max Technology Co Ltd",
+"159f  Galea Network Security",
+"15a0  Compumaster SRL",
+"15a1  Geocast Network Systems",
+"15a2  Catalyst Enterprises Inc",
+"	0001  TA700 PCI Bus Analyzer/Exerciser",
+"15a3  Italtel",
+"15a4  X-Net OY",
+"15a5  Toyota Macs Inc",
+"15a6  Sunlight Ultrasound Technologies Ltd",
+"15a7  SSE Telecom Inc",
+"15a8  Shanghai Communications Technologies Center",
+"15aa  Moreton Bay",
+"15ab  Bluesteel Networks Inc",
+"15ac  North Atlantic Instruments",
+"15ad  VMware Inc",
+"	0405  [VMware SVGA II] PCI Display Adapter",
+"	0710  Virtual SVGA",
+"	0720  VMware High-Speed Virtual NIC [vmxnet]",
+"15ae  Amersham Pharmacia Biotech",
+"15b0  Zoltrix International Ltd",
+"15b1  Source Technology Inc",
+"15b2  Mosaid Technologies Inc",
+"15b3  Mellanox Technologies",
+"	5274  MT21108 InfiniBridge",
+"	5a44  MT23108 InfiniHost",
+"	5a45  MT23108 [Infinihost HCA Flash Recovery]",
+"	5a46  MT23108 PCI Bridge",
+"	5e8d  MT25204 [InfiniHost III Lx HCA Flash Recovery]",
+"	6274  MT25204 [InfiniHost III Lx HCA]",
+"	6278  MT25208 InfiniHost III Ex (Tavor compatibility mode)",
+"	6279  MT25208 [InfiniHost III Ex HCA Flash Recovery]",
+"	6282  MT25208 InfiniHost III Ex",
+"15b4  CCI/TRIAD",
+"15b5  Cimetrics Inc",
+"15b6  Texas Memory Systems Inc",
+"15b7  Sandisk Corp",
+"15b8  ADDI-DATA GmbH",
+"15b9  Maestro Digital Communications",
+"15ba  Impacct Technology Corp",
+"15bb  Portwell Inc",
+"15bc  Agilent Technologies",
+"	1100  E8001-66442 PCI Express CIC",
+"	2922  64 Bit, 133MHz PCI-X Exerciser & Protocol Checker",
+"	2928  64 Bit, 66MHz PCI Exerciser & Analyzer",
+"	2929  64 Bit, 133MHz PCI-X Analyzer & Exerciser",
+"15bd  DFI Inc",
+"15be  Sola Electronics",
+"15bf  High Tech Computer Corp (HTC)",
+"15c0  BVM Ltd",
+"15c1  Quantel",
+"15c2  Newer Technology Inc",
+"15c3  Taiwan Mycomp Co Ltd",
+"15c4  EVSX Inc",
+"15c5  Procomp Informatics Ltd",
+"	8010  1394b - 1394 Firewire 3-Port Host Adapter Card",
+"15c6  Technical University of Budapest",
+"15c7  Tateyama System Laboratory Co Ltd",
+"	0349  Tateyama C-PCI PLC/NC card Rev.01A",
+"15c8  Penta Media Co Ltd",
+"15c9  Serome Technology Inc",
+"15ca  Bitboys OY",
+"15cb  AG Electronics Ltd",
+"15cc  Hotrail Inc",
+"15cd  Dreamtech Co Ltd",
+"15ce  Genrad Inc",
+"15cf  Hilscher GmbH",
+"15d1  Infineon Technologies AG",
+"15d2  FIC (First International Computer Inc)",
+"15d3  NDS Technologies Israel Ltd",
+"15d4  Iwill Corp",
+"15d5  Tatung Co",
+"15d6  Entridia Corp",
+"15d7  Rockwell-Collins Inc",
+"15d8  Cybernetics Technology Co Ltd",
+"15d9  Super Micro Computer Inc",
+"15da  Cyberfirm Inc",
+"15db  Applied Computing Systems Inc",
+"15dc  Litronic Inc",
+"	0001  Argus 300 PCI Cryptography Module",
+"15dd  Sigmatel Inc",
+"15de  Malleable Technologies Inc",
+"15df  Infinilink Corp",
+"15e0  Cacheflow Inc",
+"15e1  Voice Technologies Group Inc",
+"15e2  Quicknet Technologies Inc",
+"15e3  Networth Technologies Inc",
+"15e4  VSN Systemen BV",
+"15e5  Valley technologies Inc",
+"15e6  Agere Inc",
+"15e7  Get Engineering Corp",
+"15e8  National Datacomm Corp",
+"	0130  Wireless PCI Card",
+"15e9  Pacific Digital Corp",
+"	1841  ADMA-100 DiscStaQ ATA Controller",
+"15ea  Tokyo Denshi Sekei K.K.",
+"15eb  Drsearch GmbH",
+"15ec  Beckhoff GmbH",
+"	3101  FC3101 Profibus DP 1 Channel PCI",
+"	5102  FC5102",
+"15ed  Macrolink Inc",
+"15ee  In Win Development Inc",
+"15ef  Intelligent Paradigm Inc",
+"15f0  B-Tree Systems Inc",
+"15f1  Times N Systems Inc",
+"15f2  Diagnostic Instruments Inc",
+"15f3  Digitmedia Corp",
+"15f4  Valuesoft",
+"15f5  Power Micro Research",
+"15f6  Extreme Packet Device Inc",
+"15f7  Banctec",
+"15f8  Koga Electronics Co",
+"15f9  Zenith Electronics Corp",
+"15fa  J.P. Axzam Corp",
+"15fb  Zilog Inc",
+"15fc  Techsan Electronics Co Ltd",
+"15fd  N-CUBED.NET",
+"15fe  Kinpo Electronics Inc",
+"15ff  Fastpoint Technologies Inc",
+"1600  Northrop Grumman - Canada Ltd",
+"1601  Tenta Technology",
+"1602  Prosys-tec Inc",
+"1603  Nokia Wireless Communications",
+"1604  Central System Research Co Ltd",
+"1605  Pairgain Technologies",
+"1606  Europop AG",
+"1607  Lava Semiconductor Manufacturing Inc",
+"1608  Automated Wagering International",
+"1609  Scimetric Instruments Inc",
+"1612  Telesynergy Research Inc.",
+"1619  FarSite Communications Ltd",
+"	0400  FarSync T2P (2 port X.21/V.35/V.24)",
+"	0440  FarSync T4P (4 port X.21/V.35/V.24)",
+"	0610  FarSync T1U (1 port X.21/V.35/V.24)",
+"	0620  FarSync T2U (2 port X.21/V.35/V.24)",
+"	0640  FarSync T4U (4 port X.21/V.35/V.24)",
+"	1610  FarSync TE1 (T1,E1)",
+"	2610  FarSync DSL-S1 (SHDSL)",
+"161f  Rioworks",
+"1626  TDK Semiconductor Corp.",
+"	8410  RTL81xx Fast Ethernet",
+"1629  Kongsberg Spacetec AS",
+"	1003  Format synchronizer v3.0",
+"	2002  Fast Universal Data Output",
+"1637  Linksys",
+"	3874  Linksys 802.11b WMP11 PCI Wireless card",
+"1638  Standard Microsystems Corp [SMC]",
+"	1100  SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000",
+"163c  Smart Link Ltd.",
+"	3052  SmartLink SmartPCI562 56K Modem",
+"	5449  SmartPCI561 Modem",
+"1657  Brocade Communications Systems, Inc.",
+"165a  Epix Inc",
+"	c100  PIXCI(R) CL1 Camera Link Video Capture Board [custom QL5232]",
+"	d200  PIXCI(R) D2X Digital Video Capture Board [custom QL5232]",
+"	d300  PIXCI(R) D3X Digital Video Capture Board [custom QL5232]",
+"165d  Hsing Tech. Enterprise Co., Ltd.",
+"165f  Linux Media Labs, LLC",
+"	1020  LMLM4 MPEG-4 encoder",
+"1661  Worldspace Corp.",
+"1668  Actiontec Electronics Inc",
+"	0100  Mini-PCI bridge",
+"166d  Broadcom Corporation",
+"	0001  SiByte BCM1125/1125H/1250 System-on-a-Chip PCI",
+"	0002  SiByte BCM1125H/1250 System-on-a-Chip HyperTransport",
+"1677  Bernecker + Rainer",
+"	104e  5LS172.6 B&R Dual CAN Interface Card",
+"	12d7  5LS172.61 B&R Dual CAN Interface Card",
+"167b  ZyDAS Technology Corp.",
+"	2102  ZyDAS ZD1202",
+"		187e 3406  ZyAIR B-122 CardBus 11Mbs Wireless LAN Card",
+"1681  Hercules",
+"	0010  Hercules 3d Prophet II Ultra 64MB (350 MHz NV15BR core)",
+"1682  XFX Pine Group Inc.",
+"1688  CastleNet Technology Inc.",
+"	1170  WLAN 802.11b card",
+"168c  Atheros Communications, Inc.",
+"	0007  AR5000 802.11a Wireless Adapter",
+"	0011  AR5210 802.11a NIC",
+"	0012  AR5211 802.11ab NIC",
+"	0013  AR5212 802.11abg NIC",
+"		1113 d301  Philips CPWNA100 Wireless CardBus adapter",
+"		1186 3202  D-link DWL-G650 (Rev B3,B5) Wireless cardbus adapter",
+"		1186 3203  DWL-G520 Wireless PCI Adapter",
+"		1186 3a12  D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)",
+"		1186 3a13  D-Link AirPlus DWL-G520 Wireless PCI Adapter(rev.B)",
+"		1186 3a14  D-Link AirPremier DWL-AG530 Wireless PCI Adapter",
+"		1186 3a17  D-Link AirPremier DWL-G680 Wireless Cardbus Adapter",
+"		1186 3a18  D-Link AirPremier DWL-G550 Wireless PCI Adapter",
+"		1186 3a63  D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter",
+"		1186 3a94  C54C Wireless 801.11g cardbus",
+"		1186 3ab0  Allnet ALL0281 Wireless PCI Card",
+"		1385 4d00  Netgear WG311T Wireless PCI Adapter",
+"		1458 e911  Gigabyte GN-WIAG02",
+"		14b7 0a60  8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter",
+"		168c 0013  AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter",
+"		168c 1025  DWL-G650B2 Wireless CardBus Adapter",
+"		168c 1027  Netgate NL-3054CB ARIES b/g CardBus Adapter",
+"		168c 2026  Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter",
+"		168c 2041  Netgate 5354MP Plus ARIES2 b/g MiniPCI Adapter",
+"		168c 2042  Netgate 5354MP Plus ARIES2 a/b/g MiniPCI Adapter",
+"		16ab 7302  Trust Speedshare Turbo Pro Wireless PCI Adapter",
+"		185f 2012  Wistron NeWeb WLAN a+b+g model CB9",
+"	001a  AR5005G 802.11abg NIC",
+"		1113 ee20  SMC Wireless CardBus Adapter 802.11g (SMCWCB-G EU)",
+"		1113 ee24  SMC Wireless PCI Card WPCI-G",
+"		1186 3a15  D-Link AirPlus G DWL-G630 Wireless Cardbus Adapter(rev.D)",
+"		1186 3a16  D-Link AirPlus G DWL-G510 Wireless PCI Adapter(rev.B)",
+"		1186 3a23  D-Link AirPlus G DWL-G520+A Wireless PCI Adapter",
+"		1186 3a24  D-Link AirPlus G DWL-G650+A Wireless Cardbus Adapter",
+"		168c 1052  TP-Link TL-WN510G Wireless CardBus Adapter",
+"	001b  AR5006X 802.11abg NIC",
+"		1186 3a19  D-Link AirPremier AG DWL-AG660 Wireless Cardbus Adapter",
+"		1186 3a22  D-Link AirPremier AG DWL-AG530 Wireless PCI Adapter",
+"		168c 2062  EnGenius EMP-8602 (400mw)",
+"		168c 2063  EnGenius EMP-8602 (400mw)",
+"	0020  AR5005VL 802.11bg Wireless NIC",
+"	1014  AR5212 802.11abg NIC",
+"1695  EPoX Computer Co., Ltd.",
+"169c  Netcell Corporation",
+"	0044  Revolution Storage Processing Card",
+"16a5  Tekram Technology Co.,Ltd.",
+"16ab  Global Sun Technology Inc",
+"	1100  GL24110P",
+"	1101  PLX9052 PCMCIA-to-PCI Wireless LAN",
+"	1102  PCMCIA-to-PCI Wireless Network Bridge",
+"	8501  WL-8305 Wireless LAN PCI Adapter",
+"16ae  Safenet Inc",
+"	1141  SafeXcel-1141",
+"16af  SparkLAN Communications, Inc.",
+"16b4  Aspex Semiconductor Ltd",
+"16b8  Sonnet Technologies, Inc.",
+"16be  Creatix Polymedia GmbH",
+"16c6  Micrel-Kendin",
+"	8695  Centaur KS8695 ARM processor",
+"16c8  Octasic Inc.",
+"16c9  EONIC B.V. The Netherlands",
+"16ca  CENATEK Inc",
+"	0001  Rocket Drive DL",
+"16cd  Densitron Technologies",
+"16ce  Roland Corp.",
+"16d5  Acromag, Inc.",
+"	4d4e  PMC482, APC482, AcPC482 Counter Timer Board",
+"16df  PIKA Technologies Inc.",
+"16e3  European Space Agency",
+"	1e0f  LEON2FT Processor",
+"16ec  U.S. Robotics",
+"	00ff  USR997900 10/100 Mbps PCI Network Card",
+"	0116  USR997902 10/100/1000 Mbps PCI Network Card",
+"	3685  Wireless Access PCI Adapter Model 022415",
+"16ed  Sycron N. V.",
+"	1001  UMIO communication card",
+"16f3  Jetway Information Co., Ltd.",
+"16f4  Vweb Corp",
+"	8000  VW2010",
+"16f6  VideoTele.com, Inc.",
+"1702  Internet Machines Corporation (IMC)",
+"1705  Digital First, Inc.",
+"170b  NetOctave",
+"	0100  NSP2000-SSL crypto accelerator",
+"170c  YottaYotta Inc.",
+"1725  Vitesse Semiconductor",
+"	7174  VSC7174 PCI/PCI-X Serial ATA Host Bus Controller",
+"172a  Accelerated Encryption",
+"	13c8  AEP SureWare Runner 1000V3",
+"1734  Fujitsu Siemens Computer GmbH",
+"	1078  Amilo Pro v2010",
+"1737  Linksys",
+"	0013  WMP54G Wireless Pci Card",
+"	0015  WMP54GS Wireless Pci Card",
+"	1032  Gigabit Network Adapter",
+"		1737 0015  EG1032 v2 Instant Gigabit Network Adapter",
+"		1737 0024  EG1032 v3 Instant Gigabit Network Adapter",
+"	1064  Gigabit Network Adapter",
+"		1737 0016  EG1064 v2 Instant Gigabit Network Adapter",
+"	ab08  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"	ab09  21x4x DEC-Tulip compatible 10/100 Ethernet",
+"173b  Altima (nee Broadcom)",
+"	03e8  AC1000 Gigabit Ethernet",
+"	03e9  AC1001 Gigabit Ethernet",
+"	03ea  AC9100 Gigabit Ethernet",
+"		173b 0001  AC1002",
+"	03eb  AC1003 Gigabit Ethernet",
+"1743  Peppercon AG",
+"	8139  ROL/F-100 Fast Ethernet Adapter with ROL",
+"1749  RLX Technologies",
+"174b  PC Partner Limited",
+"174d  WellX Telecom SA",
+"175c  AudioScience Inc",
+"175e  Sanera Systems, Inc.",
+"1775  SBS Technologies",
+"1787  Hightech Information System Ltd.",
+"1796  Research Centre Juelich",
+"	0001  SIS1100 [Gigabit link]",
+"	0002  HOTlink",
+"	0003  Counter Timer",
+"	0004  CAMAC Controller",
+"	0005  PROFIBUS",
+"	0006  AMCC HOTlink",
+"1797  JumpTec h, GMBH",
+"1799  Belkin",
+"	6001  Wireless PCI Card - F5D6001",
+"	6020  Wireless PCMCIA Card - F5D6020",
+"	6060  Wireless PDA Card - F5D6060",
+"	7000  Wireless PCI Card - F5D7000",
+"	7010  BCM4306 802.11b/g Wireless Lan Controller F5D7010",
+"179c  Data Patterns",
+"	0557  DP-PCI-557 [PCI 1553B]",
+"	0566  DP-PCI-566 [Intelligent PCI 1553B]",
+"	5031  DP-CPCI-5031-Synchro Module",
+"	5121  DP-CPCI-5121-IP Carrier",
+"	5211  DP-CPCI-5211-IP Carrier",
+"	5679  AGE Display Module",
+"17a0  Genesys Logic, Inc",
+"	8033  GL880S USB 1.1 controller",
+"	8034  GL880S USB 2.0 controller",
+"17aa  Lenovo",
+"17af  Hightech Information System Ltd.",
+"17b3  Hawking Technologies",
+"	ab08  PN672TX 10/100 Ethernet",
+"17b4  Indra Networks, Inc.",
+"	0011  WebEnhance 100 GZIP Compression Card",
+"17c0  Wistron Corp.",
+"17c2  Newisys, Inc.",
+"17cb  Airgo Networks Inc",
+"17cc  NetChip Technology, Inc",
+"	2280  USB 2.0",
+"17cf  Z-Com, Inc.",
+"17d3  Areca Technology Corp.",
+"	1110  ARC-1110 4-Port PCI-X to SATA RAID Controller",
+"	1120  ARC-1120 8-Port PCI-X to SATA RAID Controller",
+"	1130  ARC-1130 12-Port PCI-X to SATA RAID Controller",
+"	1160  ARC-1160 16-Port PCI-X to SATA RAID Controller",
+"	1210  ARC-1210 4-Port PCI-Express to SATA RAID Controller",
+"	1220  ARC-1220 8-Port PCI-Express to SATA RAID Controller",
+"	1230  ARC-1230 12-Port PCI-Express to SATA RAID Controller",
+"	1260  ARC-1260 16-Port PCI-Express to SATA RAID Controller",
+"17d5  S2io Inc.",
+"	5831  Xframe 10 Gigabit Ethernet PCI-X",
+"		103c 12d5  HP PCI-X 133MHz 10GbE SR Fiber",
+"	5832  Xframe II 10Gbps Ethernet",
+"17de  KWorld Computer Co. Ltd.",
+"17ee  Connect Components Ltd",
+"17f2  Albatron Corp.",
+"17fe  Linksys, A Division of Cisco Systems",
+"	2120  WMP11v4 802.11b PCI card",
+"	2220  [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01)",
+"		17fe 2220  WPC54G ver. 4",
+"17ff  Benq Corporation",
+"1809  Lumanate, Inc.",
+"1813  Ambient Technologies Inc",
+"	4000  HaM controllerless modem",
+"		16be 0001  V9x HAM Data Fax Modem",
+"	4100  HaM plus Data Fax Modem",
+"		16be 0002  V9x HAM 1394",
+"1814  RaLink",
+"	0101  Wireless PCI Adapter RT2400 / RT2460",
+"		1043 0127  WiFi-b add-on Card",
+"		1462 6828  PC11B2 (MS-6828) Wireless 11b PCI Card",
+"	0200  RT2500 802.11g PCI [PC54G2]",
+"	0201  RT2500 802.11g Cardbus/mini-PCI",
+"		1043 130f  WL-130g",
+"		1371 001e  CWC-854 Wireless-G CardBus Adapter",
+"		1371 001f  CWM-854 Wireless-G Mini PCI Adapter",
+"		1371 0020  CWP-854 Wireless-G PCI Adapter",
+"		1458 e381  GN-WMKG 802.11b/g Wireless CardBus Adapter",
+"		1458 e931  GN-WIKG 802.11b/g mini-PCI Adapter",
+"		1462 6835  Wireless 11G CardBus CB54G2",
+"		1737 0032  WMP54G 2.0 PCI Adapter",
+"		1799 700a  F5D7000 Wireless G Desktop Network Card",
+"		1799 701a  F5D7010 Wireless G Notebook Network Card",
+"		185f 22a0  CN-WF513 Wireless Cardbus Adapter",
+"	0301  RT2561/RT61 802.11g PCI",
+"		1186 3c08  DWL-G630 Rev E",
+"		1186 3c09  DWL-G510 Rev C",
+"	0302  RT2561/RT61 rev B 802.11g",
+"		1186 3c08  DWL-G630 Rev E",
+"		1186 3c09  DWL-G510 Rev C",
+"	0401  Ralink RT2600 802.11 MIMO",
+"1820  InfiniCon Systems Inc.",
+"1822  Twinhan Technology Co. Ltd",
+"	4e35  Mantis DTV PCI Bridge Controller [Ver 1.0]",
+"182d  SiteCom Europe BV",
+"	3069  ISDN PCI DC-105V2",
+"	9790  WL-121 Wireless Network Adapter 100g+ [Ver.3]",
+"1830  Credence Systems Corporation",
+"183b  MikroM GmbH",
+"	08a7  MVC100 DVI",
+"	08a8  MVC101 SDI",
+"	08a9  MVC102 DVI+Audio",
+"1849  ASRock Incorporation",
+"1851  Microtune, Inc.",
+"1852  Anritsu Corp.",
+"1853  SMSC Automotive Infotainment System Group",
+"1854  LG Electronics, Inc.",
+"185b  Compro Technology, Inc.",
+"185f  Wistron NeWeb Corp.",
+"1864  SilverBack",
+"	2110  ISNAP 2110",
+"1867  Topspin Communications",
+"	5a44  MT23108 InfiniHost HCA",
+"	5a45  MT23108 InfiniHost HCA flash recovery",
+"	5a46  MT23108 InfiniHost HCA bridge",
+"	6278  MT25208 InfiniHost III Ex (Tavor compatibility mode)",
+"	6282  MT25208 InfiniHost III Ex",
+"187e  ZyXEL Communication Corporation",
+"	3403  ZyAir G-110 802.11g",
+"	340e  M-302 802.11g XtremeMIMO",
+"1888  Varisys Ltd",
+"	0301  VMFX1 FPGA PMC module",
+"	0601  VSM2 dual PMC carrier",
+"	0710  VS14x series PowerPC PCI board",
+"	0720  VS24x series PowerPC PCI board",
+"188a  Ample Communications, Inc",
+"1890  Egenera, Inc.",
+"1894  KNC One",
+"1896  B&B Electronics Manufacturing Company, Inc.",
+"18a1  Astute Networks Inc.",
+"18ac  DViCO Corporation",
+"	d500  FusionHDTV 5",
+"	d810  FusionHDTV 3 Gold",
+"	d820  FusionHDTV 3 Gold-T",
+"18b8  Ammasso",
+"	b001  AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor",
+"18bc  Info-Tek Corp.",
+"18c3  Micronas Semiconductor Holding AG",
+"18c8  Cray Inc",
+"18c9  ARVOO Engineering BV",
+"18ca  XGI - Xabre Graphics Inc",
+"	0020  Volari Z7",
+"	0040  Volari V3XT/V5/V8",
+"18d2  Sitecom",
+"	3069  DC-105v2 ISDN controller",
+"18dd  Artimi Inc",
+"	4c6f  Artimi RTMI-100 UWB adapter",
+"18e6  MPL AG",
+"	0001  OSCI [Octal Serial Communication Interface]",
+"18ec  Cesnet, z.s.p.o.",
+"	c006  COMBO6",
+"		18ec d001  COMBO-4MTX",
+"		18ec d002  COMBO-4SFP",
+"		18ec d003  COMBO-4SFPRO",
+"		18ec d004  COMBO-2XFP",
+"	c045  COMBO6E",
+"	c050  COMBO-PTM",
+"	c058  COMBO6X",
+"		18ec d001  COMBO-4MTX",
+"		18ec d002  COMBO-4SFP",
+"		18ec d003  COMBO-4SFPRO",
+"		18ec d004  COMBO-2XFP",
+"18f7  Commtech, Inc.",
+"	0001  Fastcom ESCC-PCI-335",
+"	0002  Fastcom 422/4-PCI-335",
+"	0004  Fastcom 422/2-PCI-335",
+"	0005  Fastcom IGESCC-PCI-ISO/1",
+"	000a  Fastcom 232/4-PCI-335",
+"18fb  Resilience Corporation",
+"1904  Hangzhou Silan Microelectronics Co., Ltd.",
+"1923  Sangoma Technologies Corp.",
+"	0100  A104d QUAD T1/E1 AFT card",
+"	0400  A104u Quad T1/E1 AFT",
+"1924  Level 5 Networks Inc.",
+"192e  TransDimension",
+"1931  Option N.V.",
+"	000c  Qualcomm MSM6275 UMTS chip",
+"1942  ClearSpeed Technology plc",
+"	e511  CSX600 Advance Accelerator Board",
+"1957  Freescale Semiconductor Inc",
+"	0080  MPC8349E",
+"	0081  MPC8349",
+"	0082  MPC8347E TBGA",
+"	0083  MPC8347 TBGA",
+"	0084  MPC8347E PBGA",
+"	0085  MPC8347 PBGA",
+"	0086  MPC8343E",
+"	0087  MPC8343",
+"1958  Faster Technology, LLC.",
+"1966  Orad Hi-Tec Systems",
+"	1975  DVG64 family",
+"196a  Sensory Networks Inc.",
+"	0101  NodalCore C-1000 Content Classification Accelerator",
+"	0102  NodalCore C-2000 Content Classification Accelerator",
+"197b  JMicron Technologies, Inc.",
+"	2360  JMicron 20360/20363 AHCI Controller",
+"	2361  JMB361 AHCI/IDE",
+"	2363  JMicron 20360/20363 AHCI Controller",
+"	2365  JMB365 AHCI/IDE",
+"	2366  JMB366 AHCI/IDE",
+"1989  Montilio Inc.",
+"	0001  RapidFile Bridge",
+"	8001  RapidFile",
+"1993  Innominate Security Technologies AG",
+"199a  Pulse-LINK, Inc.",
+"19a8  DAQDATA GmbH",
+"19ac  Kasten Chase Applied Research",
+"	0001  ACA2400 Crypto Accelerator",
+"19ae  Progeny Systems Corporation",
+"	0520  4135 HFT Interface Controller",
+"19d4  Quixant Limited",
+"19e2  Vector Informatik GmbH",
+"1a03  ASPEED Technology, Inc.",
+"	2000  AST2000",
+"1a08  Sierra semiconductor",
+"	0000  SC15064",
+"1a1d  GFaI e.V.",
+"1a29  Fortinet, Inc.",
+"1b13  Jaton Corp",
+"1c1c  Symphony",
+"	0001  82C101",
+"1d44  DPT",
+"	a400  PM2x24/PM3224",
+"1de1  Tekram Technology Co.,Ltd.",
+"	0391  TRM-S1040",
+"	2020  DC-390",
+"	690c  690c",
+"	dc29  DC290",
+"1fc0  Tumsan Oy",
+"	0300  E2200 Dual E1/Rawpipe Card",
+"1fc1  PathScale, Inc",
+"	000d  InfiniPath HT-400",
+"	0010  InfiniPath PE-800",
+"1fce  Cognio Inc.",
+"	0001  Spectrum Analyzer PC Card (SAgE)",
+"2000  Smart Link Ltd.",
+"2001  Temporal Research Ltd",
+"2003  Smart Link Ltd.",
+"2004  Smart Link Ltd.",
+"21c3  21st Century Computer Corp.",
+"22b8  Motorola, Inc.",
+"2348  Racore",
+"	2010  8142 100VG/AnyLAN",
+"2646  Kingston Technologies",
+"270b  Xantel Corporation",
+"270f  Chaintech Computer Co. Ltd",
+"2711  AVID Technology Inc.",
+"2a15  3D Vision(???)",
+"3000  Hansol Electronics Inc.",
+"3142  Post Impression Systems.",
+"3388  Hint Corp",
+"	0013  HiNT HC4 PCI to ISDN bridge, Multimedia audio controller",
+"	0014  HiNT HC4 PCI to ISDN bridge, Network controller",
+"	0020  HB6 Universal PCI-PCI bridge (transparent mode)",
+"	0021  HB6 Universal PCI-PCI bridge (non-transparent mode)",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1080  CT8 mainboard",
+"		4c53 1090  Cx9 mainboard",
+"		4c53 10a0  CA3/CR3 mainboard",
+"		4c53 3010  PPCI mezzanine (32-bit PMC)",
+"		4c53 3011  PPCI mezzanine (64-bit PMC)",
+"		4c53 4000  PMCCARR1 carrier board",
+"	0022  HiNT HB4 PCI-PCI Bridge (PCI6150)",
+"	0026  HB2 PCI-PCI Bridge",
+"	101a  E.Band [AudioTrak Inca88]",
+"	101b  E.Band [AudioTrak Inca88]",
+"	8011  VXPro II Chipset",
+"		3388 8011  VXPro II Chipset CPU to PCI Bridge",
+"	8012  VXPro II Chipset",
+"		3388 8012  VXPro II Chipset PCI to ISA Bridge",
+"	8013  VXPro II IDE",
+"		3388 8013  VXPro II Chipset EIDE Controller",
+"3411  Quantum Designs (H.K.) Inc",
+"3513  ARCOM Control Systems Ltd",
+"3842  eVga.com. Corp.",
+"	c370  e-GeFORCE 6600 256 DDR PCI-e",
+"38ef  4Links",
+"3d3d  3DLabs",
+"	0001  GLINT 300SX",
+"	0002  GLINT 500TX",
+"		0000 0000  GLoria L",
+"	0003  GLINT Delta",
+"		0000 0000  GLoria XL",
+"	0004  Permedia",
+"	0005  Permedia",
+"	0006  GLINT MX",
+"		0000 0000  GLoria XL",
+"		1048 0a42  GLoria XXL",
+"	0007  3D Extreme",
+"	0008  GLINT Gamma G1",
+"		1048 0a42  GLoria XXL",
+"	0009  Permedia II 2D+3D",
+"		1040 0011  AccelStar II",
+"		1048 0a42  GLoria XXL",
+"		13e9 1000  6221L-4U",
+"		3d3d 0100  AccelStar II 3D Accelerator",
+"		3d3d 0111  Permedia 3:16",
+"		3d3d 0114  Santa Ana",
+"		3d3d 0116  Oxygen GVX1",
+"		3d3d 0119  Scirocco",
+"		3d3d 0120  Santa Ana PCL",
+"		3d3d 0125  Oxygen VX1",
+"		3d3d 0127  Permedia3 Create!",
+"	000a  GLINT R3",
+"		3d3d 0121  Oxygen VX1",
+"	000c  GLINT R3 [Oxygen VX1]",
+"		3d3d 0144  Oxygen VX1-4X AGP [Permedia 4]",
+"	000d  GLint R4 rev A",
+"	0011  GLint R4 rev B",
+"	0012  GLint R5 rev A",
+"	0013  GLint R5 rev B",
+"	0020  VP10 visual processor",
+"	0022  VP10 visual processor",
+"	0024  VP9 visual processor",
+"	0100  Permedia II 2D+3D",
+"	07a1  Wildcat III 6210",
+"	07a2  Sun XVR-500 Graphics Accelerator",
+"	07a3  Wildcat IV 7210",
+"	1004  Permedia",
+"	3d04  Permedia",
+"	ffff  Glint VGA",
+"4005  Avance Logic Inc.",
+"	0300  ALS300 PCI Audio Device",
+"	0308  ALS300+ PCI Audio Device",
+"	0309  PCI Input Controller",
+"	1064  ALG-2064",
+"	2064  ALG-2064i",
+"	2128  ALG-2364A GUI Accelerator",
+"	2301  ALG-2301",
+"	2302  ALG-2302",
+"	2303  AVG-2302 GUI Accelerator",
+"	2364  ALG-2364A",
+"	2464  ALG-2464",
+"	2501  ALG-2564A/25128A",
+"	4000  ALS4000 Audio Chipset",
+"		4005 4000  ALS4000 Audio Chipset",
+"	4710  ALC200/200P",
+"4033  Addtron Technology Co, Inc.",
+"	1360  RTL8139 Ethernet",
+"4143  Digital Equipment Corp",
+"4144  Alpha Data",
+"	0044  ADM-XRCIIPro",
+"416c  Aladdin Knowledge Systems",
+"	0100  AladdinCARD",
+"	0200  CPC",
+"4321  Tata Power Strategic Electronics Division",
+"4444  Internext Compression Inc",
+"	0016  iTVC16 (CX23416) MPEG-2 Encoder",
+"		0070 0003  WinTV PVR 250",
+"		0070 0009  WinTV PVR 150",
+"		0070 0801  WinTV PVR 150",
+"		0070 0807  WinTV PVR 150",
+"		0070 4001  WinTV PVR 250",
+"		0070 4009  WinTV PVR 250",
+"		0070 4801  WinTV PVR 250",
+"		0070 4803  WinTV PVR 250",
+"		0070 8003  WinTV PVR 150",
+"		0070 8801  WinTV PVR 150",
+"		0070 c801  WinTV PVR 150",
+"		0070 e807  WinTV PVR 500 (1st unit)",
+"		0070 e817  WinTV PVR 500 (2nd unit)",
+"		0070 ff92  WiNTV PVR-550",
+"		0270 0801  WinTV PVR 150",
+"		12ab fff3  MPG600",
+"		12ab ffff  MPG600",
+"		9005 0092  VideOh! AVC-2010",
+"		9005 0093  VideOh! AVC-2410",
+"	0803  iTVC15 MPEG-2 Encoder",
+"		0070 4000  WinTV PVR-350",
+"		0070 4001  WinTV PVR-250",
+"		0070 4800  WinTV PVR-350 (V1)",
+"		12ab 0000  MPG160",
+"		1461 a3ce  M179",
+"		1461 a3cf  M179",
+"4468  Bridgeport machines",
+"4594  Cogetec Informatique Inc",
+"45fb  Baldor Electric Company",
+"4680  Umax Computer Corp",
+"4843  Hercules Computer Technology Inc",
+"4916  RedCreek Communications Inc",
+"	1960  RedCreek PCI adapter",
+"4943  Growth Networks",
+"494f  ACCES I/O Products, Inc.",
+"	10e8  LPCI-COM-8SM",
+"4978  Axil Computer Inc",
+"4a14  NetVin",
+"	5000  NV5000SC",
+"		4a14 5000  RT8029-Based Ethernet Adapter",
+"4b10  Buslogic Inc.",
+"4c48  LUNG HWA Electronics",
+"4c53  SBS Technologies",
+"	0000  PLUSTEST device",
+"		4c53 3000  PLUSTEST card (PC104+)",
+"		4c53 3001  PLUSTEST card (PMC)",
+"	0001  PLUSTEST-MM device",
+"		4c53 3002  PLUSTEST-MM card (PMC)",
+"4ca1  Seanix Technology Inc",
+"4d51  MediaQ Inc.",
+"	0200  MQ-200",
+"4d54  Microtechnica Co Ltd",
+"4ddc  ILC Data Device Corp",
+"	0100  DD-42924I5-300 (ARINC 429 Data Bus)",
+"	0801  BU-65570I1 MIL-STD-1553 Test and Simulation",
+"	0802  BU-65570I2 MIL-STD-1553 Test and Simulation",
+"	0811  BU-65572I1 MIL-STD-1553 Test and Simulation",
+"	0812  BU-65572I2 MIL-STD-1553 Test and Simulation",
+"	0881  BU-65570T1 MIL-STD-1553 Test and Simulation",
+"	0882  BU-65570T2 MIL-STD-1553 Test and Simulation",
+"	0891  BU-65572T1 MIL-STD-1553 Test and Simulation",
+"	0892  BU-65572T2 MIL-STD-1553 Test and Simulation",
+"	0901  BU-65565C1 MIL-STD-1553 Data Bus",
+"	0902  BU-65565C2 MIL-STD-1553 Data Bus",
+"	0903  BU-65565C3 MIL-STD-1553 Data Bus",
+"	0904  BU-65565C4 MIL-STD-1553 Data Bus",
+"	0b01  BU-65569I1 MIL-STD-1553 Data Bus",
+"	0b02  BU-65569I2 MIL-STD-1553 Data Bus",
+"	0b03  BU-65569I3 MIL-STD-1553 Data Bus",
+"	0b04  BU-65569I4 MIL-STD-1553 Data Bus",
+"5046  GemTek Technology Corporation",
+"	1001  PCI Radio",
+"5053  Voyetra Technologies",
+"	2010  Daytona Audio Adapter",
+"5136  S S Technologies",
+"5143  Qualcomm Inc",
+"5145  Ensoniq (Old)",
+"	3031  Concert AudioPCI",
+"5168  Animation Technologies Inc.",
+"	0300  FlyDVB-S",
+"	0301  FlyDVB-T",
+"5301  Alliance Semiconductor Corp.",
+"	0001  ProMotion aT3D",
+"5333  S3 Inc.",
+"	0551  Plato/PX (system)",
+"	5631  86c325 [ViRGE]",
+"	8800  86c866 [Vision 866]",
+"	8801  86c964 [Vision 964]",
+"	8810  86c764_0 [Trio 32 vers 0]",
+"	8811  86c764/765 [Trio32/64/64V+]",
+"	8812  86cM65 [Aurora64V+]",
+"	8813  86c764_3 [Trio 32/64 vers 3]",
+"	8814  86c767 [Trio 64UV+]",
+"	8815  86cM65 [Aurora 128]",
+"	883d  86c988 [ViRGE/VX]",
+"	8870  FireGL",
+"	8880  86c868 [Vision 868 VRAM] vers 0",
+"	8881  86c868 [Vision 868 VRAM] vers 1",
+"	8882  86c868 [Vision 868 VRAM] vers 2",
+"	8883  86c868 [Vision 868 VRAM] vers 3",
+"	88b0  86c928 [Vision 928 VRAM] vers 0",
+"	88b1  86c928 [Vision 928 VRAM] vers 1",
+"	88b2  86c928 [Vision 928 VRAM] vers 2",
+"	88b3  86c928 [Vision 928 VRAM] vers 3",
+"	88c0  86c864 [Vision 864 DRAM] vers 0",
+"	88c1  86c864 [Vision 864 DRAM] vers 1",
+"	88c2  86c864 [Vision 864-P DRAM] vers 2",
+"	88c3  86c864 [Vision 864-P DRAM] vers 3",
+"	88d0  86c964 [Vision 964 VRAM] vers 0",
+"	88d1  86c964 [Vision 964 VRAM] vers 1",
+"	88d2  86c964 [Vision 964-P VRAM] vers 2",
+"	88d3  86c964 [Vision 964-P VRAM] vers 3",
+"	88f0  86c968 [Vision 968 VRAM] rev 0",
+"	88f1  86c968 [Vision 968 VRAM] rev 1",
+"	88f2  86c968 [Vision 968 VRAM] rev 2",
+"	88f3  86c968 [Vision 968 VRAM] rev 3",
+"	8900  86c755 [Trio 64V2/DX]",
+"		5333 8900  86C775 Trio64V2/DX",
+"	8901  86c775/86c785 [Trio 64V2/DX or /GX]",
+"		5333 8901  86C775 Trio64V2/DX, 86C785 Trio64V2/GX",
+"	8902  Plato/PX",
+"	8903  Trio 3D business multimedia",
+"	8904  Trio 64 3D",
+"		1014 00db  Integrated Trio3D",
+"		5333 8904  86C365 Trio3D AGP",
+"	8905  Trio 64V+ family",
+"	8906  Trio 64V+ family",
+"	8907  Trio 64V+ family",
+"	8908  Trio 64V+ family",
+"	8909  Trio 64V+ family",
+"	890a  Trio 64V+ family",
+"	890b  Trio 64V+ family",
+"	890c  Trio 64V+ family",
+"	890d  Trio 64V+ family",
+"	890e  Trio 64V+ family",
+"	890f  Trio 64V+ family",
+"	8a01  ViRGE/DX or /GX",
+"		0e11 b032  ViRGE/GX",
+"		10b4 1617  Nitro 3D",
+"		10b4 1717  Nitro 3D",
+"		5333 8a01  ViRGE/DX",
+"	8a10  ViRGE/GX2",
+"		1092 8a10  Stealth 3D 4000",
+"	8a13  86c368 [Trio 3D/2X]",
+"		5333 8a13  Trio3D/2X",
+"	8a20  86c794 [Savage 3D]",
+"		5333 8a20  86C391 Savage3D",
+"	8a21  86c390 [Savage 3D/MV]",
+"		5333 8a21  86C390 Savage3D/MV",
+"	8a22  Savage 4",
+"		1033 8068  Savage 4",
+"		1033 8069  Savage 4",
+"		1033 8110  Savage 4 LT",
+"		105d 0018  SR9 8Mb SDRAM",
+"		105d 002a  SR9 Pro 16Mb SDRAM",
+"		105d 003a  SR9 Pro 32Mb SDRAM",
+"		105d 092f  SR9 Pro+ 16Mb SGRAM",
+"		1092 4207  Stealth III S540",
+"		1092 4800  Stealth III S540",
+"		1092 4807  SpeedStar A90",
+"		1092 4808  Stealth III S540",
+"		1092 4809  Stealth III S540",
+"		1092 480e  Stealth III S540",
+"		1092 4904  Stealth III S520",
+"		1092 4905  SpeedStar A200",
+"		1092 4a09  Stealth III S540",
+"		1092 4a0b  Stealth III S540 Xtreme",
+"		1092 4a0f  Stealth III S540",
+"		1092 4e01  Stealth III S540",
+"		1102 101d  3d Blaster Savage 4",
+"		1102 101e  3d Blaster Savage 4",
+"		5333 8100  86C394-397 Savage4 SDRAM 100",
+"		5333 8110  86C394-397 Savage4 SDRAM 110",
+"		5333 8125  86C394-397 Savage4 SDRAM 125",
+"		5333 8143  86C394-397 Savage4 SDRAM 143",
+"		5333 8a22  86C394-397 Savage4",
+"		5333 8a2e  86C394-397 Savage4 32bit",
+"		5333 9125  86C394-397 Savage4 SGRAM 125",
+"		5333 9143  86C394-397 Savage4 SGRAM 143",
+"	8a23  Savage 4",
+"	8a25  ProSavage PM133",
+"	8a26  ProSavage KM133",
+"	8c00  ViRGE/M3",
+"	8c01  ViRGE/MX",
+"		1179 0001  ViRGE/MX",
+"	8c02  ViRGE/MX+",
+"	8c03  ViRGE/MX+MV",
+"	8c10  86C270-294 Savage/MX-MV",
+"	8c11  82C270-294 Savage/MX",
+"	8c12  86C270-294 Savage/IX-MV",
+"		1014 017f  Thinkpad T20/T22",
+"		1179 0001  86C584 SuperSavage/IXC Toshiba",
+"	8c13  86C270-294 Savage/IX",
+"		1179 0001  Magnia Z310",
+"	8c22  SuperSavage MX/128",
+"	8c24  SuperSavage MX/64",
+"	8c26  SuperSavage MX/64C",
+"	8c2a  SuperSavage IX/128 SDR",
+"	8c2b  SuperSavage IX/128 DDR",
+"	8c2c  SuperSavage IX/64 SDR",
+"	8c2d  SuperSavage IX/64 DDR",
+"	8c2e  SuperSavage IX/C SDR",
+"		1014 01fc  ThinkPad T23 (2647-4MG)",
+"	8c2f  SuperSavage IX/C DDR",
+"	8d01  86C380 [ProSavageDDR K4M266]",
+"	8d02  VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK)",
+"	8d03  VT8751 [ProSavageDDR P4M266]",
+"	8d04  VT8375 [ProSavage8 KM266/KL266]",
+"	9102  86C410 Savage 2000",
+"		1092 5932  Viper II Z200",
+"		1092 5934  Viper II Z200",
+"		1092 5952  Viper II Z200",
+"		1092 5954  Viper II Z200",
+"		1092 5a35  Viper II Z200",
+"		1092 5a37  Viper II Z200",
+"		1092 5a55  Viper II Z200",
+"		1092 5a57  Viper II Z200",
+"	ca00  SonicVibes",
+"544c  Teralogic Inc",
+"	0350  TL880-based HDTV/ATSC tuner",
+"5455  Technische University Berlin",
+"	4458  S5933",
+"5519  Cnet Technologies, Inc.",
+"5544  Dunord Technologies",
+"	0001  I-30xx Scanner Interface",
+"5555  Genroco, Inc",
+"	0003  TURBOstor HFP-832 [HiPPI NIC]",
+"5654  VoiceTronix Pty Ltd",
+"	3132  OpenSwitch12",
+"5700  Netpower",
+"5851  Exacq Technologies",
+"6356  UltraStor",
+"6374  c't Magazin fuer Computertechnik",
+"	6773  GPPCI",
+"6409  Logitec Corp.",
+"6666  Decision Computer International Co.",
+"	0001  PCCOM4",
+"	0002  PCCOM8",
+"	0004  PCCOM2",
+"	0101  PCI 8255/8254 I/O Card",
+"7063  pcHDTV",
+"	2000  HD-2000",
+"	3000  HD-3000",
+"7604  O.N. Electronic Co Ltd.",
+"7bde  MIDAC Corporation",
+"7fed  PowerTV",
+"8008  Quancom Electronic GmbH",
+"	0010  WDOG1 [PCI-Watchdog 1]",
+"	0011  PWDOG2 [PCI-Watchdog 2]",
+"807d  Asustek Computer, Inc.",
+"8086  Intel Corporation",
+"	0007  82379AB",
+"	0008  Extended Express System Support Controller",
+"	0039  21145 Fast Ethernet",
+"	0122  82437FX",
+"	0309  80303 I/O Processor PCI-to-PCI Bridge",
+"	030d  80312 I/O Companion Chip PCI-to-PCI Bridge",
+"	0326  6700/6702PXH I/OxAPIC Interrupt Controller A",
+"	0327  6700PXH I/OxAPIC Interrupt Controller B",
+"	0329  6700PXH PCI Express-to-PCI Bridge A",
+"	032a  6700PXH PCI Express-to-PCI Bridge B",
+"	032c  6702PXH PCI Express-to-PCI Bridge A",
+"	0330  80332 [Dobson] I/O processor (A-Segment Bridge)",
+"	0331  80332 [Dobson] I/O processor (A-Segment IOAPIC)",
+"	0332  80332 [Dobson] I/O processor (B-Segment Bridge)",
+"	0333  80332 [Dobson] I/O processor (B-Segment IOAPIC)",
+"	0334  80332 [Dobson] I/O processor (ATU)",
+"	0335  80331 [Lindsay] I/O processor (PCI-X Bridge)",
+"	0336  80331 [Lindsay] I/O processor (ATU)",
+"	0340  41210 [Lanai] Serial to Parallel PCI Bridge (A-Segment Bridge)",
+"	0341  41210 [Lanai] Serial to Parallel PCI Bridge (B-Segment Bridge)",
+"	0370  80333 Segment-A PCI Express-to-PCI Express Bridge",
+"	0371  80333 A-Bus IOAPIC",
+"	0372  80333 Segment-B PCI Express-to-PCI Express Bridge",
+"	0373  80333 B-Bus IOAPIC",
+"	0374  80333 Address Translation Unit",
+"	0482  82375EB/SB PCI to EISA Bridge",
+"	0483  82424TX/ZX [Saturn] CPU to PCI bridge",
+"	0484  82378ZB/IB, 82379AB (SIO, SIO.A) PCI to ISA Bridge",
+"	0486  82425EX/ZX [Aries] PCIset with ISA bridge",
+"	04a3  82434LX/NX [Mercury/Neptune] Processor to PCI bridge",
+"	04d0  82437FX [Triton FX]",
+"	0500  E8870 Processor bus control",
+"	0501  E8870 Memory controller",
+"	0502  E8870 Scalability Port 0",
+"	0503  E8870 Scalability Port 1",
+"	0510  E8870IO Hub Interface Port 0 registers (8-bit compatibility port)",
+"	0511  E8870IO Hub Interface Port 1 registers",
+"	0512  E8870IO Hub Interface Port 2 registers",
+"	0513  E8870IO Hub Interface Port 3 registers",
+"	0514  E8870IO Hub Interface Port 4 registers",
+"	0515  E8870IO General SIOH registers",
+"	0516  E8870IO RAS registers",
+"	0530  E8870SP Scalability Port 0 registers",
+"	0531  E8870SP Scalability Port 1 registers",
+"	0532  E8870SP Scalability Port 2 registers",
+"	0533  E8870SP Scalability Port 3 registers",
+"	0534  E8870SP Scalability Port 4 registers",
+"	0535  E8870SP Scalability Port 5 registers",
+"	0536  E8870SP Interleave registers 0 and 1",
+"	0537  E8870SP Interleave registers 2 and 3",
+"	0600  RAID Controller",
+"		8086 01af  SRCZCR",
+"		8086 01c1  ICP Vortex GDT8546RZ",
+"		8086 01f7  SCRU32",
+"	061f  80303 I/O Processor",
+"	0960  80960RP [i960 RP Microprocessor/Bridge]",
+"	0962  80960RM [i960RM Bridge]",
+"	0964  80960RP [i960 RP Microprocessor/Bridge]",
+"	1000  82542 Gigabit Ethernet Controller",
+"		0e11 b0df  NC1632 Gigabit Ethernet Adapter (1000-SX)",
+"		0e11 b0e0  NC1633 Gigabit Ethernet Adapter (1000-LX)",
+"		0e11 b123  NC1634 Gigabit Ethernet Adapter (1000-SX)",
+"		1014 0119  Netfinity Gigabit Ethernet SX Adapter",
+"		8086 1000  PRO/1000 Gigabit Server Adapter",
+"	1001  82543GC Gigabit Ethernet Controller (Fiber)",
+"		0e11 004a  NC6136 Gigabit Server Adapter",
+"		1014 01ea  Netfinity Gigabit Ethernet SX Adapter",
+"		8086 1002  PRO/1000 F Server Adapter",
+"		8086 1003  PRO/1000 F Server Adapter",
+"	1002  Pro 100 LAN+Modem 56 Cardbus II",
+"		8086 200e  Pro 100 LAN+Modem 56 Cardbus II",
+"		8086 2013  Pro 100 SR Mobile Combo Adapter",
+"		8086 2017  Pro 100 S Combo Mobile Adapter",
+"	1004  82543GC Gigabit Ethernet Controller (Copper)",
+"		0e11 0049  NC7132 Gigabit Upgrade Module",
+"		0e11 b1a4  NC7131 Gigabit Server Adapter",
+"		1014 10f2  Gigabit Ethernet Server Adapter",
+"		8086 1004  PRO/1000 T Server Adapter",
+"		8086 2004  PRO/1000 T Server Adapter",
+"	1008  82544EI Gigabit Ethernet Controller (Copper)",
+"		1014 0269  iSeries 1000/100/10 Ethernet Adapter",
+"		1028 011c  PRO/1000 XT Network Connection",
+"		8086 1107  PRO/1000 XT Server Adapter",
+"		8086 2107  PRO/1000 XT Server Adapter",
+"		8086 2110  PRO/1000 XT Server Adapter",
+"		8086 3108  PRO/1000 XT Network Connection",
+"	1009  82544EI Gigabit Ethernet Controller (Fiber)",
+"		1014 0268  iSeries Gigabit Ethernet Adapter",
+"		8086 1109  PRO/1000 XF Server Adapter",
+"		8086 2109  PRO/1000 XF Server Adapter",
+"	100a  82540EM Gigabit Ethernet Controller",
+"	100c  82544GC Gigabit Ethernet Controller (Copper)",
+"		8086 1112  PRO/1000 T Desktop Adapter",
+"		8086 2112  PRO/1000 T Desktop Adapter",
+"	100d  82544GC Gigabit Ethernet Controller (LOM)",
+"		1028 0123  PRO/1000 XT Network Connection",
+"		1079 891f  82544GC Based Network Connection",
+"		4c53 1080  CT8 mainboard",
+"		8086 110d  82544GC Based Network Connection",
+"	100e  82540EM Gigabit Ethernet Controller",
+"		1014 0265  PRO/1000 MT Network Connection",
+"		1014 0267  PRO/1000 MT Network Connection",
+"		1014 026a  PRO/1000 MT Network Connection",
+"		1024 0134  Poweredge SC600",
+"		1028 002e  Optiplex GX260",
+"		1028 0151  PRO/1000 MT Network Connection",
+"		107b 8920  PRO/1000 MT Desktop Adapter",
+"		8086 001e  PRO/1000 MT Desktop Adapter",
+"		8086 002e  PRO/1000 MT Desktop Adapter",
+"		8086 1376  PRO/1000 GT Desktop Adapter",
+"		8086 1476  PRO/1000 GT Desktop Adapter",
+"	100f  82545EM Gigabit Ethernet Controller (Copper)",
+"		1014 0269  iSeries 1000/100/10 Ethernet Adapter",
+"		1014 028e  PRO/1000 MT Network Connection",
+"		8086 1000  PRO/1000 MT Network Connection",
+"		8086 1001  PRO/1000 MT Server Adapter",
+"	1010  82546EB Gigabit Ethernet Controller (Copper)",
+"		0e11 00db  NC7170 Gigabit Server Adapter",
+"		1014 027c  PRO/1000 MT Dual Port Network Adapter",
+"		18fb 7872  RESlink-X",
+"		1fc1 0026  Niagara 2260 Bypass Card",
+"		4c53 1080  CT8 mainboard",
+"		4c53 10a0  CA3/CR3 mainboard",
+"		8086 1011  PRO/1000 MT Dual Port Server Adapter",
+"		8086 1012  Primergy RX300",
+"		8086 101a  PRO/1000 MT Dual Port Network Adapter",
+"		8086 3424  SE7501HG2 Mainboard",
+"	1011  82545EM Gigabit Ethernet Controller (Fiber)",
+"		1014 0268  iSeries Gigabit Ethernet Adapter",
+"		8086 1002  PRO/1000 MF Server Adapter",
+"		8086 1003  PRO/1000 MF Server Adapter (LX)",
+"	1012  82546EB Gigabit Ethernet Controller (Fiber)",
+"		0e11 00dc  NC6170 Gigabit Server Adapter",
+"		8086 1012  PRO/1000 MF Dual Port Server Adapter",
+"	1013  82541EI Gigabit Ethernet Controller (Copper)",
+"		8086 0013  PRO/1000 MT Network Connection",
+"		8086 1013  IBM ThinkCentre Network Card",
+"		8086 1113  PRO/1000 MT Desktop Adapter",
+"	1014  82541ER Gigabit Ethernet Controller",
+"	1015  82540EM Gigabit Ethernet Controller (LOM)",
+"	1016  82540EP Gigabit Ethernet Controller (LOM)",
+"		1014 052c  PRO/1000 MT Mobile Connection",
+"		1179 0001  PRO/1000 MT Mobile Connection",
+"		8086 1016  PRO/1000 MT Mobile Connection",
+"	1017  82540EP Gigabit Ethernet Controller (LOM)",
+"		8086 1017  PR0/1000 MT Desktop Connection",
+"	1018  82541EI Gigabit Ethernet Controller",
+"		8086 1018  PRO/1000 MT Desktop Adapter",
+"	1019  82547EI Gigabit Ethernet Controller (LOM)",
+"		1458 1019  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1458 e000  Intel Gigabit Ethernet (Kenai II)",
+"		8086 1019  PRO/1000 CT Desktop Connection",
+"		8086 301f  D865PERL mainboard",
+"		8086 302c  Intel 82865G Mainboard (D865GBF)",
+"		8086 3427  S875WP1-E mainboard",
+"	101a  82547EI Gigabit Ethernet Controller (Mobile)",
+"	101d  82546EB Gigabit Ethernet Controller",
+"		8086 1000  PRO/1000 MT Quad Port Server Adapter",
+"	101e  82540EP Gigabit Ethernet Controller (Mobile)",
+"		1014 0549  PRO/1000 MT Mobile Connection",
+"		1179 0001  PRO/1000 MT Mobile Connection",
+"		8086 101e  PRO/1000 MT Mobile Connection",
+"	1026  82545GM Gigabit Ethernet Controller",
+"		1028 0169  Precision 470",
+"		8086 1000  PRO/1000 MT Server Connection",
+"		8086 1001  PRO/1000 MT Server Adapter",
+"		8086 1002  PRO/1000 MT Server Adapter",
+"		8086 1026  PRO/1000 MT Server Connection",
+"	1027  82545GM Gigabit Ethernet Controller",
+"		103c 3103  NC310F PCI-X Gigabit Server Adapter",
+"		8086 1001  PRO/1000 MF Server Adapter(LX)",
+"		8086 1002  PRO/1000 MF Server Adapter(LX)",
+"		8086 1003  PRO/1000 MF Server Adapter(LX)",
+"		8086 1027  PRO/1000 MF Server Adapter",
+"	1028  82545GM Gigabit Ethernet Controller",
+"		8086 1028  PRO/1000 MB Server Adapter",
+"	1029  82559 Ethernet Controller",
+"	1030  82559 InBusiness 10/100",
+"	1031  82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller",
+"		1014 0209  ThinkPad A/T/X Series",
+"		104d 80e7  Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		104d 813c  Vaio PCG-GRV616G",
+"		107b 5350  EtherExpress PRO/100 VE",
+"		1179 0001  EtherExpress PRO/100 VE",
+"		144d c000  EtherExpress PRO/100 VE",
+"		144d c001  EtherExpress PRO/100 VE",
+"		144d c003  EtherExpress PRO/100 VE",
+"		144d c006  vpr Matrix 170B4",
+"	1032  82801CAM (ICH3) PRO/100 VE Ethernet Controller",
+"	1033  82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller",
+"	1034  82801CAM (ICH3) PRO/100 VM Ethernet Controller",
+"	1035  82801CAM (ICH3)/82562EH (LOM)  Ethernet Controller",
+"	1036  82801CAM (ICH3) 82562EH Ethernet Controller",
+"	1037  82801CAM (ICH3) Chipset Ethernet Controller",
+"	1038  82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller",
+"		0e11 0098  Evo N600c",
+"	1039  82801DB PRO/100 VE (LOM) Ethernet Controller",
+"		1014 0267  NetVista A30p",
+"	103a  82801DB PRO/100 VE (CNR) Ethernet Controller",
+"	103b  82801DB PRO/100 VM (LOM) Ethernet Controller",
+"	103c  82801DB PRO/100 VM (CNR) Ethernet Controller",
+"	103d  82801DB PRO/100 VE (MOB) Ethernet Controller",
+"	103e  82801DB PRO/100 VM (MOB) Ethernet Controller",
+"	1040  536EP Data Fax Modem",
+"		16be 1040  V.9X DSP Data Fax Modem",
+"	1043  PRO/Wireless LAN 2100 3B Mini PCI Adapter",
+"		8086 2527  MIM2000/Centrino",
+"	1048  PRO/10GbE LR Server Adapter",
+"		8086 a01f  PRO/10GbE LR Server Adapter",
+"		8086 a11f  PRO/10GbE LR Server Adapter",
+"	104b  Ethernet Controller",
+"	1050  82562EZ 10/100 Ethernet Controller",
+"		1462 728c  865PE Neo2 (MS-6728)",
+"		1462 758c  MS-6758 (875P Neo)",
+"		8086 3020  D865PERL mainboard",
+"		8086 302f  Desktop Board D865GBF",
+"		8086 3427  S875WP1-E mainboard",
+"	1051  82801EB/ER (ICH5/ICH5R) integrated LAN Controller",
+"	1052  PRO/100 VM Network Connection",
+"	1053  PRO/100 VM Network Connection",
+"	1059  82551QM Ethernet Controller",
+"	105e  82571EB Gigabit Ethernet Controller",
+"		1775 6003  Telum GE-QT",
+"	105f  82571EB Gigabit Ethernet Controller",
+"	1060  82571EB Gigabit Ethernet Controller",
+"	1064  82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller",
+"		1043 80f8  P5GD1-VW Mainboard",
+"	1065  82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller",
+"	1066  82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller",
+"	1067  82562 EM/EX/GX - PRO/100 VM Ethernet Controller",
+"	1068  82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile",
+"	1069  82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile",
+"	106a  82562G - PRO/100 VE (LOM) Ethernet Controller",
+"	106b  82562G - PRO/100 VE Ethernet Controller Mobile",
+"	1075  82547GI Gigabit Ethernet Controller",
+"		1028 0165  PowerEdge 750",
+"		8086 0075  PRO/1000 CT Network Connection",
+"		8086 1075  PRO/1000 CT Network Connection",
+"	1076  82541GI/PI Gigabit Ethernet Controller",
+"		1028 0165  PowerEdge 750",
+"		1028 019a  PowerEdge SC1425",
+"		8086 0076  PRO/1000 MT Network Connection",
+"		8086 1076  PRO/1000 MT Network Connection",
+"		8086 1176  PRO/1000 MT Desktop Adapter",
+"		8086 1276  PRO/1000 MT Desktop Adapter",
+"	1077  82541GI Gigabit Ethernet Controller",
+"		1179 0001  PRO/1000 MT Mobile Connection",
+"		8086 0077  PRO/1000 MT Mobile Connection",
+"		8086 1077  PRO/1000 MT Mobile Connection",
+"	1078  82541EI Gigabit Ethernet Controller",
+"		8086 1078  PRO/1000 MT Network Connection",
+"	1079  82546GB Gigabit Ethernet Controller",
+"		103c 12a6  HP Dual Port 1000Base-T [A9900A]",
+"		103c 12cf  HP Core Dual Port 1000Base-T [AB352A]",
+"		1fc1 0027  Niagara 2261 Failover NIC",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"		4c53 10b0  CL9 mainboard",
+"		8086 0079  PRO/1000 MT Dual Port Network Connection",
+"		8086 1079  PRO/1000 MT Dual Port Network Connection",
+"		8086 1179  PRO/1000 MT Dual Port Network Connection",
+"		8086 117a  PRO/1000 MT Dual Port Server Adapter",
+"	107a  82546GB Gigabit Ethernet Controller",
+"		103c 12a8  HP Dual Port 1000base-SX [A9899A]",
+"		8086 107a  PRO/1000 MF Dual Port Server Adapter",
+"		8086 127a  PRO/1000 MF Dual Port Server Adapter",
+"	107b  82546GB Gigabit Ethernet Controller",
+"		8086 007b  PRO/1000 MB Dual Port Server Connection",
+"		8086 107b  PRO/1000 MB Dual Port Server Connection",
+"	107c  82541PI Gigabit Ethernet Controller",
+"	107d  82572EI Gigabit Ethernet Controller",
+"	107e  82572EI Gigabit Ethernet Controller",
+"	107f  82572EI Gigabit Ethernet Controller",
+"	1080  FA82537EP 56K V.92 Data/Fax Modem PCI",
+"	1081  Enterprise Southbridge LAN Copper",
+"	1082  Enterprise Southbridge LAN fiber",
+"	1083  Enterprise Southbridge LAN SERDES",
+"	1084  Enterprise Southbridge IDE Redirection",
+"	1085  Enterprise Southbridge Serial Port Redirection",
+"	1086  Enterprise Southbridge IPMI/KCS0",
+"	1087  Enterprise Southbridge UHCI Redirection",
+"	1089  Enterprise Southbridge BT",
+"	108a  82546EB Gigabit Ethernet Controller",
+"	108b  82573V Gigabit Ethernet Controller (Copper)",
+"	108c  82573E Gigabit Ethernet Controller (Copper)",
+"	108e  82573E KCS (Active Management)",
+"	108f  Intel(R) Active Management Technology - SOL",
+"	1092  Intel(R) PRO/100 VE Network Connection",
+"	1096  PRO/1000 EB Network Connection with I/O Acceleration",
+"	1097  Enterprise Southbridge DPT LAN fiber",
+"	1098  PRO/1000 EB Backplane Connection with I/O Acceleration",
+"	1099  82546GB Quad Port Server Adapter",
+"	109a  82573L Gigabit Ethernet Controller",
+"		17aa 207e  Thinkpad X60s",
+"	109b  82546GB PRO/1000 GF Quad Port Server Adapter",
+"	10a0  82571EB PRO/1000 AT Quad Port Bypass Adapter",
+"	10a1  82571EB PRO/1000 AF Quad Port Bypass Adapter",
+"	10b0  82573L PRO/1000 PL Network Connection",
+"	10b2  82573V PRO/1000 PM Network Connection",
+"	10b3  82573E PRO/1000 PM Network Connection",
+"	10b4  82573L PRO/1000 PL Network Connection",
+"	10b5  82546GB PRO/1000 GT Quad Port Server Adapter",
+"		103c 3109  NC340T PCI-X Quad-port Gigabit Server Adapter",
+"	1107  PRO/1000 MF Server Adapter (LX)",
+"	1130  82815 815 Chipset Host Bridge and Memory Controller Hub",
+"		1025 1016  Travelmate 612 TX",
+"		1043 8027  TUSL2-C Mainboard",
+"		104d 80df  Vaio PCG-FX403",
+"		8086 4532  D815EEA2 mainboard",
+"		8086 4557  D815EGEW Mainboard",
+"	1131  82815 815 Chipset AGP Bridge",
+"	1132  82815 CGC [Chipset Graphics Controller]",
+"		1025 1016  Travelmate 612 TX",
+"		104d 80df  Vaio PCG-FX403",
+"		8086 4532  D815EEA2 Mainboard",
+"		8086 4541  D815EEA Motherboard",
+"		8086 4557  D815EGEW Mainboard",
+"	1161  82806AA PCI64 Hub Advanced Programmable Interrupt Controller",
+"		8086 1161  82806AA PCI64 Hub APIC",
+"	1162  Xscale 80200 Big Endian Companion Chip",
+"	1200  Intel IXP1200 Network Processor",
+"		172a 0000  AEP SSL Accelerator",
+"	1209  8255xER/82551IT Fast Ethernet Controller",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1051  CE7 mainboard",
+"		4c53 1070  PC6 mainboard",
+"	1221  82092AA PCI to PCMCIA Bridge",
+"	1222  82092AA IDE Controller",
+"	1223  SAA7116",
+"	1225  82452KX/GX [Orion]",
+"	1226  82596 PRO/10 PCI",
+"	1227  82865 EtherExpress PRO/100A",
+"	1228  82556 EtherExpress PRO/100 Smart",
+"	1229  82557/8/9 [Ethernet Pro 100]",
+"		0e11 3001  82559 Fast Ethernet LOM with Alert on LAN*",
+"		0e11 3002  82559 Fast Ethernet LOM with Alert on LAN*",
+"		0e11 3003  82559 Fast Ethernet LOM with Alert on LAN*",
+"		0e11 3004  82559 Fast Ethernet LOM with Alert on LAN*",
+"		0e11 3005  82559 Fast Ethernet LOM with Alert on LAN*",
+"		0e11 3006  82559 Fast Ethernet LOM with Alert on LAN*",
+"		0e11 3007  82559 Fast Ethernet LOM with Alert on LAN*",
+"		0e11 b01e  NC3120 Fast Ethernet NIC",
+"		0e11 b01f  NC3122 Fast Ethernet NIC (dual port)",
+"		0e11 b02f  NC1120 Ethernet NIC",
+"		0e11 b04a  Netelligent 10/100TX NIC with Wake on LAN",
+"		0e11 b0c6  NC3161 Fast Ethernet NIC (embedded, WOL)",
+"		0e11 b0c7  NC3160 Fast Ethernet NIC (embedded)",
+"		0e11 b0d7  NC3121 Fast Ethernet NIC (WOL)",
+"		0e11 b0dd  NC3131 Fast Ethernet NIC (dual port)",
+"		0e11 b0de  NC3132 Fast Ethernet Module (dual port)",
+"		0e11 b0e1  NC3133 Fast Ethernet Module (100-FX)",
+"		0e11 b134  NC3163 Fast Ethernet NIC (embedded, WOL)",
+"		0e11 b13c  NC3162 Fast Ethernet NIC (embedded)",
+"		0e11 b144  NC3123 Fast Ethernet NIC (WOL)",
+"		0e11 b163  NC3134 Fast Ethernet NIC (dual port)",
+"		0e11 b164  NC3135 Fast Ethernet Upgrade Module (dual port)",
+"		0e11 b1a4  NC7131 Gigabit Server Adapter",
+"		1014 005c  82558B Ethernet Pro 10/100",
+"		1014 01bc  82559 Fast Ethernet LAN On Motherboard",
+"		1014 01f1  10/100 Ethernet Server Adapter",
+"		1014 01f2  10/100 Ethernet Server Adapter",
+"		1014 0207  Ethernet Pro/100 S",
+"		1014 0232  10/100 Dual Port Server Adapter",
+"		1014 023a  ThinkPad R30",
+"		1014 105c  Netfinity 10/100",
+"		1014 2205  ThinkPad A22p",
+"		1014 305c  10/100 EtherJet Management Adapter",
+"		1014 405c  10/100 EtherJet Adapter with Alert on LAN",
+"		1014 505c  10/100 EtherJet Secure Management Adapter",
+"		1014 605c  10/100 EtherJet Secure Management Adapter",
+"		1014 705c  10/100 Netfinity 10/100 Ethernet Security Adapter",
+"		1014 805c  10/100 Netfinity 10/100 Ethernet Security Adapter",
+"		1028 009b  PowerEdge 2500/2550",
+"		1028 00ce  PowerEdge 1400",
+"		1033 8000  PC-9821X-B06",
+"		1033 8016  PK-UG-X006",
+"		1033 801f  PK-UG-X006",
+"		1033 8026  PK-UG-X006",
+"		1033 8063  82559-based Fast Ethernet Adapter",
+"		1033 8064  82559-based Fast Ethernet Adapter",
+"		103c 10c0  NetServer 10/100TX",
+"		103c 10c3  NetServer 10/100TX",
+"		103c 10ca  NetServer 10/100TX",
+"		103c 10cb  NetServer 10/100TX",
+"		103c 10e3  NetServer 10/100TX",
+"		103c 10e4  NetServer 10/100TX",
+"		103c 1200  NetServer 10/100TX",
+"		108e 10cf  EtherExpress PRO/100(B)",
+"		10c3 1100  SmartEther100 SC1100",
+"		10cf 1115  8255x-based Ethernet Adapter (10/100)",
+"		10cf 1143  8255x-based Ethernet Adapter (10/100)",
+"		110a 008b  82551QM Fast Ethernet Multifuction PCI/CardBus Controller",
+"		1179 0001  8255x-based Ethernet Adapter (10/100)",
+"		1179 0002  PCI FastEther LAN on Docker",
+"		1179 0003  8255x-based Fast Ethernet",
+"		1259 2560  AT-2560 100",
+"		1259 2561  AT-2560 100 FX Ethernet Adapter",
+"		1266 0001  NE10/100 Adapter",
+"		13e9 1000  6221L-4U",
+"		144d 2501  SEM-2000 MiniPCI LAN Adapter",
+"		144d 2502  SEM-2100IL MiniPCI LAN Adapter",
+"		1668 1100  EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)",
+"		4c53 1080  CT8 mainboard",
+"		4c53 10e0  PSL09 PrPMC",
+"		8086 0001  EtherExpress PRO/100B (TX)",
+"		8086 0002  EtherExpress PRO/100B (T4)",
+"		8086 0003  EtherExpress PRO/10+",
+"		8086 0004  EtherExpress PRO/100 WfM",
+"		8086 0005  82557 10/100",
+"		8086 0006  82557 10/100 with Wake on LAN",
+"		8086 0007  82558 10/100 Adapter",
+"		8086 0008  82558 10/100 with Wake on LAN",
+"		8086 000a  EtherExpress PRO/100+ Management Adapter",
+"		8086 000b  EtherExpress PRO/100+",
+"		8086 000c  EtherExpress PRO/100+ Management Adapter",
+"		8086 000d  EtherExpress PRO/100+ Alert On LAN II* Adapter",
+"		8086 000e  EtherExpress PRO/100+ Management Adapter with Alert On LAN*",
+"		8086 000f  EtherExpress PRO/100 Desktop Adapter",
+"		8086 0010  EtherExpress PRO/100 S Management Adapter",
+"		8086 0011  EtherExpress PRO/100 S Management Adapter",
+"		8086 0012  EtherExpress PRO/100 S Advanced Management Adapter (D)",
+"		8086 0013  EtherExpress PRO/100 S Advanced Management Adapter (E)",
+"		8086 0030  EtherExpress PRO/100  Management Adapter with Alert On LAN* GC",
+"		8086 0031  EtherExpress PRO/100 Desktop Adapter",
+"		8086 0040  EtherExpress PRO/100 S Desktop Adapter",
+"		8086 0041  EtherExpress PRO/100 S Desktop Adapter",
+"		8086 0042  EtherExpress PRO/100 Desktop Adapter",
+"		8086 0050  EtherExpress PRO/100 S Desktop Adapter",
+"		8086 1009  EtherExpress PRO/100+ Server Adapter",
+"		8086 100c  EtherExpress PRO/100+ Server Adapter (PILA8470B)",
+"		8086 1012  EtherExpress PRO/100 S Server Adapter (D)",
+"		8086 1013  EtherExpress PRO/100 S Server Adapter (E)",
+"		8086 1015  EtherExpress PRO/100 S Dual Port Server Adapter",
+"		8086 1017  EtherExpress PRO/100+ Dual Port Server Adapter",
+"		8086 1030  EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server",
+"		8086 1040  EtherExpress PRO/100 S Server Adapter",
+"		8086 1041  EtherExpress PRO/100 S Server Adapter",
+"		8086 1042  EtherExpress PRO/100 Server Adapter",
+"		8086 1050  EtherExpress PRO/100 S Server Adapter",
+"		8086 1051  EtherExpress PRO/100 Server Adapter",
+"		8086 1052  EtherExpress PRO/100 Server Adapter",
+"		8086 10f0  EtherExpress PRO/100+ Dual Port Adapter",
+"		8086 2009  EtherExpress PRO/100 S Mobile Adapter",
+"		8086 200d  EtherExpress PRO/100 Cardbus",
+"		8086 200e  EtherExpress PRO/100 LAN+V90 Cardbus Modem",
+"		8086 200f  EtherExpress PRO/100 SR Mobile Adapter",
+"		8086 2010  EtherExpress PRO/100 S Mobile Combo Adapter",
+"		8086 2013  EtherExpress PRO/100 SR Mobile Combo Adapter",
+"		8086 2016  EtherExpress PRO/100 S Mobile Adapter",
+"		8086 2017  EtherExpress PRO/100 S Combo Mobile Adapter",
+"		8086 2018  EtherExpress PRO/100 SR Mobile Adapter",
+"		8086 2019  EtherExpress PRO/100 SR Combo Mobile Adapter",
+"		8086 2101  EtherExpress PRO/100 P Mobile Adapter",
+"		8086 2102  EtherExpress PRO/100 SP Mobile Adapter",
+"		8086 2103  EtherExpress PRO/100 SP Mobile Adapter",
+"		8086 2104  EtherExpress PRO/100 SP Mobile Adapter",
+"		8086 2105  EtherExpress PRO/100 SP Mobile Adapter",
+"		8086 2106  EtherExpress PRO/100 P Mobile Adapter",
+"		8086 2107  EtherExpress PRO/100 Network Connection",
+"		8086 2108  EtherExpress PRO/100 Network Connection",
+"		8086 2200  EtherExpress PRO/100 P Mobile Combo Adapter",
+"		8086 2201  EtherExpress PRO/100 P Mobile Combo Adapter",
+"		8086 2202  EtherExpress PRO/100 SP Mobile Combo Adapter",
+"		8086 2203  EtherExpress PRO/100+ MiniPCI",
+"		8086 2204  EtherExpress PRO/100+ MiniPCI",
+"		8086 2205  EtherExpress PRO/100 SP Mobile Combo Adapter",
+"		8086 2206  EtherExpress PRO/100 SP Mobile Combo Adapter",
+"		8086 2207  EtherExpress PRO/100 SP Mobile Combo Adapter",
+"		8086 2208  EtherExpress PRO/100 P Mobile Combo Adapter",
+"		8086 2402  EtherExpress PRO/100+ MiniPCI",
+"		8086 2407  EtherExpress PRO/100+ MiniPCI",
+"		8086 2408  EtherExpress PRO/100+ MiniPCI",
+"		8086 2409  EtherExpress PRO/100+ MiniPCI",
+"		8086 240f  EtherExpress PRO/100+ MiniPCI",
+"		8086 2410  EtherExpress PRO/100+ MiniPCI",
+"		8086 2411  EtherExpress PRO/100+ MiniPCI",
+"		8086 2412  EtherExpress PRO/100+ MiniPCI",
+"		8086 2413  EtherExpress PRO/100+ MiniPCI",
+"		8086 3000  82559 Fast Ethernet LAN on Motherboard",
+"		8086 3001  82559 Fast Ethernet LOM with Basic Alert on LAN*",
+"		8086 3002  82559 Fast Ethernet LOM with Alert on LAN II*",
+"		8086 3006  EtherExpress PRO/100 S Network Connection",
+"		8086 3007  EtherExpress PRO/100 S Network Connection",
+"		8086 3008  EtherExpress PRO/100 Network Connection",
+"		8086 3010  EtherExpress PRO/100 S Network Connection",
+"		8086 3011  EtherExpress PRO/100 S Network Connection",
+"		8086 3012  EtherExpress PRO/100 Network Connection",
+"		8086 3411  SDS2 Mainboard",
+"	122d  430FX - 82437FX TSC [Triton I]",
+"	122e  82371FB PIIX ISA [Triton I]",
+"	1230  82371FB PIIX IDE [Triton I]",
+"	1231  DSVD Modem",
+"	1234  430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)",
+"	1235  430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP)",
+"	1237  440FX - 82441FX PMC [Natoma]",
+"	1239  82371FB PIIX IDE Interface",
+"	123b  82380PB PCI to PCI Docking Bridge",
+"	123c  82380AB (MISA) Mobile PCI-to-ISA Bridge",
+"	123d  683053 Programmable Interrupt Device",
+"	123e  82466GX (IHPC) Integrated Hot-Plug Controller",
+"	123f  82466GX Integrated Hot-Plug Controller (IHPC)",
+"	1240  82752 (752) AGP Graphics Accelerator",
+"	124b  82380FB (MPCI2) Mobile Docking Controller",
+"	1250  430HX - 82439HX TXC [Triton II]",
+"	1360  82806AA PCI64 Hub PCI Bridge",
+"	1361  82806AA PCI64 Hub Controller (HRes)",
+"		8086 1361  82806AA PCI64 Hub Controller (HRes)",
+"		8086 8000  82806AA PCI64 Hub Controller (HRes)",
+"	1460  82870P2 P64H2 Hub PCI Bridge",
+"	1461  82870P2 P64H2 I/OxAPIC",
+"		15d9 3480  P4DP6",
+"		4c53 1090  Cx9/Vx9 mainboard",
+"	1462  82870P2 P64H2 Hot Plug Controller",
+"	1960  80960RP [i960RP Microprocessor]",
+"		101e 0431  MegaRAID 431 RAID Controller",
+"		101e 0438  MegaRAID 438 Ultra2 LVD RAID Controller",
+"		101e 0466  MegaRAID 466 Express Plus RAID Controller",
+"		101e 0467  MegaRAID 467 Enterprise 1500 RAID Controller",
+"		101e 0490  MegaRAID 490 Express 300 RAID Controller",
+"		101e 0762  MegaRAID 762 Express RAID Controller",
+"		101e 09a0  PowerEdge Expandable RAID Controller 2/SC",
+"		1028 0467  PowerEdge Expandable RAID Controller 2/DC",
+"		1028 1111  PowerEdge Expandable RAID Controller 2/SC",
+"		103c 03a2  MegaRAID",
+"		103c 10c6  MegaRAID 438, HP NetRAID-3Si",
+"		103c 10c7  MegaRAID T5, Integrated HP NetRAID",
+"		103c 10cc  MegaRAID, Integrated HP NetRAID",
+"		103c 10cd  HP NetRAID-1Si",
+"		105a 0000  SuperTrak",
+"		105a 2168  SuperTrak Pro",
+"		105a 5168  SuperTrak66/100",
+"		1111 1111  MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC",
+"		1111 1112  PowerEdge Expandable RAID Controller 2/SC",
+"		113c 03a2  MegaRAID",
+"		e4bf 1010  CG1-RADIO",
+"		e4bf 1020  CU2-QUARTET",
+"		e4bf 1040  CU1-CHORUS",
+"		e4bf 3100  CX1-BAND",
+"	1962  80960RM [i960RM Microprocessor]",
+"		105a 0000  SuperTrak SX6000 I2O CPU",
+"	1a21  82840 840 (Carmel) Chipset Host Bridge (Hub A)",
+"	1a23  82840 840 (Carmel) Chipset AGP Bridge",
+"	1a24  82840 840 (Carmel) Chipset PCI Bridge (Hub B)",
+"	1a30  82845 845 (Brookdale) Chipset Host Bridge",
+"		1028 010e  Optiplex GX240",
+"	1a31  82845 845 (Brookdale) Chipset AGP Bridge",
+"	1a38  Server DMA Engine",
+"	1a48  PRO/10GbE SR Server Adapter",
+"	2410  82801AA ISA Bridge (LPC)",
+"	2411  82801AA IDE",
+"	2412  82801AA USB",
+"	2413  82801AA SMBus",
+"	2415  82801AA AC'97 Audio",
+"		1028 0095  Precision Workstation 220 Integrated Digital Audio",
+"		110a 0051  Activy 2xx",
+"		11d4 0040  SoundMAX Integrated Digital Audio",
+"		11d4 0048  SoundMAX Integrated Digital Audio",
+"		11d4 5340  SoundMAX Integrated Digital Audio",
+"		1734 1025  Activy 3xx",
+"	2416  82801AA AC'97 Modem",
+"	2418  82801AA PCI Bridge",
+"	2420  82801AB ISA Bridge (LPC)",
+"	2421  82801AB IDE",
+"	2422  82801AB USB",
+"	2423  82801AB SMBus",
+"	2425  82801AB AC'97 Audio",
+"		11d4 0040  SoundMAX Integrated Digital Audio",
+"		11d4 0048  SoundMAX Integrated Digital Audio",
+"	2426  82801AB AC'97 Modem",
+"	2428  82801AB PCI Bridge",
+"	2440  82801BA ISA Bridge (LPC)",
+"	2442  82801BA/BAM USB (Hub #1)",
+"		1014 01c6  Netvista A40/A40p",
+"		1025 1016  Travelmate 612 TX",
+"		1028 010e  Optiplex GX240",
+"		1043 8027  TUSL2-C Mainboard",
+"		104d 80df  Vaio PCG-FX403",
+"		147b 0507  TH7II-RAID",
+"		8086 4532  D815EEA2 mainboard",
+"		8086 4557  D815EGEW Mainboard",
+"	2443  82801BA/BAM SMBus",
+"		1014 01c6  Netvista A40/A40p",
+"		1025 1016  Travelmate 612 TX",
+"		1028 010e  Optiplex GX240",
+"		1043 8027  TUSL2-C Mainboard",
+"		104d 80df  Vaio PCG-FX403",
+"		147b 0507  TH7II-RAID",
+"		8086 4532  D815EEA2 mainboard",
+"		8086 4557  D815EGEW Mainboard",
+"	2444  82801BA/BAM USB (Hub #2)",
+"		1025 1016  Travelmate 612 TX",
+"		1028 010e  Optiplex GX240",
+"		1043 8027  TUSL2-C Mainboard",
+"		104d 80df  Vaio PCG-FX403",
+"		147b 0507  TH7II-RAID",
+"		8086 4532  D815EEA2 mainboard",
+"	2445  82801BA/BAM AC'97 Audio",
+"		0e11 0088  Evo D500",
+"		1014 01c6  Netvista A40/A40p",
+"		1025 1016  Travelmate 612 TX",
+"		104d 80df  Vaio PCG-FX403",
+"		1462 3370  STAC9721 AC",
+"		147b 0507  TH7II-RAID",
+"		8086 4557  D815EGEW Mainboard",
+"	2446  82801BA/BAM AC'97 Modem",
+"		1025 1016  Travelmate 612 TX",
+"		104d 80df  Vaio PCG-FX403",
+"	2448  82801 Mobile PCI Bridge",
+"		103c 099c  NX6110/NC6120",
+"		1734 1055  Amilo M1420",
+"	2449  82801BA/BAM/CA/CAM Ethernet Controller",
+"		0e11 0012  EtherExpress PRO/100 VM",
+"		0e11 0091  EtherExpress PRO/100 VE",
+"		1014 01ce  EtherExpress PRO/100 VE",
+"		1014 01dc  EtherExpress PRO/100 VE",
+"		1014 01eb  EtherExpress PRO/100 VE",
+"		1014 01ec  EtherExpress PRO/100 VE",
+"		1014 0202  EtherExpress PRO/100 VE",
+"		1014 0205  EtherExpress PRO/100 VE",
+"		1014 0217  EtherExpress PRO/100 VE",
+"		1014 0234  EtherExpress PRO/100 VE",
+"		1014 023d  EtherExpress PRO/100 VE",
+"		1014 0244  EtherExpress PRO/100 VE",
+"		1014 0245  EtherExpress PRO/100 VE",
+"		1014 0265  PRO/100 VE Desktop Connection",
+"		1014 0267  PRO/100 VE Desktop Connection",
+"		1014 026a  PRO/100 VE Desktop Connection",
+"		109f 315d  EtherExpress PRO/100 VE",
+"		109f 3181  EtherExpress PRO/100 VE",
+"		1179 ff01  PRO/100 VE Network Connection",
+"		1186 7801  EtherExpress PRO/100 VE",
+"		144d 2602  HomePNA 1M CNR",
+"		8086 3010  EtherExpress PRO/100 VE",
+"		8086 3011  EtherExpress PRO/100 VM",
+"		8086 3012  82562EH based Phoneline",
+"		8086 3013  EtherExpress PRO/100 VE",
+"		8086 3014  EtherExpress PRO/100 VM",
+"		8086 3015  82562EH based Phoneline",
+"		8086 3016  EtherExpress PRO/100 P Mobile Combo",
+"		8086 3017  EtherExpress PRO/100 P Mobile",
+"		8086 3018  EtherExpress PRO/100",
+"	244a  82801BAM IDE U100",
+"		1025 1016  Travelmate 612TX",
+"		104d 80df  Vaio PCG-FX403",
+"	244b  82801BA IDE U100",
+"		1014 01c6  Netvista A40/A40p",
+"		1028 010e  Optiplex GX240",
+"		1043 8027  TUSL2-C Mainboard",
+"		147b 0507  TH7II-RAID",
+"		8086 4532  D815EEA2 mainboard",
+"		8086 4557  D815EGEW Mainboard",
+"	244c  82801BAM ISA Bridge (LPC)",
+"	244e  82801 PCI Bridge",
+"		1014 0267  NetVista A30p",
+"	2450  82801E ISA Bridge (LPC)",
+"	2452  82801E USB",
+"	2453  82801E SMBus",
+"	2459  82801E Ethernet Controller 0",
+"	245b  82801E IDE U100",
+"	245d  82801E Ethernet Controller 1",
+"	245e  82801E PCI Bridge",
+"	2480  82801CA LPC Interface Controller",
+"	2482  82801CA/CAM USB (Hub #1)",
+"		0e11 0030  Evo N600c",
+"		1014 0220  ThinkPad A/T/X Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		15d9 3480  P4DP6",
+"		8086 1958  vpr Matrix 170B4",
+"		8086 3424  SE7501HG2 Mainboard",
+"		8086 4541  Latitude C640",
+"	2483  82801CA/CAM SMBus Controller",
+"		1014 0220  ThinkPad A/T/X Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		15d9 3480  P4DP6",
+"		8086 1958  vpr Matrix 170B4",
+"	2484  82801CA/CAM USB (Hub #2)",
+"		0e11 0030  Evo N600c",
+"		1014 0220  ThinkPad A/T/X Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		15d9 3480  P4DP6",
+"		8086 1958  vpr Matrix 170B4",
+"	2485  82801CA/CAM AC'97 Audio Controller",
+"		1013 5959  Crystal WMD Audio Codec",
+"		1014 0222  ThinkPad T23 (2647-4MG) or A30/A30p (2652/2653)",
+"		1014 0508  ThinkPad T30",
+"		1014 051c  ThinkPad A/T/X Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		144d c006  vpr Matrix 170B4",
+"	2486  82801CA/CAM AC'97 Modem Controller",
+"		1014 0223  ThinkPad A/T/X Series",
+"		1014 0503  ThinkPad R31 2656BBG",
+"		1014 051a  ThinkPad A/T/X Series",
+"		101f 1025  620 Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		134d 4c21  Dell Inspiron 2100 internal modem",
+"		144d 2115  vpr Matrix 170B4 internal modem",
+"		14f1 5421  MD56ORD V.92 MDC Modem",
+"	2487  82801CA/CAM USB (Hub #3)",
+"		0e11 0030  Evo N600c",
+"		1014 0220  ThinkPad A/T/X Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		15d9 3480  P4DP6",
+"		8086 1958  vpr Matrix 170B4",
+"	248a  82801CAM IDE U100",
+"		0e11 0030  Evo N600c",
+"		1014 0220  ThinkPad A/T/X Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"		8086 1958  vpr Matrix 170B4",
+"		8086 4541  Latitude C640",
+"	248b  82801CA Ultra ATA Storage Controller",
+"		15d9 3480  P4DP6",
+"	248c  82801CAM ISA Bridge (LPC)",
+"	24c0  82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge",
+"		1014 0267  NetVista A30p",
+"		1462 5800  845PE Max (MS-6580)",
+"	24c1  82801DBL (ICH4-L) IDE Controller",
+"	24c2  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1",
+"		1014 0267  NetVista A30p",
+"		1025 005a  TravelMate 290",
+"		1028 0126  Optiplex GX260",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"		1462 5800  845PE Max (MS-6580)",
+"		1509 2990  Averatec 5110H laptop",
+"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
+"		1734 1055  Amilo M1420",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"		8086 4541  Latitude D400",
+"	24c3  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller",
+"		1014 0267  NetVista A30p",
+"		1025 005a  TravelMate 290",
+"		1028 0126  Optiplex GX260",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"		1458 24c2  GA-8PE667 Ultra",
+"		1462 5800  845PE Max (MS-6580)",
+"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
+"		1734 1055  Amilo M1420",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"	24c4  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2",
+"		1014 0267  NetVista A30p",
+"		1025 005a  TravelMate 290",
+"		1028 0126  Optiplex GX260",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"		1462 5800  845PE Max (MS-6580)",
+"		1509 2990  Averatec 5110H",
+"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"		8086 4541  Latitude D400",
+"	24c5  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller",
+"		0e11 00b8  Analog Devices Inc. codec [SoundMAX]",
+"		1014 0267  NetVista A30p",
+"		1025 005a  TravelMate 290",
+"		1028 0139  Latitude D400",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"		1458 a002  GA-8PE667 Ultra",
+"		1462 5800  845PE Max (MS-6580)",
+"		1734 1005  D1451 (SCENIC N300, i845GV) Sigmatel STAC9750T",
+"		1734 1055  Amilo M1420",
+"	24c6  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller",
+"		1025 003c  Aspire 2001WLCi (Compal CL50 motherboard) implementation",
+"		1025 005a  TravelMate 290",
+"		1028 0196  Inspiron 5160",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"	24c7  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3",
+"		1014 0267  NetVista A30p",
+"		1025 005a  TravelMate 290",
+"		1028 0126  Optiplex GX260",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"		1462 5800  845PE Max (MS-6580)",
+"		1509 2990  Averatec 5110H",
+"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"		8086 4541  Latitude D400",
+"	24ca  82801DBM (ICH4-M) IDE Controller",
+"		1025 005a  TravelMate 290",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"		1734 1055  Amilo M1420",
+"		8086 4541  Latitude D400",
+"	24cb  82801DB (ICH4) IDE Controller",
+"		1014 0267  NetVista A30p",
+"		1028 0126  Optiplex GX260",
+"		1458 24c2  GA-8PE667 Ultra",
+"		1462 5800  845PE Max (MS-6580)",
+"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"	24cc  82801DBM (ICH4-M) LPC Interface Bridge",
+"		1734 1055  Amilo M1420",
+"	24cd  82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller",
+"		1014 0267  NetVista A30p",
+"		1025 005a  TravelMate 290",
+"		1028 011d  Latitude D600",
+"		1028 0126  Optiplex GX260",
+"		1028 0139  Latitude D400",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"		1071 8160  MIM2000",
+"		1462 3981  845PE Max (MS-6580)",
+"		1509 1968  Averatec 5110H",
+"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
+"		1734 1055  Amilo M1420",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"	24d0  82801EB/ER (ICH5/ICH5R) LPC Interface Bridge",
+"	24d1  82801EB (ICH5) SATA Controller",
+"		1028 0169  Precision 470",
+"		1028 019a  PowerEdge SC1425",
+"		103c 12bc  d530 CMT (DG746A)",
+"		1043 80a6  P4P800 SE Mainboard",
+"		1458 24d1  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		15d9 4580  P4SCE Mainboard",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24d2  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1",
+"		1014 02ed  xSeries server mainboard",
+"		1028 0169  Precision 470",
+"		1028 0183  PowerEdge 1800",
+"		1028 019a  PowerEdge SC1425",
+"		103c 006a  NX9500",
+"		103c 12bc  d530 CMT (DG746A)",
+"		1043 80a6  P5P800-MX Mainboard",
+"		1458 24d2  GA-8IPE1000/8KNXP motherboard",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		15d9 4580  P4SCE Mainboard",
+"		1734 101c  Primergy RX300 S2",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24d3  82801EB/ER (ICH5/ICH5R) SMBus Controller",
+"		1014 02ed  xSeries server mainboard",
+"		1028 0156  Precision 360",
+"		1028 0169  Precision 470",
+"		1043 80a6  P4P800 Mainboard",
+"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		15d9 4580  P4SCE Mainboard",
+"		1734 101c  Primergy RX300 S2",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24d4  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2",
+"		1014 02ed  xSeries server mainboard",
+"		1028 0169  Precision 470",
+"		1028 0183  PowerEdge 1800",
+"		1028 019a  PowerEdge SC1425",
+"		103c 006a  NX9500",
+"		103c 12bc  d530 CMT (DG746A)",
+"		1043 80a6  P5P800-MX Mainboard",
+"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		15d9 4580  P4SCE Mainboard",
+"		1734 101c  Primergy RX300 S2",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24d5  82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller",
+"		1028 0169  Precision 470",
+"		103c 006a  NX9500",
+"		103c 12bc  d330 uT",
+"		1043 80f3  P4P800 Mainboard",
+"		1043 810f  P5P800-MX Mainboard",
+"		1458 a002  GA-8IPE1000/8KNXP motherboard",
+"		1462 0080  65PE Neo2-V (MS-6788) mainboard",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		8086 a000  D865PERL mainboard",
+"		8086 e000  D865PERL mainboard",
+"		8086 e001  Desktop Board D865GBF",
+"	24d6  82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller",
+"		103c 006a  NX9500",
+"	24d7  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3",
+"		1014 02ed  xSeries server mainboard",
+"		1028 0169  Precision 470",
+"		1028 0183  PowerEdge 1800",
+"		103c 006a  NX9500",
+"		103c 12bc  d530 CMT (DG746A)",
+"		1043 80a6  P5P800-MX Mainboard",
+"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		15d9 4580  P4SCE Mainboard",
+"		1734 101c  Primergy RX300 S2",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24db  82801EB/ER (ICH5/ICH5R) IDE Controller",
+"		1014 02ed  xSeries server mainboard",
+"		1028 0169  Precision 470",
+"		1028 019a  PowerEdge SC1425",
+"		103c 006a  NX9500",
+"		103c 12bc  d530 CMT (DG746A)",
+"		1043 80a6  P5P800-MX Mainboard",
+"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		1462 7580  MSI 875P",
+"		15d9 4580  P4SCE Mainboard",
+"		1734 101c  Primergy RX300 S2",
+"		8086 24db  P4C800 Mainboard",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24dc  82801EB (ICH5) LPC Interface Bridge",
+"	24dd  82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller",
+"		1014 02ed  xSeries server mainboard",
+"		1028 0169  Precision 470",
+"		1028 0183  PowerEdge 1800",
+"		1028 019a  PowerEdge SC1425",
+"		103c 006a  NX9500",
+"		103c 12bc  d530 CMT (DG746A)",
+"		1043 80a6  P5P800-MX Mainboard",
+"		1458 5006  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24de  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4",
+"		1014 02ed  xSeries server mainboard",
+"		1028 0169  Precision 470",
+"		1043 80a6  P5P800-MX Mainboard",
+"		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)",
+"		1462 7280  865PE Neo2 (MS-6728)",
+"		15d9 4580  P4SCE Mainboard",
+"		1734 101c  Primergy RX300 S2",
+"		8086 3427  S875WP1-E mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"		8086 524c  D865PERL mainboard",
+"	24df  82801ER (ICH5R) SATA Controller",
+"	2500  82820 820 (Camino) Chipset Host Bridge (MCH)",
+"		1028 0095  Precision Workstation 220 Chipset",
+"		1043 801c  P3C-2000 system chipset",
+"	2501  82820 820 (Camino) Chipset Host Bridge (MCH)",
+"		1043 801c  P3C-2000 system chipset",
+"	250b  82820 820 (Camino) Chipset Host Bridge",
+"	250f  82820 820 (Camino) Chipset AGP Bridge",
+"	2520  82805AA MTH Memory Translator Hub",
+"	2521  82804AA MRH-S Memory Repeater Hub for SDRAM",
+"	2530  82850 850 (Tehama) Chipset Host Bridge (MCH)",
+"		147b 0507  TH7II-RAID",
+"	2531  82860 860 (Wombat) Chipset Host Bridge (MCH)",
+"	2532  82850 850 (Tehama) Chipset AGP Bridge",
+"	2533  82860 860 (Wombat) Chipset AGP Bridge",
+"	2534  82860 860 (Wombat) Chipset PCI Bridge",
+"	2540  E7500 Memory Controller Hub",
+"		15d9 3480  P4DP6",
+"	2541  E7500/E7501 Host RASUM Controller",
+"		15d9 3480  P4DP6",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"		8086 3424  SE7501HG2 Mainboard",
+"	2543  E7500/E7501 Hub Interface B PCI-to-PCI Bridge",
+"	2544  E7500/E7501 Hub Interface B RASUM Controller",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"	2545  E7500/E7501 Hub Interface C PCI-to-PCI Bridge",
+"	2546  E7500/E7501 Hub Interface C RASUM Controller",
+"	2547  E7500/E7501 Hub Interface D PCI-to-PCI Bridge",
+"	2548  E7500/E7501 Hub Interface D RASUM Controller",
+"	254c  E7501 Memory Controller Hub",
+"		4c53 1090  Cx9 / Vx9 mainboard",
+"		8086 3424  SE7501HG2 Mainboard",
+"	2550  E7505 Memory Controller Hub",
+"	2551  E7505/E7205 Series RAS Controller",
+"	2552  E7505/E7205 PCI-to-AGP Bridge",
+"	2553  E7505 Hub Interface B PCI-to-PCI Bridge",
+"	2554  E7505 Hub Interface B PCI-to-PCI Bridge RAS Controller",
+"	255d  E7205 Memory Controller Hub",
+"	2560  82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface",
+"		1028 0126  Optiplex GX260",
+"		1458 2560  GA-8PE667 Ultra",
+"		1462 5800  845PE Max (MS-6580)",
+"	2561  82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge",
+"	2562  82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device",
+"		0e11 00b9  Evo D510 SFF",
+"		1014 0267  NetVista A30p",
+"		1734 1004  D1451 Mainboard (SCENIC N300, i845GV)",
+"	2570  82865G/PE/P DRAM Controller/Host-Hub Interface",
+"		103c 006a  NX9500",
+"		1043 80f2  P5P800-MX Mainboard",
+"		1458 2570  GA-8IPE1000 Pro2 motherboard (865PE)",
+"	2571  82865G/PE/P PCI to AGP Controller",
+"	2572  82865G Integrated Graphics Controller",
+"		1028 019d  Dimension 3000",
+"		103c 12bc  D530 sff(dc578av)",
+"		1043 80a5  P5P800-MX Mainboard",
+"		8086 4246  Desktop Board D865GBF",
+"	2573  82865G/PE/P PCI to CSA Bridge",
+"	2576  82865G/PE/P Processor to I/O Memory Interface",
+"	2578  82875P/E7210 Memory Controller Hub",
+"		1458 2578  GA-8KNXP motherboard (875P)",
+"		1462 7580  MS-6758 (875P Neo)",
+"		15d9 4580  P4SCE Motherboard",
+"	2579  82875P Processor to AGP Controller",
+"	257b  82875P/E7210 Processor to PCI to CSA Bridge",
+"	257e  82875P/E7210 Processor to I/O Memory Interface",
+"	2580  915G/P/GV/GL/PL/910GL Express Memory Controller Hub",
+"		1458 2580  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105b  Scenic W620",
+"	2581  915G/P/GV/GL/PL/910GL Express PCI Express Root Port",
+"	2582  82915G/GV/910GL Express Chipset Family Graphics Controller",
+"		1028 1079  Optiplex GX280",
+"		103c 3006  DC7100 SFF(DX878AV)",
+"		1043 2582  P5GD1-VW Mainboard",
+"		1458 2582  GA-8I915ME-G Mainboard",
+"		1734 105b  Scenic W620",
+"	2584  925X/XE Express Memory Controller Hub",
+"	2585  925X/XE Express PCI Express Root Port",
+"	2588  E7220/E7221 Memory Controller Hub",
+"	2589  E7220/E7221 PCI Express Root Port",
+"	258a  E7221 Integrated Graphics Controller",
+"	2590  Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller",
+"		1028 0182  Dell Latidude C610",
+"		103c 099c  NX6110/NC6120",
+"		a304 81b7  Vaio VGN-S3XP",
+"	2591  Mobile 915GM/PM Express PCI Express Root Port",
+"	2592  Mobile 915GM/GMS/910GML Express Graphics Controller",
+"		103c 099c  NX6110/NC6120",
+"		103c 308a  NC6220",
+"		1043 1881  GMA 900 915GM Integrated Graphics",
+"	25a1  6300ESB LPC Interface Controller",
+"	25a2  6300ESB PATA Storage Controller",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10e0  PSL09 PrPMC",
+"	25a3  6300ESB SATA Storage Controller",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"		4c53 10e0  PSL09 PrPMC",
+"	25a4  6300ESB SMBus Controller",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"		4c53 10e0  PSL09 PrPMC",
+"	25a6  6300ESB AC'97 Audio Controller",
+"		4c53 10b0  CL9 mainboard",
+"	25a7  6300ESB AC'97 Modem Controller",
+"	25a9  6300ESB USB Universal Host Controller",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"		4c53 10e0  PSL09 PrPMC",
+"	25aa  6300ESB USB Universal Host Controller",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10e0  PSL09 PrPMC",
+"	25ab  6300ESB Watchdog Timer",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"		4c53 10e0  PSL09 PrPMC",
+"	25ac  6300ESB I/O Advanced Programmable Interrupt Controller",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"		4c53 10e0  PSL09 PrPMC",
+"	25ad  6300ESB USB2 Enhanced Host Controller",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"		4c53 10e0  PSL09 PrPMC",
+"	25ae  6300ESB 64-bit PCI-X Bridge",
+"	25b0  6300ESB SATA RAID Controller",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"		4c53 10e0  PSL09 PrPMC",
+"	25c0  Workstation Memory Controller Hub",
+"	25d0  Server Memory Controller Hub",
+"	25d4  Server Memory Contoller Hub",
+"	25d8  Server Memory Controller Hub",
+"	25e2  Server PCI Express x4 Port 2",
+"	25e3  Server PCI Express x4 Port 3",
+"	25e4  Server PCI Express x4 Port 4",
+"	25e5  Server PCI Express x4 Port 5",
+"	25e6  Server PCI Express x4 Port 6",
+"	25e7  Server PCI Express x4 Port 7",
+"	25e8  Server AMB Memory Mapped Registers",
+"	25f0  Server Error Reporting Registers",
+"	25f1  Reserved Registers",
+"	25f3  Reserved Registers",
+"	25f5  Server FBD Registers",
+"	25f6  Server FBD Registers",
+"	25f7  Server PCI Express x8 Port 2-3",
+"	25f8  Server PCI Express x8 Port 4-5",
+"	25f9  Server PCI Express x8 Port 6-7",
+"	25fa  Server PCI Express x16 Port 4-7",
+"	2600  E8500/E8501 Hub Interface 1.5",
+"	2601  E8500/E8501 PCI Express x4 Port D",
+"	2602  E8500/E8501 PCI Express x4 Port C0",
+"	2603  E8500/E8501 PCI Express x4 Port C1",
+"	2604  E8500/E8501 PCI Express x4 Port B0",
+"	2605  E8500/E8501 PCI Express x4 Port B1",
+"	2606  E8500/E8501 PCI Express x4 Port A0",
+"	2607  E8500/E8501 PCI Express x4 Port A1",
+"	2608  E8500/E8501 PCI Express x8 Port C",
+"	2609  E8500/E8501 PCI Express x8 Port B",
+"	260a  E8500/E8501 PCI Express x8 Port A",
+"	260c  E8500/E8501 IMI Registers",
+"	2610  E8500/E8501 Front Side Bus, Boot, and Interrupt Registers",
+"	2611  E8500/E8501 Address Mapping Registers",
+"	2612  E8500/E8501 RAS Registers",
+"	2613  E8500/E8501 Reserved Registers",
+"	2614  E8500/E8501 Reserved Registers",
+"	2615  E8500/E8501 Miscellaneous Registers",
+"	2617  E8500/E8501 Reserved Registers",
+"	2618  E8500/E8501 Reserved Registers",
+"	2619  E8500/E8501 Reserved Registers",
+"	261a  E8500/E8501 Reserved Registers",
+"	261b  E8500/E8501 Reserved Registers",
+"	261c  E8500/E8501 Reserved Registers",
+"	261d  E8500/E8501 Reserved Registers",
+"	261e  E8500/E8501 Reserved Registers",
+"	2620  E8500/E8501 eXternal Memory Bridge",
+"	2621  E8500/E8501 XMB Miscellaneous Registers",
+"	2622  E8500/E8501 XMB Memory Interleaving Registers",
+"	2623  E8500/E8501 XMB DDR Initialization and Calibration",
+"	2624  E8500/E8501 XMB Reserved Registers",
+"	2625  E8500/E8501 XMB Reserved Registers",
+"	2626  E8500/E8501 XMB Reserved Registers",
+"	2627  E8500/E8501 XMB Reserved Registers",
+"	2640  82801FB/FR (ICH6/ICH6R) LPC Interface Bridge",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	2641  82801FBM (ICH6M) LPC Interface Bridge",
+"		103c 099c  NX6110/NC6120",
+"	2642  82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge",
+"	2651  82801FB/FW (ICH6/ICH6W) SATA Controller",
+"		1028 0179  Optiplex GX280",
+"		1043 2601  P5GD1-VW Mainboard",
+"		1734 105c  Scenic W620",
+"		8086 4147  D915GAG Motherboard",
+"	2652  82801FR/FRW (ICH6R/ICH6RW) SATA Controller",
+"		1462 7028  915P/G Neo2",
+"	2653  82801FBM (ICH6M) SATA Controller",
+"	2658  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1",
+"		1028 0179  Optiplex GX280",
+"		103c 099c  NX6110/NC6120",
+"		1043 80a6  P5GD1-VW Mainboard",
+"		1458 2558  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	2659  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2",
+"		1028 0179  Optiplex GX280",
+"		103c 099c  NX6110/NC6120",
+"		1043 80a6  P5GD1-VW Mainboard",
+"		1458 2659  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	265a  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3",
+"		1028 0179  Optiplex GX280",
+"		103c 099c  NX6110/NC6120",
+"		1043 80a6  P5GD1-VW Mainboard",
+"		1458 265a  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	265b  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4",
+"		1028 0179  Optiplex GX280",
+"		103c 099c  NX6110/NC6120",
+"		1043 80a6  P5GD1-VW Mainboard",
+"		1458 265a  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	265c  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller",
+"		1028 0179  Optiplex GX280",
+"		103c 099c  NX6110/NC6120",
+"		1043 80a6  P5GD1-VW Mainboard",
+"		1458 5006  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	2660  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1",
+"		103c 099c  NX6110/NC6120",
+"	2662  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2",
+"	2664  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3",
+"	2666  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4",
+"	2668  82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller",
+"		1043 814e  P5GD1-VW Mainboard",
+"	266a  82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller",
+"		1028 0179  Optiplex GX280",
+"		1043 80a6  P5GD1-VW Mainboard",
+"		1458 266a  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	266c  82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller",
+"	266d  82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller",
+"		1025 006a  Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop)",
+"		103c 099c  NX6110/NC6120",
+"	266e  82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller",
+"		1025 006a  Realtek ALC 655 codec (in Acer TravelMate 2410 serie laptop)",
+"		1028 0179  Optiplex GX280",
+"		1028 0182  Latitude D610 Laptop",
+"		1028 0188  Inspiron 6000 laptop",
+"		103c 0944  Compaq NC6220",
+"		103c 099c  NX6110/NC6120",
+"		103c 3006  DC7100 SFF(DX878AV)",
+"		1458 a002  GA-8I915ME-G Mainboard",
+"		152d 0745  Packard Bell A8550 Laptop",
+"		1734 105a  Scenic W620",
+"	266f  82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller",
+"		103c 099c  NX6110/NC6120",
+"		1043 80a6  P5GD1-VW Mainboard",
+"		1458 266f  GA-8I915ME-G Mainboard",
+"		1462 7028  915P/G Neo2",
+"		1734 105c  Scenic W620",
+"	2670  Enterprise Southbridge LPC",
+"	2680  Enterprise Southbridge SATA IDE",
+"	2681  Enterprise Southbridge SATA AHCI",
+"	2682  Enterprise Southbridge SATA RAID",
+"	2683  Enterprise Southbridge SATA RAID",
+"	2688  Enterprise Southbridge UHCI USB #1",
+"	2689  Enterprise Southbridge UHCI USB #2",
+"	268a  Enterprise Southbridge UHCI USB #3",
+"	268b  Enterprise Southbridge UHCI USB #4",
+"	268c  Enterprise Southbridge EHCI USB",
+"	2690  Enterprise Southbridge PCI Express Root Port 1",
+"	2692  Enterprise Southbridge PCI Express Root Port 2",
+"	2694  Enterprise Southbridge PCI Express Root Port 3",
+"	2696  Enterprise Southbridge PCI Express Root Port 4",
+"	2698  Enterprise Southbridge AC '97 Audio",
+"	2699  Enterprise Southbridge AC '97 Modem",
+"	269a  Enterprise Southbridge High Definition Audio",
+"	269b  Enterprise Southbridge SMBus",
+"	269e  Enterprise Southbridge PATA",
+"	2770  945G/GZ/P/PL Express Memory Controller Hub",
+"		8086 544e  DeskTop Board D945GTP",
+"	2771  945G/GZ/P/PL Express PCI Express Root Port",
+"	2772  945G/GZ Express Integrated Graphics Controller",
+"		8086 544e  DeskTop Board D945GTP",
+"	2774  955X Express Memory Controller Hub",
+"	2775  955X Express PCI Express Root Port",
+"	2776  945G/GZ Express Integrated Graphics Controller",
+"	2778  E7230 Memory Controller Hub",
+"	2779  E7230 PCI Express Root Port",
+"	277a  975X Express PCI Express Root Port",
+"	277c  975X Express Memory Controller Hub",
+"	277d  975X Express PCI Express Root Port",
+"	2782  82915G Express Chipset Family Graphics Controller",
+"		1043 2582  P5GD1-VW Mainboard",
+"		1734 105b  Scenic W620",
+"	2792  Mobile 915GM/GMS/910GML Express Graphics Controller",
+"		103c 099c  NX6110/NC6120",
+"		1043 1881  GMA 900 915GM Integrated Graphics",
+"	27a0  Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub",
+"	27a1  Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port",
+"	27a2  Mobile 945GM/GMS/940GML Express Integrated Graphics Controller",
+"	27a6  Mobile 945GM/GMS/940GML Express Integrated Graphics Controller",
+"	27b0  82801GH (ICH7DH) LPC Interface Bridge",
+"	27b8  82801GB/GR (ICH7 Family) LPC Interface Bridge",
+"		8086 544e  DeskTop Board D945GTP",
+"	27b9  82801GBM (ICH7-M) LPC Interface Bridge",
+"	27bd  82801GHM (ICH7-M DH) LPC Interface Bridge",
+"	27c0  82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller IDE",
+"		8086 544e  DeskTop Board D945GTP",
+"	27c1  82801GR/GH (ICH7 Family) Serial ATA Storage Controller AHCI",
+"	27c3  82801GR/GH (ICH7 Family) Serial ATA Storage Controller RAID",
+"	27c4  82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller IDE",
+"	27c5  82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller AHCI",
+"	27c6  82801GHM (ICH7-M DH) Serial ATA Storage Controller RAID",
+"	27c8  82801G (ICH7 Family) USB UHCI #1",
+"		8086 544e  DeskTop Board D945GTP",
+"	27c9  82801G (ICH7 Family) USB UHCI #2",
+"		8086 544e  DeskTop Board D945GTP",
+"	27ca  82801G (ICH7 Family) USB UHCI #3",
+"		8086 544e  DeskTop Board D945GTP",
+"	27cb  82801G (ICH7 Family) USB UHCI #4",
+"		8086 544e  DeskTop Board D945GTP",
+"	27cc  82801G (ICH7 Family) USB2 EHCI Controller",
+"		8086 544e  DeskTop Board D945GTP",
+"	27d0  82801G (ICH7 Family) PCI Express Port 1",
+"	27d2  82801G (ICH7 Family) PCI Express Port 2",
+"	27d4  82801G (ICH7 Family) PCI Express Port 3",
+"	27d6  82801G (ICH7 Family) PCI Express Port 4",
+"	27d8  82801G (ICH7 Family) High Definition Audio Controller",
+"	27da  82801G (ICH7 Family) SMBus Controller",
+"		8086 544e  DeskTop Board D945GTP",
+"	27dc  82801G (ICH7 Family) LAN Controller",
+"		8086 308d  DeskTop Board D945GTP",
+"	27dd  82801G (ICH7 Family) AC'97 Modem Controller",
+"	27de  82801G (ICH7 Family) AC'97 Audio Controller",
+"	27df  82801G (ICH7 Family) IDE Controller",
+"		8086 544e  DeskTop Board D945GTP",
+"	27e0  82801GR/GH/GHM (ICH7 Family) PCI Express Port 5",
+"	27e2  82801GR/GH/GHM (ICH7 Family) PCI Express Port 6",
+"	2810  LPC Interface Controller",
+"	2811  Mobile LPC Interface Controller",
+"	2812  LPC Interface Controller",
+"	2814  LPC Interface Controller",
+"	2815  Mobile LPC Interface Controller",
+"	2820  SATA Controller 1 IDE",
+"	2821  SATA Controller AHCI",
+"	2822  SATA Controller RAID",
+"	2824  SATA Controller AHCI",
+"	2825  SATA Controller 2 IDE",
+"	2828  Mobile SATA Controller IDE",
+"	2829  Mobile SATA Controller AHCI",
+"	282a  Mobile SATA Controller RAID",
+"	2830  USB UHCI Controller #1",
+"	2831  USB UHCI Controller #2",
+"	2832  USB UHCI Controller #3",
+"	2834  USB UHCI Controller #4",
+"	2835  USB UHCI Controller #5",
+"	2836  USB2 EHCI Controller #1",
+"	283a  USB2 EHCI Controller #2",
+"	283e  SMBus Controller",
+"	283f  PCI Express Port 1",
+"	2841  PCI Express Port 2",
+"	2843  PCI Express Port 3",
+"	2845  PCI Express Port 4",
+"	2847  PCI Express Port 5",
+"	2849  PCI Express Port 6",
+"	284b  HD Audio Controller",
+"	284f  Thermal Subsystem",
+"	2850  Mobile IDE Controller",
+"	2970  Memory Controller Hub",
+"	2971  PCI Express Root Port",
+"	2972  Integrated Graphics Controller",
+"	2973  Integrated Graphics Controller",
+"	2974  HECI Controller",
+"	2976  PT IDER Controller",
+"	2977  KT Controller",
+"	2990  Memory Controller Hub",
+"	2991  PCI Express Root Port",
+"	2992  Integrated Graphics Controller",
+"	2993  Integrated Graphics Controller",
+"	2994  HECI Controller",
+"	2995  HECI Controller",
+"	2996  PT IDER Controller",
+"	2997  KT Controller",
+"	29a0  Memory Controller Hub",
+"	29a1  PCI Express Root Port",
+"	29a2  Integrated Graphics Controller",
+"	29a3  Integrated Graphics Controller",
+"	29a4  HECI Controller",
+"	29a5  HECI Controller",
+"	29a6  PT IDER Controller",
+"	29a7  KT Controller",
+"	2a00  Mobile Memory Controller Hub",
+"	2a01  Mobile PCI Express Root Port",
+"	2a02  Mobile Integrated Graphics Controller",
+"	2a03  Mobile Integrated Graphics Controller",
+"	3092  Integrated RAID",
+"	3200  GD31244 PCI-X SATA HBA",
+"	3340  82855PM Processor to I/O Controller",
+"		1025 005a  TravelMate 290",
+"		103c 088c  NC8000 laptop",
+"		103c 0890  NC6000 laptop",
+"	3341  82855PM Processor to AGP Controller",
+"	3500  Enterprise Southbridge PCI Express Upstream Port",
+"	3501  Enterprise Southbridge PCI Express Upstream Port",
+"	3504  Enterprise Southbridge IOxAPIC",
+"	3505  Enterprise Southbridge IOxAPIC",
+"	350c  Enterprise Southbridge PCI Express to PCI-X Bridge",
+"	350d  Enterprise Southbridge PCI Express to PCI-X Bridge",
+"	3510  Enterprise Southbridge PCI Express Downstream Port E1",
+"	3511  Enterprise Southbridge PCI Express Downstream Port E1",
+"	3514  Enterprise Southbridge PCI Express Downstream Port E2",
+"	3515  Enterprise Southbridge PCI Express Downstream Port E2",
+"	3518  Enterprise Southbridge PCI Express Downstream Port E3",
+"	3519  Enterprise Southbridge PCI Express Downstream Port E3",
+"	3575  82830 830 Chipset Host Bridge",
+"		0e11 0030  Evo N600c",
+"		1014 021d  ThinkPad A/T/X Series",
+"		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP",
+"	3576  82830 830 Chipset AGP Bridge",
+"	3577  82830 CGC [Chipset Graphics Controller]",
+"		1014 0513  ThinkPad A/T/X Series",
+"	3578  82830 830 Chipset Host Bridge",
+"	3580  82852/82855 GM/GME/PM/GMV Processor to I/O Controller",
+"		1028 0139  Latitude D400",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		1734 1055  Amilo M1420",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10e0  PSL09 PrPMC",
+"	3581  82852/82855 GM/GME/PM/GMV Processor to AGP Controller",
+"		1734 1055  Amilo M1420",
+"	3582  82852/855GM Integrated Graphics Device",
+"		1028 0139  Latitude D400",
+"		1028 0163  Latitude D505",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10e0  PSL09 PrPMC",
+"	3584  82852/82855 GM/GME/PM/GMV Processor to I/O Controller",
+"		1028 0139  Latitude D400",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		1734 1055  Amilo M1420",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10e0  PSL09 PrPMC",
+"	3585  82852/82855 GM/GME/PM/GMV Processor to I/O Controller",
+"		1028 0139  Latitude D400",
+"		1028 0163  Latitude D505",
+"		1028 0196  Inspiron 5160",
+"		1734 1055  Amilo M1420",
+"		4c53 10b0  CL9 mainboard",
+"		4c53 10e0  PSL09 PrPMC",
+"	3590  E7520 Memory Controller Hub",
+"		1028 019a  PowerEdge SC1425",
+"		1734 103e  Primergy RX300 S2",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"	3591  E7525/E7520 Error Reporting Registers",
+"		1028 0169  Precision 470",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"	3592  E7320 Memory Controller Hub",
+"	3593  E7320 Error Reporting Registers",
+"	3594  E7520 DMA Controller",
+"		4c53 10d0  Telum ASLP10 Processor AMC",
+"	3595  E7525/E7520/E7320 PCI Express Port A",
+"	3596  E7525/E7520/E7320 PCI Express Port A1",
+"	3597  E7525/E7520 PCI Express Port B",
+"	3598  E7520 PCI Express Port B1",
+"	3599  E7520 PCI Express Port C",
+"	359a  E7520 PCI Express Port C1",
+"	359b  E7525/E7520/E7320 Extended Configuration Registers",
+"	359e  E7525 Memory Controller Hub",
+"		1028 0169  Precision 470",
+"	4220  PRO/Wireless 2200BG Network Connection",
+"	4222  PRO/Wireless 3945ABG Network Connection",
+"		8086 1005  PRO/Wireless 3945BG Network Connection",
+"		8086 1034  PRO/Wireless 3945BG Network Connection",
+"		8086 1044  PRO/Wireless 3945BG Network Connection",
+"	4223  PRO/Wireless 2915ABG Network Connection",
+"		1351 103c  Compaq NC6220",
+"	4224  PRO/Wireless 2915ABG Network Connection",
+"	4227  PRO/Wireless 3945ABG Network Connection",
+"		8086 1011  Thinkpad X60s",
+"		8086 1014  PRO/Wireless 3945BG Network Connection",
+"	5200  EtherExpress PRO/100 Intelligent Server",
+"	5201  EtherExpress PRO/100 Intelligent Server",
+"		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter",
+"	530d  80310 IOP [IO Processor]",
+"	7000  82371SB PIIX3 ISA [Natoma/Triton II]",
+"	7010  82371SB PIIX3 IDE [Natoma/Triton II]",
+"	7020  82371SB PIIX3 USB [Natoma/Triton II]",
+"	7030  430VX - 82437VX TVX [Triton VX]",
+"	7050  Intercast Video Capture Card",
+"	7051  PB 642365-003 (Business Video Conferencing Card)",
+"	7100  430TX - 82439TX MTXC",
+"	7110  82371AB/EB/MB PIIX4 ISA",
+"		15ad 1976  virtualHW v3",
+"	7111  82371AB/EB/MB PIIX4 IDE",
+"		15ad 1976  virtualHW v3",
+"	7112  82371AB/EB/MB PIIX4 USB",
+"		15ad 1976  virtualHW v3",
+"	7113  82371AB/EB/MB PIIX4 ACPI",
+"		15ad 1976  virtualHW v3",
+"	7120  82810 GMCH [Graphics Memory Controller Hub]",
+"		4c53 1040  CL7 mainboard",
+"		4c53 1060  PC7 mainboard",
+"	7121  82810 CGC [Chipset Graphics Controller]",
+"		4c53 1040  CL7 mainboard",
+"		4c53 1060  PC7 mainboard",
+"		8086 4341  Cayman (CA810) Mainboard",
+"	7122  82810 DC-100 GMCH [Graphics Memory Controller Hub]",
+"	7123  82810 DC-100 CGC [Chipset Graphics Controller]",
+"	7124  82810E DC-133 GMCH [Graphics Memory Controller Hub]",
+"	7125  82810E DC-133 CGC [Chipset Graphics Controller]",
+"	7126  82810 DC-133 System and Graphics Controller",
+"	7128  82810-M DC-100 System and Graphics Controller",
+"	712a  82810-M DC-133 System and Graphics Controller",
+"	7180  440LX/EX - 82443LX/EX Host bridge",
+"	7181  440LX/EX - 82443LX/EX AGP bridge",
+"	7190  440BX/ZX/DX - 82443BX/ZX/DX Host bridge",
+"		0e11 0500  Armada 1750 Laptop System Chipset",
+"		0e11 b110  Armada M700/E500",
+"		1028 008e  PowerEdge 1300 mainboard",
+"		1179 0001  Toshiba Tecra 8100 Laptop System Chipset",
+"		15ad 1976  virtualHW v3",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1051  CE7 mainboard",
+"	7191  440BX/ZX/DX - 82443BX/ZX/DX AGP bridge",
+"		1028 008e  PowerEdge 1300 mainboard",
+"	7192  440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled)",
+"		0e11 0460  Armada 1700 Laptop System Chipset",
+"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
+"	7194  82440MX Host Bridge",
+"		1033 0000  Versa Note Vxi",
+"		4c53 10a0  CA3/CR3 mainboard",
+"	7195  82440MX AC'97 Audio Controller",
+"		1033 80cc  Versa Note VXi",
+"		10cf 1099  QSound_SigmaTel Stac97 PCI Audio",
+"		11d4 0040  SoundMAX Integrated Digital Audio",
+"		11d4 0048  SoundMAX Integrated Digital Audio",
+"	7196  82440MX AC'97 Modem Controller",
+"	7198  82440MX ISA Bridge",
+"	7199  82440MX EIDE Controller",
+"	719a  82440MX USB Universal Host Controller",
+"	719b  82440MX Power Management Controller",
+"	71a0  440GX - 82443GX Host bridge",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1051  CE7 mainboard",
+"	71a1  440GX - 82443GX AGP bridge",
+"	71a2  440GX - 82443GX Host bridge (AGP disabled)",
+"		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard",
+"	7600  82372FB PIIX5 ISA",
+"	7601  82372FB PIIX5 IDE",
+"	7602  82372FB PIIX5 USB",
+"	7603  82372FB PIIX5 SMBus",
+"	7800  82740 (i740) AGP Graphics Accelerator",
+"		003d 0008  Starfighter AGP",
+"		003d 000b  Starfighter AGP",
+"		1092 0100  Stealth II G460",
+"		10b4 201a  Lightspeed 740",
+"		10b4 202f  Lightspeed 740",
+"		8086 0000  Terminator 2x/i",
+"		8086 0100  Intel740 Graphics Accelerator",
+"	84c4  450KX/GX [Orion] - 82454KX/GX PCI bridge",
+"	84c5  450KX/GX [Orion] - 82453KX/GX Memory controller",
+"	84ca  450NX - 82451NX Memory & I/O Controller",
+"	84cb  450NX - 82454NX/84460GX PCI Expander Bridge",
+"	84e0  460GX - 84460GX System Address Controller (SAC)",
+"	84e1  460GX - 84460GX System Data Controller (SDC)",
+"	84e2  460GX - 84460GX AGP Bridge (GXB function 2)",
+"	84e3  460GX - 84460GX Memory Address Controller (MAC)",
+"	84e4  460GX - 84460GX Memory Data Controller (MDC)",
+"	84e6  460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB)",
+"	84ea  460GX - 84460GX AGP Bridge (GXB function 1)",
+"	8500  IXP4XX Intel Network Processor (IXP420/421/422/425/IXC1100)",
+"		1993 0ded  mGuard-PCI AV#2",
+"		1993 0dee  mGuard-PCI AV#1",
+"		1993 0def  mGuard-PCI AV#0",
+"	9000  IXP2000 Family Network Processor",
+"	9001  IXP2400 Network Processor",
+"	9002  IXP2300 Network Processor",
+"	9004  IXP2800 Network Processor",
+"	9621  Integrated RAID",
+"	9622  Integrated RAID",
+"	9641  Integrated RAID",
+"	96a1  Integrated RAID",
+"	b152  21152 PCI-to-PCI Bridge",
+"	b154  21154 PCI-to-PCI Bridge",
+"	b555  21555 Non transparent PCI-to-PCI Bridge",
+"		12d9 000a  PCI VoIP Gateway",
+"		4c53 1050  CT7 mainboard",
+"		4c53 1051  CE7 mainboard",
+"		e4bf 1000  CC8-1-BLUES",
+"8401  TRENDware International Inc.",
+"8800  Trigem Computer Inc.",
+"	2008  Video assistent component",
+"8866  T-Square Design Inc.",
+"8888  Silicon Magic",
+"8912  TRX",
+"8c4a  Winbond",
+"	1980  W89C940 misprogrammed [ne2k]",
+"8e0e  Computone Corporation",
+"8e2e  KTI",
+"	3000  ET32P2",
+"9004  Adaptec",
+"	0078  AHA-2940U_CN",
+"	1078  AIC-7810",
+"	1160  AIC-1160 [Family Fibre Channel Adapter]",
+"	2178  AIC-7821",
+"	3860  AHA-2930CU",
+"	3b78  AHA-4844W/4844UW",
+"	5075  AIC-755x",
+"	5078  AHA-7850",
+"		9004 7850  AHA-2904/Integrated AIC-7850",
+"	5175  AIC-755x",
+"	5178  AIC-7851",
+"	5275  AIC-755x",
+"	5278  AIC-7852",
+"	5375  AIC-755x",
+"	5378  AIC-7850",
+"	5475  AIC-755x",
+"	5478  AIC-7850",
+"	5575  AVA-2930",
+"	5578  AIC-7855",
+"	5647  ANA-7711 TCP Offload Engine",
+"		9004 7710  ANA-7711F TCP Offload Engine - Optical",
+"		9004 7711  ANA-7711LP TCP Offload Engine - Copper",
+"	5675  AIC-755x",
+"	5678  AIC-7856",
+"	5775  AIC-755x",
+"	5778  AIC-7850",
+"	5800  AIC-5800",
+"	5900  ANA-5910/5930/5940 ATM155 & 25 LAN Adapter",
+"	5905  ANA-5910A/5930A/5940A ATM Adapter",
+"	6038  AIC-3860",
+"	6075  AIC-1480 / APA-1480",
+"		9004 7560  AIC-1480 / APA-1480 Cardbus",
+"	6078  AIC-7860",
+"	6178  AIC-7861",
+"		9004 7861  AHA-2940AU Single",
+"	6278  AIC-7860",
+"	6378  AIC-7860",
+"	6478  AIC-786x",
+"	6578  AIC-786x",
+"	6678  AIC-786x",
+"	6778  AIC-786x",
+"	6915  ANA620xx/ANA69011A",
+"		9004 0008  ANA69011A/TX 10/100",
+"		9004 0009  ANA69011A/TX 10/100",
+"		9004 0010  ANA62022 2-port 10/100",
+"		9004 0018  ANA62044 4-port 10/100",
+"		9004 0019  ANA62044 4-port 10/100",
+"		9004 0020  ANA62022 2-port 10/100",
+"		9004 0028  ANA69011A/TX 10/100",
+"		9004 8008  ANA69011A/TX 64 bit 10/100",
+"		9004 8009  ANA69011A/TX 64 bit 10/100",
+"		9004 8010  ANA62022 2-port 64 bit 10/100",
+"		9004 8018  ANA62044 4-port 64 bit 10/100",
+"		9004 8019  ANA62044 4-port 64 bit 10/100",
+"		9004 8020  ANA62022 2-port 64 bit 10/100",
+"		9004 8028  ANA69011A/TX 64 bit 10/100",
+"	7078  AHA-294x / AIC-7870",
+"	7178  AHA-2940/2940W / AIC-7871",
+"	7278  AHA-3940/3940W / AIC-7872",
+"	7378  AHA-3985 / AIC-7873",
+"	7478  AHA-2944/2944W / AIC-7874",
+"	7578  AHA-3944/3944W / AIC-7875",
+"	7678  AHA-4944W/UW / AIC-7876",
+"	7710  ANA-7711F Network Accelerator Card (NAC) - Optical",
+"	7711  ANA-7711C Network Accelerator Card (NAC) - Copper",
+"	7778  AIC-787x",
+"	7810  AIC-7810",
+"	7815  AIC-7815 RAID+Memory Controller IC",
+"		9004 7815  ARO-1130U2 RAID Controller",
+"		9004 7840  AIC-7815 RAID+Memory Controller IC",
+"	7850  AIC-7850",
+"	7855  AHA-2930",
+"	7860  AIC-7860",
+"	7870  AIC-7870",
+"	7871  AHA-2940",
+"	7872  AHA-3940",
+"	7873  AHA-3980",
+"	7874  AHA-2944",
+"	7880  AIC-7880P",
+"	7890  AIC-7890",
+"	7891  AIC-789x",
+"	7892  AIC-789x",
+"	7893  AIC-789x",
+"	7894  AIC-789x",
+"	7895  AHA-2940U/UW / AHA-39xx / AIC-7895",
+"		9004 7890  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
+"		9004 7891  AHA-2940U/2940UW Dual",
+"		9004 7892  AHA-3940AU/AUW/AUWD/UWD",
+"		9004 7894  AHA-3944AUWD",
+"		9004 7895  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
+"		9004 7896  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
+"		9004 7897  AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B",
+"	7896  AIC-789x",
+"	7897  AIC-789x",
+"	8078  AIC-7880U",
+"		9004 7880  AIC-7880P Ultra/Ultra Wide SCSI Chipset",
+"	8178  AHA-2940U/UW/D / AIC-7881U",
+"		9004 7881  AHA-2940UW SCSI Host Adapter",
+"	8278  AHA-3940U/UW/UWD / AIC-7882U",
+"	8378  AHA-3940U/UW / AIC-7883U",
+"	8478  AHA-2944UW / AIC-7884U",
+"	8578  AHA-3944U/UWD / AIC-7885",
+"	8678  AHA-4944UW / AIC-7886",
+"	8778  AHA-2940UW Pro / AIC-788x",
+"		9004 7887  2940UW Pro Ultra-Wide SCSI Controller",
+"	8878  AHA-2930UW / AIC-7888",
+"		9004 7888  AHA-2930UW SCSI Controller",
+"	8b78  ABA-1030",
+"	ec78  AHA-4944W/UW",
+"9005  Adaptec",
+"	0010  AHA-2940U2/U2W",
+"		9005 2180  AHA-2940U2 SCSI Controller",
+"		9005 8100  AHA-2940U2B SCSI Controller",
+"		9005 a100  AHA-2940U2B SCSI Controller",
+"		9005 a180  AHA-2940U2W SCSI Controller",
+"		9005 e100  AHA-2950U2B SCSI Controller",
+"	0011  AHA-2930U2",
+"	0013  78902",
+"		9005 0003  AAA-131U2 Array1000 1 Channel RAID Controller",
+"		9005 000f  AIC7890_ARO",
+"	001f  AHA-2940U2/U2W / 7890/7891",
+"		9005 000f  2940U2W SCSI Controller",
+"		9005 a180  2940U2W SCSI Controller",
+"	0020  AIC-7890",
+"	002f  AIC-7890",
+"	0030  AIC-7890",
+"	003f  AIC-7890",
+"	0050  AHA-3940U2x/395U2x",
+"		9005 f500  AHA-3950U2B",
+"		9005 ffff  AHA-3950U2B",
+"	0051  AHA-3950U2D",
+"		9005 b500  AHA-3950U2D",
+"	0053  AIC-7896 SCSI Controller",
+"		9005 ffff  AIC-7896 SCSI Controller mainboard implementation",
+"	005f  AIC-7896U2/7897U2",
+"	0080  AIC-7892A U160/m",
+"		0e11 e2a0  Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter",
+"		9005 6220  AHA-29160C",
+"		9005 62a0  29160N Ultra160 SCSI Controller",
+"		9005 e220  29160LP Low Profile Ultra160 SCSI Controller",
+"		9005 e2a0  29160 Ultra160 SCSI Controller",
+"	0081  AIC-7892B U160/m",
+"		9005 62a1  19160 Ultra160 SCSI Controller",
+"	0083  AIC-7892D U160/m",
+"	008f  AIC-7892P U160/m",
+"		1179 0001  Magnia Z310",
+"		15d9 9005  Onboard SCSI Host Adapter",
+"	00c0  AHA-3960D / AIC-7899A U160/m",
+"		0e11 f620  Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter",
+"		9005 f620  AHA-3960D U160/m",
+"	00c1  AIC-7899B U160/m",
+"	00c3  AIC-7899D U160/m",
+"	00c5  RAID subsystem HBA",
+"		1028 00c5  PowerEdge 2400,2500,2550,4400",
+"	00cf  AIC-7899P U160/m",
+"		1028 00ce  PowerEdge 1400",
+"		1028 00d1  PowerEdge 2550",
+"		1028 00d9  PowerEdge 2500",
+"		10f1 2462  Thunder K7 S2462",
+"		15d9 9005  Onboard SCSI Host Adapter",
+"		8086 3411  SDS2 Mainboard",
+"	0241  Serial ATA II RAID 1420SA",
+"	0250  ServeRAID Controller",
+"		1014 0279  ServeRAID-xx",
+"		1014 028c  ServeRAID-xx",
+"	0279  ServeRAID 6M",
+"	0283  AAC-RAID",
+"		9005 0283  Catapult",
+"	0284  AAC-RAID",
+"		9005 0284  Tomcat",
+"	0285  AAC-RAID",
+"		0e11 0295  SATA 6Ch (Bearcat)",
+"		1014 02f2  ServeRAID 8i",
+"		1028 0287  PowerEdge Expandable RAID Controller 320/DC",
+"		1028 0291  CERC SATA RAID 2 PCI SATA 6ch (DellCorsair)",
+"		103c 3227  AAR-2610SA",
+"		17aa 0286  Legend S220 (Legend Crusader)",
+"		17aa 0287  Legend S230 (Legend Vulcan)",
+"		9005 0285  2200S (Vulcan)",
+"		9005 0286  2120S (Crusader)",
+"		9005 0287  2200S (Vulcan-2m)",
+"		9005 0288  3230S (Harrier)",
+"		9005 0289  3240S (Tornado)",
+"		9005 028a  ASR-2020ZCR",
+"		9005 028b  ASR-2025ZCR (Terminator)",
+"		9005 028e  ASR-2020SA (Skyhawk)",
+"		9005 028f  ASR-2025SA",
+"		9005 0290  AAR-2410SA PCI SATA 4ch (Jaguar II)",
+"		9005 0292  AAR-2810SA PCI SATA 8ch (Corsair-8)",
+"		9005 0293  AAR-21610SA PCI SATA 16ch (Corsair-16)",
+"		9005 0294  ESD SO-DIMM PCI-X SATA ZCR (Prowler)",
+"		9005 0296  ASR-2240S",
+"		9005 0297  ASR-4005SAS",
+"		9005 0298  ASR-4000SAS",
+"		9005 0299  ASR-4800SAS",
+"		9005 029a  4805SAS",
+"	0286  AAC-RAID (Rocket)",
+"		1014 9540  ServeRAID 8k/8k-l4",
+"		1014 9580  ServeRAID 8k/8k-l8",
+"		9005 028c  ASR-2230S + ASR-2230SLP PCI-X (Lancer)",
+"		9005 028d  ASR-2130S",
+"		9005 029b  ASR-2820SA",
+"		9005 029c  ASR-2620SA",
+"		9005 029d  ASR-2420SA",
+"		9005 029e  ICP ICP9024R0",
+"		9005 029f  ICP ICP9014R0",
+"		9005 02a0  ICP ICP9047MA",
+"		9005 02a1  ICP ICP9087MA",
+"		9005 02a2  3800SAS",
+"		9005 02a3  ICP ICP5445AU",
+"		9005 02a4  ICP ICP5085LI",
+"		9005 02a5  ICP ICP5085BR",
+"		9005 02a6  ICP9067MA",
+"		9005 02a7  AAR-2830SA",
+"		9005 02a8  AAR-2430SA",
+"		9005 02a9  ICP5087AU",
+"		9005 02aa  ICP5047AU",
+"		9005 0800  Callisto",
+"	0500  Obsidian chipset SCSI controller",
+"		1014 02c1  PCI-X DDR 3Gb SAS Adapter (572A/572C)",
+"		1014 02c2  PCI-X DDR 3Gb SAS RAID Adapter (572B/572D)",
+"	0503  Scamp chipset SCSI controller",
+"		1014 02bf  Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571E)",
+"		1014 02d5  Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571F)",
+"	0910  AUA-3100B",
+"	091e  AUA-3100B",
+"	8000  ASC-29320A U320",
+"	800f  AIC-7901 U320",
+"	8010  ASC-39320 U320",
+"	8011  ASC-39320D",
+"		0e11 00ac  ASC-39320D U320",
+"		9005 0041  ASC-39320D U320",
+"	8012  ASC-29320 U320",
+"	8013  ASC-29320B U320",
+"	8014  ASC-29320LP U320",
+"	8015  ASC-39320B U320",
+"	8016  ASC-39320A U320",
+"	8017  ASC-29320ALP U320",
+"	801c  ASC-39320D U320",
+"	801d  AIC-7902B U320",
+"	801e  AIC-7901A U320",
+"	801f  AIC-7902 U320",
+"		1734 1011  Primergy RX300",
+"	8080  ASC-29320A U320 w/HostRAID",
+"	808f  AIC-7901 U320 w/HostRAID",
+"	8090  ASC-39320 U320 w/HostRAID",
+"	8091  ASC-39320D U320 w/HostRAID",
+"	8092  ASC-29320 U320 w/HostRAID",
+"	8093  ASC-29320B U320 w/HostRAID",
+"	8094  ASC-29320LP U320 w/HostRAID",
+"	8095  ASC-39320(B) U320 w/HostRAID",
+"	8096  ASC-39320A U320 w/HostRAID",
+"	8097  ASC-29320ALP U320 w/HostRAID",
+"	809c  ASC-39320D(B) U320 w/HostRAID",
+"	809d  AIC-7902(B) U320 w/HostRAID",
+"	809e  AIC-7901A U320 w/HostRAID",
+"	809f  AIC-7902 U320 w/HostRAID",
+"907f  Atronics",
+"	2015  IDE-2015PL",
+"919a  Gigapixel Corp",
+"9412  Holtek",
+"	6565  6565",
+"9699  Omni Media Technology Inc",
+"	6565  6565",
+"9710  NetMos Technology",
+"	7780  USB IRDA-port",
+"	9805  PCI 1 port parallel adapter",
+"	9815  PCI 9815 Multi-I/O Controller",
+"		1000 0020  2P0S (2 port parallel adaptor)",
+"	9835  PCI 9835 Multi-I/O Controller",
+"		1000 0002  2S (16C550 UART)",
+"		1000 0012  1P2S",
+"	9845  PCI 9845 Multi-I/O Controller",
+"		1000 0004  0P4S (4 port 16550A serial card)",
+"		1000 0006  0P6S (6 port 16550a serial card)",
+"	9855  PCI 9855 Multi-I/O Controller",
+"		1000 0014  1P4S",
+"9902  Stargen Inc.",
+"	0001  SG2010 PCI over Starfabric Bridge",
+"	0002  SG2010 PCI to Starfabric Gateway",
+"	0003  SG1010 Starfabric Switch and PCI Bridge",
+"a0a0  AOPEN Inc.",
+"a0f1  UNISYS Corporation",
+"a200  NEC Corporation",
+"a259  Hewlett Packard",
+"a25b  Hewlett Packard GmbH PL24-MKT",
+"a304  Sony",
+"a727  3Com Corporation",
+"	0013  3CRPAG175 Wireless PC Card",
+"aa42  Scitex Digital Video",
+"ac1e  Digital Receiver Technology Inc",
+"ac3d  Actuality Systems",
+"aecb  Adrienne Electronics Corporation",
+"	6250  VITC/LTC Timecode Reader card [PCI-VLTC/RDR]",
+"affe  Sirrix AG security technologies",
+"	dead  Sirrix.PCI4S0 4-port ISDN S0 interface",
+"b1b3  Shiva Europe Limited",
+"bd11  Pinnacle Systems, Inc. (Wrong ID)",
+"c001  TSI Telsys",
+"c0a9  Micron/Crucial Technology",
+"c0de  Motorola",
+"c0fe  Motion Engineering, Inc.",
+"ca50  Varian Australia Pty Ltd",
+"cafe  Chrysalis-ITS",
+"	0003  Luna K3 Hardware Security Module",
+"cccc  Catapult Communications",
+"cddd  Tyzx, Inc.",
+"	0101  DeepSea 1 High Speed Stereo Vision Frame Grabber",
+"	0200  DeepSea 2 High Speed Stereo Vision Frame Grabber",
+"d161  Digium, Inc.",
+"	0205  Wildcard TE205P",
+"	0210  Wildcard TE210P",
+"	0405  Wildcard TE405P Quad-Span togglable E1/T1/J1 card 5.0v",
+"	0406  Wildcard TE406P Quad-Span togglable E1/T1/J1 echo cancellation card 5.0v",
+"	0410  Wildcard TE410P Quad-Span togglable E1/T1/J1 card 3.3v",
+"	0411  Wildcard TE411P Quad-Span togglable E1/T1/J1 echo cancellation card 3.3v",
+"	2400  Wildcard TDM2400P",
+"d4d4  Dy4 Systems Inc",
+"	0601  PCI Mezzanine Card",
+"d531  I+ME ACTIA GmbH",
+"d84d  Exsys",
+"dead  Indigita Corporation",
+"deaf  Middle Digital Inc.",
+"	9050  PC Weasel Virtual VGA",
+"	9051  PC Weasel Serial Port",
+"	9052  PC Weasel Watchdog Timer",
+"e000  Winbond",
+"	e000  W89C940",
+"e159  Tiger Jet Network Inc.",
+"	0001  Tiger3XX Modem/ISDN interface",
+"		0059 0001  128k ISDN-S/T Adapter",
+"		0059 0003  128k ISDN-U Adapter",
+"		00a7 0001  TELES.S0/PCI 2.x ISDN Adapter",
+"		8086 0003  Digium X100P/X101P analogue PSTN FXO interface",
+"	0002  Tiger100APC ISDN chipset",
+"e4bf  EKF Elektronik GmbH",
+"e55e  Essence Technology, Inc.",
+"ea01  Eagle Technology",
+"	000a  PCI-773 Temperature Card",
+"	0032  PCI-730 & PC104P-30 Card",
+"	003e  PCI-762 Opto-Isolator Card",
+"	0041  PCI-763 Reed Relay Card",
+"	0043  PCI-769 Opto-Isolator Reed Relay Combo Card",
+"	0046  PCI-766 Analog Output Card",
+"	0052  PCI-703 Analog I/O Card",
+"	0800  PCI-800 Digital I/O Card",
+"ea60  RME",
+"	9896  Digi32",
+"	9897  Digi32 Pro",
+"	9898  Digi32/8",
+"eabb  Aashima Technology B.V.",
+"eace  Endace Measurement Systems, Ltd",
+"	3100  DAG 3.10 OC-3/OC-12",
+"	3200  DAG 3.2x OC-3/OC-12",
+"	320e  DAG 3.2E Fast Ethernet",
+"	340e  DAG 3.4E Fast Ethernet",
+"	341e  DAG 3.41E Fast Ethernet",
+"	3500  DAG 3.5 OC-3/OC-12",
+"	351c  DAG 3.5ECM Fast Ethernet",
+"	4100  DAG 4.10 OC-48",
+"	4110  DAG 4.11 OC-48",
+"	4220  DAG 4.2 OC-48",
+"	422e  DAG 4.2E Dual Gigabit Ethernet",
+"ec80  Belkin Corporation",
+"	ec00  F5D6000",
+"ecc0  Echo Digital Audio Corporation",
+"edd8  ARK Logic Inc",
+"	a091  1000PV [Stingray]",
+"	a099  2000PV [Stingray]",
+"	a0a1  2000MT",
+"	a0a9  2000MI",
+"f1d0  AJA Video",
+"	c0fe  Xena HS/HD-R",
+"	c0ff  Kona/Xena 2",
+"	cafe  Kona SD",
+"	cfee  Xena LS/SD-22-DA/SD-DA",
+"	dcaf  Kona HD",
+"	dfee  Xena HD-DA",
+"	efac  Xena SD-MM/SD-22-MM",
+"	facd  Xena HD-MM",
+"fa57  Interagon AS",
+"	0001  PMC [Pattern Matching Chip]",
+"fab7  Fabric7 Systems, Inc.",
+"febd  Ultraview Corp.",
+"feda  Broadcom Inc",
+"	a0fa  BCM4210 iLine10 HomePNA 2.0",
+"	a10e  BCM4230 iLine10 HomePNA 2.0",
+"fede  Fedetec Inc.",
+"	0003  TABIC PCI v3",
+"fffd  XenSource, Inc.",
+"	0101  PCI Event Channel Controller",
+"fffe  VMWare Inc",
+"	0405  Virtual SVGA 4.0",
+"	0710  Virtual SVGA",
+"ffff  Illegal Vendor ID",
+"C 00  Unclassified device",
+"	00  Non-VGA unclassified device",
+"	01  VGA compatible unclassified device",
+"C 01  Mass storage controller",
+"	00  SCSI storage controller",
+"	01  IDE interface",
+"	02  Floppy disk controller",
+"	03  IPI bus controller",
+"	04  RAID bus controller",
+"	05  ATA controller",
+"		20  ADMA single stepping",
+"		40  ADMA continuous operation",
+"	06  SATA controller",
+"		00  Vendor specific",
+"		01  AHCI 1.0",
+"	07  Serial Attached SCSI controller",
+"	80  Mass storage controller",
+"C 02  Network controller",
+"	00  Ethernet controller",
+"	01  Token ring network controller",
+"	02  FDDI network controller",
+"	03  ATM network controller",
+"	04  ISDN controller",
+"	80  Network controller",
+"C 03  Display controller",
+"	00  VGA compatible controller",
+"		00  VGA",
+"		01  8514",
+"	01  XGA compatible controller",
+"	02  3D controller",
+"	80  Display controller",
+"C 04  Multimedia controller",
+"	00  Multimedia video controller",
+"	01  Multimedia audio controller",
+"	02  Computer telephony device",
+"	03  Audio device",
+"	80  Multimedia controller",
+"C 05  Memory controller",
+"	00  RAM memory",
+"	01  FLASH memory",
+"	80  Memory controller",
+"C 06  Bridge",
+"	00  Host bridge",
+"	01  ISA bridge",
+"	02  EISA bridge",
+"	03  MicroChannel bridge",
+"	04  PCI bridge",
+"		00  Normal decode",
+"		01  Subtractive decode",
+"	05  PCMCIA bridge",
+"	06  NuBus bridge",
+"	07  CardBus bridge",
+"	08  RACEway bridge",
+"		00  Transparent mode",
+"		01  Endpoint mode",
+"	09  Semi-transparent PCI-to-PCI bridge",
+"		40  Primary bus towards host CPU",
+"		80  Secondary bus towards host CPU",
+"	0a  InfiniBand to PCI host bridge",
+"	80  Bridge",
+"C 07  Communication controller",
+"	00  Serial controller",
+"		00  8250",
+"		01  16450",
+"		02  16550",
+"		03  16650",
+"		04  16750",
+"		05  16850",
+"		06  16950",
+"	01  Parallel controller",
+"		00  SPP",
+"		01  BiDir",
+"		02  ECP",
+"		03  IEEE1284",
+"		fe  IEEE1284 Target",
+"	02  Multiport serial controller",
+"	03  Modem",
+"		00  Generic",
+"		01  Hayes/16450",
+"		02  Hayes/16550",
+"		03  Hayes/16650",
+"		04  Hayes/16750",
+"	80  Communication controller",
+"C 08  Generic system peripheral",
+"	00  PIC",
+"		00  8259",
+"		01  ISA PIC",
+"		02  EISA PIC",
+"		10  IO-APIC",
+"		20  IO(X)-APIC",
+"	01  DMA controller",
+"		00  8237",
+"		01  ISA DMA",
+"		02  EISA DMA",
+"	02  Timer",
+"		00  8254",
+"		01  ISA Timer",
+"		02  EISA Timers",
+"	03  RTC",
+"		00  Generic",
+"		01  ISA RTC",
+"	04  PCI Hot-plug controller",
+"	80  System peripheral",
+"C 09  Input device controller",
+"	00  Keyboard controller",
+"	01  Digitizer Pen",
+"	02  Mouse controller",
+"	03  Scanner controller",
+"	04  Gameport controller",
+"		00  Generic",
+"		10  Extended",
+"	80  Input device controller",
+"C 0a  Docking station",
+"	00  Generic Docking Station",
+"	80  Docking Station",
+"C 0b  Processor",
+"	00  386",
+"	01  486",
+"	02  Pentium",
+"	10  Alpha",
+"	20  Power PC",
+"	30  MIPS",
+"	40  Co-processor",
+"C 0c  Serial bus controller",
+"	00  FireWire (IEEE 1394)",
+"		00  Generic",
+"		10  OHCI",
+"	01  ACCESS Bus",
+"	02  SSA",
+"	03  USB Controller",
+"		00  UHCI",
+"		10  OHCI",
+"		20  EHCI",
+"		80  Unspecified",
+"		fe  USB Device",
+"	04  Fibre Channel",
+"	05  SMBus",
+"	06  InfiniBand",
+"C 0d  Wireless controller",
+"	00  IRDA controller",
+"	01  Consumer IR controller",
+"	10  RF controller",
+"	80  Wireless controller",
+"C 0e  Intelligent controller",
+"	00  I2O",
+"C 0f  Satellite communications controller",
+"	00  Satellite TV controller",
+"	01  Satellite audio communication controller",
+"	03  Satellite voice communication controller",
+"	04  Satellite data communication controller",
+"C 10  Encryption controller",
+"	00  Network and computing encryption device",
+"	10  Entertainment encryption device",
+"	80  Encryption controller",
+"C 11  Signal processing controller",
+"	00  DPIO module",
+"	01  Performance counters",
+"	10  Communication synchronizer",
+"	80  Signal processing controller",
+""
+};
Index: uspace/srv/pci/libpci/sysdep.h
===================================================================
--- uspace/srv/pci/libpci/sysdep.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/sysdep.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,26 @@
+/*
+ *	The PCI Library -- System-Dependent Stuff
+ *
+ *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifdef __GNUC__
+#define UNUSED __attribute__((unused))
+#define NONRET __attribute__((noreturn))
+#else
+#define UNUSED
+#define NONRET
+#define inline
+#endif
+
+typedef u8 byte;
+typedef u16 word;
+
+#define cpu_to_le16(x) (x)
+#define cpu_to_le32(x) (x)
+#define le16_to_cpu(x) (x)
+#define le32_to_cpu(x) (x)
Index: uspace/srv/pci/libpci/types.h
===================================================================
--- uspace/srv/pci/libpci/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/libpci/types.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,49 @@
+/*
+ *	The PCI Library -- Types and Format Strings
+ *
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
+ *
+ *	May 8, 2006 - Modified and ported to HelenOS by Jakub Jermar.
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <types.h>
+
+#ifndef PCI_HAVE_Uxx_TYPES
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+
+#ifdef PCI_HAVE_64BIT_ADDRESS
+#include <limits.h>
+#if ULONG_MAX > 0xffffffff
+typedef unsigned long u64;
+#define PCI_U64_FMT "l"
+#else
+typedef unsigned long long u64;
+#define PCI_U64_FMT "ll"
+#endif
+#endif
+
+#endif				/* PCI_HAVE_Uxx_TYPES */
+
+#ifdef PCI_HAVE_64BIT_ADDRESS
+typedef u64 pciaddr_t;
+#define PCIADDR_T_FMT "%08" PCI_U64_FMT "x"
+#define PCIADDR_PORT_FMT "%04" PCI_U64_FMT "x"
+#else
+typedef u32 pciaddr_t;
+#define PCIADDR_T_FMT "%08x"
+#define PCIADDR_PORT_FMT "%04x"
+#endif
+
+#ifdef PCI_ARCH_SPARC64
+/* On sparc64 Linux the kernel reports remapped port addresses and IRQ numbers */
+#undef PCIADDR_PORT_FMT
+#define PCIADDR_PORT_FMT PCIADDR_T_FMT
+#define PCIIRQ_FMT "%08x"
+#else
+#define PCIIRQ_FMT "%d"
+#endif
Index: uspace/srv/pci/pci.c
===================================================================
--- uspace/srv/pci/pci.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/pci.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,88 @@
+/*
+ * HelenOS PCI driver.
+ *
+ * (Based on public domain libpci example.c written by Martin Mares.)
+ * Copyright (c) 2006 Jakub Jermar
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+/**
+ * @addtogroup pci
+ * @{
+ */
+
+#include <stdio.h>
+#include <ddi.h>
+#include <task.h>
+#include <stdlib.h>
+#include <ipc/ipc.h>
+#include <ipc/services.h>
+#include <errno.h>
+
+#include "libpci/pci.h"
+
+#define PCI_CONF1	0xcf8
+#define PCI_CONF1_SIZE	8
+
+#define NAME		"PCI"
+
+static struct pci_access *pacc;
+
+int main(int argc, char *argv[])
+{
+	struct pci_dev *dev;
+	unsigned int c;
+	char buf[80];
+	ipcarg_t ns_in_phone_hash;
+
+	printf("%s: HelenOS PCI driver\n", NAME);
+
+	/*
+	 * Gain control over PCI configuration ports.
+	 */
+	iospace_enable(task_get_id(), (void *) PCI_CONF1, PCI_CONF1_SIZE);
+
+	pacc = pci_alloc();           /* Get the pci_access structure */
+	pci_init(pacc);               /* Initialize the PCI library */
+	pci_scan_bus(pacc);           /* We want to get the list of devices */
+	for(dev=pacc->devices; dev; dev=dev->next) {   /* Iterate over all devices */
+		pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_IRQ);
+		c = pci_read_word(dev, PCI_CLASS_DEVICE); /* Read config register directly */
+		printf("%02x:%02x.%d vendor=%04x device=%04x class=%04x irq=%d base0=%lx\n",
+			dev->bus, dev->dev, dev->func, dev->vendor_id, dev->device_id,
+			c, dev->irq, dev->base_addr[0]);
+		printf("\t%s\n", pci_lookup_name(pacc, buf, sizeof(buf), PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
+			dev->vendor_id, dev->device_id));
+	}
+
+	printf("%s: registering at naming service.\n", NAME);
+	if (ipc_connect_to_me(PHONE_NS, SERVICE_PCI, 0, &ns_in_phone_hash) != 0) {
+		printf("Failed to register %s at naming service.\n", NAME);
+		return -1;
+	}
+
+	printf("%s: accepting connections\n", NAME);
+	while (1) {		
+		ipc_call_t call;
+		ipc_callid_t callid;
+
+		callid = ipc_wait_for_call(&call);
+		switch(IPC_GET_METHOD(call)) {
+		case IPC_M_CONNECT_ME_TO:
+			IPC_SET_RETVAL(call, 0);
+			break;
+		}
+		if (! (callid & IPC_CALLID_NOTIFICATION)) {
+			ipc_answer(callid, &call);
+		}
+		printf("%s: received call from %lX\n", NAME, call.in_phone_hash);
+	}
+
+	pci_cleanup(pacc);
+	return 0;
+}
+
+/**
+ * @}
+ */
Index: uspace/srv/pci/update-ids
===================================================================
--- uspace/srv/pci/update-ids	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/pci/update-ids	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,16 @@
+#! /bin/bash
+
+wget http://pciids.sourceforge.net/v2.2/pci.ids
+
+cat >pci_ids.h <<EOF
+/* DO NOT EDIT, THIS FILE IS AUTOMATICALLY GENERATED */
+char *pci_ids[] = {
+EOF
+
+cat pci.ids | grep -v '^#.*' | grep -v '^$' | tr \" \' | sed -n 's/\(.*\)/"\1",/p' >>pci_ids.h
+
+cat >>pci_ids.h <<EOF
+""
+};
+EOF
+
Index: uspace/srv/rd/Makefile
===================================================================
--- uspace/srv/rd/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/rd/Makefile	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Setup toolchain
+#
+
+LIBC_PREFIX = ../../lib/libc
+SOFTINT_PREFIX = ../../lib/softint
+include $(LIBC_PREFIX)/Makefile.toolchain
+
+LIBS = $(LIBC_PREFIX)/libc.a
+
+## Sources
+#
+
+OUTPUT = rd
+SOURCES = \
+	rd.c
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+
+.PHONY: all clean depend disasm
+
+all: $(OUTPUT) disasm
+
+-include Makefile.depend
+
+clean:
+	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
+
+depend:
+	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
+
+$(OUTPUT): $(OBJECTS) $(LIBS)
+	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld -e __entry_driver $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
+
+disasm:
+	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
+
+%.o: %.S
+	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.s
+	$(AS) $(AFLAGS) $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: uspace/srv/rd/rd.c
===================================================================
--- uspace/srv/rd/rd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/rd/rd.c	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2007 Michal Konopa
+ * Copyright (c) 2007 Martin Jelen
+ * Copyright (c) 2007 Peter Majer
+ * Copyright (c) 2007 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup rd
+ * @{
+ */ 
+
+/**
+ * @file	rd.c
+ * @brief	Initial RAM disk for HelenOS.
+ */
+
+#include <ipc/ipc.h>
+#include <ipc/services.h>
+#include <ipc/ns.h>
+#include <sysinfo.h>
+#include <as.h>
+#include <ddi.h>
+#include <align.h>
+#include <bool.h>
+#include <errno.h>
+#include <async.h>
+#include <align.h>
+#include <async.h>
+#include <futex.h>
+#include "rd.h"
+
+/** Pointer to the ramdisk's image. */
+static void *rd_addr;
+/** Size of the ramdisk. */
+static size_t rd_size;
+
+/**
+ * This futex protects the ramdisk's data.
+ * If we were to serve multiple requests (read + write or several writes)
+ * concurrently (i.e. from two or more threads), each read and write needs to be
+ * protected by this futex.
+ */ 
+atomic_t rd_futex = FUTEX_INITIALIZER;
+
+/** Handle one connection to ramdisk.
+ *
+ * @param iid		Hash of the request that opened the connection.
+ * @param icall		Call data of the request that opened the connection.
+ */
+static void rd_connection(ipc_callid_t iid, ipc_call_t *icall)
+{
+	ipc_callid_t callid;
+	ipc_call_t call;
+	int retval;
+	void *fs_va = NULL;
+	ipcarg_t offset;
+
+	/*
+	 * We allocate VA for communication per connection.
+	 * This allows us to potentionally have more clients and work
+	 * concurrently.
+	 */
+	fs_va = as_get_mappable_page(ALIGN_UP(BLOCK_SIZE, PAGE_SIZE));
+	if (!fs_va) {
+		/*
+		 * Hang up the phone if we cannot proceed any further.
+		 * This is the answer to the call that opened the connection.
+		 */
+		ipc_answer_fast(iid, EHANGUP, 0, 0);
+		return;
+	} else {
+		/*
+		 * Answer the first IPC_M_CONNECT_ME_TO call.
+		 * Return supported block size as ARG1.
+		 */
+		ipc_answer_fast(iid, EOK, BLOCK_SIZE, 0);
+	}
+
+	/*
+	 * Now we wait for the client to send us its communication as_area.
+	 */
+	callid = async_get_call(&call);
+	if (IPC_GET_METHOD(call) == IPC_M_AS_AREA_SEND) {
+		if (IPC_GET_ARG1(call) >= (ipcarg_t) BLOCK_SIZE) {
+			/*
+			 * The client sends an as_area that can absorb the whole
+			 * block.
+			 */
+			ipc_answer_fast(callid, EOK, (uintptr_t) fs_va, 0);
+		} else {
+			/*
+			 * The client offered as_area too small.
+			 * Close the connection.
+			 */
+			ipc_answer_fast(callid, EHANGUP, 0, 0);
+			return;		
+		}
+	} else {
+		/*
+		 * The client doesn't speak the same protocol.
+		 * At this point we can't handle protocol variations.
+		 * Close the connection.
+		 */
+		ipc_answer_fast(callid, EHANGUP, 0, 0);
+		return;
+	}
+	
+	while (1) {
+		callid = async_get_call(&call);
+		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			/*
+			 * The other side has hung up.
+			 * Answer the message and exit the pseudo thread.
+			 */
+			ipc_answer_fast(callid, EOK, 0, 0);
+			return;
+		case RD_READ_BLOCK:
+			offset = IPC_GET_ARG1(call);
+			if (offset * BLOCK_SIZE > rd_size - BLOCK_SIZE) {
+				/*
+				 * Reading past the end of the device.
+				 */
+				retval = ELIMIT;
+				break;
+			}
+			futex_down(&rd_futex);
+			memcpy(fs_va, rd_addr + offset, BLOCK_SIZE);
+			futex_up(&rd_futex);
+			retval = EOK;
+			break;
+		case RD_WRITE_BLOCK:
+			offset = IPC_GET_ARG1(call);
+			if (offset * BLOCK_SIZE > rd_size - BLOCK_SIZE) {
+				/*
+				 * Writing past the end of the device.
+				 */
+				retval = ELIMIT;
+				break;
+			}
+			futex_up(&rd_futex);
+			memcpy(rd_addr + offset, fs_va, BLOCK_SIZE);
+			futex_down(&rd_futex);
+			retval = EOK;
+			break;
+		default:
+			/*
+			 * The client doesn't speak the same protocol.
+			 * Instead of closing the connection, we just ignore
+			 * the call. This can be useful if the client uses a
+			 * newer version of the protocol.
+			 */
+			retval = EINVAL;
+			break;
+		}
+		ipc_answer_fast(callid, retval, 0, 0);
+	}
+}
+
+/** Prepare the ramdisk image for operation. */
+static bool rd_init(void)
+{
+	int retval, flags;
+
+	rd_size = sysinfo_value("rd.size");
+	void *rd_ph_addr = (void *) sysinfo_value("rd.address.physical");
+	
+	if (rd_size == 0)
+		return false;
+	
+	rd_addr = as_get_mappable_page(rd_size);
+	
+	flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
+	retval = physmem_map(rd_ph_addr, rd_addr,
+	    ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);
+
+	if (retval < 0)
+		return false;
+	return true;
+}
+
+int main(int argc, char **argv)
+{
+	if (rd_init()) {
+		ipcarg_t phonead;
+		
+		async_set_client_connection(rd_connection);
+		
+		/* Register service at nameserver */
+		if (ipc_connect_to_me(PHONE_NS, SERVICE_RD, 0, &phonead) != 0)
+			return -1;
+		
+		async_manager();
+		
+		/* Never reached */
+		return 0;
+	}
+	
+	return -1;
+}
+
+/**
+ * @}
+ */ 
Index: uspace/srv/rd/rd.h
===================================================================
--- uspace/srv/rd/rd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
+++ uspace/srv/rd/rd.h	(revision 00acd66d3981789b3f8b04cdd854d29343dd9aa0)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2007 Michal Konopa
+ * Copyright (c) 2007 Martin Jelen
+ * Copyright (c) 2007 Peter Majer
+ * Copyright (c) 2007 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup rd
+ * @{
+ */
+
+/**
+ * @file	rd.h
+ * @brief	Initial RAM disk for HelenOS - header
+ */
+
+/* Basic constants. */
+
+#ifndef RD_RD_H_
+#define RD_RD_H_
+
+#define BLOCK_SIZE	1024	/**< Working block size */
+
+#define RD_BASE		1024
+#define	RD_READ_BLOCK	(RD_BASE + 1)	/**< Method for reading block. */
+#define RD_WRITE_BLOCK	(RD_BASE + 2)	/**< Method for writing block. */
+
+#endif
Index: pace/tester/Makefile
===================================================================
--- uspace/tester/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,83 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-## Setup toolchain
-#
-
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-CFLAGS += -I../kbd/include
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-## Sources
-#
-
-OUTPUT = tester
-SOURCES = tester.c \
-	thread/thread1.c \
-	print/print1.c \
-	fault/fault1.c \
-	fault/fault2.c \
-	ipc/register.c \
-	ipc/connect.c \
-	ipc/send_async.c \
-	ipc/send_sync.c \
-	ipc/answer.c \
-	ipc/hangup.c
-
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/tester/fault/fault1.c
===================================================================
--- uspace/tester/fault/fault1.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,37 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Vana
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "../tester.h"
-
-char * test_fault1(bool quiet)
-{
-	((int *)(0))[1] = 0;
-	
-	return "Survived write to NULL";
-}
Index: pace/tester/fault/fault1.def
===================================================================
--- uspace/tester/fault/fault1.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"fault1",
-	"Write to NULL",
-	&test_fault1,
-	false
-},
Index: pace/tester/fault/fault2.c
===================================================================
--- uspace/tester/fault/fault2.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,40 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Vana
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "../tester.h"
-
-char * test_fault2(bool quiet)
-{
-	volatile long long var;
-	volatile int var1;
-	
-	var1 = *((int *) (((char *) (&var)) + 1));
-	
-	return "Survived unaligned read";
-}
Index: pace/tester/fault/fault2.def
===================================================================
--- uspace/tester/fault/fault2.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"fault2",
-	"Unaligned read",
-	&test_fault2,
-	false
-},
Index: pace/tester/ipc/answer.c
===================================================================
--- uspace/tester/ipc/answer.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <errno.h>
-#include "../tester.h"
-
-char * test_answer(bool quiet)
-{
-	int i,cnt, errn = 0;
-	char c;
-
-	cnt = 0;
-	for (i = 0;i < 50; i++) {
-		if (callids[i]) {
-			printf("%d: %P\n", cnt, callids[i]);
-			cnt++;
-		}
-		if (cnt >= 10)
-			break;
-	}
-	if (!cnt)
-		return;
-	printf("Choose message:\n");
-	do {
-		c = getchar();
-	} while (c < '0' || (c-'0') >= cnt);
-	cnt = c - '0' + 1;
-	
-	for (i = 0; cnt; i++)
-		if (callids[i])
-			cnt--;
-	i -= 1;
-
-	printf("Normal (n) or hangup (h) or error(e) message?\n");
-	do {
-		c = getchar();
-	} while (c != 'n' && c != 'h' && c != 'e');
-	if (c == 'n')
-		errn = 0;
-	else if (c == 'h')
-		errn = EHANGUP;
-	else if (c == 'e')
-		errn = ENOENT;
-	printf("Answering %P\n", callids[i]);
-	ipc_answer_fast(callids[i], errn, 0, 0);
-	callids[i] = 0;
-	
-	return NULL;
-}
Index: pace/tester/ipc/answer.def
===================================================================
--- uspace/tester/ipc/answer.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"answer",
-	"IPC answer message test",
-	&test_answer,
-	true
-},
Index: pace/tester/ipc/connect.c
===================================================================
--- uspace/tester/ipc/connect.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include "../tester.h"
-
-char * test_connect(bool quiet)
-{
-	char c;
-	int svc;
-	int phid;
-
-	printf("Choose one service: 0:10000....9:10009\n");
-	do {
-		c = getchar();
-	} while (c < '0' || c > '9');
-	
-	svc = IPC_TEST_START + c - '0';
-	if (svc == myservice)
-		return "Currently cannot connect to myself, update test";
-	
-	printf("Connecting to %d..", svc);
-	phid = ipc_connect_me_to(PHONE_NS, svc, 0);
-	if (phid > 0) {
-		printf("phoneid: %d\n", phid);
-		phones[phid] = 1;
-	} else
-		return "Error";
-	
-	return NULL;
-}
Index: pace/tester/ipc/connect.def
===================================================================
--- uspace/tester/ipc/connect.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"connect",
-	"IPC connection test (connect to other service)",
-	&test_connect,
-	true
-},
Index: pace/tester/ipc/hangup.c
===================================================================
--- uspace/tester/ipc/hangup.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,51 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <errno.h>
-#include "../tester.h"
-
-char * test_hangup(bool quiet)
-{
-	char c;
-	int res;
-	int phoneid;
-
-	printf("Select phoneid to hangup: 2-9\n");
-	do {
-		c = getchar();
-	} while (c < '2' || c > '9');
-	phoneid = c - '0';
-	
-	printf("Hanging up...");
-	res = ipc_hangup(phoneid);
-	printf("done: %d\n", phoneid);	
-	
-	return NULL;
-}
Index: pace/tester/ipc/hangup.def
===================================================================
--- uspace/tester/ipc/hangup.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"hangup",
-	"IPC hangup test",
-	&test_hangup,
-	true
-},
Index: pace/tester/ipc/register.c
===================================================================
--- uspace/tester/ipc/register.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,87 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <async.h>
-#include "../tester.h"
-
-static void client_connection(ipc_callid_t iid, ipc_call_t *icall)
-{
-	ipc_callid_t callid;
-	ipc_call_t call;
-	ipcarg_t phonehash = icall->in_phone_hash;
-	int retval;
-	int i;
-
-	printf("Connected phone: %P, accepting\n", icall->in_phone_hash);
-	ipc_answer_fast(iid, 0, 0, 0);
-	for (i = 0; i < 1024; i++)
-		if (!connections[i]) {
-			connections[i] = phonehash;
-			break;
-		}
-	
-	while (1) {
-		callid = async_get_call(&call);
-		switch (IPC_GET_METHOD(call)) {
-		case IPC_M_PHONE_HUNGUP:
-			printf("Phone (%P) hung up.\n", phonehash);
-			retval = 0;
-			break;
-		default:
-			printf("Received message from %P: %X\n", phonehash,callid);
-			for (i = 0; i < 1024; i++)
-				if (!callids[i]) {
-					callids[i] = callid;
-					break;
-				}
-			continue;
-		}
-		ipc_answer_fast(callid, retval, 0, 0);
-	}
-}
-
-char * test_register(bool quiet)
-{
-	int i;
-	
-	async_set_client_connection(client_connection);
-
-	for (i = IPC_TEST_START; i < IPC_TEST_START + 10; i++) {
-		ipcarg_t phonead;
-		int res = ipc_connect_to_me(PHONE_NS, i, 0, &phonead);
-		if (!res)
-			break;
-		printf("Failed registering as %d..:%d\n", i, res);
-	}
-	printf("Registered as service: %d\n", i);
-	myservice = i;
-	
-	return NULL;
-}
Index: pace/tester/ipc/register.def
===================================================================
--- uspace/tester/ipc/register.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"register",
-	"IPC registration test",
-	&test_register,
-	true
-},
Index: pace/tester/ipc/send_async.c
===================================================================
--- uspace/tester/ipc/send_async.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include "../tester.h"
-
-static void callback(void *_private, int retval, ipc_call_t *data)
-{
-	printf("Received response to msg %d - retval: %d.\n", _private, retval);
-}
-
-char * test_send_async(bool quiet)
-{
-	int phoneid;
-	int res;
-	static int msgid = 1;
-	char c;
-
-	printf("Select phoneid to send msg: 2-9\n");
-	do {
-		c = getchar();
-	} while (c < '2' || c > '9');
-	phoneid = c - '0';
-
-	ipc_call_async(phoneid, 2000, 0, (void *) msgid, callback, 1);
-	printf("Async sent - msg %d\n", msgid);
-	msgid++;
-	
-	return NULL;
-}
Index: pace/tester/ipc/send_async.def
===================================================================
--- uspace/tester/ipc/send_async.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"send_async",
-	"IPC send async message test",
-	&test_send_async,
-	true
-},
Index: pace/tester/ipc/send_sync.c
===================================================================
--- uspace/tester/ipc/send_sync.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,51 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include "../tester.h"
-
-char * test_send_sync(bool quiet)
-{
-	int phoneid;
-	int res;
-	static int msgid = 1;
-	char c;
-
-	printf("Select phoneid to send msg: 2-9\n");
-	do {
-		c = getchar();
-	} while (c < '2' || c > '9');
-	phoneid = c - '0';
-	
-	printf("Sending msg...");
-	res = ipc_call_sync_2(phoneid, 2000, 0, 0, NULL, NULL);
-	printf("done: %d\n", res);
-	
-	return NULL;
-}
Index: pace/tester/ipc/send_sync.def
===================================================================
--- uspace/tester/ipc/send_sync.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"send_sync",
-	"IPC send sync message test",
-	&test_send_sync,
-	true
-},
Index: pace/tester/print/print1.c
===================================================================
--- uspace/tester/print/print1.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,73 +1,0 @@
-/*
- * Copyright (c) 2005 Josef Cejka
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include "../tester.h"
-
-#define BUFFER_SIZE 32
-
-char * test_print1(bool quiet)
-{
-	if (!quiet) {
-		int retval;
-		unsigned int nat = 0x12345678u;
-		
-		char buffer[BUFFER_SIZE];
-		
-		printf(" text 10.8s %*.*s \n", 5, 3, "text");
-		printf(" very long text 10.8s %10.8s \n", "very long text");
-		printf(" text 8.10s %8.10s \n", "text");
-		printf(" very long text 8.10s %8.10s \n", "very long text");
-		
-		printf(" char: c '%c', 3.2c '%3.2c', -3.2c '%-3.2c', 2.3c '%2.3c', -2.3c '%-2.3c' \n",'a', 'b', 'c', 'd', 'e' );
-		printf(" int: d '%d', 3.2d '%3.2d', -3.2d '%-3.2d', 2.3d '%2.3d', -2.3d '%-2.3d' \n",1, 1, 1, 1, 1 );
-		printf(" -int: d '%d', 3.2d '%3.2d', -3.2d '%-3.2d', 2.3d '%2.3d', -2.3d '%-2.3d' \n",-1, -1, -1, -1, -1 );
-		printf(" 0xint: x '%#x', 5.3x '%#5.3x', -5.3x '%#-5.3x', 3.5x '%#3.5x', -3.5x '%#-3.5x' \n",17, 17, 17, 17, 17 );
-		
-		printf("'%#llx' 64bit, '%#x' 32bit, '%#hhx' 8bit, '%#hx' 16bit, unative_t '%#zx'. '%#llx' 64bit and '%s' string.\n", 0x1234567887654321ll, 0x12345678, 0x12, 0x1234, nat, 0x1234567887654321ull, "Lovely string" );
-		
-		printf(" Print to NULL '%s'\n", NULL);
-		
-		retval = snprintf(buffer, BUFFER_SIZE, "Short text without parameters.");
-		printf("Result is: '%s', retval = %d\n", buffer, retval);
-		
-		retval = snprintf(buffer, BUFFER_SIZE, "Very very very long text without parameters.");
-		printf("Result is: '%s', retval = %d\n", buffer, retval);
-		
-		printf("Print short text to %d char long buffer via snprintf.\n", BUFFER_SIZE);
-		retval = snprintf(buffer, BUFFER_SIZE, "Short %s", "text");
-		printf("Result is: '%s', retval = %d\n", buffer, retval);
-		
-		printf("Print long text to %d char long buffer via snprintf.\n", BUFFER_SIZE);
-		retval = snprintf(buffer, BUFFER_SIZE, "Very long %s. This text`s length is more than %d. We are interested in the result.", "text" , BUFFER_SIZE);
-		printf("Result is: '%s', retval = %d\n", buffer, retval);
-	}
-	
-	return NULL;
-}
Index: pace/tester/print/print1.def
===================================================================
--- uspace/tester/print/print1.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"print1",
-	"Printf test",
-	&test_print1,
-	true
-},
Index: pace/tester/tester.c
===================================================================
--- uspace/tester/tester.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,121 +1,0 @@
-/*
- * Copyright (c) 2006 Ondrej Palkovsky
- * Copyright (c) 2007 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup tester User space Tester
- * @brief	User space testing infrastructure.
- * @{
- */ 
-/**
- * @file
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include "tester.h"
-
-int myservice = 0;
-int phones[MAX_PHONES];
-int connections[MAX_CONNECTIONS];
-ipc_callid_t callids[MAX_CONNECTIONS];
-
-test_t tests[] = {
-#include "thread/thread1.def"
-#include "print/print1.def"
-#include "fault/fault1.def"
-#include "fault/fault2.def"
-#include "ipc/register.def"
-#include "ipc/connect.def"
-#include "ipc/send_async.def"
-#include "ipc/send_sync.def"
-#include "ipc/answer.def"
-#include "ipc/hangup.def"
-	{NULL, NULL, NULL}
-};
-
-static bool run_test(test_t *test)
-{
-	printf("%s\t\t%s\n", test->name, test->desc);
-	
-	/* Execute the test */
-	char * ret = test->entry(false);
-	
-	if (ret == NULL) {
-		printf("Test passed\n\n");
-		return true;
-	}
-
-	printf("%s\n\n", ret);
-	return false;
-}
-
-static void run_safe_tests(void)
-{
-}
-
-static void list_tests(void)
-{
-	test_t *test;
-	char c = 'a';
-	
-	for (test = tests; test->name != NULL; test++, c++)
-		printf("%c\t%s\t\t%s%s\n", c, test->name, test->desc, (test->safe ? "" : " (unsafe)"));
-	
-	printf("*\t\t\tRun all safe tests\n");
-}
-
-int main(void)
-{
-	while (1) {
-		char c;
-		test_t *test;
-		
-		list_tests();
-		printf("> ");
-		
-		c = getchar();
-		printf("%c\n", c);
-		
-		if ((c >= 'a') && (c <= 'z')) {
-			for (test = tests; test->name != NULL; test++, c--)
-				if (c == 'a')
-					break;
-			
-			if (c > 'a')
-				printf("Unknown test\n\n");
-			else
-				run_test(test);
-		} else if (c == '*')
-			run_safe_tests();
-		else
-			printf("Invalid test\n\n");
-	}
-}
-
-/** @}
- */
Index: pace/tester/tester.h
===================================================================
--- uspace/tester/tester.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Copyright (c) 2007 Martin Decky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup tester
- * @{
- */
-/** @file
- */
-
-#ifndef TESTER_H_
-#define TESTER_H_
-
-#include <types.h>
-#include <bool.h>
-#include <ipc/ipc.h>
-
-#define IPC_TEST_START	10000
-#define MAX_PHONES		20
-#define MAX_CONNECTIONS 50
-
-extern int myservice;
-extern int phones[MAX_PHONES];
-extern int connections[MAX_CONNECTIONS];
-extern ipc_callid_t callids[MAX_CONNECTIONS];
-
-typedef char * (* test_entry_t)(bool);
-
-typedef struct {
-	char * name;
-	char * desc;
-	test_entry_t entry;
-	bool safe;
-} test_t;
-
-extern char * test_thread1(bool quiet);
-extern char * test_print1(bool quiet);
-extern char * test_fault1(bool quiet);
-extern char * test_fault2(bool quiet);
-extern char * test_register(bool quiet);
-extern char * test_connect(bool quiet);
-extern char * test_send_async(bool quiet);
-extern char * test_send_sync(bool quiet);
-extern char * test_answer(bool quiet);
-extern char * test_hangup(bool quiet);
-
-extern test_t tests[];
-
-#endif
-
-/** @}
- */
Index: pace/tester/thread/thread1.c
===================================================================
--- uspace/tester/thread/thread1.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,83 +1,0 @@
-/*
- * Copyright (c) 2005 Jakub Vana
- * Copyright (c) 2005 Jakub Jermar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define THREADS 5
-
-#include <atomic.h>
-#include <thread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include "../tester.h"
-
-static atomic_t finish;
-static atomic_t threads_finished;
-static bool sh_quiet;
-
-static void threadtest(void *data)
-{
-	thread_detach(thread_get_id());
-
-	while (atomic_get(&finish)) {
-		if (!sh_quiet)
-			printf("%llu ", thread_get_id());
-		usleep(100000);
-	}
-	atomic_inc(&threads_finished);
-}
-
-char * test_thread1(bool quiet)
-{
-	unsigned int i, total = 0;
-	sh_quiet = quiet;
-	
-	atomic_set(&finish, 1);
-	atomic_set(&threads_finished, 0);
-
-	for (i = 0; i < THREADS; i++) {  
-		if (thread_create(threadtest, NULL, "threadtest", NULL) < 0) {
-			if (!quiet)
-				printf("Could not create thread %d\n", i);
-			break;
-		}
-		total++;
-	}
-	
-	if (!quiet)
-		printf("Running threads for 10 seconds...\n");
-	sleep(10);
-	
-	atomic_set(&finish, 0);
-	while (atomic_get(&threads_finished) < total) {
-		if (!quiet)
-			printf("Threads left: %d\n", total - atomic_get(&threads_finished));
-		sleep(1);
-	}
-	
-	return NULL;
-}
Index: pace/tester/thread/thread1.def
===================================================================
--- uspace/tester/thread/thread1.def	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,6 +1,0 @@
-{
-	"thread1",
-	"Thread test",
-	&test_thread1,
-	true
-},
Index: pace/tetris/Makefile
===================================================================
--- uspace/tetris/Makefile	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,35 +1,0 @@
-LIBC_PREFIX = ../libc
-SOFTINT_PREFIX = ../softint
-include $(LIBC_PREFIX)/Makefile.toolchain
-
-LIBS = $(LIBC_PREFIX)/libc.a
-
-OUTPUT = tetris
-SOURCES = shapes.c scores.c input.c tetris.c screen.c
-OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
-
-.PHONY: all clean depend disasm
-
-all: $(OUTPUT) disasm
-
--include Makefile.depend
-
-depend:
-	$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
-
-$(OUTPUT): $(OBJECTS) $(LIBS)
-	$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
-
-clean:
-	-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend *.o
-disasm:
-	$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm
-
-%.o: %.S
-	$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
-
-%.o: %.s
-	$(AS) $(AFLAGS) $< -o $@
-
-%.o: %.c
-	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: pace/tetris/input.c
===================================================================
--- uspace/tetris/input.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,187 +1,0 @@
-/*	$OpenBSD: input.c,v 1.12 2005/04/13 02:33:08 deraadt Exp $	*/
-/*    $NetBSD: input.c,v 1.3 1996/02/06 22:47:33 jtc Exp $    */
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)input.c	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-/*
- * Tetris input.
- */
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <stdio.h>
-
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "input.h"
-#include "tetris.h"
-
-#include <async.h>
-#include "../console/console.h"
-
-/* return true iff the given timeval is positive */
-#define	TV_POS(tv) \
-	((tv)->tv_sec > 0 || ((tv)->tv_sec == 0 && (tv)->tv_usec > 0))
-
-/* subtract timeval `sub' from `res' */
-#define	TV_SUB(res, sub) \
-	(res)->tv_sec -= (sub)->tv_sec; \
-	(res)->tv_usec -= (sub)->tv_usec; \
-	if ((res)->tv_usec < 0) { \
-		(res)->tv_usec += 1000000; \
-		(res)->tv_sec--; \
-	}
-
-/* We will use a hack here - if lastchar is non-zero, it is
- * the last character read. We will somehow simulate the select
- * semantics.
- */
-static aid_t getchar_inprog = 0;
-static char lastchar = '\0';
-
-/*
- * Do a `read wait': select for reading from stdin, with timeout *tvp.
- * On return, modify *tvp to reflect the amount of time spent waiting.
- * It will be positive only if input appeared before the time ran out;
- * otherwise it will be zero or perhaps negative.
- *
- * If tvp is nil, wait forever, but return if select is interrupted.
- *
- * Return 0 => no input, 1 => can read() from stdin
- *
- */
-int
-rwait(struct timeval *tvp)
-{
-	struct timeval starttv, endtv, *s;
-	static ipc_call_t charcall;
-	ipcarg_t rc;
-
-	/*
-	 * Someday, select() will do this for us.
-	 * Just in case that day is now, and no one has
-	 * changed this, we use a temporary.
-	 */
-	if (tvp) {
-		(void) gettimeofday(&starttv, NULL);
-		endtv = *tvp;
-		s = &endtv;
-	} else
-		s = NULL;
-
-	if (!lastchar) {
-		if (!getchar_inprog)
-			getchar_inprog = async_send_2(1,CONSOLE_GETCHAR,0,0,&charcall);
-		if (!s) 
-			async_wait_for(getchar_inprog, &rc);
-		else if (async_wait_timeout(getchar_inprog, &rc, s->tv_usec) == ETIMEOUT) {
-			tvp->tv_sec = 0;
-			tvp->tv_usec = 0;
-			return (0);
-		}
-		getchar_inprog = 0;
-		if (rc) {
-			stop("end of file, help");
-		}
-		lastchar = IPC_GET_ARG1(charcall);
-	}
-	if (tvp) {
-		/* since there is input, we may not have timed out */
-		(void) gettimeofday(&endtv, NULL);
-		TV_SUB(&endtv, &starttv);
-		TV_SUB(tvp, &endtv);	/* adjust *tvp by elapsed time */
-	}
-	return (1);
-}
-
-/*
- * `sleep' for the current turn time (using select).
- * Eat any input that might be available.
- */
-void
-tsleep(void)
-{
-	struct timeval tv;
-
-	tv.tv_sec = 0;
-	tv.tv_usec = fallrate;
-	while (TV_POS(&tv))
-		if (rwait(&tv)) {
-			lastchar = '\0';
-		} else
-			break;
-}
-
-/*
- * getchar with timeout.
- */
-int
-tgetchar(void)
-{
-	static struct timeval timeleft;
-	char c;
-
-	/*
-	 * Reset timeleft to fallrate whenever it is not positive.
-	 * In any case, wait to see if there is any input.  If so,
-	 * take it, and update timeleft so that the next call to
-	 * tgetchar() will not wait as long.  If there is no input,
-	 * make timeleft zero or negative, and return -1.
-	 *
-	 * Most of the hard work is done by rwait().
-	 */
-	if (!TV_POS(&timeleft)) {
-		faster();	/* go faster */
-		timeleft.tv_sec = 0;
-		timeleft.tv_usec = fallrate;
-	}
-	if (!rwait(&timeleft))
-		return (-1);
-	c = lastchar;
-	lastchar = '\0';
-	return ((int)(unsigned char)c);
-}
-
-/** @}
- */
-
Index: pace/tetris/input.h
===================================================================
--- uspace/tetris/input.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,50 +1,0 @@
-/*	$OpenBSD: input.h,v 1.5 2003/06/03 03:01:41 millert Exp $	*/
-/*	$NetBSD: input.h,v 1.2 1995/04/22 07:42:36 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)input.h	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-int	rwait(struct timeval *);
-int	tgetchar(void);
-void	tsleep(void);
-
-/** @}
- */
-
Index: pace/tetris/pathnames.h
===================================================================
--- uspace/tetris/pathnames.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*	$OpenBSD: pathnames.h,v 1.3 2003/06/03 03:01:41 millert Exp $	*/
-/*	$NetBSD: pathnames.h,v 1.2 1995/04/22 07:42:37 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)pathnames.h	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-#define _PATH_SCOREFILE	"/var/games/tetris.scores"
-
-
-/** @}
- */
-
Index: pace/tetris/scores.c
===================================================================
--- uspace/tetris/scores.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,543 +1,0 @@
-/*	$OpenBSD: scores.c,v 1.11 2006/04/20 03:25:36 ray Exp $	*/
-/*	$NetBSD: scores.c,v 1.2 1995/04/22 07:42:38 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)scores.c	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-/*
- * Score code for Tetris, by Darren Provine (kilroy@gboro.glassboro.edu)
- * modified 22 January 1992, to limit the number of entries any one
- * person has.
- *
- * Major whacks since then.
- */
-#include <errno.h>
-/* #include <err.h> */
-/* #include <fcntl.h> */
-/* #include <pwd.h> */
- #include <stdio.h>
-/* #include <stdlib.h> */
-#include <string.h>
-/* #include <time.h> */
-/* #include <term.h> */
-/* #include <unistd.h> */
-/* #include <sys/param.h> */
-/* #include <sys/stat.h> */
-/* #include <sys/types.h> */
-
-#include "pathnames.h"
-#include "screen.h"
-#include "tetris.h"
-#include "scores.h"
-
-/*
- * Within this code, we can hang onto one extra "high score", leaving
- * room for our current score (whether or not it is high).
- *
- * We also sometimes keep tabs on the "highest" score on each level.
- * As long as the scores are kept sorted, this is simply the first one at
- * that level.
- */
-#define NUMSPOTS (MAXHISCORES + 1)
-#define	NLEVELS (MAXLEVEL + 1)
-
-/* static time_t now; */
-/* static int nscores; */
-/* static int gotscores; */
-/* static struct highscore scores[NUMSPOTS]; */
-static struct highscore scores[NUMSPOTS];
-
-/* static int checkscores(struct highscore *, int); */
-/* static int cmpscores(const void *, const void *); */
-/* static void getscores(FILE **); */
-/* static void printem(int, int, struct highscore *, int, const char *); */
-/* static char *thisuser(void); */
-
-void showscores(int firstgame)
-{
-	int i;
-	
-	clear_screen();
-	moveto(10, 0);
-	printf("\tRank \tLevel \tName\t                     points\n");
-	printf("\t========================================================\n");
-	for (i = 0; i < NUMSPOTS - 1; i++) {
-		printf("\t%6d %6d %-16s %20d\n", i+1, scores[i].hs_level, scores[i].hs_name, scores[i].hs_score);
-	}
-	if (!firstgame) {
-		printf("\t========================================================\n");
-		printf("\t  Last %6d %-16s %20d\n", scores[NUMSPOTS - 1].hs_level, scores[NUMSPOTS - 1].hs_name, scores[NUMSPOTS - 1].hs_score);
-	}
-	printf("\n\n\n\n\tPress any key to return to main menu.");
-	getchar();
-}
-
-/** Copy from hiscore table score with index src to dest
- *
- */
-static void copyhiscore(int dest, int src)
-{
-	strcpy(scores[dest].hs_name, scores[src].hs_name);
-	scores[dest].hs_score = scores[src].hs_score; 	
-	scores[dest].hs_level = scores[src].hs_level; 
-}
-
-void insertscore(int score, int level)
-{
-	int i,j;
-	int key;
-
-	
-	clear_screen();
-	moveto(10 , 10);
-	puts("Insert your name: ");
-	strncpy(scores[NUMSPOTS - 1].hs_name, "Player", MAXLOGNAME);
-	i = 6;
-
-	moveto(10 , 28);
-	printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................");
-	key = getchar();	
-	while(key != '\n') {
-		if (key == '\b') {
-			if (i > 0) 
-				scores[NUMSPOTS - 1].hs_name[--i] = '\0';	
-		} else {
-			if (i < (MAXLOGNAME - 1))
-				scores[NUMSPOTS - 1].hs_name[i++] = key;	
-				scores[NUMSPOTS - 1].hs_name[i] = '\0';	
-		}
-		
-		moveto(10 , 28);
-		printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................");
-	
-		key = getchar();	
-	}
-	
-	scores[NUMSPOTS - 1].hs_score = score;	
-	scores[NUMSPOTS - 1].hs_level = level;
-	
-	i = NUMSPOTS-1;	
-	while ((i > 0) && (scores[i - 1].hs_score < score))
-		i--;
-
-	for (j = NUMSPOTS - 2; j > i; j--) {
-		copyhiscore(j,j-1);
-	}
-	copyhiscore(i, NUMSPOTS - 1);	
-}
-
-void initscores(void)
-{
-	int i;
-	for(i = 0; i < NUMSPOTS; i++) {
-		strncpy(scores[i].hs_name, "HelenOS Team", MAXLOGNAME);
-		scores[i].hs_score = (NUMSPOTS - i) * 200;	
-		scores[i].hs_level = (i + 1 > MAXLEVEL?MAXLEVEL:i + 1);
-	}
-}
-
-/*
- * Read the score file.  Can be called from savescore (before showscores)
- * or showscores (if savescore will not be called).  If the given pointer
- * is not NULL, sets *fpp to an open file pointer that corresponds to a
- * read/write score file that is locked with LOCK_EX.  Otherwise, the
- * file is locked with LOCK_SH for the read and closed before return.
- *
- * Note, we assume closing the stdio file releases the lock.
- */
-/* static void */
-/* getscores(FILE **fpp) */
-/* { */
-/* 	int sd, mint, lck, mask, i; */
-/* 	char *mstr, *human; */
-/* 	FILE *sf; */
-
-/* 	if (fpp != NULL) { */
-/* 		mint = O_RDWR | O_CREAT; */
-/* 		mstr = "r+"; */
-/* 		human = "read/write"; */
-/* 		lck = LOCK_EX; */
-/* 	} else { */
-/* 		mint = O_RDONLY; */
-/* 		mstr = "r"; */
-/* 		human = "reading"; */
-/* 		lck = LOCK_SH; */
-/* 	} */
-/* 	setegid(egid); */
-/* 	mask = umask(S_IWOTH); */
-/* 	sd = open(_PATH_SCOREFILE, mint, 0666); */
-/* 	(void)umask(mask); */
-/* 	setegid(gid); */
-/* 	if (sd < 0) { */
-/* 		if (fpp == NULL) { */
-/* 			nscores = 0; */
-/* 			return; */
-/* 		} */
-/* 		err(1, "cannot open %s for %s", _PATH_SCOREFILE, human); */
-/* 	} */
-/* 	setegid(egid); */
-/* 	if ((sf = fdopen(sd, mstr)) == NULL) */
-/* 		err(1, "cannot fdopen %s for %s", _PATH_SCOREFILE, human); */
-/* 	setegid(gid); */
-
-/* 	/\* */
-/* 	 * Grab a lock. */
-/* 	 *\/ */
-/* 	if (flock(sd, lck)) */
-/* 		warn("warning: score file %s cannot be locked", */
-/* 		    _PATH_SCOREFILE); */
-
-/* 	nscores = fread(scores, sizeof(scores[0]), MAXHISCORES, sf); */
-/* 	if (ferror(sf)) */
-/* 		err(1, "error reading %s", _PATH_SCOREFILE); */
-/* 	for (i = 0; i < nscores; i++) */
-/* 		if (scores[i].hs_level < MINLEVEL || */
-/* 		    scores[i].hs_level > MAXLEVEL) */
-/* 			errx(1, "scorefile %s corrupt", _PATH_SCOREFILE); */
-
-/* 	if (fpp) */
-/* 		*fpp = sf; */
-/* 	else */
-/* 		(void)fclose(sf); */
-/* } */
-
-void
-savescore(int level)
-{
-	return;
-}
-/* 	struct highscore *sp; */
-/* 	int i; */
-/* 	int change; */
-/* 	FILE *sf; */
-/* 	const char *me; */
-
-/* 	getscores(&sf); */
-/* 	gotscores = 1; */
-/* 	(void)time(&now); */
-
-/* 	/\* */
-/* 	 * Allow at most one score per person per level -- see if we */
-/* 	 * can replace an existing score, or (easiest) do nothing. */
-/* 	 * Otherwise add new score at end (there is always room). */
-/* 	 *\/ */
-/* 	change = 0; */
-/* 	me = thisuser(); */
-/* 	for (i = 0, sp = &scores[0]; i < nscores; i++, sp++) { */
-/* 		if (sp->hs_level != level || strcmp(sp->hs_name, me) != 0) */
-/* 			continue; */
-/* 		if (score > sp->hs_score) { */
-/* 			(void)printf("%s bettered %s %d score of %d!\n", */
-/* 			    "\nYou", "your old level", level, */
-/* 			    sp->hs_score * sp->hs_level); */
-/* 			sp->hs_score = score;	/\* new score *\/ */
-/* 			sp->hs_time = now;	/\* and time *\/ */
-/* 			change = 1; */
-/* 		} else if (score == sp->hs_score) { */
-/* 			(void)printf("%s tied %s %d high score.\n", */
-/* 			    "\nYou", "your old level", level); */
-/* 			sp->hs_time = now;	/\* renew it *\/ */
-/* 			change = 1;		/\* gotta rewrite, sigh *\/ */
-/* 		} /\* else new score < old score: do nothing *\/ */
-/* 		break; */
-/* 	} */
-/* 	if (i >= nscores) { */
-/* 		strlcpy(sp->hs_name, me, sizeof sp->hs_name); */
-/* 		sp->hs_level = level; */
-/* 		sp->hs_score = score; */
-/* 		sp->hs_time = now; */
-/* 		nscores++; */
-/* 		change = 1; */
-/* 	} */
-
-/* 	if (change) { */
-/* 		/\* */
-/* 		 * Sort & clean the scores, then rewrite. */
-/* 		 *\/ */
-/* 		nscores = checkscores(scores, nscores); */
-/* 		rewind(sf); */
-/* 		if (fwrite(scores, sizeof(*sp), nscores, sf) != nscores || */
-/* 		    fflush(sf) == EOF) */
-/* 			warnx("error writing %s: %s\n\t-- %s", */
-/* 			    _PATH_SCOREFILE, strerror(errno), */
-/* 			    "high scores may be damaged"); */
-/* 	} */
-/* 	(void)fclose(sf);	/\* releases lock *\/ */
-/* } */
-
-/*
- * Get login name, or if that fails, get something suitable.
- * The result is always trimmed to fit in a score.
- */
-/* static char * */
-/* thisuser(void) */
-/* { */
-/* 	const char *p; */
-/* 	struct passwd *pw; */
-/* 	static char u[sizeof(scores[0].hs_name)]; */
-
-/* 	if (u[0]) */
-/* 		return (u); */
-/* 	p = getlogin(); */
-/* 	if (p == NULL || *p == '\0') { */
-/* 		pw = getpwuid(getuid()); */
-/* 		if (pw != NULL) */
-/* 			p = pw->pw_name; */
-/* 		else */
-/* 			p = "  ???"; */
-/* 	} */
-/* 	strlcpy(u, p, sizeof(u)); */
-/* 	return (u); */
-/* } */
-
-/*
- * Score comparison function for qsort.
- *
- * If two scores are equal, the person who had the score first is
- * listed first in the highscore file.
- */
-/* static int */
-/* cmpscores(const void *x, const void *y) */
-/* { */
-/* 	const struct highscore *a, *b; */
-/* 	long l; */
-
-/* 	a = x; */
-/* 	b = y; */
-/* 	l = (long)b->hs_level * b->hs_score - (long)a->hs_level * a->hs_score; */
-/* 	if (l < 0) */
-/* 		return (-1); */
-/* 	if (l > 0) */
-/* 		return (1); */
-/* 	if (a->hs_time < b->hs_time) */
-/* 		return (-1); */
-/* 	if (a->hs_time > b->hs_time) */
-/* 		return (1); */
-/* 	return (0); */
-/* } */
-
-/*
- * If we've added a score to the file, we need to check the file and ensure
- * that this player has only a few entries.  The number of entries is
- * controlled by MAXSCORES, and is to ensure that the highscore file is not
- * monopolised by just a few people.  People who no longer have accounts are
- * only allowed the highest score.  Scores older than EXPIRATION seconds are
- * removed, unless they are someone's personal best.
- * Caveat:  the highest score on each level is always kept.
- */
-/* static int */
-/* checkscores(struct highscore *hs, int num) */
-/* { */
-/* 	struct highscore *sp; */
-/* 	int i, j, k, numnames; */
-/* 	int levelfound[NLEVELS]; */
-/* 	struct peruser { */
-/* 		char *name; */
-/* 		int times; */
-/* 	} count[NUMSPOTS]; */
-/* 	struct peruser *pu; */
-
-/* 	/\* */
-/* 	 * Sort so that highest totals come first. */
-/* 	 * */
-/* 	 * levelfound[i] becomes set when the first high score for that */
-/* 	 * level is encountered.  By definition this is the highest score. */
-/* 	 *\/ */
-/* 	qsort((void *)hs, nscores, sizeof(*hs), cmpscores); */
-/* 	for (i = MINLEVEL; i < NLEVELS; i++) */
-/* 		levelfound[i] = 0; */
-/* 	numnames = 0; */
-/* 	for (i = 0, sp = hs; i < num;) { */
-/* 		/\* */
-/* 		 * This is O(n^2), but do you think we care? */
-/* 		 *\/ */
-/* 		for (j = 0, pu = count; j < numnames; j++, pu++) */
-/* 			if (strcmp(sp->hs_name, pu->name) == 0) */
-/* 				break; */
-/* 		if (j == numnames) { */
-/* 			/\* */
-/* 			 * Add new user, set per-user count to 1. */
-/* 			 *\/ */
-/* 			pu->name = sp->hs_name; */
-/* 			pu->times = 1; */
-/* 			numnames++; */
-/* 		} else { */
-/* 			/\* */
-/* 			 * Two ways to keep this score: */
-/* 			 * - Not too many (per user), still has acct, & */
-/* 			 *	score not dated; or */
-/* 			 * - High score on this level. */
-/* 			 *\/ */
-/* 			if ((pu->times < MAXSCORES && */
-/* 			     getpwnam(sp->hs_name) != NULL && */
-/* 			     sp->hs_time + EXPIRATION >= now) || */
-/* 			    levelfound[sp->hs_level] == 0) */
-/* 				pu->times++; */
-/* 			else { */
-/* 				/\* */
-/* 				 * Delete this score, do not count it, */
-/* 				 * do not pass go, do not collect $200. */
-/* 				 *\/ */
-/* 				num--; */
-/* 				for (k = i; k < num; k++) */
-/* 					hs[k] = hs[k + 1]; */
-/* 				continue; */
-/* 			} */
-/* 		} */
-/* 		levelfound[sp->hs_level] = 1; */
-/* 		i++, sp++; */
-/* 	} */
-/* 	return (num > MAXHISCORES ? MAXHISCORES : num); */
-/* } */
-
-/*
- * Show current scores.  This must be called after savescore, if
- * savescore is called at all, for two reasons:
- * - Showscores munches the time field.
- * - Even if that were not the case, a new score must be recorded
- *   before it can be shown anyway.
- */
-/*
-void
-showscores(int level)
-{
-	return;
-}
-*/
-/* 	struct highscore *sp; */
-/* 	int i, n, c; */
-/* 	const char *me; */
-/* 	int levelfound[NLEVELS]; */
-
-/* 	if (!gotscores) */
-/* 		getscores((FILE **)NULL); */
-/* 	(void)printf("\n\t\t    Tetris High Scores\n"); */
-
-/* 	/\* */
-/* 	 * If level == 0, the person has not played a game but just asked for */
-/* 	 * the high scores; we do not need to check for printing in highlight */
-/* 	 * mode.  If SOstr is null, we can't do highlighting anyway. */
-/* 	 *\/ */
-/* 	me = level && SOstr ? thisuser() : NULL; */
-
-/* 	/\* */
-/* 	 * Set times to 0 except for high score on each level. */
-/* 	 *\/ */
-/* 	for (i = MINLEVEL; i < NLEVELS; i++) */
-/* 		levelfound[i] = 0; */
-/* 	for (i = 0, sp = scores; i < nscores; i++, sp++) { */
-/* 		if (levelfound[sp->hs_level]) */
-/* 			sp->hs_time = 0; */
-/* 		else { */
-/* 			sp->hs_time = 1; */
-/* 			levelfound[sp->hs_level] = 1; */
-/* 		} */
-/* 	} */
-
-/* 	/\* */
-/* 	 * Page each screenful of scores. */
-/* 	 *\/ */
-/* 	for (i = 0, sp = scores; i < nscores; sp += n) { */
-/* 		n = 20; */
-/* 		if (i + n > nscores) */
-/* 			n = nscores - i; */
-/* 		printem(level, i + 1, sp, n, me); */
-/* 		if ((i += n) < nscores) { */
-/* 			(void)printf("\nHit RETURN to continue."); */
-/* 			(void)fflush(stdout); */
-/* 			while ((c = getchar()) != '\n') */
-/* 				if (c == EOF) */
-/* 					break; */
-/* 			(void)printf("\n"); */
-/* 		} */
-/* 	} */
-
-/* 	if (nscores == 0) */
-/* 		printf("\t\t\t      - none to date.\n"); */
-/* } */
-
-/* static void */
-/* printem(int level, int offset, struct highscore *hs, int n, const char *me) */
-/* { */
-/* 	struct highscore *sp; */
-/* 	int row, highlight, i; */
-/* 	char buf[100]; */
-/* #define	TITLE "Rank  Score   Name                          (points/level)" */
-/* #define	TITL2 "==========================================================" */
-
-/* 	printf("%s\n%s\n", TITLE, TITL2); */
-
-/* 	highlight = 0; */
-
-/* 	for (row = 0; row < n; row++) { */
-/* 		sp = &hs[row]; */
-/* 		(void)snprintf(buf, sizeof(buf), */
-/* 		    "%3d%c %6d  %-31s (%6d on %d)\n", */
-/* 		    row + offset, sp->hs_time ? '*' : ' ', */
-/* 		    sp->hs_score * sp->hs_level, */
-/* 		    sp->hs_name, sp->hs_score, sp->hs_level); */
-/* 		/\* Print leaders every three lines *\/ */
-/* 		if ((row + 1) % 3 == 0) { */
-/* 			for (i = 0; i < sizeof(buf); i++) */
-/* 				if (buf[i] == ' ') */
-/* 					buf[i] = '_'; */
-/* 		} */
-/* 		/\* */
-/* 		 * Highlight if appropriate.  This works because */
-/* 		 * we only get one score per level. */
-/* 		 *\/ */
-/* 		if (me != NULL && */
-/* 		    sp->hs_level == level && */
-/* 		    sp->hs_score == score && */
-/* 		    strcmp(sp->hs_name, me) == 0) { */
-/* 			putpad(SOstr); */
-/* 			highlight = 1; */
-/* 		} */
-/* 		(void)printf("%s", buf); */
-/* 		if (highlight) { */
-/* 			putpad(SEstr); */
-/* 			highlight = 0; */
-/* 		} */
-/* 	} */
-/* } */
-
-/** @}
- */
-
Index: pace/tetris/scores.h
===================================================================
--- uspace/tetris/scores.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/*	$OpenBSD: scores.h,v 1.5 2003/06/03 03:01:41 millert Exp $	*/
-/*	$NetBSD: scores.h,v 1.2 1995/04/22 07:42:40 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)scores.h	8.1 (Berkeley) 5/31/93
- */
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-
-/*
- * Tetris scores.
- */
-#include <sys/time.h>
-#define MAXLOGNAME 16
-struct highscore {
-	char	hs_name[MAXLOGNAME + 1];	/* login name */
-	int	hs_score;	/* raw score */
-	int	hs_level;	/* play level */
-//	time_t	hs_time;	/* time at game end */
-};
-
-#define MAXHISCORES	10
-//#define MAXSCORES	9	/* maximum high score entries per person */
-//#define	EXPIRATION	(5L * 365 * 24 * 60 * 60)
-
-void savescore(int);
-void showscores(int);
-void insertscore(int score, int level);
-void initscores(void);
-
-/** @}
- */
-
Index: pace/tetris/screen.c
===================================================================
--- uspace/tetris/screen.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,312 +1,0 @@
-/*	$OpenBSD: screen.c,v 1.13 2006/04/20 03:25:36 ray Exp $	*/
-/*	$NetBSD: screen.c,v 1.4 1995/04/29 01:11:36 mycroft Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)screen.c	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-/*
- * Tetris screen control.
- */
-
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <io/stream.h>
-
-
-#include <async.h>
-#include "screen.h"
-#include "tetris.h"
-#include "../console/console.h"
-
-static cell curscreen[B_SIZE];	/* 1 => standout (or otherwise marked) */
-static int curscore;
-static int isset;		/* true => terminal is in game mode */
-
-
-/*
- * putstr() is for unpadded strings (either as in termcap(5) or
- * simply literal strings); 
- */
-static inline void putstr(char *s)
-{
-	while (*s)
-		putchar(*(s++));
-}
-
-static int con_phone;
-
-
-
-static void set_style(int fgcolor, int bgcolor)
-{
-	async_msg_2(con_phone, CONSOLE_SET_STYLE, fgcolor, bgcolor);
-}
-
-static void start_standout(void)
-{
-	set_style(0xf0f0f0, 0);
-}
-
-static void resume_normal(void)
-{
-	set_style(0, 0xf0f0f0);
-}
-
-
-void clear_screen(void)
-{
-	async_msg(con_phone, CONSOLE_CLEAR, 0);
-	moveto(0,0);
-}
-
-/*
- * Clear the screen, forgetting the current contents in the process.
- */
-void
-scr_clear(void)
-{
-
-	resume_normal();
-	async_msg(con_phone, CONSOLE_CLEAR, 0);
-	curscore = -1;
-	memset((char *)curscreen, 0, sizeof(curscreen));
-}
-
-/*
- * Set up screen
- */
-void
-scr_init(void)
-{
-	con_phone = get_fd_phone(1);
-	async_msg(con_phone, CONSOLE_CURSOR_VISIBILITY, 0);
-	resume_normal();
-	scr_clear();
-}
-
-void moveto(int r, int c)
-{
-	async_msg_2(con_phone, CONSOLE_GOTO, r, c);
-}
-
-static void fflush(void)
-{
-	async_msg(con_phone, CONSOLE_FLUSH, 0);
-}
-
-winsize_t winsize;
-
-static int get_display_size(winsize_t *ws)
-{
-	return async_req_2(con_phone, CONSOLE_GETSIZE, 0, 0, &ws->ws_row, &ws->ws_col);
-}
-
-/*
- * Set up screen mode.
- */
-void
-scr_set(void)
-{
-	winsize_t ws;
-
-	Rows = 0, Cols = 0;
-	if (get_display_size(&ws) == 0) {
-		Rows = ws.ws_row;
-		Cols = ws.ws_col;
-	}
-	if (Rows < MINROWS || Cols < MINCOLS) {
-		char smallscr[55];
-
-		snprintf(smallscr, sizeof(smallscr),
-		    "the screen is too small (must be at least %dx%d)",
-		    MINROWS, MINCOLS);
-		stop(smallscr);
-	}
-	isset = 1;
-
-	scr_clear();
-}
-
-/*
- * End screen mode.
- */
-void
-scr_end(void)
-{
-}
-
-void
-stop(char *why)
-{
-
-	if (isset)
-		scr_end();
-	errx(1, "aborting: %s", why);
-}
-
-
-/*
- * Update the screen.
- */
-void
-scr_update(void)
-{
-	cell *bp, *sp;
-	cell so, cur_so = 0;
-	int i, ccol, j;
-	static const struct shape *lastshape;
-
-	/* always leave cursor after last displayed point */
-	curscreen[D_LAST * B_COLS - 1] = -1;
-
-	if (score != curscore) {
-		moveto(0, 0);
-		printf("Score: %d", score);
-		curscore = score;
-	}
-
-	/* draw preview of next pattern */
-	if (showpreview && (nextshape != lastshape)) {
-		int i;
-		static int r=5, c=2;
-		int tr, tc, t;
-
-		lastshape = nextshape;
-
-		/* clean */
-		resume_normal();
-		moveto(r-1, c-1); putstr("          ");
-		moveto(r,   c-1); putstr("          ");
-		moveto(r+1, c-1); putstr("          ");
-		moveto(r+2, c-1); putstr("          ");
-
-		moveto(r-3, c-2);
-		putstr("Next shape:");
-
-		/* draw */
-		start_standout();
-		moveto(r, 2 * c);
-		putstr("  ");
-		for (i = 0; i < 3; i++) {
-			t = c + r * B_COLS;
-			t += nextshape->off[i];
-
-			tr = t / B_COLS;
-			tc = t % B_COLS;
-
-			moveto(tr, 2*tc);
-			putstr("  ");
-		}
-		resume_normal();
-	}
-
-	bp = &board[D_FIRST * B_COLS];
-	sp = &curscreen[D_FIRST * B_COLS];
-	for (j = D_FIRST; j < D_LAST; j++) {
-		ccol = -1;
-		for (i = 0; i < B_COLS; bp++, sp++, i++) {
-			if (*sp == (so = *bp))
-				continue;
-			*sp = so;
-			if (i != ccol) {
-				if (cur_so) {
-					resume_normal();
-					cur_so = 0;
-				}
-				moveto(RTOD(j), CTOD(i));
-			}
-			if (so != cur_so) {
-				if (so)
-					start_standout();
-				else
-					resume_normal();
-				cur_so = so;
-			}
-			putstr("  ");
-
-			ccol = i + 1;
-			/*
-			 * Look ahead a bit, to avoid extra motion if
-			 * we will be redrawing the cell after the next.
-			 * Motion probably takes four or more characters,
-			 * so we save even if we rewrite two cells
-			 * `unnecessarily'.  Skip it all, though, if
-			 * the next cell is a different color.
-			 */
-#define	STOP (B_COLS - 3)
-			if (i > STOP || sp[1] != bp[1] || so != bp[1])
-				continue;
-			if (sp[2] != bp[2])
-				sp[1] = -1;
-			else if (i < STOP && so == bp[2] && sp[3] != bp[3]) {
-				sp[2] = -1;
-				sp[1] = -1;
-			}
-		}
-	}
-	if (cur_so)
-		resume_normal();
- 	fflush();
-}
-
-/*
- * Write a message (set!=0), or clear the same message (set==0).
- * (We need its length in case we have to overwrite with blanks.)
- */
-void
-scr_msg(char *s, int set)
-{
-	
-	int l = strlen(s);
-	
-	moveto(Rows - 2, ((Cols - l) >> 1) - 1);
-	if (set)
-		putstr(s);
-	else
-		while (--l >= 0)
-			(void) putchar(' ');
-}
-
-/** @}
- */
-
Index: pace/tetris/screen.h
===================================================================
--- uspace/tetris/screen.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,71 +1,0 @@
-/*	$OpenBSD: screen.h,v 1.5 2003/06/03 03:01:41 millert Exp $	*/
-/*	$NetBSD: screen.h,v 1.2 1995/04/22 07:42:42 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)screen.h	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-/*
- * putpad() is for padded strings with count=1.
- */
-#define	putpad(s)	tputs(s, 1, put)
-
-#include <async.h>
-
-typedef struct {
-	ipcarg_t ws_row;
-	ipcarg_t ws_col;
-} winsize_t;
-
-extern winsize_t winsize;
-
-void moveto(int r, int c);
-void clear_screen(void);
-
-int	put(int);			/* just calls putchar; for tputs */
-void	scr_clear(void);
-void	scr_end(void);
-void	scr_init(void);
-void	scr_msg(char *, int);
-void	scr_set(void);
-void	scr_update(void);
-
-/** @}
- */
-
Index: pace/tetris/shapes.c
===================================================================
--- uspace/tetris/shapes.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,116 +1,0 @@
-/*	$OpenBSD: shapes.c,v 1.8 2004/07/10 07:26:24 deraadt Exp $	*/
-/*	$NetBSD: shapes.c,v 1.2 1995/04/22 07:42:44 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)shapes.c	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-/*
- * Tetris shapes and related routines.
- *
- * Note that the first 7 are `well known'.
- */
-
-#include <unistd.h>
-#include "tetris.h"
-
-#define	TL	-B_COLS-1	/* top left */
-#define	TC	-B_COLS		/* top center */
-#define	TR	-B_COLS+1	/* top right */
-#define	ML	-1		/* middle left */
-#define	MR	1		/* middle right */
-#define	BL	B_COLS-1	/* bottom left */
-#define	BC	B_COLS		/* bottom center */
-#define	BR	B_COLS+1	/* bottom right */
-
-const struct shape shapes[] = {
-	/* 0*/	{ 7,	7,	{ TL, TC, MR } },
-	/* 1*/	{ 8,	8,	{ TC, TR, ML } },
-	/* 2*/	{ 9,	11,	{ ML, MR, BC } },
-	/* 3*/	{ 3,	3,	{ TL, TC, ML } },
-	/* 4*/	{ 12,	14,	{ ML, BL, MR } },
-	/* 5*/	{ 15,	17,	{ ML, BR, MR } },
-	/* 6*/	{ 18,	18,	{ ML, MR, 2  } }, /* sticks out */
-	/* 7*/	{ 0,	0,	{ TC, ML, BL } },
-	/* 8*/	{ 1,	1,	{ TC, MR, BR } },
-	/* 9*/	{ 10,	2,	{ TC, MR, BC } },
-	/*10*/	{ 11,	9,	{ TC, ML, MR } },
-	/*11*/	{ 2,	10,	{ TC, ML, BC } },
-	/*12*/	{ 13,	4,	{ TC, BC, BR } },
-	/*13*/	{ 14,	12,	{ TR, ML, MR } },
-	/*14*/	{ 4,	13,	{ TL, TC, BC } },
-	/*15*/	{ 16,	5,	{ TR, TC, BC } },
-	/*16*/	{ 17,	15,	{ TL, MR, ML } },
-	/*17*/	{ 5,	16,	{ TC, BC, BL } },
-	/*18*/	{ 6,	6,	{ TC, BC, 2*B_COLS } }/* sticks out */
-};
-
-/*
- * Return true iff the given shape fits in the given position,
- * taking the current board into account.
- */
-int
-fits_in(const struct shape *shape, int pos)
-{
-	int *o = shape->off;
-
-	if (board[pos] || board[pos + *o++] || board[pos + *o++] ||
-	    board[pos + *o])
-		return 0;
-	return 1;
-}
-
-/*
- * Write the given shape into the current board, turning it on
- * if `onoff' is 1, and off if `onoff' is 0.
- */
-void
-place(const struct shape *shape, int pos, int onoff)
-{
-	int *o = shape->off;
-
-	board[pos] = onoff;
-	board[pos + *o++] = onoff;
-	board[pos + *o++] = onoff;
-	board[pos + *o] = onoff;
-}
-
-/** @}
- */
-
Index: pace/tetris/tetris.c
===================================================================
--- uspace/tetris/tetris.c	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,469 +1,0 @@
-/*	$OpenBSD: tetris.c,v 1.21 2006/04/20 03:24:12 ray Exp $	*/
-/*	$NetBSD: tetris.c,v 1.2 1995/04/22 07:42:47 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)tetris.c	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris Tetris
- * @brief	Tetris ported from OpenBSD
- * @{ 
- */
-/** @file
- */
-
-#ifndef lint
-static const char copyright[] =
-"@(#) Copyright (c) 1992, 1993\n\
-	The Regents of the University of California.  All rights reserved.\n";
-#endif /* not lint */
-
-/*
- * Tetris (or however it is spelled).
- */
-
-#include <sys/time.h>
-#include <sys/types.h>
-
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "input.h"
-#include "scores.h"
-#include "screen.h"
-#include "tetris.h"
-
-cell	board[B_SIZE];
-int	Rows, Cols;
-const struct shape *curshape;
-const struct shape *nextshape;
-long	fallrate;
-int	score;
-//gid_t	gid, egid;
-char	key_msg[100];
-int	showpreview, classic;
-
-static void	elide(void);
-static void	setup_board(void);
-const struct shape *randshape(void);
-void	onintr(int);
-void	usage(void);
-
-/*
- * Set up the initial board.  The bottom display row is completely set,
- * along with another (hidden) row underneath that.  Also, the left and
- * right edges are set.
- */
-static void
-setup_board(void)
-{
-	int i;
-	cell *p;
-
-	p = board;
-	for (i = B_SIZE; i; i--)
-		*p++ = i <= (2 * B_COLS) || (i % B_COLS) < 2;
-}
-
-/*
- * Elide any full active rows.
- */
-static void
-elide(void)
-{
-	int rows = 0;
-	int i, j, base;
-	cell *p;
-
-	for (i = A_FIRST; i < A_LAST; i++) {
-		base = i * B_COLS + 1;
-		p = &board[base];
-		for (j = B_COLS - 2; *p++ != 0;) {
-			if (--j <= 0) {
-				/* this row is to be elided */
-				rows++;
-				memset(&board[base], 0, B_COLS - 2);
-				scr_update();
-				tsleep();
-				while (--base != 0)
-					board[base + B_COLS] = board[base];
-				scr_update();
-				tsleep();
-				break;
-			}
-		}
-	}
-	switch (rows) {
-	case 1:
-		score += 10;
-		break;
-	case 2:
-		score += 30;
-		break;
-	case 3:
-		score += 70;
-		break;
-	case 4:
-		score += 150;
-		break;
-	default:
-		break;
-	}
-}
-
-const struct shape *
-randshape(void)
-{
-	const struct shape *tmp;
-	int i, j;
-
-	tmp = &shapes[random() % 7];
-	j = random() % 4;
-	for (i = 0; i < j; i++)
-		tmp = &shapes[classic? tmp->rotc : tmp->rot];
-	return (tmp);
-}
-
-static void srandomdev(void)
-{
-	struct timeval tv;
-
-	gettimeofday(&tv, NULL);
-	srandom(tv.tv_sec + tv.tv_usec / 100000);
-}
-
-static void tetris_menu_draw(int level) 
-{
-		clear_screen();
-		moveto(5,10);
-		puts("Tetris\n\n");
-			
-		moveto(8,10);
-		printf("Level = %d (press keys 1 - 9 to change)",level);
-		moveto(9,10);
-		printf("Preview is %s (press 'p' to change)", (showpreview?"on ":"off"));
-		moveto(12,10);
-		printf("Press 'h' to show hiscore table.");
-		moveto(13,10);
-		printf("Press 's' to start game.");
-		moveto(14,10);
-		printf("Press 'q' to quit game.");
-		moveto(20,10);
-		printf("In game controls:");
-		moveto(21,0);
-		puts(key_msg);
-}
-
-static int tetris_menu(int *level) 
-{
-	static int firstgame = 1;
-	int i;
-/*	if (showpreview == 0)
-		(void)printf("Your score:  %d point%s  x  level %d  =  %d\n",
-		    score, score == 1 ? "" : "s", level, score * level);
-	else {
- 		(void)printf("Your score:  %d point%s x level %d x preview penalty %0.3f = %d\n", 
- 		    score, score == 1 ? "" : "s", level, (double)PRE_PENALTY, 
- 		    (int)(score * level * PRE_PENALTY)); 
- 		score = score * PRE_PENALTY; 
-	}
-	savescore(level);
-
-	showscores(level);
-	
-	printf("\nHit 's' to new game, 'q' to quit.\n");
-*/
-	tetris_menu_draw(*level);
-	while (1) {
-	
-		i = getchar();
-		
-		switch(i) {
-			case 'p':
-				showpreview = !showpreview;
-				moveto(9,21);
-				if (showpreview)
-					printf("on ");
-				else
-					printf("off");
-					
-				break;
-			case 'h':
-				showscores(firstgame);
-				tetris_menu_draw(*level);
-				break;
-			case 's':
-				firstgame = 0;
-				return 1;
-			case 'q':
-				return 0;
-			case '1':
-			case '2':
-			case '3':
-			case '4':
-			case '5':
-			case '6':		
-			case '7':
-			case '8':
-			case '9':
-				*level = i - '0';
-				moveto(8,18);
-				printf("%d", *level);
-				break;
-		}
-	}
-	
-}
-
-int
-main(int argc, char *argv[])
-{
-	int pos, c;
-	char *keys;
-	int level = 2;
-	char key_write[6][10];
-	int i, j;
-
-	keys = "jkl pq";
-
-//	gid = getgid();
-//	egid = getegid();
-//	setegid(gid);
-
-	classic = 0;
-	showpreview = 1; 
-
-/* 	while ((ch = getopt(argc, argv, "ck:l:ps")) != -1) */
-/* 		switch(ch) { */
-/* 		case 'c': */
-/* 			/\* */
-/* 			 * this means: */
-/* 			 *	- rotate the other way; */
-/* 			 *	- no reverse video. */
-/* 			 *\/ */
-/* 			classic = 1; */
-/* 			break; */
-/* 		case 'k': */
-/* 			if (strlen(keys = optarg) != 6) */
-/* 				usage(); */
-/* 			break; */
-/* 		case 'l': */
-/* 			level = (int)strtonum(optarg, MINLEVEL, MAXLEVEL, */
-/* 			    &errstr); */
-/* 			if (errstr) */
-/* 				errx(1, "level must be from %d to %d", */
-/* 				    MINLEVEL, MAXLEVEL); */
-/* 			break; */
-/* 		case 'p': */
-/* 			showpreview = 1; */
-/* 			break; */
-/* 		case 's': */
-/* 			showscores(0); */
-/* 			exit(0); */
-/* 		default: */
-/* 			usage(); */
-/* 		} */
-
-/* 	argc -= optind; */
-/* 	argv += optind; */
-
-/* 	if (argc) */
-/* 		usage(); */
-
-	
-
-	for (i = 0; i <= 5; i++) {
-		for (j = i+1; j <= 5; j++) {
-			if (keys[i] == keys[j])
-				errx(1, "duplicate command keys specified.");
-		}
-		if (keys[i] == ' ')
-			strncpy(key_write[i], "<space>", sizeof key_write[i]);
-		else {
-			key_write[i][0] = keys[i];
-			key_write[i][1] = '\0';
-		}
-	}
-
-	snprintf(key_msg, sizeof key_msg,
-"%s - left   %s - rotate   %s - right   %s - drop   %s - pause   %s - quit",
-		key_write[0], key_write[1], key_write[2], key_write[3],
-		key_write[4], key_write[5]);
-
-	scr_init();
-	initscores();
-	while (tetris_menu(&level)) {
-		fallrate = 1000000 / level;
-		
-		scr_clear();
-		setup_board();
-	
-		srandomdev();
-		scr_set();
-	
-		pos = A_FIRST*B_COLS + (B_COLS/2)-1;
-		nextshape = randshape();
-		curshape = randshape();
-	
-		scr_msg(key_msg, 1);
-	
-		for (;;) {
-			place(curshape, pos, 1);
-			scr_update();
-			place(curshape, pos, 0);
-			c = tgetchar();
-			if (c < 0) {
-				/*
-				 * Timeout.  Move down if possible.
-				 */
-				if (fits_in(curshape, pos + B_COLS)) {
-					pos += B_COLS;
-					continue;
-				}
-	
-				/*
-				 * Put up the current shape `permanently',
-				 * bump score, and elide any full rows.
-				 */
-				place(curshape, pos, 1);
-				score++;
-				elide();
-	
-				/*
-				 * Choose a new shape.  If it does not fit,
-				 * the game is over.
-				 */
-				curshape = nextshape;
-				nextshape = randshape();
-				pos = A_FIRST*B_COLS + (B_COLS/2)-1;
-				if (!fits_in(curshape, pos))
-					break;
-				continue;
-			}
-	
-			/*
-			 * Handle command keys.
-			 */
-			if (c == keys[5]) {
-				/* quit */
-				break;
-			}
-			if (c == keys[4]) {
-				static char msg[] =
-				    "paused - press RETURN to continue";
-	
-				place(curshape, pos, 1);
-				do {
-					scr_update();
-					scr_msg(key_msg, 0);
-					scr_msg(msg, 1);
-	//				(void) fflush(stdout);
-				} while (rwait((struct timeval *)NULL) == -1);
-				scr_msg(msg, 0);
-				scr_msg(key_msg, 1);
-				place(curshape, pos, 0);
-				continue;
-			}
-			if (c == keys[0]) {
-				/* move left */
-				if (fits_in(curshape, pos - 1))
-					pos--;
-				continue;
-			}
-			if (c == keys[1]) {
-				/* turn */
-				const struct shape *new = &shapes[
-				    classic? curshape->rotc : curshape->rot];
-	
-				if (fits_in(new, pos))
-					curshape = new;
-				continue;
-			}
-			if (c == keys[2]) {
-				/* move right */
-				if (fits_in(curshape, pos + 1))
-					pos++;
-				continue;
-			}
-			if (c == keys[3]) {
-				/* move to bottom */
-				while (fits_in(curshape, pos + B_COLS)) {
-					pos += B_COLS;
-					score++;
-				}
-				continue;
-			}
-			if (c == '\f') {
-				scr_clear();
-				scr_msg(key_msg, 1);
-			}
-		}
-		
-		scr_clear();
-		insertscore(score, level);
-		score=0;
-	}
-	
-	scr_clear();
-	printf("\n\n\n\t\tGame over.\n");
-/*	
-	while ((i = getchar()) != '\n')
-		if (i == EOF)
-			break
-*/
-	scr_end();
-
-	return 0;
-}
-
-/* void */
-/* onintr(int signo) */
-/* { */
-/* 	scr_clear();		/\* XXX signal race *\/ */
-/* 	scr_end();		/\* XXX signal race *\/ */
-/* 	_exit(0); */
-/* } */
-
-void
-usage(void)
-{
-	(void)fprintf(stderr, "usage: tetris [-ps] [-k keys] [-l level]\n");
-	exit(1);
-}
-
-/** @}
- */
-
Index: pace/tetris/tetris.h
===================================================================
--- uspace/tetris/tetris.h	(revision 3ae470a457813041d47cadaf3a35886fbf4a6971)
+++ 	(revision )
@@ -1,188 +1,0 @@
-/*	$OpenBSD: tetris.h,v 1.9 2003/06/03 03:01:41 millert Exp $	*/
-/*	$NetBSD: tetris.h,v 1.2 1995/04/22 07:42:48 cgd Exp $	*/
-
-/*-
- * Copyright (c) 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek and Darren F. Provine.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)tetris.h	8.1 (Berkeley) 5/31/93
- */
-
-/** @addtogroup tetris
- * @{ 
- */
-/** @file
- */
-
-/*
- * Definitions for Tetris.
- */
-
-/*
- * The display (`board') is composed of 23 rows of 12 columns of characters
- * (numbered 0..22 and 0..11), stored in a single array for convenience.
- * Columns 1 to 10 of rows 1 to 20 are the actual playing area, where
- * shapes appear.  Columns 0 and 11 are always occupied, as are all
- * columns of rows 21 and 22.  Rows 0 and 22 exist as boundary areas
- * so that regions `outside' the visible area can be examined without
- * worrying about addressing problems.
- */
-
-	/* the board */
-#define	B_COLS	12
-#define	B_ROWS	23
-#define	B_SIZE	(B_ROWS * B_COLS)
-
-typedef unsigned char cell;
-extern cell	board[B_SIZE];	/* 1 => occupied, 0 => empty */
-
-	/* the displayed area (rows) */
-#define	D_FIRST	1
-#define	D_LAST	22
-
-	/* the active area (rows) */
-#define	A_FIRST	1
-#define	A_LAST	21
-
-/*
- * Minimum display size.
- */
-#define	MINROWS	23
-#define	MINCOLS	40
-
-extern int	Rows, Cols;	/* current screen size */
-
-/*
- * Translations from board coordinates to display coordinates.
- * As with board coordinates, display coordiates are zero origin.
- */
-#define	RTOD(x)	((x) - 1)
-#define	CTOD(x)	((x) * 2 + (((Cols - 2 * B_COLS) >> 1) - 1))
-
-/*
- * A `shape' is the fundamental thing that makes up the game.  There
- * are 7 basic shapes, each consisting of four `blots':
- *
- *	X.X	  X.X		X.X
- *	  X.X	X.X	X.X.X	X.X	X.X.X	X.X.X	X.X.X.X
- *			  X		X	    X
- *
- *	  0	  1	  2	  3	  4	  5	  6
- *
- * Except for 3 and 6, the center of each shape is one of the blots.
- * This blot is designated (0,0).  The other three blots can then be
- * described as offsets from the center.  Shape 3 is the same under
- * rotation, so its center is effectively irrelevant; it has been chosen
- * so that it `sticks out' upward and leftward.  Except for shape 6,
- * all the blots are contained in a box going from (-1,-1) to (+1,+1);
- * shape 6's center `wobbles' as it rotates, so that while it `sticks out'
- * rightward, its rotation---a vertical line---`sticks out' downward.
- * The containment box has to include the offset (2,0), making the overall
- * containment box range from offset (-1,-1) to (+2,+1).  (This is why
- * there is only one row above, but two rows below, the display area.)
- *
- * The game works by choosing one of these shapes at random and putting
- * its center at the middle of the first display row (row 1, column 5).
- * The shape is moved steadily downward until it collides with something:
- * either  another shape, or the bottom of the board.  When the shape can
- * no longer be moved downwards, it is merged into the current board.
- * At this time, any completely filled rows are elided, and blots above
- * these rows move down to make more room.  A new random shape is again
- * introduced at the top of the board, and the whole process repeats.
- * The game ends when the new shape will not fit at (1,5).
- *
- * While the shapes are falling, the user can rotate them counterclockwise
- * 90 degrees (in addition to moving them left or right), provided that the
- * rotation puts the blots in empty spaces.  The table of shapes is set up
- * so that each shape contains the index of the new shape obtained by
- * rotating the current shape.  Due to symmetry, each shape has exactly
- * 1, 2, or 4 rotations total; the first 7 entries in the table represent
- * the primary shapes, and the remaining 12 represent their various
- * rotated forms.
- */
-struct shape {
-	int	rot;	/* index of rotated version of this shape */
-	int	rotc;	/* -- " -- in classic version  */
-	int	off[3];	/* offsets to other blots if center is at (0,0) */
-};
-
-extern const struct shape shapes[];
-
-extern const struct shape *curshape;
-extern const struct shape *nextshape;
-
-/*
- * Shapes fall at a rate faster than once per second.
- *
- * The initial rate is determined by dividing 1 million microseconds
- * by the game `level'.  (This is at most 1 million, or one second.)
- * Each time the fall-rate is used, it is decreased a little bit,
- * depending on its current value, via the `faster' macro below.
- * The value eventually reaches a limit, and things stop going faster,
- * but by then the game is utterly impossible.
- */
-extern long	fallrate;	/* less than 1 million; smaller => faster */
-#define	faster() (fallrate -= fallrate / 3000)
-
-/*
- * Game level must be between 1 and 9.  This controls the initial fall rate
- * and affects scoring.
- */
-#define	MINLEVEL	1
-#define	MAXLEVEL	9
-
-/*
- * Scoring is as follows:
- *
- * When the shape comes to rest, and is integrated into the board,
- * we score one point.  If the shape is high up (at a low-numbered row),
- * and the user hits the space bar, the shape plummets all the way down,
- * and we score a point for each row it falls (plus one more as soon as
- * we find that it is at rest and integrate it---until then, it can
- * still be moved or rotated).
- *
- * If previewing has been turned on, the score is multiplied by PRE_PENALTY.
- */
-#define PRE_PENALTY 0.75
-
-extern int	score;		/* the obvious thing */
-//extern gid_t	gid, egid;
-
-extern char	key_msg[100];
-extern int	showpreview;
-extern int	classic;
-
-int	fits_in(const struct shape *, int);
-void	place(const struct shape *, int, int);
-void	stop(char *);
-
-/** @}
- */
-
